From 1f217971fd072b7a5bf7ba6e1841cc369fb9eda5 Mon Sep 17 00:00:00 2001 From: Cat Flynn Date: Sun, 6 Aug 2023 13:08:49 +0200 Subject: [PATCH] feat: unlit shader program --- CMakeLists.txt | 6 ++++-- frag.glsl => frag_lit.glsl | 0 frag_unlit.glsl | 9 +++++++++ src/gfx.cpp | 4 ++-- src/gfx.hpp | 2 +- src/hello.cpp | 18 +++++++++++------- 6 files changed, 27 insertions(+), 12 deletions(-) rename frag.glsl => frag_lit.glsl (100%) create mode 100644 frag_unlit.glsl diff --git a/CMakeLists.txt b/CMakeLists.txt index fb84799..83ac3d5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,8 +52,10 @@ endif() configure_file(${CMAKE_CURRENT_SOURCE_DIR}/vert.glsl ${CMAKE_CURRENT_BINARY_DIR}/vert.glsl COPYONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/frag.glsl - ${CMAKE_CURRENT_BINARY_DIR}/frag.glsl COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/frag_lit.glsl + ${CMAKE_CURRENT_BINARY_DIR}/frag_lit.glsl COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/frag_unlit.glsl + ${CMAKE_CURRENT_BINARY_DIR}/frag_unlit.glsl COPYONLY) # Append Git version to built executable after it has been built find_package(Git) diff --git a/frag.glsl b/frag_lit.glsl similarity index 100% rename from frag.glsl rename to frag_lit.glsl diff --git a/frag_unlit.glsl b/frag_unlit.glsl new file mode 100644 index 0000000..22a3394 --- /dev/null +++ b/frag_unlit.glsl @@ -0,0 +1,9 @@ +#version 330 core + +out vec4 FragColor; + +void main() +{ + vec3 objectColor = vec3(1.0, 1.0, 1.0); + FragColor = vec4(objectColor, 1.0); +} diff --git a/src/gfx.cpp b/src/gfx.cpp index 700db36..b3c1354 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -28,10 +28,10 @@ GLuint compileShader(const std::string& shaderPath, GLenum shaderType) return shader; } -GLuint compileShaderProgram() +GLuint compileShaderProgram(const std::string& fragShaderPath) { GLuint vertShader = compileShader("./vert.glsl", GL_VERTEX_SHADER); - GLuint fragShader = compileShader("./frag.glsl", GL_FRAGMENT_SHADER); + GLuint fragShader = compileShader(fragShaderPath, GL_FRAGMENT_SHADER); GLuint shaderProgram = glCreateProgram(); glAttachShader(shaderProgram, vertShader); diff --git a/src/gfx.hpp b/src/gfx.hpp index 3704574..88340df 100644 --- a/src/gfx.hpp +++ b/src/gfx.hpp @@ -4,5 +4,5 @@ #include "GL/glew.h" -GLuint compileShaderProgram(); +GLuint compileShaderProgram(const std::string& fragShaderPath); GLuint compileShader(const std::string& shaderPath, GLenum shaderType); \ No newline at end of file diff --git a/src/hello.cpp b/src/hello.cpp index 26f75bd..9ea7e48 100644 --- a/src/hello.cpp +++ b/src/hello.cpp @@ -149,7 +149,9 @@ int main() if (initGraphics(&window) != 0) return -1; - GLuint shaderProgram = compileShaderProgram(); + GLuint litProgram = compileShaderProgram("./frag_lit.glsl"); + GLuint unlitProgram = compileShaderProgram("./frag_unlit.glsl"); + Icosphere sphere(0.5, 2); Orbit orbit(30, glm::vec3(.5, .5, 0)); @@ -161,14 +163,16 @@ int main() glClearColor(0.2, 0.3, 0.3, 1.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - // Render everything with the same shaders - glUseProgram(shaderProgram); + float time = glfwGetTime(); - // Update uniforms - updateModelViewProjectionMatrix(shaderProgram, glfwGetTime()); - - // Render objects + // Render lit objects + glUseProgram(litProgram); + updateModelViewProjectionMatrix(litProgram, time); sphere.render(); + + // Render unlit objects + glUseProgram(unlitProgram); + updateModelViewProjectionMatrix(unlitProgram, time); orbit.render(); glfwSwapBuffers(window);