1 #ifndef SHADER_blitblur_H
2 #define SHADER_blitblur_H
3 static void shader_blitblur_link(void);
4 static void shader_blitblur_register(void);
5 static struct vg_shader _shader_blitblur
= {
7 .link
= shader_blitblur_link
,
11 "layout (location=0) in vec2 a_co;\n"
16 " gl_Position = vec4(a_co*2.0-1.0,0.0,1.0);\n"
23 "out vec4 FragColor;\n"
24 "uniform sampler2D uTexMain;\n"
25 "uniform sampler2D uTexMotion;\n"
26 "uniform float uBlurStrength;\n"
30 "vec2 rand_hash22( vec2 p )\n"
32 " vec3 p3 = fract(vec3(p.xyx) * 213.8976123);\n"
33 " p3 += dot(p3, p3.yzx+19.19);\n"
34 " return fract(vec2((p3.x + p3.y)*p3.z, (p3.x+p3.z)*p3.y));\n"
39 " vec2 vcenter = (aUv-vec2(0.5))*vec2(2.0);\n"
40 " vec2 vrand = rand_hash22( aUv ) * 2.0 - vec2(1.0);\n"
41 " vec2 vrand1 = rand_hash22( vrand ) * 2.0 - vec2(1.0);\n"
43 " vec2 vdir = texture( uTexMotion, aUv ).xy * uBlurStrength;\n"
45 " vec4 vcolour0 = texture( uTexMain, aUv + vdir*vrand.x );\n"
46 " vec4 vcolour1 = texture( uTexMain, aUv + vdir*vrand.y );\n"
47 " vec4 vcolour2 = texture( uTexMain, aUv + vdir*vrand1.x );\n"
48 " vec4 vcolour3 = texture( uTexMain, aUv + vdir*vrand1.y );\n"
50 " FragColor = ( vcolour0 + vcolour1 + vcolour2 + vcolour3 ) * 0.25;\n"
55 static GLuint _uniform_blitblur_uTexMain
;
56 static GLuint _uniform_blitblur_uTexMotion
;
57 static GLuint _uniform_blitblur_uBlurStrength
;
58 static void shader_blitblur_uTexMain(int i
){
59 glUniform1i(_uniform_blitblur_uTexMain
,i
);
61 static void shader_blitblur_uTexMotion(int i
){
62 glUniform1i(_uniform_blitblur_uTexMotion
,i
);
64 static void shader_blitblur_uBlurStrength(float f
){
65 glUniform1f(_uniform_blitblur_uBlurStrength
,f
);
67 static void shader_blitblur_register(void){
68 vg_shader_register( &_shader_blitblur
);
70 static void shader_blitblur_use(void){ glUseProgram(_shader_blitblur
.id
); }
71 static void shader_blitblur_link(void){
72 _uniform_blitblur_uTexMain
= glGetUniformLocation( _shader_blitblur
.id
, "uTexMain" );
73 _uniform_blitblur_uTexMotion
= glGetUniformLocation( _shader_blitblur
.id
, "uTexMotion" );
74 _uniform_blitblur_uBlurStrength
= glGetUniformLocation( _shader_blitblur
.id
, "uBlurStrength" );
76 #endif /* SHADER_blitblur_H */