Browse Source

add rgUpdateGLBuffer as interface to glBufferSubData

master
cinnaboot 8 years ago
parent
commit
c749e75001
  1. 3
      TODO.md
  2. 39
      src/hexgrid.cpp
  3. 7
      src/render_group.cpp
  4. 2
      src/render_group.h

3
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

39
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*

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

2
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,

Loading…
Cancel
Save