#include "blur.glsllib"
varying float range;
// Range of possible values that we care about.
void vert ()
{
}
void frag() // Luminosity pass with exponential color channel decay based on the threshold above.
{
gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);
}
// Range of possible values that we care about.
void vert ()
{
}
void frag() // Luminosity pass with exponential color channel decay based on the threshold above.
{
gl_FragColor = texture2D_0(TexCoord);
}
// No op
void vert ()
{
}
void frag() // Luminosity pass with exponential color channel decay based on the threshold above.
{
vec4 color = texture2D_0(TexCoord);
float luminosity = dot(color.rgb, vec3(0.299, 0.587, 0.114));
float decay = min( 1.0, max( 0.0, (luminosity - Threshold) / range ) );
decay = decay * decay;
gl_FragColor = vec4( color.rgb * decay, color.a );
}
vec2 ToRotatedPoissonTexCoord( vec3 poisson, vec2 inputTex, vec2 inc, mat2 rotation )
{
vec2 rotatedPoisson = rotation * vec2( poisson.xy );
return vec2( inputTex.x + rotatedPoisson.x * inc.x, inputTex.y + rotatedPoisson.y * inc.y );
}
void SetupPoissonBlurCoordsRotation(float inBlurAmount, vec2 inTexInfo, float inRotationRadians )
{
float incX = inBlurAmount / inTexInfo.x;
float incY = inBlurAmount / inTexInfo.y;
float rotCos = cos( inRotationRadians );
float rotSin = sin( inRotationRadians );
mat2 rotMatrix = mat2( rotCos, rotSin, -rotSin, rotCos );
vec2 incVec = vec2( incX, incY );
TexCoord0 = ToRotatedPoissonTexCoord( poisson0, TexCoord, incVec, rotMatrix );
TexCoord1 = ToRotatedPoissonTexCoord( poisson1, TexCoord, incVec, rotMatrix );
TexCoord2 = ToRotatedPoissonTexCoord( poisson2, TexCoord, incVec, rotMatrix );
TexCoord3 = ToRotatedPoissonTexCoord( poisson3, TexCoord, incVec, rotMatrix );
TexCoord4 = ToRotatedPoissonTexCoord( poisson4, TexCoord, incVec, rotMatrix );
TexCoord5 = ToRotatedPoissonTexCoord( poisson5, TexCoord, incVec, rotMatrix );
TexCoord6 = ToRotatedPoissonTexCoord( poisson6, TexCoord, incVec, rotMatrix );
TexCoord7 = ToRotatedPoissonTexCoord( poisson7, TexCoord, incVec, rotMatrix );
}
void vert ()
{
SetupPoissonBlurCoordsRotation( PoissonDistance, Texture0Info.xy, PoissonRotation);
}
vec4 PoissonBlur(sampler2D inSampler )
{
float mult0 = (1.0 - poisson0.z);
float mult1 = (1.0 - poisson1.z);
float mult2 = (1.0 - poisson2.z);
float mult3 = (1.0 - poisson3.z);
float mult4 = (1.0 - poisson4.z);
float mult5 = (1.0 - poisson5.z);
float mult6 = (1.0 - poisson6.z);
float mult7 = (1.0 - poisson7.z);
float multTotal = mult0 + mult1 + mult2 + mult3 + mult4 + mult5 + mult6 + mult7;
float multMultiplier = ( multTotal > 0.0 ? 1.0 / multTotal : 0.0 );
vec4 outColor = GetTextureValue( inSampler, TexCoord0, 1.0 ) * (mult0 * multMultiplier);
outColor += GetTextureValue( inSampler, TexCoord1, 1.0 ) * (mult1 * multMultiplier);
outColor += GetTextureValue( inSampler, TexCoord2, 1.0 ) * (mult2 * multMultiplier);
outColor += GetTextureValue( inSampler, TexCoord3, 1.0 ) * (mult3 * multMultiplier);
outColor += GetTextureValue( inSampler, TexCoord4, 1.0 ) * (mult4 * multMultiplier);
outColor += GetTextureValue( inSampler, TexCoord5, 1.0 ) * (mult5 * multMultiplier);
outColor += GetTextureValue( inSampler, TexCoord6, 1.0 ) * (mult6 * multMultiplier);
outColor += GetTextureValue( inSampler, TexCoord7, 1.0 ) * (mult7 * multMultiplier);
return outColor;
}
void frag()
{
//Passing in 1.0 means the value will not get alpha-multiplied again
gl_FragColor = PoissonBlur( Texture0 );
}
void frag()
{
vec4 sourceColor = texture2D_0(TexCoord);
vec3 summation = texture2D_Downsample2(TexCoord).xyz
+ texture2D_Downsample4(TexCoord).xyz
+ texture2D_Downsample8(TexCoord).xyz
+ texture2D_Downsample16(TexCoord).xyz;
gl_FragColor = vec4( clamp( sourceColor.x + summation.x, 0.0, sourceColor.a )
, clamp( sourceColor.y + summation.y, 0.0, sourceColor.a )
, clamp( sourceColor.z + summation.z, 0.0, sourceColor.a )
, sourceColor.a );
/*
gl_FragColor = vec4( texture2D_Downsample2(TexCoord).xyz
, sourceColor.a );
*/
}