diff --git a/TODO.md b/TODO.md index c0864dd..3b4b39d 100644 --- a/TODO.md +++ b/TODO.md @@ -1,8 +1,5 @@ ## TODO: -- restructure some entity/render_group stuffs - - add interface to render_group for glBindBuffer->glBufferSubData? - - hexgrid.cpp then wouldn't need to call gl functions directly - init HexGrid render groups in hgInit and remove slCreateHexRenderGroups - position entities on grid hexes - pathfinding diff --git a/src/hexgrid.cpp b/src/hexgrid.cpp index 7dd28fc..4644f23 100644 --- a/src/hexgrid.cpp +++ b/src/hexgrid.cpp @@ -97,18 +97,12 @@ hgAddHex(hexgrid& hg, v3f hex_coords, render_group* rg_filled, render_group* rg_ populateLineGLBuffers(hg, new_hex, rg_lines); // NOTE: we could send just a part of the buffer if performance ends up being bad here - glBindBuffer(GL_ARRAY_BUFFER, vb_f.buffer_id); - glBufferSubData(GL_ARRAY_BUFFER, 0, vb_f.count * sizeof(GLfloat), vb_f.buffer); - glBindBuffer(GL_ARRAY_BUFFER, nb_f.buffer_id); - glBufferSubData(GL_ARRAY_BUFFER, 0, nb_f.count * sizeof(GLfloat), nb_f.buffer); - glBindBuffer(GL_ARRAY_BUFFER, ub_f.buffer_id); - glBufferSubData(GL_ARRAY_BUFFER, 0, ub_f.count * sizeof(GLfloat), ub_f.buffer); - glBindBuffer(GL_ARRAY_BUFFER, vb_l.buffer_id); - glBufferSubData(GL_ARRAY_BUFFER, 0, vb_l.count * sizeof(GLfloat), vb_l.buffer); - glBindBuffer(GL_ARRAY_BUFFER, nb_l.buffer_id); - glBufferSubData(GL_ARRAY_BUFFER, 0, nb_l.count * sizeof(GLfloat), nb_l.buffer); - glBindBuffer(GL_ARRAY_BUFFER, ub_l.buffer_id); - glBufferSubData(GL_ARRAY_BUFFER, 0, ub_l.count * sizeof(GLfloat), ub_l.buffer); + rgUpdateGLBuffer(vb_f); + rgUpdateGLBuffer(nb_f); + rgUpdateGLBuffer(ub_f); + rgUpdateGLBuffer(vb_l); + rgUpdateGLBuffer(nb_l); + rgUpdateGLBuffer(ub_l); return true; } else { @@ -155,18 +149,12 @@ hgRemoveHex(hexgrid& hg, v3f hex_coords, render_group* rg_filled, render_group* } // NOTE: we do need to update the whole buffer when removing data - glBindBuffer(GL_ARRAY_BUFFER, vb_f.buffer_id); - glBufferSubData(GL_ARRAY_BUFFER, 0, vb_f.count * sizeof(GLfloat), vb_f.buffer); - glBindBuffer(GL_ARRAY_BUFFER, nb_f.buffer_id); - glBufferSubData(GL_ARRAY_BUFFER, 0, nb_f.count * sizeof(GLfloat), nb_f.buffer); - glBindBuffer(GL_ARRAY_BUFFER, ub_f.buffer_id); - glBufferSubData(GL_ARRAY_BUFFER, 0, ub_f.count * sizeof(GLfloat), ub_f.buffer); - glBindBuffer(GL_ARRAY_BUFFER, vb_l.buffer_id); - glBufferSubData(GL_ARRAY_BUFFER, 0, vb_l.count * sizeof(GLfloat), vb_l.buffer); - glBindBuffer(GL_ARRAY_BUFFER, nb_l.buffer_id); - glBufferSubData(GL_ARRAY_BUFFER, 0, nb_l.count * sizeof(GLfloat), nb_l.buffer); - glBindBuffer(GL_ARRAY_BUFFER, ub_l.buffer_id); - glBufferSubData(GL_ARRAY_BUFFER, 0, ub_l.count * sizeof(GLfloat), ub_l.buffer); + rgUpdateGLBuffer(vb_f); + rgUpdateGLBuffer(nb_f); + rgUpdateGLBuffer(ub_f); + rgUpdateGLBuffer(vb_l); + rgUpdateGLBuffer(nb_l); + rgUpdateGLBuffer(ub_l); return true; } @@ -192,8 +180,7 @@ hgUpdateUVBuffer(hexgrid& hg, render_group* rg) } } - glBindBuffer(GL_ARRAY_BUFFER, uv_buf.buffer_id); - glBufferSubData(GL_ARRAY_BUFFER, 0, uv_buf.count * sizeof(GLfloat), uv_buf.buffer); + rgUpdateGLBuffer(uv_buf); } hex_info* diff --git a/src/render_group.cpp b/src/render_group.cpp index 76b3118..ff1cd0d 100644 --- a/src/render_group.cpp +++ b/src/render_group.cpp @@ -159,6 +159,13 @@ rgInitGLIndexBuffer(gl_index_buffer* index_buffer, GLenum usage, GLenum target) glBufferData(target, index_buffer->count * sizeof(uint), index_buffer->buffer, usage); } +void +rgUpdateGLBuffer(gl_buffer& buffer) +{ + glBindBuffer(GL_ARRAY_BUFFER, buffer.buffer_id); + glBufferSubData(GL_ARRAY_BUFFER, 0, buffer.count * sizeof(GLfloat), buffer.buffer); +} + void rgDraw(render_group* rg, glm::mat4 model_matrix, glm::mat4 view_matrix, glm::mat4 projection_matrix, diff --git a/src/render_group.h b/src/render_group.h index 7cb08d1..d04a368 100644 --- a/src/render_group.h +++ b/src/render_group.h @@ -84,6 +84,8 @@ void rgInitGLFloatBuffer(gl_buffer* buffer, GLenum usage, GLenum target); void rgInitGLIndexBuffer(gl_index_buffer* index_buffer, GLenum usage, GLenum target); +void rgUpdateGLBuffer(gl_buffer& buffer); + void rgDraw(render_group* rg, glm::mat4 model_matrix, glm::mat4 view_matrix, glm::mat4 projection_matrix, rg_point_light* lights, uint num_lights,