summaryrefslogtreecommitdiff
path: root/themes/src/summer/summer_theme.cpp
diff options
context:
space:
mode:
authorMatt Kosarek <matt.kosarek@canonical.com>2025-12-29 09:34:00 -0500
committerMatt Kosarek <matt.kosarek@canonical.com>2025-12-29 09:34:00 -0500
commitbf4b3a5c35152c1292757134123b3363d0f81bf6 (patch)
tree7796e03d309c43115596f78d553a74f911f82218 /themes/src/summer/summer_theme.cpp
parent25c93a0ab9c855f75ee48df635fb5422c8eaba95 (diff)
Renamed PascalCase files to snake_case
Diffstat (limited to 'themes/src/summer/summer_theme.cpp')
-rw-r--r--themes/src/summer/summer_theme.cpp82
1 files changed, 82 insertions, 0 deletions
diff --git a/themes/src/summer/summer_theme.cpp b/themes/src/summer/summer_theme.cpp
new file mode 100644
index 0000000..6935ad1
--- /dev/null
+++ b/themes/src/summer/summer_theme.cpp
@@ -0,0 +1,82 @@
+#include "summer_theme.h"
+#include "../renderer_2d.h"
+#include "../list.h"
+#include "../mathlib.h"
+#include "../shaders/sun_frag.h"
+#include "../shaders/sun_vert.h"
+#include <vector>
+
+SummerTheme::SummerTheme(WebglContext* context)
+{
+ renderer.load(context);
+ load(context);
+}
+
+SummerTheme::~SummerTheme()
+{
+ unload();
+}
+
+void SummerTheme::load(WebglContext* context) {
+ renderer.load(context, shader_sun_vert, shader_sun_frag);
+ renderer.clearColor = Vector4(0, 181, 286, 255.f).toNormalizedColor();
+ sun.sectors = 180;
+ sun.radius = renderer.context->width / 4.f;
+ sun.load(&renderer);
+}
+
+void SummerTheme::update(f32 dtSeconds) {
+ sun.update(dtSeconds);
+}
+
+void SummerTheme::render() {
+ renderer.render();
+ sun.render(&renderer);
+}
+
+void SummerTheme::unload() {
+ sun.unload();
+}
+
+void Sun::load(Renderer2d* renderer) {
+ matte::List<Vertex2D> vertices;
+ matte::List<u32> indices;
+ Vector4 sunColor = Vector4(249, 215, 28, 255).toNormalizedColor();
+ vertices.add({ Vector2(0, 0), sunColor, Mat4x4() });
+
+ f32 radiansPerSector = (2.f * PI) / sectors;
+ for (i32 i = 0; i <= sectors; i++) {
+ f32 radians = radiansPerSector * i;
+ f32 cosAngle = cosf(radians);
+ f32 sinAngle = sinf(radians);
+ Vector2 vertex = Vector2(radius * cosAngle, radius * sinAngle);
+ vertices.add({ vertex, sunColor, 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);
+ mesh.model = Mat4x4().translateByVec2(Vector2(renderer->context->width / 2.f, renderer->context->height / 2.f));
+ vertices.deallocate();
+ indices.deallocate();
+}
+
+void Sun::update(f32 dtSeconds) {
+
+}
+
+void Sun::render(Renderer2d* renderer) {
+ setShaderMat4(renderer->uniforms.model, mesh.model);
+ glBindVertexArray(mesh.vao);
+ glDrawElements(GL_TRIANGLES, mesh.numIndices, GL_UNSIGNED_INT, 0);
+ glBindVertexArray(0);
+}
+
+void Sun::unload() {
+ mesh.unload();
+}