add helper function for building programs

This commit is contained in:
Luca Conte 2025-04-22 19:54:52 +02:00
parent 76d8f1d58f
commit f695d0bb39
3 changed files with 27 additions and 23 deletions

View File

@ -89,28 +89,8 @@ void recalculateProjectionMatrix() {
void init(void) { void init(void) {
INFO("Compiling Shaders..."); INFO("Building Programs...");
ProgramLinkResult linkResult = buildShaderProgram("src/shaders/vertex.glsl", "src/shaders/fragment.glsl");
// 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);
if (!linkResult.success) { if (!linkResult.success) {
FATAL("Failed to link Program"); FATAL("Failed to link Program");
exit(1); exit(1);

View File

@ -116,4 +116,27 @@ ProgramLinkResult linkShaderProgram(GLuint vertexShader, GLuint fragmentShader)
result.success = true; result.success = true;
return result; return result;
} }
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;
}

View File

@ -17,5 +17,6 @@ typedef struct {
extern const char* readFileToMemory(const char* filepath); extern const char* readFileToMemory(const char* filepath);
extern ShaderCompileResult readAndCompileShaderFromFile(const char* filepath, GLenum shaderType); extern ShaderCompileResult readAndCompileShaderFromFile(const char* filepath, GLenum shaderType);
extern ProgramLinkResult linkShaderProgram(GLuint vertexShader, GLuint fragmentShader); extern ProgramLinkResult linkShaderProgram(GLuint vertexShader, GLuint fragmentShader);
extern ProgramLinkResult buildShaderProgram(const char* vertexShaderPath, const char* fragmentShaderPath);
#endif // SHADER_H #endif // SHADER_H