|
|
|
|
@ -119,8 +119,55 @@ hgAddHex(hexgrid& hg, v3f hex_coords, render_group* rg_filled, render_group* rg_
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool |
|
|
|
|
hgRemoveHex(hexgrid& hg, v3i hex_coords) |
|
|
|
|
hgRemoveHex(hexgrid& hg, v3f hex_coords, render_group* rg_filled, render_group* rg_lines) |
|
|
|
|
{ |
|
|
|
|
hex_info* hxi = hgGetSingleHex(hg, hex_coords.x, hex_coords.y); |
|
|
|
|
if (hxi) { |
|
|
|
|
render_object* ro_f = rg_filled->render_objects[0]; |
|
|
|
|
gl_buffer& vb_f = ro_f->vertex_buffer; |
|
|
|
|
gl_buffer& nb_f = ro_f->normal_buffer; |
|
|
|
|
gl_buffer& ub_f = ro_f->uv_buffer; |
|
|
|
|
render_object* ro_l = rg_lines->render_objects[0]; |
|
|
|
|
gl_buffer& vb_l = ro_l->vertex_buffer; |
|
|
|
|
gl_buffer& nb_l = ro_l->normal_buffer; |
|
|
|
|
gl_buffer& ub_l = ro_l->uv_buffer; |
|
|
|
|
|
|
|
|
|
// NOTE: don't need sanity checks to delete from buffers
|
|
|
|
|
vb_f.count -= IDX_PER_HEX_FILLED; |
|
|
|
|
nb_f.count -= IDX_PER_HEX_FILLED; |
|
|
|
|
ub_f.count -= IDX_PER_HEX_FILLED; |
|
|
|
|
vb_l.count -= IDX_PER_HEX_LINES; |
|
|
|
|
nb_l.count -= IDX_PER_HEX_LINES; |
|
|
|
|
ub_l.count -= IDX_PER_HEX_LINES; |
|
|
|
|
|
|
|
|
|
assert(hg.hex_map.erase(hxi->hex) == 1); |
|
|
|
|
|
|
|
|
|
// NOTE: have to repopulate all the buffers, and re-index
|
|
|
|
|
uint i = 0; |
|
|
|
|
for (auto it : hg.hex_map) { |
|
|
|
|
it.second.hexID = i; |
|
|
|
|
populateFilledHexGLBuffers(hg, it.second, rg_filled); |
|
|
|
|
populateLineGLBuffers(hg, it.second, rg_lines); |
|
|
|
|
i++; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 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); |
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|