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 {
rn_cmd_kind_null,
rn_cmd_kind_clear,
rn_cmd_kind_quad,
rn_cmd_kind_set_clip,
} 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 *result = cmd->vertex + cmd->len;
rn_state.len += count;
cmd->len += count;
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);
}
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) {
rn_state.cap = 1024*256;
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
glBindTextureUnit(s_texture, rn_state.main_font.texture_id);
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;
}