diff --git a/src/main.cc b/src/main.cc index 01c888c..fc5131f 100644 --- a/src/main.cc +++ b/src/main.cc @@ -68,6 +68,7 @@ class Shader { void set_vec4(const char *name, glm::vec4 vector); void set_mat3(const char *name, glm::mat3 matrix); void set_mat4(const char *name, glm::mat4 matrix); + void set_uniform_block_binding_point(const char *block_name, GLuint binding_point); GLuint program; private: void link_program(GLuint vert, GLuint frag); @@ -370,16 +371,11 @@ int main() { glBindBufferBase(GL_UNIFORM_BUFFER, ubo_binding_point, ubo); // Set the shaders binding points - GLuint main_shader_common_block_index = glGetUniformBlockIndex(main_shader.program, "Common"); - GLuint light_shader_common_block_index = glGetUniformBlockIndex(light_shader.program, "Common"); - GLuint skybox_shader_common_block_index = glGetUniformBlockIndex(skybox_shader.program, "Common"); - GLuint reflective_shader_common_block_index = glGetUniformBlockIndex(reflective_shader.program, "Common"); - GLuint refractive_shader_common_block_index = glGetUniformBlockIndex(refractive_shader.program, "Common"); - glUniformBlockBinding(main_shader.program, main_shader_common_block_index, ubo_binding_point); - glUniformBlockBinding(light_shader.program, light_shader_common_block_index, ubo_binding_point); - glUniformBlockBinding(skybox_shader.program, skybox_shader_common_block_index, ubo_binding_point); - glUniformBlockBinding(reflective_shader.program, reflective_shader_common_block_index, ubo_binding_point); - glUniformBlockBinding(refractive_shader.program, refractive_shader_common_block_index, ubo_binding_point); + main_shader.set_uniform_block_binding_point("Common", ubo_binding_point); + light_shader.set_uniform_block_binding_point("Common", ubo_binding_point); + skybox_shader.set_uniform_block_binding_point("Common", ubo_binding_point); + reflective_shader.set_uniform_block_binding_point("Common", ubo_binding_point); + refractive_shader.set_uniform_block_binding_point("Common", ubo_binding_point); // Add projection matrix to uniform buffer glBufferSubData(GL_UNIFORM_BUFFER, 0, sizeof(glm::mat4), glm::value_ptr(projection)); @@ -603,6 +599,11 @@ void Shader::set_mat4(const char *name, glm::mat4 matrix) { glUniformMatrix4fv(glGetUniformLocation(program, name), 1, GL_FALSE, glm::value_ptr(matrix)); } +void Shader::set_uniform_block_binding_point(const char *block_name, GLuint binding_point) { + GLuint block_index = glGetUniformBlockIndex(program, block_name); + glUniformBlockBinding(program, block_index, binding_point); +} + void Shader::link_program(GLuint vert, GLuint frag) { program = glCreateProgram(); glAttachShader(program, vert);