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
= {
7 .link
= shader_post_comp_link
,
10 .orig_file
= "shaders/post_comp.vs.glsl",
12 "layout (location=0) in vec2 a_co;\n"
13 "out vec2 aTexCoords;\n"
16 " gl_Position = vec4( a_co * 2.0 - 1.0, 0.0, 1.0 );\n"
17 " aTexCoords = a_co;\n"
22 .orig_file
= "shaders/post_comp.fs.glsl",
24 "uniform sampler2D uTexMain;\n"
25 "uniform sampler2D uTexBloom;\n"
26 "uniform vec2 uComp; /* x: bloom, y: vignette */\n"
27 "out vec4 FragColor;\n"
29 "in vec2 aTexCoords;\n"
32 " vec4 texture_sample = texture( uTexMain, aTexCoords );\n"
33 " vec4 bloom_sample = texture( uTexBloom, aTexCoords );\n"
35 " vec2 vigCoord = aTexCoords - 0.5;\n"
36 " float vig = pow(1.0 - dot( vigCoord, vigCoord ), 2.0);\n"
38 " FragColor = (texture_sample + bloom_sample*0.3*uComp.x)\n"
39 " * max(uComp.y, vig);\n"
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
);
50 static void shader_post_comp_uTexBloom(int i
){
51 glUniform1i(_uniform_post_comp_uTexBloom
,i
);
53 static void shader_post_comp_uComp(v2f
const v
){
54 glUniform2fv(_uniform_post_comp_uComp
,1,v
);
56 static void shader_post_comp_register(void){
57 vg_shader_register( &_shader_post_comp
);
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" );
65 #endif /* SHADER_post_comp_H */