summaryrefslogtreecommitdiff
path: root/shader.c
blob: cc01ad691fa8e365d60fec643321a54892437578 (plain)
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;
}