X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=shaders%2Fblitblur.h;h=e341cea2827f586283432bbcbd731a01255d6c04;hb=f7db507815e2822d971031c30f25e02b45e9c914;hp=b754d12c965b18c5b0018d9755be8f5827edb606;hpb=75703291fbf045008a3b1ebb20fc46a2617b6b3b;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/shaders/blitblur.h b/shaders/blitblur.h index b754d12..e341cea 100644 --- a/shaders/blitblur.h +++ b/shaders/blitblur.h @@ -22,6 +22,9 @@ static struct vg_shader _shader_blitblur = { .static_src = "out vec4 FragColor;\n" "uniform sampler2D uTexMain;\n" +"uniform sampler2D uTexMotion;\n" +"uniform float uBlurStrength;\n" +"uniform float uBlurExponent;\n" "\n" "in vec2 aUv;\n" "\n" @@ -34,25 +37,46 @@ static struct vg_shader _shader_blitblur = { "\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 GLuint _uniform_blitblur_uBlurExponent; 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_uBlurExponent(float f){ + glUniform1f(_uniform_blitblur_uBlurExponent,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" ); + _uniform_blitblur_uBlurExponent = glGetUniformLocation( _shader_blitblur.id, "uBlurExponent" ); } #endif /* SHADER_blitblur_H */