From ebdd90c5201833476fb29888ad81088963116052 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Wed, 25 May 2022 22:53:20 +0300 Subject: [PATCH] Add ui::painter::draw_triangle with per-vertex colors --- libs/ui/include/psemek/ui/painter.hpp | 8 +++++++- libs/ui/include/psemek/ui/painter_impl.hpp | 2 +- libs/ui/source/painter_impl.cpp | 8 ++++---- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/libs/ui/include/psemek/ui/painter.hpp b/libs/ui/include/psemek/ui/painter.hpp index 3faf2257..2870944d 100644 --- a/libs/ui/include/psemek/ui/painter.hpp +++ b/libs/ui/include/psemek/ui/painter.hpp @@ -33,7 +33,13 @@ namespace psemek::ui struct painter { virtual void draw_rect(geom::box const & rect, gfx::color_rgba const & color) = 0; - virtual void draw_triangle(geom::triangle> const & tri, gfx::color_rgba const & color) = 0; + + virtual void draw_triangle(geom::triangle> const & tri, gfx::color_rgba const & color) + { + draw_triangle(tri, color, color, color); + } + + virtual void draw_triangle(geom::triangle> const & tri, gfx::color_rgba const & c0, gfx::color_rgba const & c1, gfx::color_rgba const & c2) = 0; using color_mode = detail::color_mode; using image_options = detail::image_options; diff --git a/libs/ui/include/psemek/ui/painter_impl.hpp b/libs/ui/include/psemek/ui/painter_impl.hpp index ed97c207..cc6af6df 100644 --- a/libs/ui/include/psemek/ui/painter_impl.hpp +++ b/libs/ui/include/psemek/ui/painter_impl.hpp @@ -16,7 +16,7 @@ namespace psemek::ui ~painter_impl(); void draw_rect(geom::box const & rect, gfx::color_rgba const & color) override; - void draw_triangle(geom::triangle> const & tri, gfx::color_rgba const & color) override; + void draw_triangle(geom::triangle> const & tri, gfx::color_rgba const & c0, gfx::color_rgba const & c1, gfx::color_rgba const & c2) override; void draw_image(geom::box const & rect, gfx::texture_view_2d const & tex, image_options const & opts) override; diff --git a/libs/ui/source/painter_impl.cpp b/libs/ui/source/painter_impl.cpp index 39d8b932..15f7925f 100644 --- a/libs/ui/source/painter_impl.cpp +++ b/libs/ui/source/painter_impl.cpp @@ -245,16 +245,16 @@ void main() impl().draw_bbox |= rect; } - void painter_impl::draw_triangle(geom::triangle> const & tri, gfx::color_rgba const & color) + void painter_impl::draw_triangle(geom::triangle> const & tri, gfx::color_rgba const & c0, gfx::color_rgba const & c1, gfx::color_rgba const & c2) { auto & batch = impl().batch({}); std::uint32_t const depth = impl().depth++; std::uint32_t const base = batch.vertices.size(); - batch.vertices.push_back({tri[0], depth, color}); - batch.vertices.push_back({tri[1], depth, color}); - batch.vertices.push_back({tri[2], depth, color}); + batch.vertices.push_back({tri[0], depth, c0}); + batch.vertices.push_back({tri[1], depth, c1}); + batch.vertices.push_back({tri[2], depth, c2}); batch.indices.insert(batch.indices.end(), {base + 0, base + 1, base + 2});