diff options
Diffstat (limited to 'assets/shaders/glsl100')
| -rw-r--r-- | assets/shaders/glsl100/postprocessing.fs | 56 |
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); +} |
