X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=shaders%2Fblitblur.h;h=ac8f3cc20cf3e3bcfd58deca8a63a32de1a58b4c;hb=c52dacb7bc07e300312e45d605d206222dcbb181;hp=ac5f7847d4d2a4157f5a6505065112c15e3483b6;hpb=b888cce683d95cc01d0b4be9bbe92a0dd47452ac;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/shaders/blitblur.h b/shaders/blitblur.h index ac5f784..ac8f3cc 100644 --- a/shaders/blitblur.h +++ b/shaders/blitblur.h @@ -29,28 +29,44 @@ static struct vg_shader _shader_blitblur = { "uniform sampler2D uTexMotion;\n" "uniform float uBlurStrength;\n" "uniform vec2 uOverrideDir;\n" +"uniform float uTime;\n" +"uniform float uGlitchStrength;\n" +"uniform vec2 uClampUv;\n" "\n" "in vec2 aUv;\n" "\n" -"vec2 rand_hash22( vec2 p )\n" -"{\n" +"vec2 rand_hash22( vec2 p ){\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 vcenter = (aUv-vec2(0.5))*vec2(2.0);\n" -" vec2 vrand = rand_hash22( aUv ) * 2.0 - vec2(1.0);\n" +"const int NOISE_LOOP = 3;\n" +"vec3 digital_noise( uvec3 iuv ){\n" +" iuv *=uvec3(8,2524,7552);\n" +" for( int i=0; i 0.0 ){\n" +" // uvec3 p = uvec3( gl_FragCoord.xy, uint(uTime*30.0) );\n" +" // vec2 g = digital_noise(p).xy;\n" +" // vuv = aUv + g.xy*uGlitchStrength - uGlitchStrength*0.5;\n" +" //}\n" +"\n" +" vec2 vrand = rand_hash22( vuv ) * 2.0 - vec2(1.0);\n" " vec2 vrand1 = rand_hash22( vrand ) * 2.0 - vec2(1.0);\n" " \n" -" vec2 vdir = texture( uTexMotion, aUv ).xy * uBlurStrength + uOverrideDir;\n" +" vec2 vdir = texture( uTexMotion, vuv ).xy * uBlurStrength + uOverrideDir;\n" "\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" +" vec4 vcolour0 = texture( uTexMain, min(vuv + vdir*vrand.x,uClampUv) );\n" +" vec4 vcolour1 = texture( uTexMain, min(vuv + vdir*vrand.y,uClampUv) );\n" +" vec4 vcolour2 = texture( uTexMain, min(vuv + vdir*vrand1.x,uClampUv) );\n" +" vec4 vcolour3 = texture( uTexMain, min(vuv + vdir*vrand1.y,uClampUv) );\n" "\n" " FragColor = ( vcolour0 + vcolour1 + vcolour2 + vcolour3 ) * 0.25;\n" "}\n" @@ -62,6 +78,9 @@ static GLuint _uniform_blitblur_uTexMain; static GLuint _uniform_blitblur_uTexMotion; static GLuint _uniform_blitblur_uBlurStrength; static GLuint _uniform_blitblur_uOverrideDir; +static GLuint _uniform_blitblur_uTime; +static GLuint _uniform_blitblur_uGlitchStrength; +static GLuint _uniform_blitblur_uClampUv; static void shader_blitblur_uInverseRatio(v2f v){ glUniform2fv(_uniform_blitblur_uInverseRatio,1,v); } @@ -77,6 +96,15 @@ static void shader_blitblur_uBlurStrength(float f){ static void shader_blitblur_uOverrideDir(v2f v){ glUniform2fv(_uniform_blitblur_uOverrideDir,1,v); } +static void shader_blitblur_uTime(float f){ + glUniform1f(_uniform_blitblur_uTime,f); +} +static void shader_blitblur_uGlitchStrength(float f){ + glUniform1f(_uniform_blitblur_uGlitchStrength,f); +} +static void shader_blitblur_uClampUv(v2f v){ + glUniform2fv(_uniform_blitblur_uClampUv,1,v); +} static void shader_blitblur_register(void){ vg_shader_register( &_shader_blitblur ); } @@ -87,5 +115,8 @@ static void shader_blitblur_link(void){ _uniform_blitblur_uTexMotion = glGetUniformLocation( _shader_blitblur.id, "uTexMotion" ); _uniform_blitblur_uBlurStrength = glGetUniformLocation( _shader_blitblur.id, "uBlurStrength" ); _uniform_blitblur_uOverrideDir = glGetUniformLocation( _shader_blitblur.id, "uOverrideDir" ); + _uniform_blitblur_uTime = glGetUniformLocation( _shader_blitblur.id, "uTime" ); + _uniform_blitblur_uGlitchStrength = glGetUniformLocation( _shader_blitblur.id, "uGlitchStrength" ); + _uniform_blitblur_uClampUv = glGetUniformLocation( _shader_blitblur.id, "uClampUv" ); } #endif /* SHADER_blitblur_H */