From 49ca9e8f121db77f3b7aa75b9f2e30150b86eb9b Mon Sep 17 00:00:00 2001 From: Robert Bragg Date: Thu, 10 Mar 2011 18:51:51 +0000 Subject: [PATCH] culling: Don't cull actors not being painted on the stage Previously we were applying the culling optimization to any actor painted without considering that we may be painting to an offscreen framebuffer where the stage clip isn't applicable. For now we simply expose a getter for the current draw framebuffer and we can assume that a return value of NULL corresponds to the stage. Note: This will need to be updated as stages start to be backed by real CoglFramebuffer objects and so we won't get NULL in those cases. --- clutter/clutter-actor.c | 8 ++++++++ clutter/cogl/cogl/cogl.h | 3 +++ 2 files changed, 11 insertions(+) diff --git a/clutter/clutter-actor.c b/clutter/clutter-actor.c index d90b2131a..2630a52fa 100644 --- a/clutter/clutter-actor.c +++ b/clutter/clutter-actor.c @@ -2524,6 +2524,14 @@ cull_actor (ClutterActor *self) const ClutterPlane *stage_clip; ClutterCullResult result; + if (_cogl_get_draw_buffer () != NULL) + { + CLUTTER_NOTE (CLIPPING, "Bail from cull_actor without culling (%s): " + "Current framebuffer doesn't correspond to stage", + G_OBJECT_TYPE_NAME (self)); + return FALSE; + } + if (!priv->last_paint_volume_valid) { CLUTTER_NOTE (CLIPPING, "Bail from cull_actor without culling (%s): " diff --git a/clutter/cogl/cogl/cogl.h b/clutter/cogl/cogl/cogl.h index a7f9ea722..e3df2ebd2 100644 --- a/clutter/cogl/cogl/cogl.h +++ b/clutter/cogl/cogl/cogl.h @@ -1282,6 +1282,9 @@ _cogl_onscreen_clutter_backend_set_size (int width, int height); void _cogl_swap_buffers_notify (void); +CoglFramebuffer * +_cogl_get_draw_buffer (void); + G_END_DECLS #undef __COGL_H_INSIDE__