render set clip, fix render push vertex

This commit is contained in:
Krzosa Karol
2025-01-15 10:47:57 +01:00
parent c680d60b19
commit d99a111742
2 changed files with 13 additions and 1 deletions

View File

@@ -14,7 +14,6 @@ struct rn_vertex_t {
typedef enum { typedef enum {
rn_cmd_kind_null, rn_cmd_kind_null,
rn_cmd_kind_clear,
rn_cmd_kind_quad, rn_cmd_kind_quad,
rn_cmd_kind_set_clip, rn_cmd_kind_set_clip,
} rn_cmd_kind_t; } rn_cmd_kind_t;
@@ -104,6 +103,7 @@ rn_cmd_t *rn_get_cmd(rn_cmd_kind_t kind) {
rn_vertex_t *rn_push_vertex(rn_cmd_t *cmd, u32 count) { rn_vertex_t *rn_push_vertex(rn_cmd_t *cmd, u32 count) {
rn_vertex_t *result = cmd->vertex + cmd->len; rn_vertex_t *result = cmd->vertex + cmd->len;
rn_state.len += count;
cmd->len += count; cmd->len += count;
return result; return result;
} }
@@ -201,6 +201,11 @@ v2f32_t rn_measure_string(rn_font_t *font, s8_t string) {
return rn_base_draw_string(font, string, v2f32(0,0), v4f32(0,0,0,0), false); return rn_base_draw_string(font, string, v2f32(0,0), v4f32(0,0,0,0), false);
} }
void rn_set_clip(r2f32_t rect) {
rn_cmd_t *cmd = rn_get_cmd(rn_cmd_kind_set_clip);
cmd->rect = rect;
}
void rn_init(ma_arena_t *perm, f32 _font_size) { void rn_init(ma_arena_t *perm, f32 _font_size) {
rn_state.cap = 1024*256; rn_state.cap = 1024*256;
rn_state.vertices = ma_push_array(perm, rn_vertex_t, rn_state.cap); rn_state.vertices = ma_push_array(perm, rn_vertex_t, rn_state.cap);
@@ -323,6 +328,12 @@ void rn_end(v2f32_t window_size, v4f32_t color) {
GLint s_texture = 0; // texture unit that sampler2D will use in GLSL code GLint s_texture = 0; // texture unit that sampler2D will use in GLSL code
glBindTextureUnit(s_texture, rn_state.main_font.texture_id); glBindTextureUnit(s_texture, rn_state.main_font.texture_id);
glDrawArrays(GL_TRIANGLES, 0, it->len); glDrawArrays(GL_TRIANGLES, 0, it->len);
} else if (it->kind == rn_cmd_kind_set_clip) {
GLint x = (GLint)it->rect.min.x;
GLint y = (GLint)it->rect.min.y;
GLsizei w = (GLsizei)(it->rect.max.x - x);
GLsizei h = (GLsizei)(it->rect.max.y - y);
glScissor(x, (GLint)window_size.y - (GLint)it->rect.max.y, w, h);
} else_is_invalid; } else_is_invalid;
} }

View File

@@ -373,6 +373,7 @@ fn void ui_draw(void) {
rect_color = accent1_color_global; rect_color = accent1_color_global;
} }
// rn_set_clip(box->parent->rect);
if (is_flag_set(box->flags, ui_box_flag_draw_rect)) { if (is_flag_set(box->flags, ui_box_flag_draw_rect)) {
rn_draw_rect(box->rect, rect_color); rn_draw_rect(box->rect, rect_color);
} }