shaped-texture: Pass around paint context instead of Cogl context
In some of the places we need more context than just the CoglContext, so prepare for that by passing around the paint context, which carries this, everywhere instead. It won't be needed everywhere, but lets stay consistent. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3433>
This commit is contained in:

committed by
Sebastian Wick

parent
d49bfbc6ec
commit
6836a511db
@ -315,10 +315,19 @@ meta_shaped_texture_dispose (GObject *object)
|
|||||||
G_OBJECT_CLASS (meta_shaped_texture_parent_class)->dispose (object);
|
G_OBJECT_CLASS (meta_shaped_texture_parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static CoglContext *
|
||||||
|
cogl_context_from_paint_context (ClutterPaintContext *paint_context)
|
||||||
|
{
|
||||||
|
CoglFramebuffer *framebuffer = clutter_paint_context_get_framebuffer (paint_context);
|
||||||
|
|
||||||
|
return cogl_framebuffer_get_context (framebuffer);
|
||||||
|
}
|
||||||
|
|
||||||
static CoglPipeline *
|
static CoglPipeline *
|
||||||
get_base_pipeline (MetaShapedTexture *stex,
|
get_base_pipeline (MetaShapedTexture *stex,
|
||||||
CoglContext *ctx)
|
ClutterPaintContext *paint_context)
|
||||||
{
|
{
|
||||||
|
CoglContext *cogl_context = cogl_context_from_paint_context (paint_context);
|
||||||
CoglPipeline *pipeline;
|
CoglPipeline *pipeline;
|
||||||
graphene_matrix_t matrix;
|
graphene_matrix_t matrix;
|
||||||
int i, n_planes;
|
int i, n_planes;
|
||||||
@ -326,7 +335,7 @@ get_base_pipeline (MetaShapedTexture *stex,
|
|||||||
if (stex->base_pipeline)
|
if (stex->base_pipeline)
|
||||||
return stex->base_pipeline;
|
return stex->base_pipeline;
|
||||||
|
|
||||||
pipeline = cogl_pipeline_new (ctx);
|
pipeline = cogl_pipeline_new (cogl_context);
|
||||||
|
|
||||||
/* We'll add as many layers as there are planes in the multi texture,
|
/* We'll add as many layers as there are planes in the multi texture,
|
||||||
* plus an extra one for the mask */
|
* plus an extra one for the mask */
|
||||||
@ -396,7 +405,7 @@ get_base_pipeline (MetaShapedTexture *stex,
|
|||||||
|
|
||||||
static CoglPipeline *
|
static CoglPipeline *
|
||||||
get_combined_pipeline (MetaShapedTexture *stex,
|
get_combined_pipeline (MetaShapedTexture *stex,
|
||||||
CoglContext *ctx)
|
ClutterPaintContext *paint_context)
|
||||||
{
|
{
|
||||||
MetaMultiTextureFormat format;
|
MetaMultiTextureFormat format;
|
||||||
CoglPipeline *pipeline;
|
CoglPipeline *pipeline;
|
||||||
@ -407,7 +416,7 @@ get_combined_pipeline (MetaShapedTexture *stex,
|
|||||||
if (stex->combined_pipeline)
|
if (stex->combined_pipeline)
|
||||||
return stex->combined_pipeline;
|
return stex->combined_pipeline;
|
||||||
|
|
||||||
pipeline = cogl_pipeline_copy (get_base_pipeline (stex, ctx));
|
pipeline = cogl_pipeline_copy (get_base_pipeline (stex, paint_context));
|
||||||
format = meta_multi_texture_get_format (stex->texture);
|
format = meta_multi_texture_get_format (stex->texture);
|
||||||
n_planes = meta_multi_texture_get_n_planes (stex->texture);
|
n_planes = meta_multi_texture_get_n_planes (stex->texture);
|
||||||
|
|
||||||
@ -433,7 +442,7 @@ get_combined_pipeline (MetaShapedTexture *stex,
|
|||||||
|
|
||||||
static CoglPipeline *
|
static CoglPipeline *
|
||||||
get_unmasked_pipeline (MetaShapedTexture *stex,
|
get_unmasked_pipeline (MetaShapedTexture *stex,
|
||||||
CoglContext *ctx,
|
ClutterPaintContext *paint_context,
|
||||||
MetaMultiTexture *tex)
|
MetaMultiTexture *tex)
|
||||||
{
|
{
|
||||||
if (stex->texture == tex)
|
if (stex->texture == tex)
|
||||||
@ -443,7 +452,7 @@ get_unmasked_pipeline (MetaShapedTexture *stex,
|
|||||||
if (stex->unmasked_pipeline)
|
if (stex->unmasked_pipeline)
|
||||||
return stex->unmasked_pipeline;
|
return stex->unmasked_pipeline;
|
||||||
|
|
||||||
pipeline = cogl_pipeline_copy (get_combined_pipeline (stex, ctx));
|
pipeline = cogl_pipeline_copy (get_combined_pipeline (stex, paint_context));
|
||||||
if (stex->snippet)
|
if (stex->snippet)
|
||||||
cogl_pipeline_add_layer_snippet (pipeline, 0, stex->snippet);
|
cogl_pipeline_add_layer_snippet (pipeline, 0, stex->snippet);
|
||||||
|
|
||||||
@ -454,10 +463,7 @@ get_unmasked_pipeline (MetaShapedTexture *stex,
|
|||||||
{
|
{
|
||||||
CoglPipeline *pipeline;
|
CoglPipeline *pipeline;
|
||||||
|
|
||||||
if (stex->unmasked_tower_pipeline)
|
pipeline = cogl_pipeline_copy (get_base_pipeline (stex, paint_context));
|
||||||
return stex->unmasked_tower_pipeline;
|
|
||||||
|
|
||||||
pipeline = cogl_pipeline_copy (get_base_pipeline (stex, ctx));
|
|
||||||
stex->unmasked_tower_pipeline = pipeline;
|
stex->unmasked_tower_pipeline = pipeline;
|
||||||
return pipeline;
|
return pipeline;
|
||||||
}
|
}
|
||||||
@ -465,7 +471,7 @@ get_unmasked_pipeline (MetaShapedTexture *stex,
|
|||||||
|
|
||||||
static CoglPipeline *
|
static CoglPipeline *
|
||||||
get_masked_pipeline (MetaShapedTexture *stex,
|
get_masked_pipeline (MetaShapedTexture *stex,
|
||||||
CoglContext *ctx,
|
ClutterPaintContext *paint_context,
|
||||||
MetaMultiTexture *tex)
|
MetaMultiTexture *tex)
|
||||||
{
|
{
|
||||||
g_assert (meta_multi_texture_get_n_planes (stex->texture) == 1);
|
g_assert (meta_multi_texture_get_n_planes (stex->texture) == 1);
|
||||||
@ -477,7 +483,7 @@ get_masked_pipeline (MetaShapedTexture *stex,
|
|||||||
if (stex->masked_pipeline)
|
if (stex->masked_pipeline)
|
||||||
return stex->masked_pipeline;
|
return stex->masked_pipeline;
|
||||||
|
|
||||||
pipeline = cogl_pipeline_copy (get_base_pipeline (stex, ctx));
|
pipeline = cogl_pipeline_copy (get_base_pipeline (stex, paint_context));
|
||||||
cogl_pipeline_set_layer_combine (pipeline, 1,
|
cogl_pipeline_set_layer_combine (pipeline, 1,
|
||||||
"RGBA = MODULATE (PREVIOUS, TEXTURE[A])",
|
"RGBA = MODULATE (PREVIOUS, TEXTURE[A])",
|
||||||
NULL);
|
NULL);
|
||||||
@ -494,7 +500,7 @@ get_masked_pipeline (MetaShapedTexture *stex,
|
|||||||
if (stex->masked_tower_pipeline)
|
if (stex->masked_tower_pipeline)
|
||||||
return stex->masked_tower_pipeline;
|
return stex->masked_tower_pipeline;
|
||||||
|
|
||||||
pipeline = cogl_pipeline_copy (get_base_pipeline (stex, ctx));
|
pipeline = cogl_pipeline_copy (get_base_pipeline (stex, paint_context));
|
||||||
cogl_pipeline_set_layer_combine (pipeline, 1,
|
cogl_pipeline_set_layer_combine (pipeline, 1,
|
||||||
"RGBA = MODULATE (PREVIOUS, TEXTURE[A])",
|
"RGBA = MODULATE (PREVIOUS, TEXTURE[A])",
|
||||||
NULL);
|
NULL);
|
||||||
@ -506,7 +512,7 @@ get_masked_pipeline (MetaShapedTexture *stex,
|
|||||||
|
|
||||||
static CoglPipeline *
|
static CoglPipeline *
|
||||||
get_unblended_pipeline (MetaShapedTexture *stex,
|
get_unblended_pipeline (MetaShapedTexture *stex,
|
||||||
CoglContext *ctx,
|
ClutterPaintContext *paint_context,
|
||||||
MetaMultiTexture *tex)
|
MetaMultiTexture *tex)
|
||||||
{
|
{
|
||||||
if (stex->texture == tex)
|
if (stex->texture == tex)
|
||||||
@ -516,7 +522,7 @@ get_unblended_pipeline (MetaShapedTexture *stex,
|
|||||||
if (stex->unblended_pipeline)
|
if (stex->unblended_pipeline)
|
||||||
return stex->unblended_pipeline;
|
return stex->unblended_pipeline;
|
||||||
|
|
||||||
pipeline = cogl_pipeline_copy (get_combined_pipeline (stex, ctx));
|
pipeline = cogl_pipeline_copy (get_combined_pipeline (stex, paint_context));
|
||||||
cogl_pipeline_set_layer_combine (pipeline, 0,
|
cogl_pipeline_set_layer_combine (pipeline, 0,
|
||||||
"RGBA = REPLACE (TEXTURE)",
|
"RGBA = REPLACE (TEXTURE)",
|
||||||
NULL);
|
NULL);
|
||||||
@ -533,7 +539,7 @@ get_unblended_pipeline (MetaShapedTexture *stex,
|
|||||||
if (stex->unblended_tower_pipeline)
|
if (stex->unblended_tower_pipeline)
|
||||||
return stex->unblended_tower_pipeline;
|
return stex->unblended_tower_pipeline;
|
||||||
|
|
||||||
pipeline = cogl_pipeline_copy (get_base_pipeline (stex, ctx));
|
pipeline = cogl_pipeline_copy (get_base_pipeline (stex, paint_context));
|
||||||
cogl_pipeline_set_layer_combine (pipeline, 0,
|
cogl_pipeline_set_layer_combine (pipeline, 0,
|
||||||
"RGBA = REPLACE (TEXTURE)",
|
"RGBA = REPLACE (TEXTURE)",
|
||||||
NULL);
|
NULL);
|
||||||
@ -544,20 +550,21 @@ get_unblended_pipeline (MetaShapedTexture *stex,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static CoglPipeline *
|
static CoglPipeline *
|
||||||
get_opaque_overlay_pipeline (CoglContext *ctx)
|
get_opaque_overlay_pipeline (ClutterPaintContext *paint_context)
|
||||||
{
|
{
|
||||||
|
CoglContext *cogl_context = cogl_context_from_paint_context (paint_context);
|
||||||
CoglPipeline *pipeline;
|
CoglPipeline *pipeline;
|
||||||
CoglColor color;
|
CoglColor color;
|
||||||
|
|
||||||
pipeline = cogl_context_get_named_pipeline (ctx,
|
pipeline = cogl_context_get_named_pipeline (cogl_context,
|
||||||
&opaque_overlay_pipeline_key);
|
&opaque_overlay_pipeline_key);
|
||||||
if (!pipeline)
|
if (!pipeline)
|
||||||
{
|
{
|
||||||
pipeline = cogl_pipeline_new (ctx);
|
pipeline = cogl_pipeline_new (cogl_context);
|
||||||
cogl_color_init_from_4f (&color, 0.0f, 0.2f, 0.0f, 0.2f);
|
cogl_color_init_from_4f (&color, 0.0f, 0.2f, 0.0f, 0.2f);
|
||||||
cogl_pipeline_set_color (pipeline, &color);
|
cogl_pipeline_set_color (pipeline, &color);
|
||||||
|
|
||||||
cogl_context_set_named_pipeline (ctx,
|
cogl_context_set_named_pipeline (cogl_context,
|
||||||
&opaque_overlay_pipeline_key,
|
&opaque_overlay_pipeline_key,
|
||||||
pipeline);
|
pipeline);
|
||||||
}
|
}
|
||||||
@ -566,20 +573,21 @@ get_opaque_overlay_pipeline (CoglContext *ctx)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static CoglPipeline *
|
static CoglPipeline *
|
||||||
get_blended_overlay_pipeline (CoglContext *ctx)
|
get_blended_overlay_pipeline (ClutterPaintContext *paint_context)
|
||||||
{
|
{
|
||||||
|
CoglContext *cogl_context = cogl_context_from_paint_context (paint_context);
|
||||||
CoglPipeline *pipeline;
|
CoglPipeline *pipeline;
|
||||||
CoglColor color;
|
CoglColor color;
|
||||||
|
|
||||||
pipeline = cogl_context_get_named_pipeline (ctx,
|
pipeline = cogl_context_get_named_pipeline (cogl_context,
|
||||||
&blended_overlay_pipeline_key);
|
&blended_overlay_pipeline_key);
|
||||||
if (!pipeline)
|
if (!pipeline)
|
||||||
{
|
{
|
||||||
pipeline = cogl_pipeline_new (ctx);
|
pipeline = cogl_pipeline_new (cogl_context);
|
||||||
cogl_color_init_from_4f (&color, 0.2f, 0.0f, 0.2f, 0.2f);
|
cogl_color_init_from_4f (&color, 0.2f, 0.0f, 0.2f, 0.2f);
|
||||||
cogl_pipeline_set_color (pipeline, &color);
|
cogl_pipeline_set_color (pipeline, &color);
|
||||||
|
|
||||||
cogl_context_set_named_pipeline (ctx,
|
cogl_context_set_named_pipeline (cogl_context,
|
||||||
&blended_overlay_pipeline_key,
|
&blended_overlay_pipeline_key,
|
||||||
pipeline);
|
pipeline);
|
||||||
}
|
}
|
||||||
@ -696,7 +704,6 @@ do_paint_content (MetaShapedTexture *stex,
|
|||||||
MtkRectangle content_rect;
|
MtkRectangle content_rect;
|
||||||
gboolean use_opaque_region;
|
gboolean use_opaque_region;
|
||||||
MtkRegion *blended_tex_region;
|
MtkRegion *blended_tex_region;
|
||||||
CoglContext *ctx;
|
|
||||||
CoglPipelineFilter min_filter, mag_filter;
|
CoglPipelineFilter min_filter, mag_filter;
|
||||||
MetaTransforms transforms;
|
MetaTransforms transforms;
|
||||||
MetaMultiTexture *paint_tex = stex->texture;
|
MetaMultiTexture *paint_tex = stex->texture;
|
||||||
@ -779,8 +786,6 @@ do_paint_content (MetaShapedTexture *stex,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ());
|
|
||||||
|
|
||||||
use_opaque_region = stex->opaque_region && opacity == 255;
|
use_opaque_region = stex->opaque_region && opacity == 255;
|
||||||
|
|
||||||
if (use_opaque_region)
|
if (use_opaque_region)
|
||||||
@ -839,7 +844,7 @@ do_paint_content (MetaShapedTexture *stex,
|
|||||||
{
|
{
|
||||||
CoglPipeline *opaque_pipeline;
|
CoglPipeline *opaque_pipeline;
|
||||||
|
|
||||||
opaque_pipeline = get_unblended_pipeline (stex, ctx, paint_tex);
|
opaque_pipeline = get_unblended_pipeline (stex, paint_context, paint_tex);
|
||||||
|
|
||||||
for (i = 0; i < n_planes; i++)
|
for (i = 0; i < n_planes; i++)
|
||||||
{
|
{
|
||||||
@ -863,7 +868,7 @@ do_paint_content (MetaShapedTexture *stex,
|
|||||||
{
|
{
|
||||||
CoglPipeline *opaque_overlay_pipeline;
|
CoglPipeline *opaque_overlay_pipeline;
|
||||||
|
|
||||||
opaque_overlay_pipeline = get_opaque_overlay_pipeline (ctx);
|
opaque_overlay_pipeline = get_opaque_overlay_pipeline (paint_context);
|
||||||
paint_clipped_rectangle_node (stex, root_node,
|
paint_clipped_rectangle_node (stex, root_node,
|
||||||
opaque_overlay_pipeline,
|
opaque_overlay_pipeline,
|
||||||
&rect, alloc);
|
&rect, alloc);
|
||||||
@ -890,11 +895,11 @@ do_paint_content (MetaShapedTexture *stex,
|
|||||||
|
|
||||||
if (stex->mask_texture == NULL)
|
if (stex->mask_texture == NULL)
|
||||||
{
|
{
|
||||||
blended_pipeline = get_unmasked_pipeline (stex, ctx, paint_tex);
|
blended_pipeline = get_unmasked_pipeline (stex, paint_context, paint_tex);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
blended_pipeline = get_masked_pipeline (stex, ctx, paint_tex);
|
blended_pipeline = get_masked_pipeline (stex, paint_context, paint_tex);
|
||||||
cogl_pipeline_set_layer_texture (blended_pipeline, n_planes, stex->mask_texture);
|
cogl_pipeline_set_layer_texture (blended_pipeline, n_planes, stex->mask_texture);
|
||||||
cogl_pipeline_set_layer_filters (blended_pipeline, n_planes, min_filter, mag_filter);
|
cogl_pipeline_set_layer_filters (blended_pipeline, n_planes, min_filter, mag_filter);
|
||||||
}
|
}
|
||||||
@ -932,7 +937,7 @@ do_paint_content (MetaShapedTexture *stex,
|
|||||||
{
|
{
|
||||||
CoglPipeline *blended_overlay_pipeline;
|
CoglPipeline *blended_overlay_pipeline;
|
||||||
|
|
||||||
blended_overlay_pipeline = get_blended_overlay_pipeline (ctx);
|
blended_overlay_pipeline = get_blended_overlay_pipeline (paint_context);
|
||||||
paint_clipped_rectangle_node (stex, root_node,
|
paint_clipped_rectangle_node (stex, root_node,
|
||||||
blended_overlay_pipeline,
|
blended_overlay_pipeline,
|
||||||
&rect, alloc);
|
&rect, alloc);
|
||||||
@ -955,7 +960,7 @@ do_paint_content (MetaShapedTexture *stex,
|
|||||||
CoglPipeline *blended_overlay_pipeline;
|
CoglPipeline *blended_overlay_pipeline;
|
||||||
g_autoptr (ClutterPaintNode) node_overlay = NULL;
|
g_autoptr (ClutterPaintNode) node_overlay = NULL;
|
||||||
|
|
||||||
blended_overlay_pipeline = get_blended_overlay_pipeline (ctx);
|
blended_overlay_pipeline = get_blended_overlay_pipeline (paint_context);
|
||||||
|
|
||||||
node_overlay = clutter_pipeline_node_new (blended_overlay_pipeline);
|
node_overlay = clutter_pipeline_node_new (blended_overlay_pipeline);
|
||||||
clutter_paint_node_set_static_name (node_overlay,
|
clutter_paint_node_set_static_name (node_overlay,
|
||||||
|
Reference in New Issue
Block a user