From 5476dd7d21875d68a4d957f441d34eee2a9e2b37 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Fri, 29 Oct 2021 13:58:14 +0200 Subject: Fix multiple vertex buffers using the same data Need to call glVertexPointer/glTexCoordPointer/glColorPointer every time we render. --- tests/main.c | 56 +++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 45 insertions(+), 11 deletions(-) (limited to 'tests') diff --git a/tests/main.c b/tests/main.c index 53134b9..98c68ad 100644 --- a/tests/main.c +++ b/tests/main.c @@ -14,7 +14,8 @@ typedef struct { mgl_texture *texture; mgl_font *font; - mgl_vertex_buffer *vertex_buffer; + mgl_vertex_buffer *vertex_buffer1; + mgl_vertex_buffer *vertex_buffer2; mgl_shader_program *shader_program; mgl_clock clock; } Userdata; @@ -47,8 +48,11 @@ static void draw(mgl_window *window, void *userdata) { mgl_text_draw(context, &text); mgl_text_deinit(&text); - mgl_vertex_buffer_set_position(u->vertex_buffer, (mgl_vec2f){ window->cursor_position.x, window->cursor_position.y }); - mgl_vertex_buffer_draw(context, u->vertex_buffer, &u->font->texture); + mgl_vertex_buffer_set_position(u->vertex_buffer1, (mgl_vec2f){ window->cursor_position.x, window->cursor_position.y }); + mgl_vertex_buffer_draw(context, u->vertex_buffer1, &u->font->texture); + + mgl_vertex_buffer_set_position(u->vertex_buffer2, (mgl_vec2f){ window->cursor_position.x, window->cursor_position.y + 500 }); + mgl_vertex_buffer_draw(context, u->vertex_buffer2, &u->font->texture); } int main(int argc, char **argv) { @@ -57,13 +61,15 @@ int main(int argc, char **argv) { mgl_texture texture; mgl_font font; - mgl_vertex_buffer vertex_buffer; + mgl_vertex_buffer vertex_buffer1; + mgl_vertex_buffer vertex_buffer2; mgl_shader_program shader_program; Userdata userdata; userdata.texture = &texture; userdata.font = &font; - userdata.vertex_buffer = &vertex_buffer; + userdata.vertex_buffer1 = &vertex_buffer1; + userdata.vertex_buffer2 = &vertex_buffer2; userdata.shader_program = &shader_program; mgl_clock_init(&userdata.clock); @@ -86,9 +92,10 @@ int main(int argc, char **argv) { if(mgl_shader_program_finalize(&shader_program) != 0) return 1; - mgl_vertex_buffer_init(&vertex_buffer); + mgl_vertex_buffer_init(&vertex_buffer1); + mgl_vertex_buffer_init(&vertex_buffer2); - mgl_vertex vertices[4] = { + mgl_vertex vertices1[4] = { (mgl_vertex){ .position = {0.0f, 0.0f}, .texcoords = {0.0f, 0.0f}, @@ -100,18 +107,44 @@ int main(int argc, char **argv) { .color = {0, 255, 0, 100}, }, (mgl_vertex){ - .position = {font.texture.width, font.texture.height}, + .position = {font.texture.width, font.texture.height/2}, + .texcoords = {1.0f, 0.5f}, + .color = {0, 0, 255, 100}, + }, + (mgl_vertex){ + .position = {0.0f, font.texture.height/2}, + .texcoords = {0.0f, 0.5f}, + .color = {255, 0, 255, 100} + } + }; + + mgl_vertex vertices2[4] = { + (mgl_vertex){ + .position = {0.0f, 0.0f}, + .texcoords = {0.0f, 0.5f}, + .color = {255, 0, 0, 100} + }, + (mgl_vertex){ + .position = {font.texture.width, 0.0f}, + .texcoords = {1.0f, 0.5f}, + .color = {0, 255, 0, 100}, + }, + (mgl_vertex){ + .position = {font.texture.width, font.texture.height/2}, .texcoords = {1.0f, 1.0f}, .color = {0, 0, 255, 100}, }, (mgl_vertex){ - .position = {0.0f, font.texture.height}, + .position = {0.0f, font.texture.height/2}, .texcoords = {0.0f, 1.0f}, .color = {255, 0, 255, 100} } }; - if(mgl_vertex_buffer_update(&vertex_buffer, vertices, 4, MGL_PRIMITIVE_QUADS, MGL_USAGE_STATIC) != 0) + if(mgl_vertex_buffer_update(&vertex_buffer1, vertices1, 4, MGL_PRIMITIVE_QUADS, MGL_USAGE_STATIC) != 0) + return 1; + + if(mgl_vertex_buffer_update(&vertex_buffer2, vertices2, 4, MGL_PRIMITIVE_QUADS, MGL_USAGE_STATIC) != 0) return 1; fprintf(stderr, "Font texture width: %d, texture height: %d\n", font.texture.width, font.texture.height); @@ -127,7 +160,8 @@ int main(int argc, char **argv) { mgl_window_display(&window); } - mgl_vertex_buffer_deinit(&vertex_buffer); + mgl_vertex_buffer_deinit(&vertex_buffer2); + mgl_vertex_buffer_deinit(&vertex_buffer1); mgl_shader_program_deinit(&shader_program); mgl_font_unload(&font); mgl_texture_unload(&texture); -- cgit v1.2.3