src/primitives.c

changeset 81
84a546e282b7
parent 65
9c44c55d327a
child 82
4e1e698f4b0d
--- 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 <string.h>
 #include <GL/glew.h>
 
-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);

mercurial