diff --git a/include/entity.h b/include/entity.h index ba65c3a..fc16687 100644 --- a/include/entity.h +++ b/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); diff --git a/include/render_object.h b/include/render_object.h index eeae99e..5196e47 100644 --- a/include/render_object.h +++ b/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); diff --git a/src/entity.cpp b/src/entity.cpp index 76226ac..5253599 100644 --- a/src/entity.cpp +++ b/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) { diff --git a/src/render_object.cpp b/src/render_object.cpp index 48a00e1..346c85b 100644 --- a/src/render_object.cpp +++ b/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