From 8f77e33f3359f347d0577835694af348939b3afe Mon Sep 17 00:00:00 2001 From: cinnaboot Date: Sat, 12 Feb 2022 11:24:00 -0500 Subject: [PATCH] use rg_arena for storing GLMesh buffers --- src/entity.cpp | 11 ++++++----- src/shader.cpp | 32 ++++++++++---------------------- src/shader.h | 3 ++- src/tangerine.h | 1 + 4 files changed, 19 insertions(+), 28 deletions(-) diff --git a/src/entity.cpp b/src/entity.cpp index b819687..7c8f7f5 100644 --- a/src/entity.cpp +++ b/src/entity.cpp @@ -29,11 +29,12 @@ initEntity(Entity* e, for (u32 i = 0; i< e->num_meshes; i++) { GLMesh* glm = &e->meshes[i]; - *glm = loadGLMesh(mdl->meshes[i], - GL_TRIANGLES, - e->diffuse_texture, - num_attrib_mappings, - attrib_mappings); + *glm = loadGLMesh(arena, + mdl->meshes[i], + GL_TRIANGLES, + e->diffuse_texture, + num_attrib_mappings, + attrib_mappings); if (glm->vao_id == 0) { LOGF(Error, "error initializing entity\n"); diff --git a/src/shader.cpp b/src/shader.cpp index 242d928..181b208 100644 --- a/src/shader.cpp +++ b/src/shader.cpp @@ -300,16 +300,19 @@ getVertexAttribByName(ShaderProgram* shader, const char* name) } GLMesh -initGLMesh(const Mesh& m, u32 num_mappings, GLenum draw_mode) +initGLMesh(MemoryArena* arena, + const Mesh& m, + u32 num_mappings, + GLenum draw_mode) { GLMesh glm = {0}; glm.num_indices = m.num_indices; glm.draw_mode = draw_mode; glm.usage = GL_STATIC_DRAW; // TODO: logic for updating dynamic meshes glm.num_vertex_attrib_buffers = num_mappings; - glm.vertex_attrib_buffers = UTIL_ALLOC(num_mappings, GLBuffer); - glm.element_buf = UTIL_ALLOC(1, GLBuffer); - glm.node_xform = UTIL_ALLOC(1, glm::mat4); + glm .vertex_attrib_buffers = ARENA_ALLOC(arena, GLBuffer, num_mappings); + glm.element_buf = ARENA_ALLOC(arena, GLBuffer, 1); + glm.node_xform = ARENA_ALLOC(arena, glm::mat4, 1); *glm.node_xform = glm::mat4(1); return glm; @@ -328,15 +331,14 @@ initGLAttribBuffer(GLBuffer* buf, GLenum target, GLVertexAttrib* attrib) // FIXME: might as well pass in pointer to GLMesh, since that's how we're // going to use this, can void copying GLMesh twice that way GLMesh -loadGLMesh(const Mesh& m, +loadGLMesh(MemoryArena* arena, + const Mesh& m, GLenum draw_mode, GLTexture* diffuse_texture, u32 num_mappings, GLBufferToAttribMapping mappings[]) { - // NOTE: need to use freeGLMesh() when freeing because we're not storing - // the GLBuffers on a memory arean (yet) - GLMesh glm = initGLMesh(m, num_mappings, draw_mode); + GLMesh glm = initGLMesh(arena, m, num_mappings, draw_mode); if (diffuse_texture) { glm.has_texture = true; @@ -384,20 +386,6 @@ loadGLMesh(const Mesh& m, return glm; } -void -freeGLMesh(GLMesh* glm) -{ - if (glm) { - for (u32 i = 0; i < glm->num_vertex_attrib_buffers; i++) - utilSafeFree(glm->vertex_attrib_buffers[i].name); - - utilSafeFree(glm->vertex_attrib_buffers); - utilSafeFree(glm->element_buf); - // NOTE: don't free the GLMesh because it is part of a memory arena - //utilSafeFree(glm); - } -} - // NOTE: internal diff --git a/src/shader.h b/src/shader.h index 0561a67..898fa9e 100644 --- a/src/shader.h +++ b/src/shader.h @@ -205,7 +205,8 @@ void renderVAO(GLMesh* glmesh, GLVertexAttrib* getVertexAttribByName(ShaderProgram* shader, const char* name); -GLMesh loadGLMesh(const Mesh& m, +GLMesh loadGLMesh(MemoryArena* arena, + const Mesh& m, GLenum draw_mode, GLTexture* diffuse_texture, u32 num_mappings, diff --git a/src/tangerine.h b/src/tangerine.h index c804e94..f29aae4 100644 --- a/src/tangerine.h +++ b/src/tangerine.h @@ -61,6 +61,7 @@ * - use dynamic shader parsing to set 'sampler_id' for shaders with textures * - add ambient light to LightsBuffer structure * - remember to update offsets in initLights() +* - use rg_arena for store GLMeshes, see initGLMesh() */