diff --git a/clutter/clutter/clutter-paint-node.c b/clutter/clutter/clutter-paint-node.c index efdaef0e6..877ec1784 100644 --- a/clutter/clutter/clutter-paint-node.c +++ b/clutter/clutter/clutter-paint-node.c @@ -1203,9 +1203,10 @@ clutter_paint_node_get_root (ClutterPaintNode *node) * @node: a #ClutterPaintNode * * Retrieves the #CoglFramebuffer that @node will draw - * into. + * into, if it the root node has a custom framebuffer set. * - * Returns: (transfer none): a #CoglFramebuffer + * Returns: (transfer none): a #CoglFramebuffer or %NULL if no custom one is + * set. */ CoglFramebuffer * clutter_paint_node_get_framebuffer (ClutterPaintNode *node) @@ -1216,6 +1217,6 @@ clutter_paint_node_get_framebuffer (ClutterPaintNode *node) klass = CLUTTER_PAINT_NODE_GET_CLASS (root); if (klass->get_framebuffer != NULL) return klass->get_framebuffer (root); - - return cogl_get_draw_framebuffer (); + else + return NULL; } diff --git a/clutter/clutter/clutter-paint-nodes.c b/clutter/clutter/clutter-paint-nodes.c index 964ef3ea6..e9282431f 100644 --- a/clutter/clutter/clutter-paint-nodes.c +++ b/clutter/clutter/clutter-paint-nodes.c @@ -413,6 +413,18 @@ clutter_pipeline_node_pre_draw (ClutterPaintNode *node, return FALSE; } +static CoglFramebuffer * +get_target_framebuffer (ClutterPaintNode *node) +{ + CoglFramebuffer *framebuffer; + + framebuffer = clutter_paint_node_get_framebuffer (node); + if (framebuffer) + return framebuffer; + + return cogl_get_draw_framebuffer (); +} + static void clutter_pipeline_node_draw (ClutterPaintNode *node, ClutterPaintContext *paint_context) @@ -818,7 +830,7 @@ clutter_text_node_draw (ClutterPaintNode *node, if (node->operations == NULL) return; - fb = clutter_paint_node_get_framebuffer (node); + fb = get_target_framebuffer (node); pango_layout_get_pixel_extents (tnode->layout, NULL, &extents); @@ -1004,7 +1016,7 @@ clutter_clip_node_pre_draw (ClutterPaintNode *node, if (node->operations == NULL) return FALSE; - fb = clutter_paint_node_get_framebuffer (node); + fb = get_target_framebuffer (node); for (i = 0; i < node->operations->len; i++) { @@ -1048,7 +1060,7 @@ clutter_clip_node_post_draw (ClutterPaintNode *node, if (node->operations == NULL) return; - fb = clutter_paint_node_get_framebuffer (node); + fb = get_target_framebuffer (node); for (i = 0; i < node->operations->len; i++) { diff --git a/src/compositor/meta-shaped-texture.c b/src/compositor/meta-shaped-texture.c index ec02667ac..7a1a91df5 100644 --- a/src/compositor/meta-shaped-texture.c +++ b/src/compositor/meta-shaped-texture.c @@ -525,6 +525,7 @@ do_paint_content (MetaShapedTexture *stex, cairo_region_t *blended_tex_region; CoglContext *ctx; CoglPipelineFilter filter; + CoglFramebuffer *framebuffer; ensure_size_valid (stex); @@ -547,7 +548,10 @@ do_paint_content (MetaShapedTexture *stex, filter = COGL_PIPELINE_FILTER_LINEAR; - if (meta_actor_painting_untransformed (clutter_paint_node_get_framebuffer (root_node), + framebuffer = clutter_paint_node_get_framebuffer (root_node); + if (!framebuffer) + framebuffer = cogl_get_draw_framebuffer (); + if (meta_actor_painting_untransformed (framebuffer, dst_width, dst_height, NULL, NULL)) filter = COGL_PIPELINE_FILTER_NEAREST;