Thanks Janbo! These are cool little blur shaders and go a long way to helping my understanding of shaders!
I've modified slightly to accept a blur size parameter from AppGameKit (don't use these if you need to blur Horizontal or Verticle independantly! - Use Janbo's versions above).
Normal:
uniform sampler2D texture0;
varying vec2 posVarying;
varying vec2 uvVarying;
uniform vec2 agk_resolution;
uniform float BlurSize;
float blurSizeH = BlurSize / agk_resolution.x;
float blurSizeV = BlurSize / agk_resolution.y;
void main()
{
vec4 sum = vec4(0.0);
for (float x = -4.0; x <= 4.0; x++)
for (float y = -4.0; y <= 4.0; y++)
sum += texture2D(texture0,vec2(uvVarying.x + x * blurSizeH, uvVarying.y + y * blurSizeV))/ 81.0;
gl_FragColor = sum;
}
Radial:
uniform sampler2D texture0;
varying vec2 posVarying;
varying vec2 uvVarying;
uniform vec2 agk_resolution;
uniform float BlurSize;
float blurSizeH = BlurSize / agk_resolution.x;
float blurSizeV = BlurSize / agk_resolution.y;
void main()
{
vec4 sum = vec4(0.0);
float dist = distance(vec2(0.5,0.5),uvVarying.xy);
for (float x = -4.0; x <= 4.0; x++)
for (float y = -4.0; y <= 4.0; y++)
sum += texture2D(texture0,vec2(uvVarying.x + x * blurSizeH*dist, uvVarying.y + y * blurSizeV*dist))/ 81.0;
gl_FragColor = sum;
}
Usage example:
// Project: blurtest
// Created: 2016-02-14
// set window properties
SetWindowTitle( "blurtest" )
SetWindowSize( 640, 640, 0 )
// set display properties
SetVirtualResolution( 100, 100 )
SetOrientationAllowed( 1, 1, 1, 1 )
BGImage = loadimage("background.png")
BGSprite = CreateSprite(BGImage)
SetSpriteSize(BGSprite,100,100)
RadialBlur=LoadSpriteShader("radialblur.ps")
NormalBlur=LoadSpriteShader("normalblur.ps")
SetSpriteShader(BGSprite, RadialBlur)
blursize# = 5.0
blurspeed# = 0.1
shadertoggle = 1
do
// Change the amount of blur
blursize#=blursize#+blurspeed#
//Set some limits for the amount of blur
if blursize# > 10 or blursize#<0.1 then blurspeed# = 0-blurspeed#
// Set the shader(s) with the required amount of blur
setShaderConstantByName(RadialBlur, "BlurSize",blursize#,0,0,0)
setShaderConstantByName(NormalBlur, "BlurSize",blursize#,0,0,0)
// Display some info
Print( "BlurSize = " + str(blursize#) )
Print( "Hit SPACE to toggle Blur Mode" )
// Toggle blur shader
if GetRawKeyPressed(32)
if shadertoggle = 1
shadertoggle=0
SetSpriteShader(BGSprite, NormalBlur)
else
shadertoggle = 1
SetSpriteShader(BGSprite, RadialBlur)
endif
endif
// Sync
Sync()
loop
(you'll need to provide your own background.png image)
I'll still post up my non-shader memblock gaussian blur when I'm finished for those who may be interested.