--- a/src/2d.c Tue Aug 05 20:38:11 2025 +0200 +++ b/src/2d.c Wed Aug 06 00:37:01 2025 +0200 @@ -109,13 +109,13 @@ asc_shader_upload_model_matrix(shader, node); if (filled) { - asc_shader_upload_col4f(rect_shader->color, rectangle->color); + asc_shader_upload_color(rect_shader->color, rectangle->color); } asc_shader_upload_vec2f(rect_shader->size, rectangle->size); if (border) { asc_shader_upload_float(rect_shader->thickness, rectangle->thickness); - asc_shader_upload_col4f(rect_shader->border_color, rectangle->border_color); + asc_shader_upload_color(rect_shader->border_color, rectangle->border_color); } if (round) { asc_shader_upload_float(rect_shader->radius, rectangle->radius); @@ -148,15 +148,15 @@ // use the main color args.border_color = args.color; } - rectangle->color = asc_col_itof(args.color); - rectangle->border_color = asc_col_itof(args.border_color); + rectangle->color = args.color; + rectangle->border_color = args.border_color; asc_ptr_cast(AscSceneNode, node, rectangle); asc_scene_node_init(node, ASC_SCENE_NODE_FUNCS(asc_rectangle), .pos2d = ASC_VEC2I(pos_x, pos_y), .origin2d = ASC_VEC2I(args.origin_x, args.origin_y), - .render_group = (args.filled && args.color.alpha < 255) || args.border_color.alpha < 255 + .render_group = (args.filled && args.color.alpha < 1) || args.border_color.alpha < 1 ? ASC_RENDER_GROUP_2D_BLEND : ASC_RENDER_GROUP_2D_OPAQUE ); @@ -254,13 +254,13 @@ asc_shader_upload_model_matrix(shader, node); if (filled) { - asc_shader_upload_col4f(ellipsis_shader->color, ellipsis->color); + asc_shader_upload_color(ellipsis_shader->color, ellipsis->color); } asc_shader_upload_vec2f(ellipsis_shader->radii, ellipsis->radii); if (border) { asc_shader_upload_float(ellipsis_shader->thickness, ellipsis->thickness); - asc_shader_upload_col4f(ellipsis_shader->border_color, ellipsis->border_color); + asc_shader_upload_color(ellipsis_shader->border_color, ellipsis->border_color); } // Draw mesh @@ -295,21 +295,21 @@ ellipsis->thickness = args.thickness; } - if (!args.filled && asc_memcmpz(&args.border_color, sizeof(args.border_color))) { + if (!args.filled && asc_memcmpz(&args.border_color, sizeof(asc_color))) { // convenience fallback: // when we are drawing an outline but have no explicit border color, // use the main color args.border_color = args.color; } - ellipsis->color = asc_col_itof(args.color); - ellipsis->border_color = asc_col_itof(args.border_color); + ellipsis->color = args.color; + ellipsis->border_color = args.border_color; asc_ptr_cast(AscSceneNode, node, ellipsis); asc_scene_node_init(node, ASC_SCENE_NODE_FUNCS(asc_ellipsis), .pos2d = ASC_VEC2I(pos_x, pos_y), .origin3d = ASC_VEC3F(ellipsis->radii.x, ellipsis->radii.y, 0), // use float to avoid cast - .render_group = (args.filled && args.color.alpha < 255) || args.border_color.alpha < 255 + .render_group = (args.filled && args.color.alpha < 1) || args.border_color.alpha < 1 ? ASC_RENDER_GROUP_2D_BLEND : ASC_RENDER_GROUP_2D_OPAQUE );