first sorta working port
[fishladder.git] / shaders / post_comp.h
1 #ifndef SHADER_post_comp_H
2 #define SHADER_post_comp_H
3 static void shader_post_comp_link(void);
4 static void shader_post_comp_register(void);
5 static struct vg_shader _shader_post_comp = {
6 .name = "post_comp",
7 .link = shader_post_comp_link,
8 .vs =
9 {
10 .orig_file = "shaders/post_comp.vs.glsl",
11 .static_src =
12 "layout (location=0) in vec2 a_co;\n"
13 "out vec2 aTexCoords;\n"
14 "\n"
15 "void main(){\n"
16 " gl_Position = vec4( a_co * 2.0 - 1.0, 0.0, 1.0 );\n"
17 " aTexCoords = a_co;\n"
18 "}\n"
19 ""},
20 .fs =
21 {
22 .orig_file = "shaders/post_comp.fs.glsl",
23 .static_src =
24 "uniform sampler2D uTexMain;\n"
25 "uniform sampler2D uTexBloom;\n"
26 "uniform vec2 uComp; /* x: bloom, y: vignette */\n"
27 "out vec4 FragColor;\n"
28 "\n"
29 "in vec2 aTexCoords;\n"
30 "\n"
31 "void main(){\n"
32 " vec4 texture_sample = texture( uTexMain, aTexCoords );\n"
33 " vec4 bloom_sample = texture( uTexBloom, aTexCoords );\n"
34 " \n"
35 " vec2 vigCoord = aTexCoords - 0.5;\n"
36 " float vig = pow(1.0 - dot( vigCoord, vigCoord ), 2.0);\n"
37 " \n"
38 " FragColor = (texture_sample + bloom_sample*0.3*uComp.x)\n"
39 " * max(uComp.y, vig);\n"
40 "}\n"
41 ""},
42 };
43
44 static GLuint _uniform_post_comp_uTexMain;
45 static GLuint _uniform_post_comp_uTexBloom;
46 static GLuint _uniform_post_comp_uComp;
47 static void shader_post_comp_uTexMain(int i){
48 glUniform1i(_uniform_post_comp_uTexMain,i);
49 }
50 static void shader_post_comp_uTexBloom(int i){
51 glUniform1i(_uniform_post_comp_uTexBloom,i);
52 }
53 static void shader_post_comp_uComp(v2f const v){
54 glUniform2fv(_uniform_post_comp_uComp,1,v);
55 }
56 static void shader_post_comp_register(void){
57 vg_shader_register( &_shader_post_comp );
58 }
59 static void shader_post_comp_use(void){ glUseProgram(_shader_post_comp.id); }
60 static void shader_post_comp_link(void){
61 _uniform_post_comp_uTexMain = glGetUniformLocation( _shader_post_comp.id, "uTexMain" );
62 _uniform_post_comp_uTexBloom = glGetUniformLocation( _shader_post_comp.id, "uTexBloom" );
63 _uniform_post_comp_uComp = glGetUniformLocation( _shader_post_comp.id, "uComp" );
64 }
65 #endif /* SHADER_post_comp_H */