Browse Source

add interface to update simple_mesh

render_group_fix
cinnaboot 5 years ago
parent
commit
d121c2472d
  1. 2
      include/entity.h
  2. 2
      include/render_object.h
  3. 6
      src/entity.cpp
  4. 22
      src/render_object.cpp

2
include/entity.h

@ -28,6 +28,8 @@ bool entInitModel(entity& e, const char* model_path);
bool entInitMesh(entity& e, simple_mesh* mesh, GLenum draw_mode);
void entUpdateSimpleMesh(entity& e, simple_mesh* mesh, GLenum draw_mode);
void entFree(entity& e);
void entSetWorldPosition(entity& e, glm::vec3 v);

2
include/render_object.h

@ -28,3 +28,5 @@ roDraw(render_objects* r_ojbs,
shader_wrapper sw,
light_group* lights);
void
roUpdateSimpleMesh(render_objects* r_objs, simple_mesh* mesh, GLenum draw_mode);

6
src/entity.cpp

@ -45,6 +45,12 @@ entInitMesh(entity& e, simple_mesh* mesh, GLenum draw_mode)
return true;
}
void
entUpdateSimpleMesh(entity& e, simple_mesh* mesh, GLenum draw_mode)
{
roUpdateSimpleMesh(e.render_objs, mesh, draw_mode);
}
void
entFree(entity& e)
{

22
src/render_object.cpp

@ -145,6 +145,28 @@ roDraw(render_objects* r_objs,
drawDefault(r_objs, world_transform, cam, sw, lights);
}
void
roUpdateSimpleMesh(render_objects* r_objs, simple_mesh* mesh, GLenum draw_mode)
{
assert(r_objs != nullptr && r_objs->objects != nullptr);
assert(mesh != nullptr && mesh->vertices != nullptr);
simple_render_object* sro = (simple_render_object*) r_objs->objects;
assert(sro->vertex_count == mesh->num_vertices);
sro->draw_mode = draw_mode;
glBindBuffer(GL_ARRAY_BUFFER, sro->vertex_buffer_id);
glBufferSubData(
GL_ARRAY_BUFFER,
0,
sro->vertex_count * sizeof(GLfloat),
mesh->vertices);
glBindBuffer(GL_ARRAY_BUFFER, sro->vertex_color_buffer_id);
glBufferSubData(
GL_ARRAY_BUFFER,
0,
sro->vertex_count * sizeof(GLfloat),
mesh->vert_colors);
}
// internal

Loading…
Cancel
Save