|
|
|
|
@ -256,7 +256,8 @@ void
|
|
|
|
|
renderVAO(GLMesh* glmesh, |
|
|
|
|
mat4* node_xform, |
|
|
|
|
ShaderProgram* shader, |
|
|
|
|
GLTexture* gl_tex) |
|
|
|
|
GLTexture* gl_tex, |
|
|
|
|
GLenum draw_mode) |
|
|
|
|
{ |
|
|
|
|
glUseProgram(shader->prog_id); |
|
|
|
|
glBindVertexArray(glmesh->vao_id); |
|
|
|
|
@ -278,8 +279,7 @@ renderVAO(GLMesh* glmesh,
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, glmesh->element_buf->id); |
|
|
|
|
glDrawElements( |
|
|
|
|
glmesh->draw_mode, glmesh->num_indices, GL_UNSIGNED_SHORT, 0); |
|
|
|
|
glDrawElements(draw_mode, glmesh->num_indices, GL_UNSIGNED_SHORT, 0); |
|
|
|
|
glBindVertexArray(0); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -298,13 +298,10 @@ getVertexAttribByName(ShaderProgram* shader, const char* name)
|
|
|
|
|
GLMesh |
|
|
|
|
initGLMesh(MemoryArena* arena, |
|
|
|
|
const Mesh& m, |
|
|
|
|
u32 num_mappings, |
|
|
|
|
GLenum draw_mode) |
|
|
|
|
u32 num_mappings) |
|
|
|
|
{ |
|
|
|
|
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 = ARENA_ALLOC(arena, GLBuffer, num_mappings); |
|
|
|
|
glm.element_buf = ARENA_ALLOC(arena, GLBuffer, 1); |
|
|
|
|
@ -332,11 +329,12 @@ GLMesh
|
|
|
|
|
loadGLMesh(MemoryArena* arena, |
|
|
|
|
const Mesh& m, |
|
|
|
|
GLenum draw_mode, |
|
|
|
|
GLenum usage, |
|
|
|
|
GLTexture* diffuse_texture, |
|
|
|
|
u32 num_mappings, |
|
|
|
|
GLBufferToAttribMapping mappings[]) |
|
|
|
|
{ |
|
|
|
|
GLMesh glm = initGLMesh(arena, m, num_mappings, draw_mode); |
|
|
|
|
GLMesh glm = initGLMesh(arena, m, num_mappings); |
|
|
|
|
|
|
|
|
|
if (diffuse_texture) { |
|
|
|
|
glm.has_texture = true; |
|
|
|
|
@ -361,7 +359,7 @@ loadGLMesh(MemoryArena* arena,
|
|
|
|
|
glBufferData(buf.target, |
|
|
|
|
buf.data_size, |
|
|
|
|
mesh_buf_data, |
|
|
|
|
glm.usage); |
|
|
|
|
usage); |
|
|
|
|
glVertexAttribPointer(attrib->location, attrib->num_components, |
|
|
|
|
attrib->component_type, GL_FALSE, 0, 0); |
|
|
|
|
glEnableVertexAttribArray(attrib->location); |
|
|
|
|
@ -376,7 +374,7 @@ loadGLMesh(MemoryArena* arena,
|
|
|
|
|
glBufferData(glm.element_buf->target, |
|
|
|
|
glm.element_buf->data_size, |
|
|
|
|
m.indices, |
|
|
|
|
glm.usage); |
|
|
|
|
usage); |
|
|
|
|
|
|
|
|
|
// TODO: many of these GL functions can set an error state
|
|
|
|
|
// TODO: return error status
|
|
|
|
|
|