src/2d.c

changeset 167
8e6a661c87db
parent 163
3628cc3c0483
--- a/src/2d.c	Tue Jun 24 20:09:47 2025 +0200
+++ b/src/2d.c	Tue Jun 24 20:21:38 2025 +0200
@@ -32,6 +32,7 @@
 #include "ascension/error.h"
 #include "ascension/shader.h"
 
+// TODO: implement abstraction in shader.h to remove glew.h include here
 #include <GL/glew.h>
 #include <assert.h>
 
@@ -102,8 +103,7 @@
 
 static void asc_rectangle_update(AscSceneNode *node) {
     asc_ptr_cast(AscRectangle, rectangle, node);
-    asc_vec2f size = asc_vec2f_new(rectangle->width, rectangle->height);
-    asc_mesh_plane_2d(&rectangle->mesh, .size = size, .uv_scale = size);
+    asc_mesh_plane_2d(&rectangle->mesh, .size = rectangle->size, .uv_scale = rectangle->size);
 }
 
 static void asc_rectangle_draw(const AscCamera *camera, const AscSceneNode *node) {
@@ -138,31 +138,19 @@
     asc_shader_use(&shader->program, camera);
 
     // Upload uniforms
-    // TODO: uploading model matrix could be a helper function
-    glUniformMatrix4fv(shader->program.model, 1,
-                       GL_FALSE, node->world_transform);
+    asc_shader_upload_model_matrix(&shader->program, node);
 
     if (filled) {
-        glUniform4f(shader->color,
-                    rectangle->color.red,
-                    rectangle->color.green,
-                    rectangle->color.blue,
-                    rectangle->color.alpha
-        );
+        asc_shader_upload_col4f(shader->color, rectangle->color);
     }
-    glUniform2f(shader->size, rectangle->width, rectangle->height);
+    asc_shader_upload_vec2f(shader->size, rectangle->size);
 
     if (border) {
-        glUniform1f(shader->thickness, rectangle->thickness);
-        glUniform4f(shader->border_color,
-                    rectangle->border_color.red,
-                    rectangle->border_color.green,
-                    rectangle->border_color.blue,
-                    rectangle->border_color.alpha
-        );
+        asc_shader_upload_float(shader->thickness, rectangle->thickness);
+        asc_shader_upload_col4f(shader->border_color, rectangle->border_color);
     }
     if (round) {
-        glUniform1f(shader->radius, rectangle->radius);
+        asc_shader_upload_float(shader->radius, rectangle->radius);
     }
 
     // Draw mesh
@@ -175,13 +163,13 @@
     if (args.bounds.size.width + args.bounds.size.height > 0) {
         rectangle->node.position.x = (float) args.bounds.pos.x;
         rectangle->node.position.y = (float) args.bounds.pos.y;
-        rectangle->width = (float) args.bounds.size.width;
-        rectangle->height = (float) args.bounds.size.height;
+        rectangle->size.width = (float) args.bounds.size.width;
+        rectangle->size.height = (float) args.bounds.size.height;
     } else {
         rectangle->node.position.x = (float) args.x;
         rectangle->node.position.y = (float) args.y;
-        rectangle->width = (float) args.width;
-        rectangle->height = (float) args.height;
+        rectangle->size.width = (float) args.width;
+        rectangle->size.height = (float) args.height;
     }
 
     rectangle->radius = (float)args.radius;

mercurial