From 5e8a650130d932a10b9dd8ae4f2cf7b4b714e472 Mon Sep 17 00:00:00 2001 From: Haihua Hu Date: Tue, 14 Jun 2016 13:48:09 +0800 Subject: [PATCH] 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 --- ext/gl/effects/gstgleffectssources.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ext/gl/effects/gstgleffectssources.c b/ext/gl/effects/gstgleffectssources.c index 8059abafdb..b83e1d7cc3 100644 --- a/ext/gl/effects/gstgleffectssources.c +++ b/ext/gl/effects/gstgleffectssources.c @@ -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);" "}";