#version 120 uniform sampler2D lighting_tex; uniform sampler2D bloom_tex; uniform sampler2D film_tex; uniform bool colorShift; uniform vec3 redShift; uniform vec3 greenShift; uniform vec3 blueShift; uniform bool vignette; uniform float innerCircle; uniform float outerCircle; uniform bool distortion; uniform vec3 distortionFactor; uniform bool colorFringe; uniform float colorFringeFactor; uniform bool filmWear; uniform vec2 fg_BufferSize; uniform float osg_SimulationTime; // uniform float shutterFreq; // uniform float shutterDuration; uniform bool bloomEnabled; uniform float bloomStrength; uniform bool bloomBuffers; void main() { vec2 c1 = gl_TexCoord[0].xy; vec2 initialCoords = c1; vec2 c2; if (distortion) { c1 = 2.0 * initialCoords - vec2(1.,1.); c1 *= vec2( 1.0, fg_BufferSize.y / fg_BufferSize.x ); float r = length(c1); c1 += c1 * dot(distortionFactor.xy, vec2(r*r, r*r*r*r)); c1 /= distortionFactor.z; c1 *= vec2( 1.0, fg_BufferSize.x / fg_BufferSize.y ); c1 = c1 * .5 + .5; if (colorFringe) { c2 = 2.0 * initialCoords - vec2(1.,1.); c2 *= vec2( 1.0, fg_BufferSize.y / fg_BufferSize.x ); r = length(c2); c2 += c2 * dot(distortionFactor.xy*colorFringeFactor, vec2(r*r, r*r*r*r)); c2 /= distortionFactor.z; c2 *= vec2( 1.0, fg_BufferSize.x / fg_BufferSize.y ); c2 = c2 * .5 + .5; } } vec3 dirt = vec3(1.0); if (filmWear) { dirt = texture2D(film_tex, initialCoords*vec2( 1.0, fg_BufferSize.y / fg_BufferSize.x ) + vec2(0.0, osg_SimulationTime * 7.7)).rgb; } vec4 color = texture2D( lighting_tex, c1 ); if (bloomEnabled && bloomBuffers) color += bloomStrength * texture2D( bloom_tex, c1 ); if (distortion && colorFringe) { color.g = texture2D( lighting_tex, c2 ).g; if (bloomEnabled && bloomBuffers) color.g += bloomStrength * texture2D( bloom_tex, c2 ).g; } if (colorShift) { vec3 col2; col2.r = dot(color.rgb, redShift); col2.g = dot(color.rgb, greenShift); col2.b = dot(color.rgb, blueShift); color.rgb = col2; } if (vignette) { vec2 c = 2.0 * initialCoords - vec2(1.,1.); c = c * vec2( 1.0, fg_BufferSize.y / fg_BufferSize.x ); float l = length(c); float f = smoothstep( innerCircle, innerCircle * outerCircle, l ); color.rgb = (1.0 - f) * color.rgb; } // if ((osg_FrameNumber % 6) == 0) // f = 1.0; gl_FragColor = color * vec4(dirt, 1.0); }