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) {
|
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);
|
||||||
|
|
25
src/shader.c
25
src/shader.c
|
@ -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;
|
||||||
|
}
|
||||||
|
|
|
@ -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
|
Loading…
Reference in New Issue