From f695d0bb394363ee6884fff898773ff024c1a6c2 Mon Sep 17 00:00:00 2001 From: Luca Conte Date: Tue, 22 Apr 2025 19:54:52 +0200 Subject: [PATCH] add helper function for building programs --- src/main.c | 24 ++---------------------- src/shader.c | 25 ++++++++++++++++++++++++- src/shader.h | 1 + 3 files changed, 27 insertions(+), 23 deletions(-) diff --git a/src/main.c b/src/main.c index 1648016..d7f8ac4 100644 --- a/src/main.c +++ b/src/main.c @@ -89,28 +89,8 @@ void recalculateProjectionMatrix() { void init(void) { - INFO("Compiling Shaders..."); - - // create and compile vertex shader - INFO("Compiling Vertex Shader..."); - ShaderCompileResult vertexShader = readAndCompileShaderFromFile("src/shaders/vertex.glsl", GL_VERTEX_SHADER); - - if (!vertexShader.success) { - FATAL("Failed to compile Vertex Shader"); - exit(1); - } - - // create and compile fragment shader - INFO("Compiling Fragment Shader..."); - ShaderCompileResult fragmentShader = readAndCompileShaderFromFile("src/shaders/fragment.glsl", GL_FRAGMENT_SHADER); - if (!fragmentShader.success) { - FATAL("Failed to compile Fragment Shader"); - exit(1); - } - - // create and link shader program - INFO("Linking Shader Program..."); - ProgramLinkResult linkResult = linkShaderProgram(vertexShader.shader, fragmentShader.shader); + INFO("Building Programs..."); + ProgramLinkResult linkResult = buildShaderProgram("src/shaders/vertex.glsl", "src/shaders/fragment.glsl"); if (!linkResult.success) { FATAL("Failed to link Program"); exit(1); diff --git a/src/shader.c b/src/shader.c index 2154b99..6ff19ab 100644 --- a/src/shader.c +++ b/src/shader.c @@ -116,4 +116,27 @@ ProgramLinkResult linkShaderProgram(GLuint vertexShader, GLuint fragmentShader) result.success = true; return result; -} \ No newline at end of file +} + +ProgramLinkResult buildShaderProgram(const char* vertexShaderPath, const char* fragmentShaderPath) { + ProgramLinkResult result = { .success = false, .program = 0 }; + + ShaderCompileResult vertexShader = readAndCompileShaderFromFile(vertexShaderPath, GL_VERTEX_SHADER); + if (!vertexShader.success) { + FATAL("Failed to compile vertex shader"); + return result; + } + + ShaderCompileResult fragmentShader = readAndCompileShaderFromFile(fragmentShaderPath, GL_FRAGMENT_SHADER); + if (!fragmentShader.success) { + FATAL("Failed to compile fragment shader"); + return result; + } + + result = linkShaderProgram(vertexShader.shader, fragmentShader.shader); + + glDeleteShader(vertexShader.shader); + glDeleteShader(fragmentShader.shader); + + return result; +} diff --git a/src/shader.h b/src/shader.h index a541b32..a2ac3f3 100644 --- a/src/shader.h +++ b/src/shader.h @@ -17,5 +17,6 @@ typedef struct { extern const char* readFileToMemory(const char* filepath); extern ShaderCompileResult readAndCompileShaderFromFile(const char* filepath, GLenum shaderType); extern ProgramLinkResult linkShaderProgram(GLuint vertexShader, GLuint fragmentShader); +extern ProgramLinkResult buildShaderProgram(const char* vertexShaderPath, const char* fragmentShaderPath); #endif // SHADER_H \ No newline at end of file