Browse Source

add option to specify GL usage in initGLFloatBuffer()

render_group_fix
cinnaboot 5 years ago
parent
commit
ca151b5c77
  1. 22
      src/render_object.cpp

22
src/render_object.cpp

@ -46,7 +46,10 @@ void drawSimple(render_objects* r_objs,
shader_wrapper sw, shader_wrapper sw,
light_group* lights); light_group* lights);
inline void enableGLFloatBuffer(uint buffer_id, uint location); inline void enableGLFloatBuffer(uint buffer_id, uint location);
bool initGLFloatBuffer(glm::vec3* buffer, uint count, GLuint& buffer_id); bool initGLFloatBuffer(glm::vec3* buffer,
uint count,
GLuint& buffer_id,
GLenum usage = GL_STATIC_DRAW);
bool initGLIndexBuffer(uint* buffer, uint num_indices, GLuint& buffer_id); bool initGLIndexBuffer(uint* buffer, uint num_indices, GLuint& buffer_id);
bool initGLTexture(const util_image image, GLuint& tex_id); bool initGLTexture(const util_image image, GLuint& tex_id);
bool loadMeshIntoGL(default_render_object* ro_out, mesh_info* mi_in); bool loadMeshIntoGL(default_render_object* ro_out, mesh_info* mi_in);
@ -93,10 +96,12 @@ roInitSimpleMesh(simple_mesh& mesh_in, GLenum draw_mode)
if (initGLFloatBuffer(mesh_in.vertices, if (initGLFloatBuffer(mesh_in.vertices,
mesh_in.num_vertices, mesh_in.num_vertices,
objects->vertex_buffer_id) && objects->vertex_buffer_id,
GL_DYNAMIC_DRAW) &&
initGLFloatBuffer(mesh_in.vert_colors, initGLFloatBuffer(mesh_in.vert_colors,
mesh_in.num_vertices, mesh_in.num_vertices,
objects->vertex_color_buffer_id)) objects->vertex_color_buffer_id,
GL_DYNAMIC_DRAW))
{ {
objects->model_transform = mesh_in.model_transform; objects->model_transform = mesh_in.model_transform;
objects->vertex_count = mesh_in.num_vertices; objects->vertex_count = mesh_in.num_vertices;
@ -158,13 +163,13 @@ roUpdateSimpleMesh(render_objects* r_objs, simple_mesh* mesh, GLenum draw_mode)
glBufferSubData( glBufferSubData(
GL_ARRAY_BUFFER, GL_ARRAY_BUFFER,
0, 0,
sro->vertex_count * sizeof(GLfloat), 3 * sro->vertex_count * sizeof(GLfloat),
mesh->vertices); mesh->vertices);
glBindBuffer(GL_ARRAY_BUFFER, sro->vertex_color_buffer_id); glBindBuffer(GL_ARRAY_BUFFER, sro->vertex_color_buffer_id);
glBufferSubData( glBufferSubData(
GL_ARRAY_BUFFER, GL_ARRAY_BUFFER,
0, 0,
sro->vertex_count * sizeof(GLfloat), 3 * sro->vertex_count * sizeof(GLfloat),
mesh->vert_colors); mesh->vert_colors);
} }
@ -238,14 +243,17 @@ enableGLFloatBuffer(uint buffer_id, uint location)
} }
bool bool
initGLFloatBuffer(glm::vec3* buffer, uint count, GLuint& buffer_id) initGLFloatBuffer(glm::vec3* buffer,
uint count,
GLuint& buffer_id,
GLenum usage)
{ {
glGenBuffers(1, &buffer_id); glGenBuffers(1, &buffer_id);
glBindBuffer(GL_ARRAY_BUFFER, buffer_id); glBindBuffer(GL_ARRAY_BUFFER, buffer_id);
glBufferData(GL_ARRAY_BUFFER, glBufferData(GL_ARRAY_BUFFER,
count * 3 * sizeof(GLfloat), // NOTE: 3 floats per vertex prop count * 3 * sizeof(GLfloat), // NOTE: 3 floats per vertex prop
buffer, buffer,
GL_STATIC_DRAW); usage);
return (glGetError() == GL_NO_ERROR); return (glGetError() == GL_NO_ERROR);
} }

Loading…
Cancel
Save