diff options
author | Shinwoo Kim <cinoo.kim@samsung.com> | 2019-01-28 14:49:02 +0900 |
---|---|---|
committer | Hermet Park <hermetpark@gmail.com> | 2019-01-28 14:49:02 +0900 |
commit | 70ae090254ff68aedaa193b5ee09200e15f03890 (patch) | |
tree | b94cd967c4c71bc4901653d1c5cbb06de9243c49 /src/lib/evas/canvas/evas_clip.c | |
parent | 25925f026407a16795961334be0346f0509f9a28 (diff) |
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 <raster@rasterman.com>
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) <raster@rasterman.com>
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 <raster@rasterman.com>
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
Diffstat (limited to '')
-rw-r--r-- | src/lib/evas/canvas/evas_clip.c | 16 |
1 files changed, 0 insertions, 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 | |||
353 | } | 353 | } |
354 | 354 | ||
355 | /* clip me */ | 355 | /* clip me */ |
356 | if ((!clip->clip.clipees) && (clip->cur->visible)) | ||
357 | { | ||
358 | /* Basically it just went invisible */ | ||
359 | clip->changed = 1; | ||
360 | e = clip->layer->evas; | ||
361 | e->changed = 1; | ||
362 | /* i know this was to handle a case where a clip starts having children and | ||
363 | * stops being a solid colored box - no one ever does that... they hide the clp | ||
364 | * so dont add damages | ||
365 | evas_damage_rectangle_add(e->evas, | ||
366 | clip->cur->geometry.x + e->framespace.x, | ||
367 | clip->cur->geometry.y + e->framespace.y, | ||
368 | clip->cur->geometry.w, clip->cur->geometry.h); | ||
369 | */ | ||
370 | } | ||
371 | |||
372 | EINA_COW_STATE_WRITE_BEGIN(obj, state_write, cur) | 356 | EINA_COW_STATE_WRITE_BEGIN(obj, state_write, cur) |
373 | state_write->clipper = clip; | 357 | state_write->clipper = clip; |
374 | EINA_COW_STATE_WRITE_END(obj, state_write, cur); | 358 | EINA_COW_STATE_WRITE_END(obj, state_write, cur); |