From 43549773608b4f58dc664b7115a1ef0dcb32f251 Mon Sep 17 00:00:00 2001 From: Haihua Hu Date: Tue, 14 Jun 2016 13:48:09 +0800 Subject: [PATCH 1/2] [glplugin]gleffects: fix little rectangel appears at the center when use squeeze and tunnel effects These two shader will calculate the verctor length and use it as denominator. But length could be zero which will cause undefine behaviour. Add protection for this condition Upstream-Status: Backport [1.8.3] https://bugzilla.gnome.org/show_bug.cgi?id=767635 Signed-off-by: Haihua Hu --- 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 6bdc155..3e87b8b 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);" "}"; -- 1.9.1