1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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;
}
|