summaryrefslogtreecommitdiff
path: root/src/shader.c
diff options
context:
space:
mode:
authorAaditya Dhruv <[email protected]>2026-01-25 18:06:13 -0600
committerAaditya Dhruv <[email protected]>2026-01-25 18:06:13 -0600
commit955ffb0d4a0235532fdb9b808745bcf571735122 (patch)
tree7b6dce22f1af65411ba27cfae88a4e4d9927d862 /src/shader.c
parent118980e02e59ff31871df59dce257075394f3533 (diff)
rotating cube
Diffstat (limited to 'src/shader.c')
-rw-r--r--src/shader.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/src/shader.c b/src/shader.c
index c78a7e5..339b76f 100644
--- a/src/shader.c
+++ b/src/shader.c
@@ -1,3 +1,4 @@
+#include "glad/glad.h"
#include "shader.h"
#include <stdio.h>
#include <stdlib.h>
@@ -31,6 +32,12 @@ GLuint compile_shader(GLuint type, const char* code) {
GLuint shader = glCreateShader(type);
glShaderSource(shader, 1, &code, NULL);
glCompileShader(shader);
+ GLint out;
+ glGetShaderiv(shader, GL_COMPILE_STATUS, &out);
+ if (out == GL_FALSE) {
+ fprintf(stderr, "Failed to compile shader: %s", code);
+ exit(1);
+ }
return shader;
}
@@ -52,12 +59,24 @@ GLuint create_shader_program(const char* vs, const char* fs) {
}
-GLuint shader_init() {
+int shader_init(struct shader* shader) {
char* shaders[2] = { "shaders/fragment.glsl", "shaders/vertex.glsl" };
char* fragment_shader = read_shader(shaders[0]);
char* vertex_shader = read_shader(shaders[1]);
GLuint shader_program = create_shader_program(vertex_shader, fragment_shader);
free(vertex_shader);
free(fragment_shader);
- return shader_program;
+ shader->program = shader_program;
+ return 0;
+}
+
+int set_uniform_mat4(char* var, struct shader* shader, mat4 matrix) {
+ GLuint loc = glGetUniformLocation(shader->program, var);
+ if (loc == -1) {
+ fprintf(stderr, "Invalid var %s for get_uniform_mat4: Does not exist\n", var);
+ exit(1);
+ return -1;
+ }
+ glUniformMatrix4fv(loc, 1, GL_FALSE, (void*)matrix);
+ return 0;
}