From 80d2700a1466e0a68cdfdc6a3573d301c170bf83 Mon Sep 17 00:00:00 2001 From: nathan Date: Sat, 18 Oct 2025 21:58:35 -0600 Subject: Added glsl100 postprocessing shader --- assets/shaders/glsl100/postprocessing.fs | 56 +++++++++++++++++++++++++ assets/shaders/glsl330/postprocessing.fs | 70 ++++++++++++++++---------------- 2 files changed, 91 insertions(+), 35 deletions(-) create mode 100644 assets/shaders/glsl100/postprocessing.fs 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); +} diff --git a/assets/shaders/glsl330/postprocessing.fs b/assets/shaders/glsl330/postprocessing.fs index ce1f3bd..69d2966 100644 --- a/assets/shaders/glsl330/postprocessing.fs +++ b/assets/shaders/glsl330/postprocessing.fs @@ -18,39 +18,39 @@ uniform float colorCount; void main() { - // Texel color fetching from texture sampler - vec3 texelColor = texture(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 -= texture(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y - y))*1.0; - horizEdge -= texture(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y ))*2.0; - horizEdge -= texture(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y + y))*1.0; - horizEdge += texture(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y - y))*1.0; - horizEdge += texture(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y ))*2.0; - horizEdge += texture(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y + y))*1.0; - - vec4 vertEdge = vec4(0.0); - vertEdge -= texture(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y - y))*1.0; - vertEdge -= texture(texture0, vec2(fragTexCoord.x , fragTexCoord.y - y))*2.0; - vertEdge -= texture(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y - y))*1.0; - vertEdge += texture(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y + y))*1.0; - vertEdge += texture(texture0, vec2(fragTexCoord.x , fragTexCoord.y + y))*2.0; - vertEdge += texture(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); - - finalColor = vec4(texelColor + (edge * edgeFactor), 1.0); + // Texel color fetching from texture sampler + vec3 texelColor = texture(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 -= texture(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y - y))*1.0; + horizEdge -= texture(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y ))*2.0; + horizEdge -= texture(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y + y))*1.0; + horizEdge += texture(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y - y))*1.0; + horizEdge += texture(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y ))*2.0; + horizEdge += texture(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y + y))*1.0; + + vec4 vertEdge = vec4(0.0); + vertEdge -= texture(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y - y))*1.0; + vertEdge -= texture(texture0, vec2(fragTexCoord.x , fragTexCoord.y - y))*2.0; + vertEdge -= texture(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y - y))*1.0; + vertEdge += texture(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y + y))*1.0; + vertEdge += texture(texture0, vec2(fragTexCoord.x , fragTexCoord.y + y))*2.0; + vertEdge += texture(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); + + finalColor = vec4(texelColor + (edge * edgeFactor), 1.0); } -- cgit v1.2.3