diff -r d7a06c1afa0a -r 8e6a661c87db src/2d.c --- 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 #include @@ -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;