gleffects: fix little rectangle that appears at the center of squeeze and tunnel effects

These two shader will calculate the vector length and use it as denominator.
But length could be zero which will cause undefine behaviour. Add protection for
this condition

https://bugzilla.gnome.org/show_bug.cgi?id=767635
This commit is contained in:
Haihua Hu 2016-06-14 13:48:09 +08:00 committed by Tim-Philipp Müller
parent e9ba0b88e7
commit 8a92c66440

View file

@ -100,7 +100,8 @@ const gchar *squeeze_fragment_source_gles2 =
"void main () {"
" vec2 texturecoord = v_texcoord.xy;"
" vec2 normcoord = texturecoord - 0.5;"
" float r = length (normcoord);"
/* Add a very small value to length otherwise it could be 0 */
" float r = length (normcoord)+0.01;"
" r = pow(r, 0.40)*1.3;"
" normcoord = normcoord / r;"
" texturecoord = (normcoord + 0.5);"
@ -136,7 +137,8 @@ const gchar *tunnel_fragment_source_gles2 =
* rect textures */
" normcoord = (texturecoord - 0.5);"
" float r = length(normcoord);"
" normcoord *= clamp (r, 0.0, 0.275) / r;"
" if (r > 0.0)"
" normcoord *= clamp (r, 0.0, 0.275) / r;"
" texturecoord = normcoord + 0.5;"
" gl_FragColor = texture2D (tex, texturecoord);"
"}";