hermet pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=70ae090254ff68aedaa193b5ee09200e15f03890

commit 70ae090254ff68aedaa193b5ee09200e15f03890
Author: Shinwoo Kim <[email protected]>
Date:   Mon Jan 28 14:49:02 2019 +0900

    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 <[email protected]>
        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) <[email protected]>
        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 <[email protected]>
        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);

-- 


Reply via email to