DYT/Tool/osgOcean/bin/resources/shaders/osgOcean_downsample_glare.frag

41 lines
1.3 KiB
GLSL
Raw Normal View History

2024-11-22 15:19:31 +00:00
#extension GL_ARB_texture_rectangle : enable
uniform sampler2DRect osgOcean_ColorTexture;
uniform sampler2DRect osgOcean_LuminanceTexture;
uniform float osgOcean_GlareThreshold;
const vec2 s1 = vec2(-1, 1);
const vec2 s2 = vec2( 1, 1);
const vec2 s3 = vec2( 1,-1);
const vec2 s4 = vec2(-1,-1);
void main( void )
{
vec2 texCoordSample = vec2(0.0);
texCoordSample = gl_TexCoord[0].st + s1;
vec4 color = texture2DRect(osgOcean_ColorTexture, texCoordSample);
float lum = texture2DRect(osgOcean_LuminanceTexture, texCoordSample).r;
texCoordSample = gl_TexCoord[0].st + s2;
color += texture2DRect(osgOcean_ColorTexture, texCoordSample);
lum += texture2DRect(osgOcean_LuminanceTexture, texCoordSample).r;
texCoordSample = gl_TexCoord[0].st + s3;
color += texture2DRect(osgOcean_ColorTexture, texCoordSample);
lum += texture2DRect(osgOcean_LuminanceTexture, texCoordSample).r;
texCoordSample = gl_TexCoord[0].st +s4;
color += texture2DRect(osgOcean_ColorTexture, texCoordSample);
lum += texture2DRect(osgOcean_LuminanceTexture, texCoordSample).r;
color = color*0.25;
lum = lum*0.25;
// only want very high luminance values to pass otherwise
// we get streaks all over the scene
if(lum >= osgOcean_GlareThreshold)
gl_FragColor = color;
else
gl_FragColor = vec4(0.0);
}