From 677e0343e21cbc0a977afc6df2332e01fd4f30b4 Mon Sep 17 00:00:00 2001 From: LaurentGom Date: Wed, 11 Nov 2009 11:53:20 +0000 Subject: [PATCH] Updated the shader sample (fixed "blur", added "edge") git-svn-id: https://sfml.svn.sourceforge.net/svnroot/sfml/branches/sfml2@1273 4e206d99-4929-0410-ac5d-dfc041789085 --- samples/bin/datas/shader/blur.sfx | 16 ++++++++++------ samples/bin/datas/shader/edge.sfx | 30 ++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 6 deletions(-) create mode 100644 samples/bin/datas/shader/edge.sfx diff --git a/samples/bin/datas/shader/blur.sfx b/samples/bin/datas/shader/blur.sfx index 4c9f1128..c856e332 100644 --- a/samples/bin/datas/shader/blur.sfx +++ b/samples/bin/datas/shader/blur.sfx @@ -6,11 +6,15 @@ void main() vec2 offx = vec2(offset, 0.0); vec2 offy = vec2(0.0, offset); - vec4 c0 = texture2D(texture, gl_TexCoord[0].xy); - vec4 c1 = texture2D(texture, gl_TexCoord[0].xy - offy); - vec4 c2 = texture2D(texture, gl_TexCoord[0].xy + offy); - vec4 c3 = texture2D(texture, gl_TexCoord[0].xy - offx); - vec4 c4 = texture2D(texture, gl_TexCoord[0].xy + offx); + vec4 pixel = texture2D(texture, gl_TexCoord[0].xy) * 1 + + texture2D(texture, gl_TexCoord[0].xy - offx) * 2 + + texture2D(texture, gl_TexCoord[0].xy + offx) * 2 + + texture2D(texture, gl_TexCoord[0].xy - offy) * 2 + + texture2D(texture, gl_TexCoord[0].xy + offy) * 2 + + texture2D(texture, gl_TexCoord[0].xy - offx - offy) * 1 + + texture2D(texture, gl_TexCoord[0].xy - offx + offy) * 1 + + texture2D(texture, gl_TexCoord[0].xy + offx - offy) * 1 + + texture2D(texture, gl_TexCoord[0].xy + offx + offy) * 1; - gl_FragColor = gl_Color * (c0 * 0.2 + c1 * 0.2 + c2 * 0.2 + c3 * 0.2 + c4 * 0.2); + gl_FragColor = gl_Color * (pixel / 13.0); } diff --git a/samples/bin/datas/shader/edge.sfx b/samples/bin/datas/shader/edge.sfx new file mode 100644 index 00000000..ce0d99c6 --- /dev/null +++ b/samples/bin/datas/shader/edge.sfx @@ -0,0 +1,30 @@ +uniform sampler2D texture; +uniform float threshold; + +void main() +{ + const float offset = 1.0 / 512.0; + vec2 offx = vec2(offset, 0.0); + vec2 offy = vec2(0.0, offset); + + vec4 hEdge = texture2D(texture, gl_TexCoord[0].xy - offy) * -2.0 + + texture2D(texture, gl_TexCoord[0].xy + offy) * 2.0 + + texture2D(texture, gl_TexCoord[0].xy - offx - offy) * -1.0 + + texture2D(texture, gl_TexCoord[0].xy - offx + offy) * 1.0 + + texture2D(texture, gl_TexCoord[0].xy + offx - offy) * -1.0 + + texture2D(texture, gl_TexCoord[0].xy + offx + offy) * 1.0; + + vec4 vEdge = texture2D(texture, gl_TexCoord[0].xy - offx) * 2.0 + + texture2D(texture, gl_TexCoord[0].xy + offx) * -2.0 + + texture2D(texture, gl_TexCoord[0].xy - offx - offy) * 1.0 + + texture2D(texture, gl_TexCoord[0].xy - offx + offy) * -1.0 + + texture2D(texture, gl_TexCoord[0].xy + offx - offy) * 1.0 + + texture2D(texture, gl_TexCoord[0].xy + offx + offy) * -1.0; + + float edge = sqrt(hEdge.rgb * hEdge.rgb + vEdge.rgb * vEdge.rgb); + if (edge > threshold) + gl_FragColor.rgb = vec3(0, 0, 0); + else + gl_FragColor.rgb = vec3(1, 1, 1); + gl_FragColor.a = gl_Color.a * texture2D(texture, gl_TexCoord[0].xy).a; +}