treesummaryrefslogcommitdiff
path: root/shaders
diff options
context:
space:
mode:
Diffstat (limited to 'shaders')
-rw-r--r--shaders/fbo_frag.glsl37
-rw-r--r--shaders/fbo_vert.glsl11
-rw-r--r--shaders/frag_irradiance.glsl (renamed from shaders/frag.glsl)13
-rw-r--r--shaders/frag_shadowmap.glsl14
-rw-r--r--shaders/vert.glsl2
5 files changed, 74 insertions, 3 deletions
diff --git a/shaders/fbo_frag.glsl b/shaders/fbo_frag.glsl
new file mode 100644
index 0000000..e199245
--- /dev/null
+++ b/shaders/fbo_frag.glsl
@@ -0,0 +1,37 @@
+#version 330 core
+out vec4 FragColor;
+
+in vec2 TexCoords;
+
+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()
+{
+ 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;
+ }
+}
diff --git a/shaders/fbo_vert.glsl b/shaders/fbo_vert.glsl
new file mode 100644
index 0000000..fb80df5
--- /dev/null
+++ b/shaders/fbo_vert.glsl
@@ -0,0 +1,11 @@
+#version 330 core
+layout (location = 0) in vec2 aPos;
+layout (location = 1) in vec2 aTexCoords;
+
+out vec2 TexCoords;
+
+void main()
+{
+ gl_Position = vec4(aPos.x, aPos.y, 0.0, 1.0);
+ TexCoords = aTexCoords;
+}
diff --git a/shaders/frag.glsl b/shaders/frag_irradiance.glsl
index a92699c..9e14ebe 100644
--- a/shaders/frag.glsl
+++ b/shaders/frag_irradiance.glsl
@@ -5,9 +5,12 @@ in vec3 Normal;
out vec4 FragColor;
+uniform sampler2D shadowmapTexture;
+
uniform vec3 objectColor;
uniform vec3 lightColor;
uniform vec3 lightPos;
+uniform vec3 viewPos;
void main()
{
@@ -20,6 +23,12 @@ void main()
float ambientStrength = 0.1;
vec3 ambient = ambientStrength * lightColor;
- vec3 result = (ambient + diffuse) * objectColor;
+ float specularStrength = 0.5;
+ vec3 viewDir = normalize(viewPos - FragPos);
+ vec3 reflectDir = reflect(-lightDir, norm);
+ float spec = pow(max(dot(viewDir, reflectDir), 0.0), 32);
+ vec3 specular = specularStrength * spec * lightColor;
+
+ vec3 result = (ambient + diffuse + specular) * objectColor;
FragColor = vec4(result, 1.0f);
-} \ No newline at end of file
+}
diff --git a/shaders/frag_shadowmap.glsl b/shaders/frag_shadowmap.glsl
new file mode 100644
index 0000000..6d6dab6
--- /dev/null
+++ b/shaders/frag_shadowmap.glsl
@@ -0,0 +1,14 @@
+
+#version 330 core
+
+in vec3 FragPos;
+
+out vec4 FragColor;
+
+uniform vec3 lightPos;
+
+void main()
+{
+ float lightDist = 1 - (length(lightPos - FragPos) - 5.5);
+ FragColor = vec4(vec3(lightDist), 1);
+}
diff --git a/shaders/vert.glsl b/shaders/vert.glsl
index fc3721a..6f48573 100644
--- a/shaders/vert.glsl
+++ b/shaders/vert.glsl
@@ -15,4 +15,4 @@ void main()
gl_Position = projection * view * model * vec4(pos, 1.0);
FragPos = vec3(model * vec4(pos, 1));
Normal = normal;
-} \ No newline at end of file
+}