Refactor setting shader uniform block binding point to method
This commit is contained in:
parent
e8f4f4ae12
commit
0e43f07d80
21
src/main.cc
21
src/main.cc
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user