|
|
|
@ -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
|
|
|
|
|
|
|
|
|
|
|
|
|