#import "Common/ShaderLib/MultiSample.glsllib" uniform COLORTEXTURE m_Texture; uniform float m_SampleDist; uniform float m_SampleStrength; uniform float m_Samples[10]; in vec2 texCoord; void main(void) { // some sample positions //float samples[10] = float[](-0.08,-0.05,-0.03,-0.02,-0.01,0.01,0.02,0.03,0.05,0.08); // 0.5,0.5 is the center of the screen // so substracting texCoord from it will result in // a vector pointing to the middle of the screen vec2 dir = 0.5 - texCoord; // calculate the distance to the center of the screen float dist = sqrt(dir.x*dir.x + dir.y*dir.y); // normalize the direction (reuse the distance) dir = dir/dist; // this is the original colour of this fragment // using only this would result in a nonblurred version vec4 colorRes = getColor(m_Texture,texCoord); vec4 sum = colorRes; // take 10 additional blur samples in the direction towards // the center of the screen for (int i = 0; i < 10; i++){ sum += getColor( m_Texture, texCoord + dir * m_Samples[i] * m_SampleDist ); } // we have taken eleven samples sum *= 1.0/11.0; // weighten the blur effect with the distance to the // center of the screen ( further out is blurred more) float t = dist * m_SampleStrength; t = clamp( t ,0.0,1.0); //0 <= t <= 1 //Blend the original color with the averaged pixels gl_FragColor =mix( colorRes, sum, t ); }