From ec0b1d450a0f6219b3b0d352cd6625ae05f62618 Mon Sep 17 00:00:00 2001 From: Matthew Kosarek Date: Wed, 27 Sep 2023 07:42:11 -0400 Subject: Hills in the AutumnTheme --- themes/src/shapes_2d.cpp | 49 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) (limited to 'themes/src/shapes_2d.cpp') diff --git a/themes/src/shapes_2d.cpp b/themes/src/shapes_2d.cpp index a85e0da..d5a29ed 100644 --- a/themes/src/shapes_2d.cpp +++ b/themes/src/shapes_2d.cpp @@ -1,6 +1,7 @@ #include "shapes_2d.h" #include "Renderer2d.h" #include "mathlib.h" +#include "list.h" RectangularGradient::RectangularGradient(Renderer2d& renderer, Vector4 top, @@ -37,3 +38,51 @@ void RectangularGradient::render() { mesh.render(&renderer); } + + +Circleish::Circleish( + Renderer2d& renderer, + f32 radius, + Vector4 color, + i32 segments, + i32 segment_start, + i32 segment_end) + : renderer{renderer} +{ + matte::List vertices; + matte::List indices; + vertices.add({ Vector2(0, 0), color, Mat4x4() }); + + if (segment_end == 0) + segment_end = segments; + + f32 radiansPerSector = (2.f * PI) / segments; + for (i32 i = segment_start; i <= segment_end; i++) { + f32 radians = radiansPerSector * i; + f32 cosAngle = cosf(radians); + f32 sinAngle = sinf(radians); + Vector2 vertex = Vector2(radius * cosAngle, radius * sinAngle); + vertices.add({ vertex, color, Mat4x4() }); + + u32 first = i; + u32 second = 0; + u32 third = i + 1; + indices.add(first); + indices.add(second); + indices.add(third); + } + + mesh.load(&vertices.data[0], vertices.numElements, &indices.data[0], indices.numElements, &renderer); + vertices.deallocate(); + indices.deallocate(); +} + +Circleish::~Circleish() +{ + mesh.unload(); +} + +void Circleish::render() +{ + mesh.render(&renderer); +} -- cgit v1.2.1