src/2d.c

changeset 256
60014484121c
parent 251
2e2d4c3bf1cd
equal deleted inserted replaced
255:0e0a0bf4f7e4 256:60014484121c
107 107
108 // Upload uniforms 108 // Upload uniforms
109 asc_shader_upload_model_matrix(shader, node); 109 asc_shader_upload_model_matrix(shader, node);
110 110
111 if (filled) { 111 if (filled) {
112 asc_shader_upload_col4f(rect_shader->color, rectangle->color); 112 asc_shader_upload_color(rect_shader->color, rectangle->color);
113 } 113 }
114 asc_shader_upload_vec2f(rect_shader->size, rectangle->size); 114 asc_shader_upload_vec2f(rect_shader->size, rectangle->size);
115 115
116 if (border) { 116 if (border) {
117 asc_shader_upload_float(rect_shader->thickness, rectangle->thickness); 117 asc_shader_upload_float(rect_shader->thickness, rectangle->thickness);
118 asc_shader_upload_col4f(rect_shader->border_color, rectangle->border_color); 118 asc_shader_upload_color(rect_shader->border_color, rectangle->border_color);
119 } 119 }
120 if (round) { 120 if (round) {
121 asc_shader_upload_float(rect_shader->radius, rectangle->radius); 121 asc_shader_upload_float(rect_shader->radius, rectangle->radius);
122 } 122 }
123 123
146 // convenience fallback: 146 // convenience fallback:
147 // when we are drawing an outline but have no explicit border color, 147 // when we are drawing an outline but have no explicit border color,
148 // use the main color 148 // use the main color
149 args.border_color = args.color; 149 args.border_color = args.color;
150 } 150 }
151 rectangle->color = asc_col_itof(args.color); 151 rectangle->color = args.color;
152 rectangle->border_color = asc_col_itof(args.border_color); 152 rectangle->border_color = args.border_color;
153 153
154 asc_ptr_cast(AscSceneNode, node, rectangle); 154 asc_ptr_cast(AscSceneNode, node, rectangle);
155 asc_scene_node_init(node, 155 asc_scene_node_init(node,
156 ASC_SCENE_NODE_FUNCS(asc_rectangle), 156 ASC_SCENE_NODE_FUNCS(asc_rectangle),
157 .pos2d = ASC_VEC2I(pos_x, pos_y), 157 .pos2d = ASC_VEC2I(pos_x, pos_y),
158 .origin2d = ASC_VEC2I(args.origin_x, args.origin_y), 158 .origin2d = ASC_VEC2I(args.origin_x, args.origin_y),
159 .render_group = (args.filled && args.color.alpha < 255) || args.border_color.alpha < 255 159 .render_group = (args.filled && args.color.alpha < 1) || args.border_color.alpha < 1
160 ? ASC_RENDER_GROUP_2D_BLEND 160 ? ASC_RENDER_GROUP_2D_BLEND
161 : ASC_RENDER_GROUP_2D_OPAQUE 161 : ASC_RENDER_GROUP_2D_OPAQUE
162 ); 162 );
163 return node; 163 return node;
164 } 164 }
252 252
253 // Upload uniforms 253 // Upload uniforms
254 asc_shader_upload_model_matrix(shader, node); 254 asc_shader_upload_model_matrix(shader, node);
255 255
256 if (filled) { 256 if (filled) {
257 asc_shader_upload_col4f(ellipsis_shader->color, ellipsis->color); 257 asc_shader_upload_color(ellipsis_shader->color, ellipsis->color);
258 } 258 }
259 asc_shader_upload_vec2f(ellipsis_shader->radii, ellipsis->radii); 259 asc_shader_upload_vec2f(ellipsis_shader->radii, ellipsis->radii);
260 260
261 if (border) { 261 if (border) {
262 asc_shader_upload_float(ellipsis_shader->thickness, ellipsis->thickness); 262 asc_shader_upload_float(ellipsis_shader->thickness, ellipsis->thickness);
263 asc_shader_upload_col4f(ellipsis_shader->border_color, ellipsis->border_color); 263 asc_shader_upload_color(ellipsis_shader->border_color, ellipsis->border_color);
264 } 264 }
265 265
266 // Draw mesh 266 // Draw mesh
267 asc_mesh_draw_triangle_strip(&ellipsis->mesh); 267 asc_mesh_draw_triangle_strip(&ellipsis->mesh);
268 } 268 }
293 ellipsis->thickness = 1; 293 ellipsis->thickness = 1;
294 } else { 294 } else {
295 ellipsis->thickness = args.thickness; 295 ellipsis->thickness = args.thickness;
296 } 296 }
297 297
298 if (!args.filled && asc_memcmpz(&args.border_color, sizeof(args.border_color))) { 298 if (!args.filled && asc_memcmpz(&args.border_color, sizeof(asc_color))) {
299 // convenience fallback: 299 // convenience fallback:
300 // when we are drawing an outline but have no explicit border color, 300 // when we are drawing an outline but have no explicit border color,
301 // use the main color 301 // use the main color
302 args.border_color = args.color; 302 args.border_color = args.color;
303 } 303 }
304 ellipsis->color = asc_col_itof(args.color); 304 ellipsis->color = args.color;
305 ellipsis->border_color = asc_col_itof(args.border_color); 305 ellipsis->border_color = args.border_color;
306 306
307 asc_ptr_cast(AscSceneNode, node, ellipsis); 307 asc_ptr_cast(AscSceneNode, node, ellipsis);
308 asc_scene_node_init(node, 308 asc_scene_node_init(node,
309 ASC_SCENE_NODE_FUNCS(asc_ellipsis), 309 ASC_SCENE_NODE_FUNCS(asc_ellipsis),
310 .pos2d = ASC_VEC2I(pos_x, pos_y), 310 .pos2d = ASC_VEC2I(pos_x, pos_y),
311 .origin3d = ASC_VEC3F(ellipsis->radii.x, ellipsis->radii.y, 0), // use float to avoid cast 311 .origin3d = ASC_VEC3F(ellipsis->radii.x, ellipsis->radii.y, 0), // use float to avoid cast
312 .render_group = (args.filled && args.color.alpha < 255) || args.border_color.alpha < 255 312 .render_group = (args.filled && args.color.alpha < 1) || args.border_color.alpha < 1
313 ? ASC_RENDER_GROUP_2D_BLEND 313 ? ASC_RENDER_GROUP_2D_BLEND
314 : ASC_RENDER_GROUP_2D_OPAQUE 314 : ASC_RENDER_GROUP_2D_OPAQUE
315 ); 315 );
316 return node; 316 return node;
317 } 317 }

mercurial