aboutsummaryrefslogtreecommitdiffstats
path: root/assets/shaders/glsl100
diff options
context:
space:
mode:
Diffstat (limited to 'assets/shaders/glsl100')
-rw-r--r--assets/shaders/glsl100/postprocessing.fs56
1 files changed, 56 insertions, 0 deletions
diff --git a/assets/shaders/glsl100/postprocessing.fs b/assets/shaders/glsl100/postprocessing.fs
new file mode 100644
index 0000000..69b906b
--- /dev/null
+++ b/assets/shaders/glsl100/postprocessing.fs
@@ -0,0 +1,56 @@
+#version 100
+
+precision mediump float;
+
+varying vec2 fragTexCoord;
+varying vec4 fragColor;
+
+uniform sampler2D texture0;
+uniform vec4 colDiffuse;
+
+// Edge detection.
+uniform vec2 resolution;
+uniform float edgeFactor;
+
+// Color depth.
+uniform float gamma;
+uniform float colorCount;
+
+void main()
+{
+ // Texel color fetching from texture sampler
+ vec3 texelColor = texture2D(texture0, fragTexCoord.xy).rgb;
+
+ // Color depth
+ texelColor = pow(texelColor, vec3(gamma, gamma, gamma));
+ texelColor = texelColor*colorCount;
+ texelColor = floor(texelColor);
+ texelColor = texelColor/colorCount;
+ texelColor = pow(texelColor, vec3(1.0/gamma));
+
+ // Edges.
+ float x = 1.0/resolution.x;
+ float y = 1.0/resolution.y;
+
+ vec4 horizEdge = vec4(0.0);
+ horizEdge -= texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y - y))*1.0;
+ horizEdge -= texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y ))*2.0;
+ horizEdge -= texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y + y))*1.0;
+ horizEdge += texture2D(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y - y))*1.0;
+ horizEdge += texture2D(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y ))*2.0;
+ horizEdge += texture2D(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y + y))*1.0;
+
+ vec4 vertEdge = vec4(0.0);
+ vertEdge -= texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y - y))*1.0;
+ vertEdge -= texture2D(texture0, vec2(fragTexCoord.x , fragTexCoord.y - y))*2.0;
+ vertEdge -= texture2D(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y - y))*1.0;
+ vertEdge += texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y + y))*1.0;
+ vertEdge += texture2D(texture0, vec2(fragTexCoord.x , fragTexCoord.y + y))*2.0;
+ vertEdge += texture2D(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y + y))*1.0;
+
+ vec3 edge = sqrt((horizEdge.rgb*horizEdge.rgb) + (vertEdge.rgb*vertEdge.rgb));
+ float edgeGray = (edge.r + edge.g + edge.b) / 3.0;
+ edge = vec3(edgeGray, 0.0, edgeGray);
+
+ gl_FragColor = vec4(texelColor + (edge * edgeFactor), 1.0);
+}