.static_src =
"out vec4 FragColor;\n"
"uniform sampler2D uTexMain;\n"
+"uniform sampler2D uTexMotion;\n"
+"uniform float uBlurStrength;\n"
"\n"
"in vec2 aUv;\n"
"\n"
"\n"
"void main()\n"
"{\n"
-" vec2 voffset = rand_hash22( aUv );\n"
+" vec2 vcenter = (aUv-vec2(0.5))*vec2(2.0);\n"
+" vec2 vrand = rand_hash22( aUv ) * 2.0 - vec2(1.0);\n"
+" vec2 vrand1 = rand_hash22( vrand ) * 2.0 - vec2(1.0);\n"
" \n"
-" float bamt = abs(aUv.x-0.5)*2.0;\n"
-" bamt = pow(bamt,4.0)*0.05;\n"
+" vec2 vdir = texture( uTexMotion, aUv ).xy * uBlurStrength;\n"
"\n"
-" FragColor = texture( uTexMain, aUv + voffset*bamt );\n"
+" vec4 vcolour0 = texture( uTexMain, aUv + vdir*vrand.x );\n"
+" vec4 vcolour1 = texture( uTexMain, aUv + vdir*vrand.y );\n"
+" vec4 vcolour2 = texture( uTexMain, aUv + vdir*vrand1.x );\n"
+" vec4 vcolour3 = texture( uTexMain, aUv + vdir*vrand1.y );\n"
+"\n"
+" FragColor = ( vcolour0 + vcolour1 + vcolour2 + vcolour3 ) * 0.25;\n"
"}\n"
""},
};
static GLuint _uniform_blitblur_uTexMain;
+static GLuint _uniform_blitblur_uTexMotion;
+static GLuint _uniform_blitblur_uBlurStrength;
static void shader_blitblur_uTexMain(int i){
glUniform1i(_uniform_blitblur_uTexMain,i);
}
+static void shader_blitblur_uTexMotion(int i){
+ glUniform1i(_uniform_blitblur_uTexMotion,i);
+}
+static void shader_blitblur_uBlurStrength(float f){
+ glUniform1f(_uniform_blitblur_uBlurStrength,f);
+}
static void shader_blitblur_register(void){
vg_shader_register( &_shader_blitblur );
}
static void shader_blitblur_use(void){ glUseProgram(_shader_blitblur.id); }
static void shader_blitblur_link(void){
_uniform_blitblur_uTexMain = glGetUniformLocation( _shader_blitblur.id, "uTexMain" );
+ _uniform_blitblur_uTexMotion = glGetUniformLocation( _shader_blitblur.id, "uTexMotion" );
+ _uniform_blitblur_uBlurStrength = glGetUniformLocation( _shader_blitblur.id, "uBlurStrength" );
}
#endif /* SHADER_blitblur_H */