diff --git a/include/drawglx_internal.h b/include/drawglx_internal.h index a8f37d9..64509f2 100644 --- a/include/drawglx_internal.h +++ b/include/drawglx_internal.h @@ -119,11 +119,11 @@ struct draw_state int program; int dirty; - GLuint texture; - xoverlay_font_handle_t font; + xoverlay_font_handle_t font; xoverlay_texture_handle_t thandle; GLuint shader; + GLuint texture; }; struct draw_state ds; @@ -149,6 +149,9 @@ ds_pre_render(); void ds_post_render(); +void +ds_start_next_frame(); + void ds_render_next_frame(); diff --git a/src/drawglx_internal.c b/src/drawglx_internal.c index ff4b4d9..1e0a81f 100644 --- a/src/drawglx_internal.c +++ b/src/drawglx_internal.c @@ -336,15 +336,25 @@ ds_post_render() } void -ds_render_next_frame() +ds_start_next_frame() { - ds_pre_render(); - dis_finish(); ds.program = -1; ds.thandle = 0; ds.font = 0; ds.texture = 0; ds.shader = 0; + + for (int i = 0; i < PROGRAM_COUNT; ++i) + { + vertex_buffer_clear(programs[i].vertex); + } +} + +void +ds_render_next_frame() +{ + ds_pre_render(); + dis_finish(); struct draw_instruction_t *instr; instr = dis_fetch_instruction(); @@ -369,6 +379,7 @@ ds_render_next_frame() ds_mark_dirty(); float *vert = dis_read_data(instr->count * programs[ds.program].vertex_size); vertex_buffer_push_back_vertices(programs[ds.program].vertex, vert, instr->count); + vertex_buffer_render() break; case DI_PUSH_INDICES: ds_mark_dirty(); diff --git a/src/program_freetype.c b/src/program_freetype.c index 7c0dbb2..054d4d1 100644 --- a/src/program_freetype.c +++ b/src/program_freetype.c @@ -19,7 +19,6 @@ DECL_PROGRAM_INIT(freetype) DECL_PROGRAM_LOAD(freetype) { - vertex_buffer_clear(programs[PROGRAM_FREETYPE].vertex); ds_use_shader(programs[PROGRAM_FREETYPE].shader); texture_font_t *fnt = fontapi_get(ds.font); if (fnt == NULL) diff --git a/src/program_triangles_plain.c b/src/program_triangles_plain.c index 9a32bff..88ddca9 100644 --- a/src/program_triangles_plain.c +++ b/src/program_triangles_plain.c @@ -19,7 +19,6 @@ DECL_PROGRAM_INIT(triangles_plain) DECL_PROGRAM_LOAD(triangles_plain) { ds_use_shader(programs[PROGRAM_TRIANGLES_PLAIN].shader); - vertex_buffer_clear(programs[PROGRAM_TRIANGLES_PLAIN].vertex); } DECL_PROGRAM_RENDER(triangles_plain) diff --git a/src/program_triangles_textured.c b/src/program_triangles_textured.c index a2c74ed..d1e268c 100644 --- a/src/program_triangles_textured.c +++ b/src/program_triangles_textured.c @@ -19,7 +19,6 @@ DECL_PROGRAM_INIT(triangles_textured) DECL_PROGRAM_LOAD(triangles_textured) { ds_use_shader(programs[PROGRAM_TRIANGLES_TEXTURED].shader); - vertex_buffer_clear(programs[PROGRAM_TRIANGLES_TEXTURED].vertex); } DECL_PROGRAM_RENDER(triangles_textured)