Use paint and pick context to get framebuffer

Mutter and Clutter was changed to pass around the current target
framebuffer via the paint context instead of via the deprecated Cogl
framebuffer stack.

The framebuffer stack has also been removed from Cogl so change to use
the one in the paint context instead.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/827
This commit is contained in:
Jonas Ådahl
2019-11-22 18:36:17 +01:00
committed by Georges Basile Stavracas Neto
parent 988a0e7314
commit 632a643994
10 changed files with 82 additions and 47 deletions

View File

@ -74,6 +74,7 @@ shell_glsl_effect_paint_target (ClutterOffscreenEffect *effect,
ShellGLSLEffectPrivate *priv;
ClutterActor *actor;
guint8 paint_opacity;
CoglFramebuffer *framebuffer;
priv = shell_glsl_effect_get_instance_private (self);
@ -85,7 +86,9 @@ shell_glsl_effect_paint_target (ClutterOffscreenEffect *effect,
paint_opacity,
paint_opacity,
paint_opacity);
cogl_framebuffer_draw_rectangle (cogl_get_draw_framebuffer (),
framebuffer = clutter_paint_context_get_framebuffer (paint_context);
cogl_framebuffer_draw_rectangle (framebuffer,
priv->pipeline,
0, 0,
priv->tex_width, priv->tex_height);

View File

@ -124,7 +124,7 @@ shell_invert_lightness_effect_paint_target (ClutterOffscreenEffect *effect,
ShellInvertLightnessEffect *self = SHELL_INVERT_LIGHTNESS_EFFECT (effect);
ClutterActor *actor;
guint8 paint_opacity;
CoglFramebuffer *fb = cogl_get_draw_framebuffer ();
CoglFramebuffer *fb = clutter_paint_context_get_framebuffer (paint_context);
actor = clutter_actor_meta_get_actor (CLUTTER_ACTOR_META (effect));
paint_opacity = clutter_actor_get_paint_opacity (actor);

View File

@ -397,7 +397,7 @@ st_box_layout_paint (ClutterActor *actor,
ClutterActorBox allocation_box;
ClutterActorBox content_box;
ClutterActor *child;
CoglFramebuffer *fb = cogl_get_draw_framebuffer ();
CoglFramebuffer *fb = clutter_paint_context_get_framebuffer (paint_context);
get_border_paint_offsets (self, &x, &y);
if (x != 0 || y != 0)
@ -454,7 +454,7 @@ st_box_layout_pick (ClutterActor *actor,
ClutterActorBox allocation_box;
ClutterActorBox content_box;
ClutterActor *child;
CoglFramebuffer *fb = cogl_get_draw_framebuffer ();
CoglFramebuffer *fb = clutter_pick_context_get_framebuffer (pick_context);
get_border_paint_offsets (self, &x, &y);
if (x != 0 || y != 0)

View File

@ -877,11 +877,16 @@ st_entry_paint (ClutterActor *actor,
}
if (priv->text_shadow_material != NULL)
_st_paint_shadow_with_opacity (shadow_spec,
cogl_get_draw_framebuffer (),
priv->text_shadow_material,
&allocation,
clutter_actor_get_paint_opacity (priv->entry));
{
CoglFramebuffer *framebuffer =
clutter_paint_context_get_framebuffer (paint_context);
_st_paint_shadow_with_opacity (shadow_spec,
framebuffer,
priv->text_shadow_material,
&allocation,
clutter_actor_get_paint_opacity (priv->entry));
}
}
/* Since we paint the background ourselves, chain to the parent class

View File

@ -178,10 +178,12 @@ st_icon_paint (ClutterActor *actor,
if (priv->shadow_pipeline)
{
ClutterActorBox allocation;
CoglFramebuffer *framebuffer;
clutter_actor_get_allocation_box (priv->icon_texture, &allocation);
framebuffer = clutter_paint_context_get_framebuffer (paint_context);
_st_paint_shadow_with_opacity (priv->shadow_spec,
cogl_get_draw_framebuffer (),
framebuffer,
priv->shadow_pipeline,
&allocation,
clutter_actor_get_paint_opacity (priv->icon_texture));

View File

@ -229,11 +229,17 @@ st_label_paint (ClutterActor *actor,
}
if (priv->text_shadow_pipeline != NULL)
_st_paint_shadow_with_opacity (shadow_spec,
cogl_get_draw_framebuffer (),
priv->text_shadow_pipeline,
&allocation,
clutter_actor_get_paint_opacity (priv->label));
{
CoglFramebuffer *framebuffer;
framebuffer =
clutter_paint_context_get_framebuffer (paint_context);
_st_paint_shadow_with_opacity (shadow_spec,
framebuffer,
priv->text_shadow_pipeline,
&allocation,
clutter_actor_get_paint_opacity (priv->label));
}
}
}

View File

@ -490,12 +490,6 @@ _st_create_shadow_pipeline_from_actor (StShadow *shadow_spec,
cogl_color_init_from_4ub (&clear_color, 0, 0, 0, 0);
clutter_actor_get_position (actor, &x, &y);
/* XXX: There's no way to render a ClutterActor to an offscreen
* as it uses the implicit API. */
G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
cogl_push_framebuffer (fb);
G_GNUC_END_IGNORE_DEPRECATIONS;
cogl_framebuffer_clear (fb, COGL_BUFFER_BIT_COLOR, &clear_color);
cogl_framebuffer_translate (fb, -x, -y, 0);
cogl_framebuffer_orthographic (fb, 0, 0, width, height, 0, 1.0);
@ -507,10 +501,6 @@ _st_create_shadow_pipeline_from_actor (StShadow *shadow_spec,
clutter_actor_paint (actor, paint_context);
clutter_paint_context_destroy (paint_context);
G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
cogl_pop_framebuffer ();
G_GNUC_END_IGNORE_DEPRECATIONS;
clutter_actor_set_opacity_override (actor, -1);
cogl_object_unref (fb);

View File

@ -416,7 +416,7 @@ st_widget_paint_background (StWidget *widget,
if (!st_widget_get_resource_scale (widget, &resource_scale))
return;
framebuffer = cogl_get_draw_framebuffer ();
framebuffer = clutter_paint_context_get_framebuffer (paint_context);
theme_node = st_widget_get_theme_node (widget);
clutter_actor_get_allocation_box (CLUTTER_ACTOR (widget), &allocation);