From fec050307d83ffaaa85d6496c65185b163c594f6 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Fri, 5 Mar 2021 23:13:27 +0300 Subject: [PATCH] Add triangle painting to ui::painter --- libs/ui/include/psemek/ui/painter.hpp | 2 ++ libs/ui/include/psemek/ui/painter_impl.hpp | 1 + libs/ui/source/painter_impl.cpp | 14 ++++++++++++++ 3 files changed, 17 insertions(+) diff --git a/libs/ui/include/psemek/ui/painter.hpp b/libs/ui/include/psemek/ui/painter.hpp index 6a50cb3d..cd031dd8 100644 --- a/libs/ui/include/psemek/ui/painter.hpp +++ b/libs/ui/include/psemek/ui/painter.hpp @@ -4,6 +4,7 @@ #include #include #include +#include namespace psemek::ui { @@ -11,6 +12,7 @@ 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_glyph(font const & f, char32_t c, geom::box const & rect, gfx::color_rgba const & color) = 0; virtual void draw_image(geom::box const & rect, gfx::texture_2d const & tex, gfx::color_rgba const & color = {0, 0, 0, 0}) = 0; virtual void draw_subimage(geom::box const & rect, gfx::texture_2d const & tex, geom::box const & part, gfx::color_rgba const & color = {0, 0, 0, 0}) = 0; diff --git a/libs/ui/include/psemek/ui/painter_impl.hpp b/libs/ui/include/psemek/ui/painter_impl.hpp index 34c33b1b..d0319edc 100644 --- a/libs/ui/include/psemek/ui/painter_impl.hpp +++ b/libs/ui/include/psemek/ui/painter_impl.hpp @@ -16,6 +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_glyph(font const & f, char32_t c, geom::box const & rect, gfx::color_rgba const & color) override; void draw_image(geom::box const & rect, gfx::texture_2d const & tex, gfx::color_rgba const & color) override; void draw_subimage(geom::box const & rect, gfx::texture_2d const & tex, geom::box const & part, gfx::color_rgba const & color = {0, 0, 0, 0}) override; diff --git a/libs/ui/source/painter_impl.cpp b/libs/ui/source/painter_impl.cpp index 04aefeec..e3f5d78b 100644 --- a/libs/ui/source/painter_impl.cpp +++ b/libs/ui/source/painter_impl.cpp @@ -249,6 +249,20 @@ void main() batch.indices.insert(batch.indices.end(), {base + 0, base + 1, base + 2, base + 2, base + 1, base + 3}); } + void painter_impl::draw_triangle(geom::triangle> const & tri, gfx::color_rgba const & color) + { + 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.indices.insert(batch.indices.end(), {base + 0, base + 1, base + 2}); + } + void painter_impl::draw_glyph(font const & f, char32_t c, geom::box const & rect, gfx::color_rgba const & color) { auto tbox = f.texcoords(c);