From a994bb05a2b6c505ccf1b4a2624d3d1219e78145 Mon Sep 17 00:00:00 2001 From: cinnaboot Date: Sat, 14 Nov 2020 19:16:47 -0500 Subject: [PATCH] move internal functions below interface --- examples/assimp_loading/main.cpp | 1 - src/render_object.cpp | 94 ++++++++++++++++---------------- 2 files changed, 48 insertions(+), 47 deletions(-) diff --git a/examples/assimp_loading/main.cpp b/examples/assimp_loading/main.cpp index b071b43..8a4057a 100644 --- a/examples/assimp_loading/main.cpp +++ b/examples/assimp_loading/main.cpp @@ -40,7 +40,6 @@ doRenderLoop(render_state* rs, frame_callback_fn callback_fn) callback_fn(rs); - // TODO: need to implement new roDraw() and call from renRenderFrame() renRenderFrame(rs); SDL_GL_SwapWindow(rs->handles.window); frameTime = SDL_GetTicks() - frameStart; diff --git a/src/render_object.cpp b/src/render_object.cpp index 89235d3..3bec237 100644 --- a/src/render_object.cpp +++ b/src/render_object.cpp @@ -10,6 +10,11 @@ bool initGLFloatBuffer(glm::vec3* buffer, uint count, GLuint& buffer_id); bool initGLIndexBuffer(uint* buffer, uint num_indices, GLuint& buffer_id); bool initGLTexture(const util_image image, GLuint& tex_id); +inline void +updateMatrices(shader_program& shader, camera& cam, glm::mat4 node_xform); +inline void enableGLFloatBuffer(uint buffer_id, uint location); +inline void +updateLights(shader_program& shader, point_light* lights, uint num_lights); // interface @@ -47,52 +52,6 @@ roFree(render_object& ro) LOG(Debug) << "TODO: release GL buffers from render_object\n"; } -//----------- WIP -------------- - -// TODO: really only need to update the view and projection matrices once per -// frame, maybe add another interface function in render_object to call from -// renRenderFrame -inline void -updateMatrices(shader_program& shader, camera& cam, glm::mat4 node_xform) -{ - glUniformMatrix4fv(shader.model_matrix_id, 1, GL_FALSE, &node_xform[0][0]); - glUniformMatrix4fv(shader.view_matrix_id, 1, GL_FALSE, &cam.view[0][0]); - glUniformMatrix4fv(shader.projection_matrix_id, 1, GL_FALSE, &cam.projection[0][0]); - - glm::mat3 normal_matrix = glm::transpose(glm::inverse(glm::mat3(cam.model))); - glUniformMatrix3fv(shader.normal_matrix_id, 1, GL_FALSE, &normal_matrix[0][0]); -} - -inline void -enableGLFloatBuffer(uint buffer_id, uint location) -{ - glEnableVertexAttribArray(location); - glBindBuffer(GL_ARRAY_BUFFER, buffer_id); - glVertexAttribPointer(location, 3, GL_FLOAT, GL_FALSE, 0, (void*) 0); -} - -#include // TODO: remove this and make something in util.h - -inline void -updateLights(shader_program& shader, point_light* lights, uint num_lights) -{ - // TODO: use Uniform Buffer Objects to update light data - // https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_uniform_buffer_object.txt - // https://www.khronos.org/opengl/wiki/Uniform_Buffer_Objects - - glUniform1ui(shader.num_lights_id, num_lights); - - for (uint i = 0; i < num_lights; i++) { - // TODO: don't do this every frame * every render_group - std::stringstream ss; - ss << "lights[" << i << "].position"; - int light_pos_loc = glGetUniformLocation(shader.program_id, ss.str().c_str()); - glUniform3fv(light_pos_loc, 1, &lights[i].position[0]); - } -} - -//----------- WIP -------------- - void roDraw(render_object& ro, camera& cam, @@ -162,3 +121,46 @@ initGLTexture(const util_image image, GLuint& tex_id) return (glGetError() == GL_NO_ERROR); } + +// TODO: really only need to update the view and projection matrices once per +// frame, maybe add another interface function in render_object to call from +// renRenderFrame +inline void +updateMatrices(shader_program& shader, camera& cam, glm::mat4 node_xform) +{ + glUniformMatrix4fv(shader.model_matrix_id, 1, GL_FALSE, &node_xform[0][0]); + glUniformMatrix4fv(shader.view_matrix_id, 1, GL_FALSE, &cam.view[0][0]); + glUniformMatrix4fv(shader.projection_matrix_id, 1, GL_FALSE, &cam.projection[0][0]); + + glm::mat3 normal_matrix = glm::transpose(glm::inverse(glm::mat3(cam.model))); + glUniformMatrix3fv(shader.normal_matrix_id, 1, GL_FALSE, &normal_matrix[0][0]); +} + +inline void +enableGLFloatBuffer(uint buffer_id, uint location) +{ + glEnableVertexAttribArray(location); + glBindBuffer(GL_ARRAY_BUFFER, buffer_id); + glVertexAttribPointer(location, 3, GL_FLOAT, GL_FALSE, 0, (void*) 0); +} + +#include // TODO: remove this and make something in util.h + +inline void +updateLights(shader_program& shader, point_light* lights, uint num_lights) +{ + // TODO: use Uniform Buffer Objects to update light data + // https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_uniform_buffer_object.txt + // https://www.khronos.org/opengl/wiki/Uniform_Buffer_Objects + + glUniform1ui(shader.num_lights_id, num_lights); + + for (uint i = 0; i < num_lights; i++) { + // TODO: don't do this every frame * every render_group + std::stringstream ss; + ss << "lights[" << i << "].position"; + int light_pos_loc = glGetUniformLocation(shader.program_id, ss.str().c_str()); + glUniform3fv(light_pos_loc, 1, &lights[i].position[0]); + } +} +