add helper function for building programs
This commit is contained in:
parent
76d8f1d58f
commit
f695d0bb39
24
src/main.c
24
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);
|
||||
|
|
23
src/shader.c
23
src/shader.c
|
@ -117,3 +117,26 @@ ProgramLinkResult linkShaderProgram(GLuint vertexShader, GLuint fragmentShader)
|
|||
result.success = true;
|
||||
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;
|
||||
}
|
||||
|
|
|
@ -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
|
Loading…
Reference in New Issue