uniform sampler2D bgl_RenderedTexture; const float BRIGHT_PASS_THRESHOLD = 0.8; const float BRIGHT_PASS_OFFSET = 0.75; #define blurclamp 1.0 #define bias 0.01 #define KERNEL_SIZE 3.0 vec2 texcoord = vec2(gl_TexCoord[0]).st; vec4 bright(vec2 coo) { vec4 color = texture2D(bgl_RenderedTexture, coo); color = max(color - BRIGHT_PASS_THRESHOLD, 0.0); return color / (color + BRIGHT_PASS_OFFSET); } void main(void) { vec2 blur = vec2(clamp( bias, -blurclamp, blurclamp )); vec4 col = vec4( 0, 0, 0, 0 ); for ( float x = -KERNEL_SIZE + 1.0; x < KERNEL_SIZE; x += 1.0 ) { for ( float y = -KERNEL_SIZE + 1.0; y < KERNEL_SIZE; y += 1.0 ) { col += bright( texcoord + vec2( blur.x * x, blur.y * y ) ); } } col /= ((KERNEL_SIZE+KERNEL_SIZE)-1.0)*((KERNEL_SIZE+KERNEL_SIZE)-1.0); gl_FragColor = col + texture2D(bgl_RenderedTexture, texcoord); }