Browse Source

add updateGLBuffer as generic helper

main
cinnaboot 4 years ago
parent
commit
a44971ae40
  1. 12
      src/main.cpp
  2. 7
      src/shader.cpp
  3. 2
      src/shader.h

12
src/main.cpp

@ -28,10 +28,7 @@ loadLights(RenderState* rs)
GLBuffer* lights_ubo = getUBOByName(rs->gl_ctx, "lights"); GLBuffer* lights_ubo = getUBOByName(rs->gl_ctx, "lights");
assert(lights_ubo != nullptr); assert(lights_ubo != nullptr);
updateGLBuffer(lights_ubo, lb->buffer);
// FIXME: we need an interface function to update lights
glBindBuffer(lights_ubo->target, lights_ubo->id);
glBufferSubData(lights_ubo->target, 0, lb->buf_size, lb->buffer);
// NOTE: add a debug mesh to view the point light source // NOTE: add a debug mesh to view the point light source
RenderGroup* debug_group = getFreeRenderGroup(rs); RenderGroup* debug_group = getFreeRenderGroup(rs);
@ -117,7 +114,7 @@ loadScene(RenderState* rs)
rs->xforms->view_xform = glm::lookAt(cam_pos, look_pos, up); rs->xforms->view_xform = glm::lookAt(cam_pos, look_pos, up);
GLBuffer* xforms_ubo = getUBOByName(rs->gl_ctx, "matrices"); GLBuffer* xforms_ubo = getUBOByName(rs->gl_ctx, "matrices");
assert(xforms_ubo); assert(xforms_ubo);
updateCameraTransforms(rs->xforms, xforms_ubo); updateGLBuffer(xforms_ubo, rs->xforms);
return loadLights(rs); return loadLights(rs);
} }
@ -160,8 +157,7 @@ render_cb_pre(RenderState* rs)
// FIXME: we need an interface function to update lights // FIXME: we need an interface function to update lights
GLBuffer* lights_ubo = getUBOByName(rs->gl_ctx, "lights"); GLBuffer* lights_ubo = getUBOByName(rs->gl_ctx, "lights");
assert(lights_ubo); assert(lights_ubo);
glBindBuffer(lights_ubo->target, lights_ubo->id); updateGLBuffer(lights_ubo, lb->buffer);
glBufferSubData(lights_ubo->target, 0, lb->buf_size, lb->buffer);
// NOTE: orbit camera // NOTE: orbit camera
static glm::vec4 cam_pos; static glm::vec4 cam_pos;
@ -187,7 +183,7 @@ render_cb_pre(RenderState* rs)
assert(xform_ubo != nullptr); assert(xform_ubo != nullptr);
} }
updateCameraTransforms(rs->xforms, xform_ubo); updateGLBuffer(xform_ubo, rs->xforms);
// NOTE: rotate cubes // NOTE: rotate cubes
RenderGroup* rg2 = getRenderGroupByName(rs, "textured_cubes"); RenderGroup* rg2 = getRenderGroupByName(rs, "textured_cubes");

7
src/shader.cpp

@ -223,10 +223,11 @@ getGLTexture(GLContext* gl_ctx, Texture* diffuse_img)
} }
void void
updateCameraTransforms(Transforms* xforms, GLBuffer* xform_ubo) updateGLBuffer(GLBuffer* gl_buf, void* data)
{ {
glBindBuffer(xform_ubo->target, xform_ubo->id); assert(gl_buf && data);
glBufferSubData(xform_ubo->target, 0, sizeof(*xforms), xforms); glBindBuffer(gl_buf->target, gl_buf->id);
glBufferSubData(gl_buf->target, 0, gl_buf->data_size, data);
} }
void void

2
src/shader.h

@ -183,7 +183,7 @@ GLBuffer* getUBOByName(GLContext* gl_ctx, const char* name);
GLTexture* getGLTexture(GLContext* gl_ctx, Texture* diffuse_img); GLTexture* getGLTexture(GLContext* gl_ctx, Texture* diffuse_img);
void updateCameraTransforms(Transforms* xforms, GLBuffer* xform_ubo); void updateGLBuffer(GLBuffer* gl_buf, void* data);
void renderVAO(GLMesh* glmesh, void renderVAO(GLMesh* glmesh,
glm::mat4* node_xform, glm::mat4* node_xform,

Loading…
Cancel
Save