render set clip, fix render push vertex
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -373,6 +373,7 @@ fn void ui_draw(void) {
|
||||
rect_color = accent1_color_global;
|
||||
}
|
||||
|
||||
// rn_set_clip(box->parent->rect);
|
||||
if (is_flag_set(box->flags, ui_box_flag_draw_rect)) {
|
||||
rn_draw_rect(box->rect, rect_color);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user