From 3f65837e0dba188d4ff734be0c4be750746b27ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Fri, 22 Nov 2019 11:41:04 +0100 Subject: [PATCH] clutter, core: Stop using the Cogl framebuffer stack The Cogl framebuffer stack is going away; replace all its uses by the framebuffer stack carried by the paint context. https://gitlab.gnome.org/GNOME/mutter/merge_requests/935 --- clutter/clutter/clutter-blur-effect.c | 3 +- .../clutter-brightness-contrast-effect.c | 3 +- clutter/clutter/clutter-colorize-effect.c | 3 +- clutter/clutter/clutter-deform-effect.c | 3 +- clutter/clutter/clutter-desaturate-effect.c | 3 +- clutter/clutter/clutter-offscreen-effect.c | 14 ++++---- clutter/clutter/clutter-paint-nodes.c | 32 +++++++++++-------- clutter/clutter/clutter-stage.c | 7 ---- clutter/clutter/clutter-text.c | 2 +- clutter/clutter/cogl/clutter-stage-cogl.c | 2 -- .../clutter/deprecated/clutter-rectangle.c | 3 +- src/backends/meta-stage.c | 10 ++++-- src/compositor/meta-background-actor.c | 7 ++-- src/compositor/meta-shaped-texture.c | 28 +++++++++------- src/compositor/meta-texture-tower.c | 12 ++++--- src/compositor/meta-texture-tower.h | 3 +- src/compositor/meta-window-actor-x11.c | 4 ++- src/compositor/meta-window-actor.c | 4 --- src/compositor/meta-window-group.c | 2 +- .../conform/actor-offscreen-redirect.c | 2 +- src/tests/clutter/conform/binding-pool.c | 2 +- .../clutter/interactive/test-binding-pool.c | 3 +- .../clutter/interactive/test-cogl-offscreen.c | 3 +- .../interactive/test-cogl-point-sprites.c | 3 +- .../interactive/test-cogl-tex-convert.c | 3 +- .../interactive/test-cogl-tex-polygon.c | 3 +- .../clutter/interactive/test-cogl-tex-tile.c | 3 +- .../clutter/interactive/test-paint-wrapper.c | 6 ++-- .../clutter/micro-bench/test-cogl-perf.c | 11 ++++--- 29 files changed, 105 insertions(+), 79 deletions(-) diff --git a/clutter/clutter/clutter-blur-effect.c b/clutter/clutter/clutter-blur-effect.c index c2a739eb7..5236042de 100644 --- a/clutter/clutter/clutter-blur-effect.c +++ b/clutter/clutter/clutter-blur-effect.c @@ -162,7 +162,8 @@ clutter_blur_effect_paint_target (ClutterOffscreenEffect *effect, ClutterPaintContext *paint_context) { ClutterBlurEffect *self = CLUTTER_BLUR_EFFECT (effect); - CoglFramebuffer *framebuffer = cogl_get_draw_framebuffer (); + CoglFramebuffer *framebuffer = + clutter_paint_context_get_framebuffer (paint_context); guint8 paint_opacity; paint_opacity = clutter_actor_get_paint_opacity (self->actor); diff --git a/clutter/clutter/clutter-brightness-contrast-effect.c b/clutter/clutter/clutter-brightness-contrast-effect.c index 01d43f1fa..b984e2d82 100644 --- a/clutter/clutter/clutter-brightness-contrast-effect.c +++ b/clutter/clutter/clutter-brightness-contrast-effect.c @@ -180,7 +180,8 @@ clutter_brightness_contrast_effect_paint_target (ClutterOffscreenEffect *effect, ClutterPaintContext *paint_context) { ClutterBrightnessContrastEffect *self = CLUTTER_BRIGHTNESS_CONTRAST_EFFECT (effect); - CoglFramebuffer *framebuffer = cogl_get_draw_framebuffer (); + CoglFramebuffer *framebuffer = + clutter_paint_context_get_framebuffer (paint_context); ClutterActor *actor; guint8 paint_opacity; diff --git a/clutter/clutter/clutter-colorize-effect.c b/clutter/clutter/clutter-colorize-effect.c index 811787036..db372a9cb 100644 --- a/clutter/clutter/clutter-colorize-effect.c +++ b/clutter/clutter/clutter-colorize-effect.c @@ -150,7 +150,8 @@ clutter_colorize_effect_paint_target (ClutterOffscreenEffect *effect, ClutterPaintContext *paint_context) { ClutterColorizeEffect *self = CLUTTER_COLORIZE_EFFECT (effect); - CoglFramebuffer *framebuffer = cogl_get_draw_framebuffer (); + CoglFramebuffer *framebuffer = + clutter_paint_context_get_framebuffer (paint_context); ClutterActor *actor; guint8 paint_opacity; diff --git a/clutter/clutter/clutter-deform-effect.c b/clutter/clutter/clutter-deform-effect.c index 4dbf76af2..59ef1ff75 100644 --- a/clutter/clutter/clutter-deform-effect.c +++ b/clutter/clutter/clutter-deform-effect.c @@ -174,7 +174,8 @@ clutter_deform_effect_paint_target (ClutterOffscreenEffect *effect, CoglHandle material; CoglPipeline *pipeline; CoglDepthState depth_state; - CoglFramebuffer *fb = cogl_get_draw_framebuffer (); + CoglFramebuffer *fb = + clutter_paint_context_get_framebuffer (paint_context); if (priv->is_dirty) { diff --git a/clutter/clutter/clutter-desaturate-effect.c b/clutter/clutter/clutter-desaturate-effect.c index 4ed522e0c..82d9911ff 100644 --- a/clutter/clutter/clutter-desaturate-effect.c +++ b/clutter/clutter/clutter-desaturate-effect.c @@ -157,7 +157,8 @@ clutter_desaturate_effect_paint_target (ClutterOffscreenEffect *effect, ClutterPaintContext *paint_context) { ClutterDesaturateEffect *self = CLUTTER_DESATURATE_EFFECT (effect); - CoglFramebuffer *framebuffer = cogl_get_draw_framebuffer (); + CoglFramebuffer *framebuffer = + clutter_paint_context_get_framebuffer (paint_context); ClutterActor *actor; CoglHandle texture; guint8 paint_opacity; diff --git a/clutter/clutter/clutter-offscreen-effect.c b/clutter/clutter/clutter-offscreen-effect.c index 11c2cddb5..131a42a8b 100644 --- a/clutter/clutter/clutter-offscreen-effect.c +++ b/clutter/clutter/clutter-offscreen-effect.c @@ -74,6 +74,7 @@ #include "clutter-debug.h" #include "clutter-private.h" #include "clutter-stage-private.h" +#include "clutter-paint-context-private.h" #include "clutter-paint-volume-private.h" #include "clutter-actor-box-private.h" @@ -317,8 +318,7 @@ clutter_offscreen_effect_pre_paint (ClutterEffect *effect, framebuffer = clutter_paint_context_get_framebuffer (paint_context); cogl_framebuffer_get_modelview_matrix (framebuffer, &old_modelview); - /* let's draw offscreen */ - cogl_push_framebuffer (priv->offscreen); + clutter_paint_context_push_framebuffer (paint_context, priv->offscreen); /* We don't want the FBO contents to be transformed. That could waste memory * (e.g. during zoom), or result in something that's not rectangular (clipped @@ -387,7 +387,8 @@ clutter_offscreen_effect_real_paint_target (ClutterOffscreenEffect *effect, ClutterPaintContext *paint_context) { ClutterOffscreenEffectPrivate *priv = effect->priv; - CoglFramebuffer *framebuffer = cogl_get_draw_framebuffer (); + CoglFramebuffer *framebuffer = + clutter_paint_context_get_framebuffer (paint_context); guint8 paint_opacity; paint_opacity = clutter_actor_get_paint_opacity (priv->actor); @@ -417,7 +418,8 @@ clutter_offscreen_effect_paint_texture (ClutterOffscreenEffect *effect, ClutterPaintContext *paint_context) { ClutterOffscreenEffectPrivate *priv = effect->priv; - CoglFramebuffer *framebuffer = cogl_get_draw_framebuffer (); + CoglFramebuffer *framebuffer = + clutter_paint_context_get_framebuffer (paint_context); CoglMatrix modelview; float resource_scale; @@ -465,9 +467,9 @@ clutter_offscreen_effect_post_paint (ClutterEffect *effect, /* Restore the previous opacity override */ clutter_actor_set_opacity_override (priv->actor, priv->old_opacity_override); - framebuffer = cogl_get_draw_framebuffer (); + framebuffer = clutter_paint_context_get_framebuffer (paint_context); cogl_framebuffer_pop_matrix (framebuffer); - cogl_pop_framebuffer (); + clutter_paint_context_pop_framebuffer (paint_context); clutter_offscreen_effect_paint_texture (self, paint_context); } diff --git a/clutter/clutter/clutter-paint-nodes.c b/clutter/clutter/clutter-paint-nodes.c index 9f3024917..1f02f3a88 100644 --- a/clutter/clutter/clutter-paint-nodes.c +++ b/clutter/clutter/clutter-paint-nodes.c @@ -44,6 +44,7 @@ #include "clutter-color.h" #include "clutter-debug.h" #include "clutter-private.h" +#include "clutter-paint-context-private.h" #include "clutter-paint-nodes.h" @@ -108,7 +109,7 @@ clutter_root_node_pre_draw (ClutterPaintNode *node, { ClutterRootNode *rnode = (ClutterRootNode *) node; - cogl_push_framebuffer (rnode->framebuffer); + clutter_paint_context_push_framebuffer (paint_context, rnode->framebuffer); cogl_framebuffer_clear (rnode->framebuffer, rnode->clear_flags, @@ -121,7 +122,7 @@ static void clutter_root_node_post_draw (ClutterPaintNode *node, ClutterPaintContext *paint_context) { - cogl_pop_framebuffer (); + clutter_paint_context_pop_framebuffer (paint_context); } static void @@ -205,7 +206,8 @@ clutter_transform_node_pre_draw (ClutterPaintNode *node, ClutterPaintContext *paint_context) { ClutterTransformNode *transform_node = (ClutterTransformNode *) node; - CoglFramebuffer *fb = cogl_get_draw_framebuffer (); + CoglFramebuffer *fb = + clutter_paint_context_get_framebuffer (paint_context); cogl_framebuffer_push_matrix (fb); cogl_framebuffer_transform (fb, &transform_node->transform); @@ -217,7 +219,8 @@ static void clutter_transform_node_post_draw (ClutterPaintNode *node, ClutterPaintContext *paint_context) { - CoglFramebuffer *fb = cogl_get_draw_framebuffer (); + CoglFramebuffer *fb = + clutter_paint_context_get_framebuffer (paint_context); cogl_framebuffer_pop_matrix (fb); } @@ -411,7 +414,8 @@ clutter_pipeline_node_pre_draw (ClutterPaintNode *node, } static CoglFramebuffer * -get_target_framebuffer (ClutterPaintNode *node) +get_target_framebuffer (ClutterPaintNode *node, + ClutterPaintContext *paint_context) { CoglFramebuffer *framebuffer; @@ -419,7 +423,7 @@ get_target_framebuffer (ClutterPaintNode *node) if (framebuffer) return framebuffer; - return cogl_get_draw_framebuffer (); + return clutter_paint_context_get_framebuffer (paint_context); } static void @@ -436,7 +440,7 @@ clutter_pipeline_node_draw (ClutterPaintNode *node, if (node->operations == NULL) return; - fb = cogl_get_draw_framebuffer (); + fb = clutter_paint_context_get_framebuffer (paint_context); for (i = 0; i < node->operations->len; i++) { @@ -828,7 +832,7 @@ clutter_text_node_draw (ClutterPaintNode *node, if (node->operations == NULL) return; - fb = get_target_framebuffer (node); + fb = get_target_framebuffer (node, paint_context); pango_layout_get_pixel_extents (tnode->layout, NULL, &extents); @@ -1014,7 +1018,7 @@ clutter_clip_node_pre_draw (ClutterPaintNode *node, if (node->operations == NULL) return FALSE; - fb = get_target_framebuffer (node); + fb = get_target_framebuffer (node, paint_context); for (i = 0; i < node->operations->len; i++) { @@ -1058,7 +1062,7 @@ clutter_clip_node_post_draw (ClutterPaintNode *node, if (node->operations == NULL) return; - fb = get_target_framebuffer (node); + fb = get_target_framebuffer (node, paint_context); for (i = 0; i < node->operations->len; i++) { @@ -1272,10 +1276,10 @@ clutter_layer_node_pre_draw (ClutterPaintNode *node, /* copy the same modelview from the current framebuffer to the one we * are going to use */ - framebuffer = cogl_get_draw_framebuffer (); + framebuffer = clutter_paint_context_get_framebuffer (paint_context); cogl_framebuffer_get_modelview_matrix (framebuffer, &matrix); - cogl_push_framebuffer (lnode->offscreen); + clutter_paint_context_push_framebuffer (paint_context, lnode->offscreen); cogl_framebuffer_set_modelview_matrix (lnode->offscreen, &matrix); @@ -1312,9 +1316,9 @@ clutter_layer_node_post_draw (ClutterPaintNode *node, /* switch to the previous framebuffer */ cogl_framebuffer_pop_matrix (lnode->offscreen); - cogl_pop_framebuffer (); + clutter_paint_context_pop_framebuffer (paint_context); - fb = cogl_get_draw_framebuffer (); + fb = clutter_paint_context_get_framebuffer (paint_context); for (i = 0; i < node->operations->len; i++) { diff --git a/clutter/clutter/clutter-stage.c b/clutter/clutter/clutter-stage.c index dec8328f3..dbd64645a 100644 --- a/clutter/clutter/clutter-stage.c +++ b/clutter/clutter/clutter-stage.c @@ -2769,7 +2769,6 @@ clutter_stage_read_pixels (ClutterStage *stage, return NULL; framebuffer = clutter_stage_view_get_framebuffer (view); - cogl_push_framebuffer (framebuffer); clutter_stage_do_paint_view (stage, view, &clip_rect); view_scale = clutter_stage_view_get_scale (view); @@ -2784,8 +2783,6 @@ clutter_stage_read_pixels (ClutterStage *stage, COGL_PIXEL_FORMAT_RGBA_8888, pixels); - cogl_pop_framebuffer (); - return pixels; } @@ -4414,7 +4411,6 @@ capture_view_into (ClutterStage *stage, if (paint) { - cogl_push_framebuffer (framebuffer); _clutter_stage_maybe_setup_viewport (stage, view); clutter_stage_do_paint_view (stage, view, rect); } @@ -4439,9 +4435,6 @@ capture_view_into (ClutterStage *stage, COGL_READ_PIXELS_COLOR_BUFFER, bitmap); - if (paint) - cogl_pop_framebuffer (); - cogl_object_unref (bitmap); } diff --git a/clutter/clutter/clutter-text.c b/clutter/clutter/clutter-text.c index 461e29fbf..ef1fee27f 100644 --- a/clutter/clutter/clutter-text.c +++ b/clutter/clutter/clutter-text.c @@ -2567,7 +2567,7 @@ clutter_text_paint (ClutterActor *self, float alloc_height; float resource_scale; - fb = cogl_get_draw_framebuffer (); + fb = clutter_paint_context_get_framebuffer (paint_context); /* Note that if anything in this paint method changes it needs to be reflected in the get_paint_volume implementation which is tightly diff --git a/clutter/clutter/cogl/clutter-stage-cogl.c b/clutter/clutter/cogl/clutter-stage-cogl.c index 4304db6e1..64317b6f1 100644 --- a/clutter/clutter/cogl/clutter-stage-cogl.c +++ b/clutter/clutter/cogl/clutter-stage-cogl.c @@ -869,7 +869,6 @@ clutter_stage_cogl_redraw_view (ClutterStageWindow *stage_window, } } - cogl_push_framebuffer (fb); if (use_clipped_redraw && clip_region_empty) { CLUTTER_NOTE (CLIPPING, "Empty stage output paint\n"); @@ -960,7 +959,6 @@ clutter_stage_cogl_redraw_view (ClutterStageWindow *stage_window, cairo_region_destroy (view_region); } } - cogl_pop_framebuffer (); cairo_region_get_extents (redraw_clip, &redraw_rect); diff --git a/clutter/clutter/deprecated/clutter-rectangle.c b/clutter/clutter/deprecated/clutter-rectangle.c index bd2fc599d..fafcafa26 100644 --- a/clutter/clutter/deprecated/clutter-rectangle.c +++ b/clutter/clutter/deprecated/clutter-rectangle.c @@ -82,7 +82,8 @@ clutter_rectangle_paint (ClutterActor *self, ClutterPaintContext *paint_context) { ClutterRectanglePrivate *priv = CLUTTER_RECTANGLE (self)->priv; - CoglFramebuffer *framebuffer = cogl_get_draw_framebuffer (); + CoglFramebuffer *framebuffer = + clutter_paint_context_get_framebuffer (paint_context); static CoglPipeline *default_color_pipeline = NULL; CoglPipeline *content_pipeline; ClutterActorBox alloc; diff --git a/src/backends/meta-stage.c b/src/backends/meta-stage.c index 939ca809e..478c60f33 100644 --- a/src/backends/meta-stage.c +++ b/src/backends/meta-stage.c @@ -119,14 +119,18 @@ meta_overlay_set (MetaOverlay *overlay, } static void -meta_overlay_paint (MetaOverlay *overlay) +meta_overlay_paint (MetaOverlay *overlay, + ClutterPaintContext *paint_context) { + CoglFramebuffer *framebuffer; + if (!overlay->enabled) return; g_assert (meta_is_wayland_compositor ()); - cogl_framebuffer_draw_rectangle (cogl_get_draw_framebuffer (), + framebuffer = clutter_paint_context_get_framebuffer (paint_context); + cogl_framebuffer_draw_rectangle (framebuffer, overlay->pipeline, overlay->current_rect.origin.x, overlay->current_rect.origin.y, @@ -198,7 +202,7 @@ meta_stage_paint (ClutterActor *actor, g_signal_emit (stage, signals[ACTORS_PAINTED], 0); for (l = stage->overlays; l; l = l->next) - meta_overlay_paint (l->data); + meta_overlay_paint (l->data, paint_context); notify_watchers_for_mode (stage, stage->current_view, META_STAGE_WATCH_AFTER_OVERLAY_PAINT); diff --git a/src/compositor/meta-background-actor.c b/src/compositor/meta-background-actor.c index 46cf3e9e4..466dfc2ab 100644 --- a/src/compositor/meta-background-actor.c +++ b/src/compositor/meta-background-actor.c @@ -337,6 +337,7 @@ make_pipeline (PipelineFlags pipeline_flags) static void setup_pipeline (MetaBackgroundActor *self, + ClutterPaintContext *paint_context, cairo_rectangle_int_t *actor_pixel_rect) { PipelineFlags pipeline_flags = 0; @@ -436,7 +437,7 @@ setup_pipeline (MetaBackgroundActor *self, color_component, opacity / 255.); - fb = cogl_get_draw_framebuffer (); + fb = clutter_paint_context_get_framebuffer (paint_context); if (!self->force_bilinear && meta_actor_painting_untransformed (fb, actor_pixel_rect->width, @@ -526,14 +527,14 @@ meta_background_actor_paint (ClutterActor *actor, actor_pixel_rect.width = actor_box.x2 - actor_box.x1; actor_pixel_rect.height = actor_box.y2 - actor_box.y1; - setup_pipeline (self, &actor_pixel_rect); + setup_pipeline (self, paint_context, &actor_pixel_rect); set_glsl_parameters (self, &actor_pixel_rect); /* Limit to how many separate rectangles we'll draw; beyond this just * fall back and draw the whole thing */ #define MAX_RECTS 64 - fb = cogl_get_draw_framebuffer (); + fb = clutter_paint_context_get_framebuffer (paint_context); /* Now figure out what to actually paint. */ diff --git a/src/compositor/meta-shaped-texture.c b/src/compositor/meta-shaped-texture.c index 7a1a91df5..0079c0df5 100644 --- a/src/compositor/meta-shaped-texture.c +++ b/src/compositor/meta-shaped-texture.c @@ -512,12 +512,12 @@ texture_is_idle_and_not_mipmapped (gpointer user_data) } static void -do_paint_content (MetaShapedTexture *stex, - ClutterPaintNode *root_node, - CoglTexture *paint_tex, - ClutterActorBox *alloc, - uint8_t opacity) - +do_paint_content (MetaShapedTexture *stex, + ClutterPaintNode *root_node, + ClutterPaintContext *paint_context, + CoglTexture *paint_tex, + ClutterActorBox *alloc, + uint8_t opacity) { int dst_width, dst_height; cairo_rectangle_int_t content_rect; @@ -550,7 +550,7 @@ do_paint_content (MetaShapedTexture *stex, framebuffer = clutter_paint_node_get_framebuffer (root_node); if (!framebuffer) - framebuffer = cogl_get_draw_framebuffer (); + framebuffer = clutter_paint_context_get_framebuffer (paint_context); if (meta_actor_painting_untransformed (framebuffer, dst_width, dst_height, NULL, NULL)) @@ -680,7 +680,8 @@ do_paint_content (MetaShapedTexture *stex, } static CoglTexture * -select_texture_for_paint (MetaShapedTexture *stex) +select_texture_for_paint (MetaShapedTexture *stex, + ClutterPaintContext *paint_context) { CoglTexture *texture = NULL; int64_t now; @@ -696,7 +697,10 @@ select_texture_for_paint (MetaShapedTexture *stex) if (age >= MIN_MIPMAP_AGE_USEC || stex->fast_updates < MIN_FAST_UPDATES_BEFORE_UNMIPMAP) - texture = meta_texture_tower_get_paint_texture (stex->paint_tower); + { + texture = meta_texture_tower_get_paint_texture (stex->paint_tower, + paint_context); + } } if (!texture) @@ -745,14 +749,14 @@ meta_shaped_texture_paint_content (ClutterContent *content, * Setting the texture quality to high without SGIS_generate_mipmap * support for TFP textures will result in fallbacks to XGetImage. */ - paint_tex = select_texture_for_paint (stex); + paint_tex = select_texture_for_paint (stex, paint_context); if (!paint_tex) return; opacity = clutter_actor_get_paint_opacity (actor); clutter_actor_get_content_box (actor, &alloc); - do_paint_content (stex, root_node, paint_tex, &alloc, opacity); + do_paint_content (stex, root_node, paint_context, paint_tex, &alloc, opacity); } static gboolean @@ -1242,7 +1246,7 @@ get_image_via_offscreen (MetaShapedTexture *stex, paint_context = clutter_paint_context_new_for_framebuffer (fb); - do_paint_content (stex, root_node, + do_paint_content (stex, root_node, paint_context, stex->texture, &(ClutterActorBox) { 0, 0, diff --git a/src/compositor/meta-texture-tower.c b/src/compositor/meta-texture-tower.c index c4b225f33..b0df9ed06 100644 --- a/src/compositor/meta-texture-tower.c +++ b/src/compositor/meta-texture-tower.c @@ -243,7 +243,9 @@ meta_texture_tower_update_area (MetaTextureTower *tower, * Meta. */ static int -get_paint_level (int width, int height) +get_paint_level (ClutterPaintContext *paint_context, + int width, + int height) { CoglFramebuffer *framebuffer; CoglMatrix projection, modelview, pm; @@ -272,7 +274,7 @@ get_paint_level (int width, int height) * (w_c) (w_o) (1) */ - framebuffer = cogl_get_draw_framebuffer (); + framebuffer = clutter_paint_context_get_framebuffer (paint_context); cogl_framebuffer_get_projection_matrix (framebuffer, &projection); cogl_framebuffer_get_modelview_matrix (framebuffer, &modelview); @@ -419,6 +421,7 @@ texture_tower_revalidate (MetaTextureTower *tower, /** * meta_texture_tower_get_paint_texture: * @tower: a #MetaTextureTower + * @paint_context: a #ClutterPaintContext * * Gets the texture from the tower that best matches the current * rendering scale. (On the assumption here the texture is going to @@ -430,7 +433,8 @@ texture_tower_revalidate (MetaTextureTower *tower, * %NULL if no base texture has yet been set. */ CoglTexture * -meta_texture_tower_get_paint_texture (MetaTextureTower *tower) +meta_texture_tower_get_paint_texture (MetaTextureTower *tower, + ClutterPaintContext *paint_context) { int texture_width, texture_height; int level; @@ -443,7 +447,7 @@ meta_texture_tower_get_paint_texture (MetaTextureTower *tower) texture_width = cogl_texture_get_width (tower->textures[0]); texture_height = cogl_texture_get_height (tower->textures[0]); - level = get_paint_level(texture_width, texture_height); + level = get_paint_level (paint_context, texture_width, texture_height); if (level < 0) /* singular paint matrix, scaled to nothing */ return NULL; level = MIN (level, tower->n_levels - 1); diff --git a/src/compositor/meta-texture-tower.h b/src/compositor/meta-texture-tower.h index 6a39e4184..1f5b37146 100644 --- a/src/compositor/meta-texture-tower.h +++ b/src/compositor/meta-texture-tower.h @@ -60,7 +60,8 @@ void meta_texture_tower_update_area (MetaTextureTower *tower, int y, int width, int height); -CoglTexture *meta_texture_tower_get_paint_texture (MetaTextureTower *tower); +CoglTexture *meta_texture_tower_get_paint_texture (MetaTextureTower *tower, + ClutterPaintContext *paint_context); G_END_DECLS diff --git a/src/compositor/meta-window-actor-x11.c b/src/compositor/meta-window-actor-x11.c index 957525ec7..b7032e0ba 100644 --- a/src/compositor/meta-window-actor-x11.c +++ b/src/compositor/meta-window-actor-x11.c @@ -1168,6 +1168,7 @@ meta_window_actor_x11_paint (ClutterActor *actor, MetaShadowParams params; cairo_rectangle_int_t shape_bounds; cairo_region_t *clip = actor_x11->shadow_clip; + CoglFramebuffer *framebuffer; get_shape_bounds (actor_x11, &shape_bounds); get_shadow_params (actor_x11, appears_focused, ¶ms); @@ -1188,8 +1189,9 @@ meta_window_actor_x11_paint (ClutterActor *actor, cairo_region_subtract (clip, frame_bounds); } + framebuffer = clutter_paint_context_get_framebuffer (paint_context); meta_shadow_paint (shadow, - cogl_get_draw_framebuffer (), + framebuffer, params.x_offset + shape_bounds.x, params.y_offset + shape_bounds.y, shape_bounds.width, diff --git a/src/compositor/meta-window-actor.c b/src/compositor/meta-window-actor.c index 00ba043f9..a42dfaf7b 100644 --- a/src/compositor/meta-window-actor.c +++ b/src/compositor/meta-window-actor.c @@ -1403,8 +1403,6 @@ meta_window_actor_get_image (MetaWindowActor *self, cogl_color_init_from_4ub (&clear_color, 0, 0, 0, 0); clutter_actor_get_position (actor, &x, &y); - cogl_push_framebuffer (framebuffer); - cogl_framebuffer_clear (framebuffer, COGL_BUFFER_BIT_COLOR, &clear_color); cogl_framebuffer_orthographic (framebuffer, 0, 0, width, height, 0, 1.0); cogl_framebuffer_scale (framebuffer, resource_scale, resource_scale, 1); @@ -1414,8 +1412,6 @@ meta_window_actor_get_image (MetaWindowActor *self, clutter_actor_paint (actor, paint_context); clutter_paint_context_destroy (paint_context); - cogl_pop_framebuffer (); - if (clip) { meta_rectangle_scale_double (clip, resource_scale, diff --git a/src/compositor/meta-window-group.c b/src/compositor/meta-window-group.c index 7d35becf6..76ba88e61 100644 --- a/src/compositor/meta-window-group.c +++ b/src/compositor/meta-window-group.c @@ -83,7 +83,7 @@ meta_window_group_paint (ClutterActor *actor, { CoglFramebuffer *fb; - fb = cogl_get_draw_framebuffer (); + fb = clutter_paint_context_get_framebuffer (paint_context); if (!meta_actor_painting_untransformed (fb, screen_width, screen_height, diff --git a/src/tests/clutter/conform/actor-offscreen-redirect.c b/src/tests/clutter/conform/actor-offscreen-redirect.c index cd6659610..820ccb4b4 100644 --- a/src/tests/clutter/conform/actor-offscreen-redirect.c +++ b/src/tests/clutter/conform/actor-offscreen-redirect.c @@ -58,7 +58,7 @@ foo_actor_paint (ClutterActor *actor, 255, 0, 0, foo_actor->last_paint_opacity); - framebuffer = cogl_get_draw_framebuffer (); + framebuffer = clutter_paint_context_get_framebuffer (paint_context); cogl_framebuffer_draw_rectangle (framebuffer, pipeline, allocation.x1, diff --git a/src/tests/clutter/conform/binding-pool.c b/src/tests/clutter/conform/binding-pool.c index 6d9fc6714..a14ea573e 100644 --- a/src/tests/clutter/conform/binding-pool.c +++ b/src/tests/clutter/conform/binding-pool.c @@ -147,7 +147,7 @@ key_group_paint (ClutterActor *actor, pipeline = cogl_pipeline_new (ctx); cogl_pipeline_set_color4ub (pipeline, 255, 255, 0, 224); - framebuffer = cogl_get_draw_framebuffer (); + framebuffer = clutter_paint_context_get_framebuffer (paint_context); clutter_actor_iter_init (&iter, actor); while (clutter_actor_iter_next (&iter, &child)) diff --git a/src/tests/clutter/interactive/test-binding-pool.c b/src/tests/clutter/interactive/test-binding-pool.c index 669664ec1..c9ddfe57a 100644 --- a/src/tests/clutter/interactive/test-binding-pool.c +++ b/src/tests/clutter/interactive/test-binding-pool.c @@ -157,7 +157,8 @@ key_group_paint (ClutterActor *actor, ClutterActorIter iter; ClutterActor *child; gint i = 0; - CoglFramebuffer *framebuffer = cogl_get_draw_framebuffer (); + CoglFramebuffer *framebuffer = + clutter_paint_context_get_framebuffer (paint_context); CoglContext *ctx = cogl_framebuffer_get_context (framebuffer); CoglPipeline *pipeline; diff --git a/src/tests/clutter/interactive/test-cogl-offscreen.c b/src/tests/clutter/interactive/test-cogl-offscreen.c index 7b96cf403..bade842d4 100644 --- a/src/tests/clutter/interactive/test-cogl-offscreen.c +++ b/src/tests/clutter/interactive/test-cogl-offscreen.c @@ -87,7 +87,8 @@ test_coglbox_paint (ClutterActor *self, ClutterPaintContext *paint_context) { TestCoglboxPrivate *priv = TEST_COGLBOX_GET_PRIVATE (self); - CoglFramebuffer *framebuffer = cogl_get_draw_framebuffer (); + CoglFramebuffer *framebuffer = + clutter_paint_context_get_framebuffer (paint_context); CoglContext *ctx = cogl_framebuffer_get_context (framebuffer); gfloat texcoords[4] = { 0, 0, 1, 1 }; CoglPipeline *pipeline; diff --git a/src/tests/clutter/interactive/test-cogl-point-sprites.c b/src/tests/clutter/interactive/test-cogl-point-sprites.c index 4a8981fe4..e89367083 100644 --- a/src/tests/clutter/interactive/test-cogl-point-sprites.c +++ b/src/tests/clutter/interactive/test-cogl-point-sprites.c @@ -99,7 +99,8 @@ paint_cb (ClutterActor *stage, ClutterPaintContext *paint_context, Data *data) { - CoglFramebuffer *framebuffer = cogl_get_draw_framebuffer (); + CoglFramebuffer *framebuffer = + clutter_paint_context_get_framebuffer (paint_context); CoglMatrix old_matrix, new_matrix; int i; float diff_time; diff --git a/src/tests/clutter/interactive/test-cogl-tex-convert.c b/src/tests/clutter/interactive/test-cogl-tex-convert.c index cbc071cb3..5f4257d7c 100644 --- a/src/tests/clutter/interactive/test-cogl-tex-convert.c +++ b/src/tests/clutter/interactive/test-cogl-tex-convert.c @@ -87,7 +87,8 @@ test_coglbox_paint (ClutterActor *self, { TestCoglboxPrivate *priv = TEST_COGLBOX_GET_PRIVATE (self); CoglPipeline *pipeline; - CoglFramebuffer *framebuffer = cogl_get_draw_framebuffer (); + CoglFramebuffer *framebuffer = + clutter_paint_context_get_framebuffer (paint_context); CoglContext *ctx = cogl_framebuffer_get_context (framebuffer); gfloat texcoords[4] = { 0.0, 0.0, 1.0, 1.0 }; diff --git a/src/tests/clutter/interactive/test-cogl-tex-polygon.c b/src/tests/clutter/interactive/test-cogl-tex-polygon.c index 8f4824f0d..654401b4d 100644 --- a/src/tests/clutter/interactive/test-cogl-tex-polygon.c +++ b/src/tests/clutter/interactive/test-cogl-tex-polygon.c @@ -197,7 +197,8 @@ test_coglbox_paint (ClutterActor *self, : priv->not_sliced_tex; int tex_width = cogl_texture_get_width (tex_handle); int tex_height = cogl_texture_get_height (tex_handle); - CoglFramebuffer *framebuffer = cogl_get_draw_framebuffer (); + CoglFramebuffer *framebuffer = + clutter_paint_context_get_framebuffer (paint_context); CoglHandle material = cogl_material_new (); cogl_material_set_layer (material, 0, tex_handle); diff --git a/src/tests/clutter/interactive/test-cogl-tex-tile.c b/src/tests/clutter/interactive/test-cogl-tex-tile.c index 2e681740c..9948696a4 100644 --- a/src/tests/clutter/interactive/test-cogl-tex-tile.c +++ b/src/tests/clutter/interactive/test-cogl-tex-tile.c @@ -87,7 +87,8 @@ test_coglbox_paint (ClutterActor *self, ClutterPaintContext *paint_context) { TestCoglboxPrivate *priv = TEST_COGLBOX_GET_PRIVATE (self); - CoglFramebuffer *framebuffer = cogl_get_draw_framebuffer (); + CoglFramebuffer *framebuffer = + clutter_paint_context_get_framebuffer (paint_context); CoglContext *ctx = cogl_framebuffer_get_context (framebuffer); CoglPipeline *pipeline; gfloat texcoords[4] = { 0.0f, 0.0f, 1.0f, 1.0f }; diff --git a/src/tests/clutter/interactive/test-paint-wrapper.c b/src/tests/clutter/interactive/test-paint-wrapper.c index 7ad20e2fa..6e8c293db 100644 --- a/src/tests/clutter/interactive/test-paint-wrapper.c +++ b/src/tests/clutter/interactive/test-paint-wrapper.c @@ -148,7 +148,8 @@ hand_pre_paint (ClutterActor *actor, ClutterPaintContext *paint_context, gpointer user_data) { - CoglFramebuffer *framebuffer = cogl_get_draw_framebuffer (); + CoglFramebuffer *framebuffer = + clutter_paint_context_get_framebuffer (paint_context); CoglContext *ctx = cogl_framebuffer_get_context (framebuffer); CoglPipeline *pipeline; SuperOH *oh = user_data; @@ -176,7 +177,8 @@ hand_post_paint (ClutterActor *actor, ClutterPaintContext *paint_context, gpointer user_data) { - CoglFramebuffer *framebuffer = cogl_get_draw_framebuffer (); + CoglFramebuffer *framebuffer = + clutter_paint_context_get_framebuffer (paint_context); CoglContext *ctx = cogl_framebuffer_get_context (framebuffer); CoglPipeline *pipeline; SuperOH *oh = user_data; diff --git a/src/tests/clutter/micro-bench/test-cogl-perf.c b/src/tests/clutter/micro-bench/test-cogl-perf.c index 03038ae4f..9bf8a4721 100644 --- a/src/tests/clutter/micro-bench/test-cogl-perf.c +++ b/src/tests/clutter/micro-bench/test-cogl-perf.c @@ -27,14 +27,17 @@ typedef struct _TestState int current_test; } TestState; -typedef void (*TestCallback) (TestState *state); +typedef void (*TestCallback) (TestState *state, + ClutterPaintContext *paint_context); static void -test_rectangles (TestState *state) +test_rectangles (TestState *state, + ClutterPaintContext *paint_context) { #define RECT_WIDTH 5 #define RECT_HEIGHT 5 - CoglFramebuffer *framebuffer = cogl_get_draw_framebuffer (); + CoglFramebuffer *framebuffer = + clutter_paint_context_get_framebuffer (paint_context); CoglContext *ctx = cogl_framebuffer_get_context (framebuffer); int x; int y; @@ -111,7 +114,7 @@ on_paint (ClutterActor *actor, ClutterPaintContext *paint_context, TestState *state) { - tests[state->current_test] (state); + tests[state->current_test] (state, paint_context); } static gboolean