Refactor setting shader uniform block binding point to method

This commit is contained in:
Abdelrahman Said 2024-12-28 22:39:23 +00:00
parent e8f4f4ae12
commit 0e43f07d80

View File

@ -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);