X-Git-Url: https://gitweb.ps.run/subsurface_scattering/blobdiff_plain/9d10826ccb5d1f8a3821d4d2f4242c401146d12d..e03792c2d5620ca07ac50717062df846927027c0:/shaders/fbo_frag.glsl diff --git a/shaders/fbo_frag.glsl b/shaders/fbo_frag.glsl index cf1fafa..e199245 100644 --- a/shaders/fbo_frag.glsl +++ b/shaders/fbo_frag.glsl @@ -3,11 +3,35 @@ out vec4 FragColor; in vec2 TexCoords; -uniform sampler2D screenTexture; +uniform sampler2D shadowmapTexture; +uniform sampler2D irradianceTexture; +uniform int screenWidth; +uniform int screenHeight; +uniform int renderState; +uniform vec2 samplePositions[13]; +uniform vec3 sampleWeights[13]; void main() -{ - FragColor = vec4( - texture(screenTexture, TexCoords).rgb, - 1.0); +{ + if (renderState == 0) { + FragColor = texture(shadowmapTexture, TexCoords); + } + // stencil buffer + else if (renderState == 1 || texture(irradianceTexture, TexCoords).rgb == vec3(0, 0, 0)) { + FragColor = texture(irradianceTexture, TexCoords); + } + else if (renderState == 2) { + FragColor = texture(shadowmapTexture, TexCoords) * texture(irradianceTexture, TexCoords); + } + else if (renderState == 3) { + vec4 result = vec4(0, 0, 0, 1); + for (int i = 0; i < 13; i++) { + float oneX = 1.0/screenWidth; + float oneY = 1.0/screenHeight; + vec4 sample = texture(irradianceTexture, TexCoords + samplePositions[i] * vec2(oneX, oneY)); + vec4 weight = vec4(sampleWeights[i], 1); + result += sample * weight; + } + FragColor = result; + } }