mirror of
https://github.com/JoeyDeVries/LearnOpenGL.git
synced 2026-01-30 20:13:22 +08:00
Delete composite.fs
This commit is contained in:
@@ -1,51 +0,0 @@
|
|||||||
#version 400 core
|
|
||||||
|
|
||||||
// shader outputs
|
|
||||||
layout (location = 0) out vec4 frag;
|
|
||||||
|
|
||||||
// color accumulation buffer
|
|
||||||
layout (binding = 0) uniform sampler2D accum;
|
|
||||||
|
|
||||||
// revealage threshold buffer
|
|
||||||
layout (binding = 1) uniform sampler2D reveal;
|
|
||||||
|
|
||||||
// epsilon number
|
|
||||||
const float EPSILON = 0.00001f;
|
|
||||||
|
|
||||||
// caluclate floating point numbers equality accurately
|
|
||||||
bool isApproximatelyEqual(float a, float b)
|
|
||||||
{
|
|
||||||
return abs(a - b) <= (abs(a) < abs(b) ? abs(b) : abs(a)) * EPSILON;
|
|
||||||
}
|
|
||||||
|
|
||||||
// get the max value between three values
|
|
||||||
float max3(vec3 v)
|
|
||||||
{
|
|
||||||
return max(max(v.x, v.y), v.z);
|
|
||||||
}
|
|
||||||
|
|
||||||
void main()
|
|
||||||
{
|
|
||||||
// fragment coordination
|
|
||||||
ivec2 coords = ivec2(gl_FragCoord.xy);
|
|
||||||
|
|
||||||
// fragment revealage
|
|
||||||
float revealage = texelFetch(reveal, coords, 0).r;
|
|
||||||
|
|
||||||
// save the blending and color texture fetch cost if there is not a transparent fragment
|
|
||||||
if (isApproximatelyEqual(revealage, 1.0f))
|
|
||||||
discard;
|
|
||||||
|
|
||||||
// fragment color
|
|
||||||
vec4 accumulation = texelFetch(accum, coords, 0);
|
|
||||||
|
|
||||||
// suppress overflow
|
|
||||||
if (isinf(max3(abs(accumulation.rgb))))
|
|
||||||
accumulation.rgb = vec3(accumulation.a);
|
|
||||||
|
|
||||||
// prevent floating point precision bug
|
|
||||||
vec3 average_color = accumulation.rgb / max(accumulation.a, EPSILON);
|
|
||||||
|
|
||||||
// blend pixels
|
|
||||||
frag = vec4(average_color, 1.0f - revealage);
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user