summaryrefslogtreecommitdiff
path: root/shader.c
diff options
context:
space:
mode:
authorpryazha <pryadeiniv@mail.ru>2025-10-12 15:25:23 +0500
committerpryazha <pryadeiniv@mail.ru>2025-10-12 15:25:23 +0500
commit818f818f583881156eb279c71b1359bf2c4f3580 (patch)
tree874e8d2fdc5334bc70925aa87923791f7662ddb8 /shader.c
parent3cf987880e384140bf996c37f820ddeea38bc60e (diff)
change identation, maybe will change back, add own gl functions loading, and glx example
Diffstat (limited to 'shader.c')
-rw-r--r--shader.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/shader.c b/shader.c
new file mode 100644
index 0000000..cc01ad6
--- /dev/null
+++ b/shader.c
@@ -0,0 +1,42 @@
+#include "shader.h"
+
+u32
+compile_shader(u32 type, const char *src)
+{
+ if (!src) {
+ info("no source");
+ return 0;
+ }
+ u32 id = gl_create_shader(type);
+ gl_shader_source(id, 1, &src, 0);
+ gl_compile_shader(id);
+ i32 status;
+ gl_get_shader_iv(id, gl_compile_status, &status);
+ if (!status) {
+ char log[512];
+ gl_get_shader_info_log(id, 512, 0, log);
+ die("%s", log);
+ }
+ return id;
+}
+
+u32
+create_shader(const char *vert_src, const char *frag_src)
+{
+ u32 program = gl_create_program();
+ u32 vert = compile_shader(gl_vertex_shader, vert_src);
+ u32 frag = compile_shader(gl_fragment_shader, frag_src);
+ gl_attach_shader(program, vert);
+ gl_attach_shader(program, frag);
+ gl_link_program(program);
+ gl_delete_shader(vert);
+ gl_delete_shader(frag);
+ i32 success;
+ gl_get_program_iv(program, gl_link_status, &success);
+ if (!success) {
+ char log[512];
+ gl_get_program_info_log(program, 512, 0, log);
+ die("%s", log);
+ }
+ return program;
+}