]> gitweb.ps.run Git - subsurface_scattering/blobdiff - shaders/fbo_frag.glsl
render shadowmap and irradiance
[subsurface_scattering] / shaders / fbo_frag.glsl
index cf1fafa6e6aa01b5ee0d36241b7c06e87cfbe3b6..e199245cec69ff67c2d8a394449ecb399e3b4c94 100644 (file)
@@ -3,11 +3,35 @@ out vec4 FragColor;
   \r
 in vec2 TexCoords;\r
 \r
   \r
 in vec2 TexCoords;\r
 \r
-uniform sampler2D screenTexture;\r
+uniform sampler2D shadowmapTexture;\r
+uniform sampler2D irradianceTexture;\r
+uniform int screenWidth;\r
+uniform int screenHeight;\r
+uniform int renderState;\r
+uniform vec2 samplePositions[13];\r
+uniform vec3 sampleWeights[13];\r
 \r
 void main()\r
 \r
 void main()\r
-{ \r
-    FragColor = vec4(\r
-        texture(screenTexture, TexCoords).rgb,\r
-        1.0);\r
+{\r
+    if (renderState == 0) {\r
+        FragColor = texture(shadowmapTexture, TexCoords);\r
+    }\r
+    // stencil buffer\r
+    else if (renderState == 1 || texture(irradianceTexture, TexCoords).rgb == vec3(0, 0, 0)) {\r
+        FragColor = texture(irradianceTexture, TexCoords);\r
+    }\r
+    else if (renderState == 2) {\r
+        FragColor = texture(shadowmapTexture, TexCoords) * texture(irradianceTexture, TexCoords);\r
+    }\r
+    else if (renderState == 3) {\r
+        vec4 result = vec4(0, 0, 0, 1);\r
+        for (int i = 0; i < 13; i++) {\r
+            float oneX = 1.0/screenWidth;\r
+            float oneY = 1.0/screenHeight;\r
+            vec4 sample = texture(irradianceTexture, TexCoords + samplePositions[i] * vec2(oneX, oneY));\r
+            vec4 weight = vec4(sampleWeights[i], 1);\r
+            result += sample * weight;\r
+        }\r
+        FragColor = result;\r
+    }\r
 }\r
 }\r