+#ifndef SHADER_blitblur_H
+#define SHADER_blitblur_H
+static void shader_blitblur_link(void);
+static void shader_blitblur_register(void);
+static struct vg_shader _shader_blitblur = {
+ .name = "blitblur",
+ .link = shader_blitblur_link,
+ .vs =
+{
+.static_src =
+"layout (location=0) in vec2 a_co;\n"
+"out vec2 aUv;\n"
+"\n"
+"void main()\n"
+"{\n"
+" gl_Position = vec4(a_co*2.0-1.0,0.0,1.0);\n"
+" aUv = a_co;\n"
+"}\n"
+""},
+ .fs =
+{
+.static_src =
+"out vec4 FragColor;\n"
+"uniform sampler2D uTexMain;\n"
+"\n"
+"in vec2 aUv;\n"
+"\n"
+"vec2 rand_hash22( vec2 p )\n"
+"{\n"
+" vec3 p3 = fract(vec3(p.xyx) * 213.8976123);\n"
+" p3 += dot(p3, p3.yzx+19.19);\n"
+" return fract(vec2((p3.x + p3.y)*p3.z, (p3.x+p3.z)*p3.y));\n"
+"}\n"
+"\n"
+"void main()\n"
+"{\n"
+" vec2 voffset = rand_hash22( aUv );\n"
+" \n"
+" float bamt = abs(aUv.x-0.5)*2.0;\n"
+" bamt = pow(bamt,4.0)*0.05;\n"
+"\n"
+" FragColor = texture( uTexMain, aUv + voffset*bamt );\n"
+"}\n"
+""},
+};
+
+static GLuint _uniform_blitblur_uTexMain;
+static void shader_blitblur_uTexMain(int i){
+ glUniform1i(_uniform_blitblur_uTexMain,i);
+}
+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" );
+}
+#endif /* SHADER_blitblur_H */