From 70ae090254ff68aedaa193b5ee09200e15f03890 Mon Sep 17 00:00:00 2001 From: Shinwoo Kim Date: Mon, 28 Jan 2019 14:49:02 +0900 Subject: [PATCH] evas_clip: do not set clip->changed to true Summary: [Issuse] The issue solved by this commit occurs with 'export EVAS_GL_PARTIAL_DISABLE=0'. The _efl_canvas_object_clip_set set clip->changed to true, but did not add the clip object to e->pending_objects. So there is no chance to reset it to false. (Please refer to evas_render_object_recalc.) The clip->changed is always ture so its clipees cannot change its 'changed' to true. Because if 'changed' is true, evas_object_change returns before calling evas_object_change for its clipees. (Please see evas_object_change.) So 'changed' of clipees is false always, and clipees cannot call render_pre in _evas_render_phase1_direct, and eglSwapBuffersWithDamage is not called. This caused rendering issue. This could be rare case. The _efl_canvas_object_clip_set is called when the clipper and its clipees are out of view. [Solution] I would like to explain why removing line setting clip->changed to true makes sense. First, the following commit added line setting clip->changed to true. (1) committ 5e8d46e884930f109a28147cda4ce002e6836017 Author: Carsten Haitzler Date: Wed Sep 22 04:37:51 2004 +0000 clip bug fix :) And following commit removed line calling evas_damage_rectangle_add which is part of commit (1) above. (2) commit 8767a80b0dbda4e2c3a6b2a41a04bf35f43a3ed1 Author: Carsten Haitzler (Rasterman) Date: Wed Apr 16 16:14:16 2014 +0900 fix overdraw issue in evas when clips change Between above two commits, another commit calling evas_object_change(clip) was added. This commit sets clip->changed to ture, and adds clip object to e->pending_objects by evas_object_change -> evas_render_object_recalc. (3) commit 4aca7949f581eaaf943785759b542acd8fc6794c Author: Carsten Haitzler Date: Wed Nov 2 04:03:55 2005 +0000 fix excess overdraw bug So we do not need the remains of commit (1). REMOVE!! :-] Reviewers: raster, Hermet, jypark Reviewed By: Hermet Subscribers: cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D7767 --- src/lib/evas/canvas/evas_clip.c | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/src/lib/evas/canvas/evas_clip.c b/src/lib/evas/canvas/evas_clip.c index 54c021f1b2..b4af44edc6 100644 --- a/src/lib/evas/canvas/evas_clip.c +++ b/src/lib/evas/canvas/evas_clip.c @@ -353,22 +353,6 @@ _efl_canvas_object_clip_set(Eo *eo_obj, Evas_Object_Protected_Data *obj, Evas_Ob } /* clip me */ - if ((!clip->clip.clipees) && (clip->cur->visible)) - { - /* Basically it just went invisible */ - clip->changed = 1; - e = clip->layer->evas; - e->changed = 1; -/* i know this was to handle a case where a clip starts having children and - * stops being a solid colored box - no one ever does that... they hide the clp - * so dont add damages - evas_damage_rectangle_add(e->evas, - clip->cur->geometry.x + e->framespace.x, - clip->cur->geometry.y + e->framespace.y, - clip->cur->geometry.w, clip->cur->geometry.h); - */ - } - EINA_COW_STATE_WRITE_BEGIN(obj, state_write, cur) state_write->clipper = clip; EINA_COW_STATE_WRITE_END(obj, state_write, cur);