Browse Source

use rg_arena for storing GLMesh buffers

main
cinnaboot 4 years ago
parent
commit
8f77e33f33
  1. 3
      src/entity.cpp
  2. 32
      src/shader.cpp
  3. 3
      src/shader.h
  4. 1
      src/tangerine.h

3
src/entity.cpp

@ -29,7 +29,8 @@ initEntity(Entity* e,
for (u32 i = 0; i< e->num_meshes; i++) { for (u32 i = 0; i< e->num_meshes; i++) {
GLMesh* glm = &e->meshes[i]; GLMesh* glm = &e->meshes[i];
*glm = loadGLMesh(mdl->meshes[i], *glm = loadGLMesh(arena,
mdl->meshes[i],
GL_TRIANGLES, GL_TRIANGLES,
e->diffuse_texture, e->diffuse_texture,
num_attrib_mappings, num_attrib_mappings,

32
src/shader.cpp

@ -300,16 +300,19 @@ getVertexAttribByName(ShaderProgram* shader, const char* name)
} }
GLMesh 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}; GLMesh glm = {0};
glm.num_indices = m.num_indices; glm.num_indices = m.num_indices;
glm.draw_mode = draw_mode; glm.draw_mode = draw_mode;
glm.usage = GL_STATIC_DRAW; // TODO: logic for updating dynamic meshes glm.usage = GL_STATIC_DRAW; // TODO: logic for updating dynamic meshes
glm.num_vertex_attrib_buffers = num_mappings; glm.num_vertex_attrib_buffers = num_mappings;
glm.vertex_attrib_buffers = UTIL_ALLOC(num_mappings, GLBuffer); glm .vertex_attrib_buffers = ARENA_ALLOC(arena, GLBuffer, num_mappings);
glm.element_buf = UTIL_ALLOC(1, GLBuffer); glm.element_buf = ARENA_ALLOC(arena, GLBuffer, 1);
glm.node_xform = UTIL_ALLOC(1, glm::mat4); glm.node_xform = ARENA_ALLOC(arena, glm::mat4, 1);
*glm.node_xform = glm::mat4(1); *glm.node_xform = glm::mat4(1);
return glm; 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 // 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 // going to use this, can void copying GLMesh twice that way
GLMesh GLMesh
loadGLMesh(const Mesh& m, loadGLMesh(MemoryArena* arena,
const Mesh& m,
GLenum draw_mode, GLenum draw_mode,
GLTexture* diffuse_texture, GLTexture* diffuse_texture,
u32 num_mappings, u32 num_mappings,
GLBufferToAttribMapping mappings[]) GLBufferToAttribMapping mappings[])
{ {
// NOTE: need to use freeGLMesh() when freeing because we're not storing GLMesh glm = initGLMesh(arena, m, num_mappings, draw_mode);
// the GLBuffers on a memory arean (yet)
GLMesh glm = initGLMesh(m, num_mappings, draw_mode);
if (diffuse_texture) { if (diffuse_texture) {
glm.has_texture = true; glm.has_texture = true;
@ -384,20 +386,6 @@ loadGLMesh(const Mesh& m,
return glm; 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 // NOTE: internal

3
src/shader.h

@ -205,7 +205,8 @@ void renderVAO(GLMesh* glmesh,
GLVertexAttrib* getVertexAttribByName(ShaderProgram* shader, const char* name); GLVertexAttrib* getVertexAttribByName(ShaderProgram* shader, const char* name);
GLMesh loadGLMesh(const Mesh& m, GLMesh loadGLMesh(MemoryArena* arena,
const Mesh& m,
GLenum draw_mode, GLenum draw_mode,
GLTexture* diffuse_texture, GLTexture* diffuse_texture,
u32 num_mappings, u32 num_mappings,

1
src/tangerine.h

@ -61,6 +61,7 @@
* - use dynamic shader parsing to set 'sampler_id' for shaders with textures * - use dynamic shader parsing to set 'sampler_id' for shaders with textures
* - add ambient light to LightsBuffer structure * - add ambient light to LightsBuffer structure
* - remember to update offsets in initLights() * - remember to update offsets in initLights()
* - use rg_arena for store GLMeshes, see initGLMesh()
*/ */

Loading…
Cancel
Save