summaryrefslogtreecommitdiff
path: root/src/shader.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/shader.c')
-rw-r--r--src/shader.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/shader.c b/src/shader.c
new file mode 100644
index 0000000..022879e
--- /dev/null
+++ b/src/shader.c
@@ -0,0 +1,39 @@
+#include "shader.h"
+#include "includes.h"
+
+unsigned int loadShader(const char* filename, unsigned int shadertype)
+{
+ void* shader_source = SDL_LoadFile(filename, NULL);
+ unsigned int shader = glCreateShader(shadertype);
+ glShaderSource(shader, 1, (const char**)&shader_source, NULL);
+ glCompileShader(shader);
+ SDL_free(shader_source);
+
+ int success;
+
+ glGetShaderiv(shader, GL_COMPILE_STATUS, &success);
+ if (!success) {
+ printf("Couldn't compile shader\n");
+ return 0;
+ }
+
+ return shader;
+}
+
+unsigned int shaderProgram(unsigned int vertex_shader, unsigned int fragment_shader)
+{
+ unsigned int shader_program;
+ shader_program = glCreateProgram();
+ glAttachShader(shader_program, vertex_shader);
+ glAttachShader(shader_program, fragment_shader);
+ glLinkProgram(shader_program);
+
+ int success;
+ glGetProgramiv(shader_program, GL_LINK_STATUS, &success);
+ if (!success) {
+ printf("Couldn't link shader program\n");
+ return 0;
+ }
+
+ return shader_program;
+}