| 3205 | } |
| 3206 | |
| 3207 | void lf_rect_render(vec2s pos, vec2s size, LfColor color, LfColor border_color, float border_width, float corner_radius) { |
| 3208 | if(!state.renderer_render) return; |
| 3209 | if(item_should_cull((LfAABB){.pos = pos, .size = size})) { |
| 3210 | return; |
| 3211 | } |
| 3212 | // Offsetting the postion, so that pos is the top left of the rendered object |
| 3213 | vec2s pos_initial = pos; |
| 3214 | pos = (vec2s){pos.x + size.x / 2.0f, pos.y + size.y / 2.0f}; |
| 3215 | |
| 3216 | // Initializing texture coords data |
| 3217 | vec2s texcoords[4] = { |
| 3218 | (vec2s){1.0f, 1.0f}, |
| 3219 | (vec2s){1.0f, 0.0f}, |
| 3220 | (vec2s){0.0f, 0.0f}, |
| 3221 | (vec2s){0.0f, 1.0f}, |
| 3222 | }; |
| 3223 | // Calculating the transform matrix |
| 3224 | mat4 translate; |
| 3225 | mat4 scale; |
| 3226 | mat4 transform; |
| 3227 | vec3 pos_xyz = {(corner_radius != 0.0f ? (float)state.dsp_w / 2.0f : pos.x), (corner_radius != 0.0f ? (float)state.dsp_h / 2.0f : pos.y), 0.0f}; |
| 3228 | vec3 size_xyz = {corner_radius != 0.0f ? state.dsp_w : size.x, corner_radius != 0.0f ? state.dsp_h : size.y, 0.0f}; |
| 3229 | glm_translate_make(translate, pos_xyz); |
| 3230 | glm_scale_make(scale, size_xyz); |
| 3231 | glm_mat4_mul(translate,scale,transform); |
| 3232 | |
| 3233 | // Adding the vertices to the batch renderer |
| 3234 | for(uint32_t i = 0; i < 4; i++) { |
| 3235 | if(state.render.vert_count >= MAX_RENDER_BATCH) { |
| 3236 | renderer_flush(); |
| 3237 | renderer_begin(); |
| 3238 | } |
| 3239 | vec4 result; |
| 3240 | glm_mat4_mulv(transform, state.render.vert_pos[i].raw, result); |
| 3241 | state.render.verts[state.render.vert_count].pos[0] = result[0]; |
| 3242 | state.render.verts[state.render.vert_count].pos[1] = result[1]; |
| 3243 | |
| 3244 | vec4s border_color_zto = lf_color_to_zto(border_color); |
| 3245 | const vec4 border_color_arr = {border_color_zto.r, border_color_zto.g, border_color_zto.b, border_color_zto.a}; |
| 3246 | memcpy(state.render.verts[state.render.vert_count].border_color, border_color_arr, sizeof(vec4)); |
| 3247 | |
| 3248 | state.render.verts[state.render.vert_count].border_width = border_width; |
| 3249 | |
| 3250 | vec4s color_zto = lf_color_to_zto(color); |
| 3251 | const vec4 color_arr = {color_zto.r, color_zto.g, color_zto.b, color_zto.a}; |
| 3252 | memcpy(state.render.verts[state.render.vert_count].color, color_arr, sizeof(vec4)); |
| 3253 | |
| 3254 | const vec2 texcoord_arr = {texcoords[i].x, texcoords[i].y}; |
| 3255 | memcpy(state.render.verts[state.render.vert_count].texcoord, texcoord_arr, sizeof(vec2)); |
| 3256 | |
| 3257 | state.render.verts[state.render.vert_count].tex_index = -1; |
| 3258 | |
| 3259 | const vec2 scale_arr = {size.x, size.y}; |
| 3260 | memcpy(state.render.verts[state.render.vert_count].scale, scale_arr, sizeof(vec2)); |
| 3261 | |
| 3262 | const vec2 pos_px_arr = {(float)pos_initial.x, (float)pos_initial.y}; |
| 3263 | memcpy(state.render.verts[state.render.vert_count].pos_px, pos_px_arr, sizeof(vec2)); |
| 3264 |
no test coverage detected