ClutterStageCogl: Ignore a clip the size of the stage

If the clip region includes the entire stage, ignore it - we aren't
actually clipped.

https://bugzilla.gnome.org/show_bug.cgi?id=719901
This commit is contained in:
Owen W. Taylor 2013-12-04 23:54:27 -05:00
parent 97dcb108d0
commit cbb9d1e062

View File

@ -398,6 +398,8 @@ static void
clutter_stage_cogl_redraw (ClutterStageWindow *stage_window) clutter_stage_cogl_redraw (ClutterStageWindow *stage_window)
{ {
ClutterStageCogl *stage_cogl = CLUTTER_STAGE_COGL (stage_window); ClutterStageCogl *stage_cogl = CLUTTER_STAGE_COGL (stage_window);
cairo_rectangle_int_t geom;
gboolean have_clip;
gboolean may_use_clipped_redraw; gboolean may_use_clipped_redraw;
gboolean use_clipped_redraw; gboolean use_clipped_redraw;
gboolean can_blit_sub_buffer; gboolean can_blit_sub_buffer;
@ -435,11 +437,19 @@ clutter_stage_cogl_redraw (ClutterStageWindow *stage_window)
has_buffer_age = cogl_clutter_winsys_has_feature (COGL_WINSYS_FEATURE_BUFFER_AGE); has_buffer_age = cogl_clutter_winsys_has_feature (COGL_WINSYS_FEATURE_BUFFER_AGE);
_clutter_stage_window_get_geometry (stage_window, &geom);
/* NB: a zero width redraw clip == full stage redraw */
have_clip = (stage_cogl->bounding_redraw_clip.width != 0 &&
!(stage_cogl->bounding_redraw_clip.x == 0 &&
stage_cogl->bounding_redraw_clip.y == 0 &&
stage_cogl->bounding_redraw_clip.width == geom.width &&
stage_cogl->bounding_redraw_clip.height == geom.height));
may_use_clipped_redraw = FALSE; may_use_clipped_redraw = FALSE;
if (_clutter_stage_window_can_clip_redraws (stage_window) && if (_clutter_stage_window_can_clip_redraws (stage_window) &&
can_blit_sub_buffer && can_blit_sub_buffer &&
/* NB: a zero width redraw clip == full stage redraw */ have_clip &&
stage_cogl->bounding_redraw_clip.width != 0 &&
/* some drivers struggle to get going and produce some junk /* some drivers struggle to get going and produce some junk
* frames when starting up... */ * frames when starting up... */
stage_cogl->frame_count > 3) stage_cogl->frame_count > 3)