From 6d1c43c6b726d9a834fedc2d187e5345dab9a3fc Mon Sep 17 00:00:00 2001 From: Moritz Ruge Date: Thu, 6 Aug 2026 17:51:31 +0200 Subject: triangles exercise 3 - 2 shader --- main.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/main.c b/main.c index c4ef368..c88c88a 100644 --- a/main.c +++ b/main.c @@ -18,8 +18,8 @@ int main(void) { unsigned int VBO[2], VAO[2], EBO; // fragment shader unsigned int vertex_shader; - unsigned int fragment_shader; - unsigned int shader_program; + unsigned int fragment_shader, fragment_shader2; + unsigned int shader_program, shader_program_2; char info_Log[512]; // vertex shader source @@ -39,6 +39,13 @@ int main(void) { "void main() {\n" "FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);\n" "}\n\0"; + const char* fragment_shader_source_2 = + "#version 460 core\n" + "out vec4 FragColor;\n" + "\n" + "void main() {\n" + "FragColor = vec4(1.0f, 1.0f, 0.0f, 1.0f);\n" + "}\n\0"; // Triangle shenanigans and now two of them! // ----------------------------------------- @@ -112,11 +119,15 @@ int main(void) { // fragment_shader fragment_shader = glCreateShader(GL_FRAGMENT_SHADER); + fragment_shader2 = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource(fragment_shader, 1, &fragment_shader_source, NULL); + glShaderSource(fragment_shader2, 1, &fragment_shader_source_2, NULL); glCompileShader(fragment_shader); + glCompileShader(fragment_shader2); // check for compilation error glGetShaderiv(fragment_shader, GL_COMPILE_STATUS, &shader_success); + glGetShaderiv(fragment_shader2, GL_COMPILE_STATUS, &shader_success); if (!shader_success) { glGetShaderInfoLog(fragment_shader, 512, NULL, info_Log); printf("ERROR SHADER FRAGMENT COMPILATION FAILED: %s\n", info_Log); @@ -125,11 +136,16 @@ int main(void) { // create shader program // --------------------- shader_program = glCreateProgram(); + shader_program_2 = glCreateProgram(); // attach to shader program id glAttachShader(shader_program, vertex_shader); glAttachShader(shader_program, fragment_shader); glLinkProgram(shader_program); + glAttachShader(shader_program_2, vertex_shader); + glAttachShader(shader_program_2, fragment_shader2); + glLinkProgram(shader_program_2); + // check for linking erros glGetProgramiv(shader_program, GL_LINK_STATUS, &shader_success); if (!shader_success) { @@ -140,6 +156,7 @@ int main(void) { // delete now unneeded shaders glDeleteShader(vertex_shader); glDeleteShader(fragment_shader); + glDeleteShader(fragment_shader2); // set up vertex data (and buffers) and configure vertex attributes // ---------------------------------------------------------------- @@ -201,6 +218,7 @@ int main(void) { glBindVertexArray(VAO[0]); glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); glDrawArrays(GL_TRIANGLES, 4, 6); + glUseProgram(shader_program_2); glBindVertexArray(VAO[1]); glDrawArrays(GL_TRIANGLES, 0, 3); @@ -215,6 +233,7 @@ int main(void) { glDeleteBuffers(2, VBO); glDeleteBuffers(1, &EBO); glDeleteProgram(shader_program); + glDeleteProgram(shader_program_2); // Terminate program // ----------------- -- cgit v1.2.3