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_vec4(const char *name, glm::vec4 vector);
void set_mat3(const char *name, glm::mat3 matrix); void set_mat3(const char *name, glm::mat3 matrix);
void set_mat4(const char *name, glm::mat4 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; GLuint program;
private: private:
void link_program(GLuint vert, GLuint frag); void link_program(GLuint vert, GLuint frag);
@ -370,16 +371,11 @@ int main() {
glBindBufferBase(GL_UNIFORM_BUFFER, ubo_binding_point, ubo); glBindBufferBase(GL_UNIFORM_BUFFER, ubo_binding_point, ubo);
// Set the shaders binding points // Set the shaders binding points
GLuint main_shader_common_block_index = glGetUniformBlockIndex(main_shader.program, "Common"); main_shader.set_uniform_block_binding_point("Common", ubo_binding_point);
GLuint light_shader_common_block_index = glGetUniformBlockIndex(light_shader.program, "Common"); light_shader.set_uniform_block_binding_point("Common", ubo_binding_point);
GLuint skybox_shader_common_block_index = glGetUniformBlockIndex(skybox_shader.program, "Common"); skybox_shader.set_uniform_block_binding_point("Common", ubo_binding_point);
GLuint reflective_shader_common_block_index = glGetUniformBlockIndex(reflective_shader.program, "Common"); reflective_shader.set_uniform_block_binding_point("Common", ubo_binding_point);
GLuint refractive_shader_common_block_index = glGetUniformBlockIndex(refractive_shader.program, "Common"); refractive_shader.set_uniform_block_binding_point("Common", ubo_binding_point);
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);
// Add projection matrix to uniform buffer // Add projection matrix to uniform buffer
glBufferSubData(GL_UNIFORM_BUFFER, 0, sizeof(glm::mat4), glm::value_ptr(projection)); 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)); 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) { void Shader::link_program(GLuint vert, GLuint frag) {
program = glCreateProgram(); program = glCreateProgram();
glAttachShader(program, vert); glAttachShader(program, vert);