diff -r 9f7bfc0a1dc3 -r 84a546e282b7 src/primitives.c --- a/src/primitives.c Fri Apr 18 19:34:31 2025 +0200 +++ b/src/primitives.c Fri Apr 18 20:13:01 2025 +0200 @@ -29,11 +29,16 @@ #include "ascension/error.h" #include "ascension/context.h" -#include #include -static void asc_primitives_init_plane(AscMesh *mesh) { - asc_dprintf("Create primitive plane in VBO %u and VAO %u", mesh->vbo, mesh->vao); +void asc_primitives_init_plane(AscMesh *mesh) { + if (mesh->vbo == 0) { + if (mesh->vao > 0) { + asc_dprintf("!!! Mesh with VAO %u has no VBO - this is most likely a programming error !!!", mesh->vao); + } + asc_mesh_allocate_buffers(mesh, 1); + } + asc_dprintf("Create plane in VBO %u and VAO %u", mesh->vbo, mesh->vao); mesh->vertices = 4; float data[8] = { 0.0f, 0.0f, // bottom left @@ -48,44 +53,6 @@ glEnableVertexAttribArray(0); } -bool asc_primitives_init(AscPrimitives *primitives) { - asc_dprintf("Create primitives for the GL context of active window."); - // TODO: more primitives - - GLuint buffers[1]; - GLuint arrays[1]; - glGenBuffers(1, buffers); - glGenVertexArrays(1, arrays); - - AscMesh *plane = &(primitives->plane); - plane->vbo = buffers[0]; - plane->vao = arrays[0]; - asc_primitives_init_plane(plane); - - GLenum error = glGetError(); - if (error == GL_NO_ERROR) { - return true; - } else { - asc_error_gl(error, CX_STR("Initialization of primitive meshes failed.")); - return false; - } -} - -void asc_primitives_destroy(AscPrimitives *primitives) { - asc_dprintf("Destroy primitives in GL context of active window."); - - GLuint buffers[1]; - GLuint arrays[1]; - - buffers[0] = primitives->plane.vbo; - arrays[0] = primitives->plane.vao; - - glDeleteBuffers(1, buffers); - glDeleteVertexArrays(1, arrays); - - memset(primitives, 0, sizeof(AscPrimitives)); -} - void asc_primitives_draw_plane(void) { AscMesh const *mesh = &(asc_active_window->glctx.primitives.plane); glBindVertexArray(mesh->vao);