From a44971ae403bfc38cae6bfef9afebc864c80f243 Mon Sep 17 00:00:00 2001 From: cinnaboot Date: Mon, 7 Feb 2022 11:19:16 -0500 Subject: [PATCH] add updateGLBuffer as generic helper --- src/main.cpp | 12 ++++-------- src/shader.cpp | 7 ++++--- src/shader.h | 2 +- 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 488ec86..2c42b72 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -28,10 +28,7 @@ loadLights(RenderState* rs) GLBuffer* lights_ubo = getUBOByName(rs->gl_ctx, "lights"); assert(lights_ubo != nullptr); - - // 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); + updateGLBuffer(lights_ubo, lb->buffer); // NOTE: add a debug mesh to view the point light source RenderGroup* debug_group = getFreeRenderGroup(rs); @@ -117,7 +114,7 @@ loadScene(RenderState* rs) rs->xforms->view_xform = glm::lookAt(cam_pos, look_pos, up); GLBuffer* xforms_ubo = getUBOByName(rs->gl_ctx, "matrices"); assert(xforms_ubo); - updateCameraTransforms(rs->xforms, xforms_ubo); + updateGLBuffer(xforms_ubo, rs->xforms); return loadLights(rs); } @@ -160,8 +157,7 @@ render_cb_pre(RenderState* rs) // FIXME: we need an interface function to update lights GLBuffer* lights_ubo = getUBOByName(rs->gl_ctx, "lights"); assert(lights_ubo); - glBindBuffer(lights_ubo->target, lights_ubo->id); - glBufferSubData(lights_ubo->target, 0, lb->buf_size, lb->buffer); + updateGLBuffer(lights_ubo, lb->buffer); // NOTE: orbit camera static glm::vec4 cam_pos; @@ -187,7 +183,7 @@ render_cb_pre(RenderState* rs) assert(xform_ubo != nullptr); } - updateCameraTransforms(rs->xforms, xform_ubo); + updateGLBuffer(xform_ubo, rs->xforms); // NOTE: rotate cubes RenderGroup* rg2 = getRenderGroupByName(rs, "textured_cubes"); diff --git a/src/shader.cpp b/src/shader.cpp index 6260369..c427da6 100644 --- a/src/shader.cpp +++ b/src/shader.cpp @@ -223,10 +223,11 @@ getGLTexture(GLContext* gl_ctx, Texture* diffuse_img) } void -updateCameraTransforms(Transforms* xforms, GLBuffer* xform_ubo) +updateGLBuffer(GLBuffer* gl_buf, void* data) { - glBindBuffer(xform_ubo->target, xform_ubo->id); - glBufferSubData(xform_ubo->target, 0, sizeof(*xforms), xforms); + assert(gl_buf && data); + glBindBuffer(gl_buf->target, gl_buf->id); + glBufferSubData(gl_buf->target, 0, gl_buf->data_size, data); } void diff --git a/src/shader.h b/src/shader.h index 5eaf2ae..7d552e9 100644 --- a/src/shader.h +++ b/src/shader.h @@ -183,7 +183,7 @@ GLBuffer* getUBOByName(GLContext* gl_ctx, const char* name); 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, glm::mat4* node_xform,