|
|
|
@ -23,7 +23,8 @@ bool convertMeshInfo(meMeshInfo* mesh, render_object* ro, bool use_normals); |
|
|
|
void sendIndexBufferToGL(gl_index_buffer* index_buffer, GLenum usage, GLenum target); |
|
|
|
void sendIndexBufferToGL(gl_index_buffer* index_buffer, GLenum usage, GLenum target); |
|
|
|
void drawRenderObject(render_group* rg, render_object* ro, |
|
|
|
void drawRenderObject(render_group* rg, render_object* ro, |
|
|
|
glm::mat4 model_matrix, glm::mat4 view_matrix, glm::mat4 projection_matrix, |
|
|
|
glm::mat4 model_matrix, glm::mat4 view_matrix, glm::mat4 projection_matrix, |
|
|
|
glm::vec3 light_position, GLuint light_id, bool update_vertex_data); |
|
|
|
glm::vec3 light_position, GLuint light_id, |
|
|
|
|
|
|
|
bool update_vertex_data, bool update_color_data); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// interface
|
|
|
|
// interface
|
|
|
|
@ -147,11 +148,12 @@ rgBufferData(gl_buffer* buffer, GLenum usage, GLenum target) |
|
|
|
|
|
|
|
|
|
|
|
void |
|
|
|
void |
|
|
|
rgDraw(render_group* rg, glm::mat4 model_matrix, glm::mat4 view_matrix, glm::mat4 projection_matrix, |
|
|
|
rgDraw(render_group* rg, glm::mat4 model_matrix, glm::mat4 view_matrix, glm::mat4 projection_matrix, |
|
|
|
glm::vec3 light_position, GLuint light_id, bool update_vertex_data) |
|
|
|
glm::vec3 light_position, GLuint light_id, |
|
|
|
|
|
|
|
bool update_vertex_data, bool update_color_data) |
|
|
|
{ |
|
|
|
{ |
|
|
|
for (uint i = 0; i < rg->num_objects; i++) { |
|
|
|
for (uint i = 0; i < rg->num_objects; i++) { |
|
|
|
drawRenderObject(rg, rg->render_objects[i], model_matrix, view_matrix, projection_matrix, |
|
|
|
drawRenderObject(rg, rg->render_objects[i], model_matrix, view_matrix, projection_matrix, |
|
|
|
light_position, light_id, update_vertex_data); |
|
|
|
light_position, light_id, update_vertex_data, update_color_data); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -282,7 +284,8 @@ convertMeshInfo(meMeshInfo* mesh, render_object* ro, bool use_normals) |
|
|
|
void |
|
|
|
void |
|
|
|
drawRenderObject(render_group* rg, render_object* ro, |
|
|
|
drawRenderObject(render_group* rg, render_object* ro, |
|
|
|
glm::mat4 model_matrix, glm::mat4 view_matrix, glm::mat4 projection_matrix, |
|
|
|
glm::mat4 model_matrix, glm::mat4 view_matrix, glm::mat4 projection_matrix, |
|
|
|
glm::vec3 light_position, GLuint light_id, bool update_vertex_data) |
|
|
|
glm::vec3 light_position, GLuint light_id, |
|
|
|
|
|
|
|
bool update_vertex_data, bool update_color_data) |
|
|
|
{ |
|
|
|
{ |
|
|
|
glUseProgram(rg->shader.program_id); |
|
|
|
glUseProgram(rg->shader.program_id); |
|
|
|
glUniformMatrix4fv(rg->shader.model_matrix_id, 1, GL_FALSE, &model_matrix[0][0]); |
|
|
|
glUniformMatrix4fv(rg->shader.model_matrix_id, 1, GL_FALSE, &model_matrix[0][0]); |
|
|
|
@ -307,10 +310,11 @@ drawRenderObject(render_group* rg, render_object* ro, |
|
|
|
glBindBuffer(GL_ARRAY_BUFFER, ro->color_buffer.buffer_id); |
|
|
|
glBindBuffer(GL_ARRAY_BUFFER, ro->color_buffer.buffer_id); |
|
|
|
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, (void*) 0); |
|
|
|
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, (void*) 0); |
|
|
|
|
|
|
|
|
|
|
|
// TODO: maybe add an option to not send color data every frame?
|
|
|
|
if (update_color_data) { |
|
|
|
glBufferSubData(GL_ARRAY_BUFFER, 0, ro->color_buffer.buffer_len * sizeof(GLfloat), |
|
|
|
glBufferSubData(GL_ARRAY_BUFFER, 0, ro->color_buffer.buffer_len * sizeof(GLfloat), |
|
|
|
ro->color_buffer.buffer); |
|
|
|
ro->color_buffer.buffer); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 3rd attribute buffer: normals
|
|
|
|
// 3rd attribute buffer: normals
|
|
|
|
if (rg->use_normals) { |
|
|
|
if (rg->use_normals) { |
|
|
|
|