diff options
Diffstat (limited to 'shader.c')
| -rw-r--r-- | shader.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/shader.c b/shader.c new file mode 100644 index 0000000..8cc3926 --- /dev/null +++ b/shader.c @@ -0,0 +1,44 @@ +#include "shader.h" + +#include <stdio.h> + +GLuint createShader(const char *vertexCode, const char *fragmentCode) { + GLuint vertex, fragment; + int success; + char infoLog[512]; + + vertex = glCreateShader(GL_VERTEX_SHADER); + glShaderSource(vertex, 1, &vertexCode, NULL); + glCompileShader(vertex); + + glGetShaderiv(vertex, GL_COMPILE_STATUS, &success); + if (!success) { + glGetShaderInfoLog(vertex, 512, NULL, infoLog); + printf("ERROR: Failed to compile vertex shader: %s\n", infoLog); + } + + fragment = glCreateShader(GL_FRAGMENT_SHADER); + glShaderSource(fragment, 1, &fragmentCode, NULL); + glCompileShader(fragment); + + glGetShaderiv(fragment, GL_COMPILE_STATUS, &success); + if (!success) { + glGetShaderInfoLog(fragment, 512, NULL, infoLog); + printf("ERROR: Failed to compile fragment shader: %s\n", infoLog); + } + + GLuint ShaderProgram = glCreateProgram(); + glAttachShader(ShaderProgram, vertex); + glAttachShader(ShaderProgram, fragment); + glLinkProgram(ShaderProgram); + + glGetProgramiv(ShaderProgram, GL_LINK_STATUS, &success); + if (!success) { + printf("Failed to link shaders\n"); + } + + glDeleteShader(vertex); + glDeleteShader(fragment); + + return ShaderProgram; +} |
