From 682a9b45e695dfc6ea9bd18a349fa88922142ed7 Mon Sep 17 00:00:00 2001 From: Phireh Date: Sun, 29 Jan 2023 18:34:25 +0100 Subject: [PATCH] Use uniforms for color --- main.c | 26 +++++++++++++++++++++----- shaders/fragment.glsl | 5 +++-- shaders/vertex.glsl | 3 +++ 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/main.c b/main.c index 4b57e0d..84675c2 100644 --- a/main.c +++ b/main.c @@ -12,7 +12,6 @@ #define log_err(str, ...) do { fprintf(stderr, "[ERROR] (%s:%d): " str "\n", __FILE__, __LINE__, ##__VA_ARGS__); } while (0) #define log_debug(str, ...) do { fprintf(stderr, "[DEBUG] (%s:%d): " str "\n", __FILE__, __LINE__, ##__VA_ARGS__); } while (0) - char *read_entire_file(char *path) { FILE *f = fopen(path, "rb"); @@ -38,7 +37,13 @@ static void glfw_error_callback(int errcode, const char *description) fprintf(stderr, "[GLFW ERROR][ERRCODE %d] %s\n", errcode, description); } -int main() +void set_uniform(GLuint program_id, const char *name, vec4f value) +{ + GLint location = glGetUniformLocation(program_id, name); + glUniform4f(location, value.x, value.y, value.z, value.w); +} + +int main(void) { GLFWwindow *window; @@ -61,7 +66,7 @@ int main() char * vertexShaderSource = read_entire_file("shaders/vertex.glsl"); char *fragmentShaderSource = read_entire_file("shaders/fragment.glsl"); - + // vertex shader unsigned int vertex_shader = glCreateShader(GL_VERTEX_SHADER); glShaderSource(vertex_shader, 1, &vertexShaderSource, NULL); @@ -106,8 +111,6 @@ int main() background_color.b = 0.3f; background_color.a = 1.0f; - - hexgrid_t grid; grid.rows = 2; grid.columns = 2; @@ -181,6 +184,7 @@ int main() //glBindBuffer(GL_ARRAY_BUFFER, 0); //glBindVertexArray(0); + int64_t framecount = 0; while (!glfwWindowShouldClose(window)) { int width, height; @@ -193,6 +197,15 @@ int main() glUseProgram(shader_program); //glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + // Set uniforms + vec4f hex_color; + hex_color.r = (float)(framecount % 1100)/1100; + hex_color.g = (float)(framecount % 300)/300; + hex_color.b = (float)(framecount % 1700)/1700; + hex_color.a = 1.0f; + + set_uniform(shader_program, "uniform_color", hex_color); + for (size_t i = 0; i < grid.rows * grid.columns; ++i) { glBindVertexArray(grid.hexes[i].vao); @@ -203,5 +216,8 @@ int main() } glfwPollEvents(); glfwSwapBuffers(window); + + ++framecount; } + return 0; } diff --git a/shaders/fragment.glsl b/shaders/fragment.glsl index f755ee7..dd9a827 100644 --- a/shaders/fragment.glsl +++ b/shaders/fragment.glsl @@ -1,6 +1,7 @@ #version 330 core -out vec4 color; +in vec4 vertex_color; +out vec4 final_color; void main() { - color = vec4(1.0f, 0.5f, 0.2f, 1.0f); + final_color = vertex_color; } diff --git a/shaders/vertex.glsl b/shaders/vertex.glsl index 1f21cae..d85e06b 100644 --- a/shaders/vertex.glsl +++ b/shaders/vertex.glsl @@ -1,6 +1,9 @@ #version 330 core layout (location = 0) in vec3 pos; +uniform vec4 uniform_color; +out vec4 vertex_color; void main() { gl_Position = vec4(pos, 1.0f); + vertex_color = uniform_color; }