summaryrefslogtreecommitdiff
path: root/themes/src/shapes_2d.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'themes/src/shapes_2d.cpp')
-rw-r--r--themes/src/shapes_2d.cpp49
1 files changed, 49 insertions, 0 deletions
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<Vertex2D> vertices;
+ matte::List<u32> 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);
+}