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:

committed by
Georges Basile Stavracas Neto

parent
988a0e7314
commit
632a643994
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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));
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
Reference in New Issue
Block a user