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
This commit is contained in:
LaurentGom 2009-11-11 11:53:20 +00:00
parent 7aabc3c3c1
commit 677e0343e2
2 changed files with 40 additions and 6 deletions

View File

@ -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);
}

View File

@ -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;
}