[mutter] clutter: Don't use CoglHandle to store framebuffers
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] clutter: Don't use CoglHandle to store framebuffers
- Date: Fri, 16 Oct 2020 16:25:59 +0000 (UTC)
commit de4e59a39b43bd6470b446bc42038f520cdbc492
Author: Jonas Ã…dahl <jadahl gmail com>
Date: Tue Oct 13 11:27:36 2020 +0200
clutter: Don't use CoglHandle to store framebuffers
Better just not lose type informatoin.
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1496
clutter/clutter/clutter-offscreen-effect.c | 18 ++++++++++--------
src/tests/clutter/interactive/test-cogl-offscreen.c | 17 +++++++++--------
2 files changed, 19 insertions(+), 16 deletions(-)
---
diff --git a/clutter/clutter/clutter-offscreen-effect.c b/clutter/clutter/clutter-offscreen-effect.c
index af02460349..a4224b60c3 100644
--- a/clutter/clutter/clutter-offscreen-effect.c
+++ b/clutter/clutter/clutter-offscreen-effect.c
@@ -80,7 +80,7 @@
struct _ClutterOffscreenEffectPrivate
{
- CoglHandle offscreen;
+ CoglOffscreen *offscreen;
CoglPipeline *pipeline;
CoglHandle texture;
@@ -260,6 +260,7 @@ clutter_offscreen_effect_pre_paint (ClutterEffect *effect,
{
ClutterOffscreenEffect *self = CLUTTER_OFFSCREEN_EFFECT (effect);
ClutterOffscreenEffectPrivate *priv = self->priv;
+ CoglFramebuffer *offscreen;
ClutterActorBox raw_box, box;
ClutterActor *stage;
graphene_matrix_t projection, modelview;
@@ -321,7 +322,8 @@ clutter_offscreen_effect_pre_paint (ClutterEffect *effect,
if (!update_fbo (effect, target_width, target_height, resource_scale))
goto disable_effect;
- clutter_paint_context_push_framebuffer (paint_context, priv->offscreen);
+ offscreen = COGL_FRAMEBUFFER (priv->offscreen);
+ clutter_paint_context_push_framebuffer (paint_context, 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
@@ -331,30 +333,30 @@ clutter_offscreen_effect_pre_paint (ClutterEffect *effect,
* contents on screen...
*/
clutter_actor_get_transform (priv->stage, &modelview);
- cogl_framebuffer_set_modelview_matrix (priv->offscreen, &modelview);
+ cogl_framebuffer_set_modelview_matrix (offscreen, &modelview);
/* Set up the viewport so that it has the same size as the stage (avoid
* distortion), but translated to account for the FBO offset...
*/
- cogl_framebuffer_set_viewport (priv->offscreen,
+ cogl_framebuffer_set_viewport (offscreen,
-priv->fbo_offset_x,
-priv->fbo_offset_y,
stage_width,
stage_height);
- /* Copy the stage's projection matrix across to the framebuffer */
+ /* Copy the stage's projection matrix across to the offscreen */
_clutter_stage_get_projection_matrix (CLUTTER_STAGE (priv->stage),
&projection);
- cogl_framebuffer_set_projection_matrix (priv->offscreen, &projection);
+ cogl_framebuffer_set_projection_matrix (offscreen, &projection);
cogl_color_init_from_4ub (&transparent, 0, 0, 0, 0);
- cogl_framebuffer_clear (priv->offscreen,
+ cogl_framebuffer_clear (offscreen,
COGL_BUFFER_BIT_COLOR |
COGL_BUFFER_BIT_DEPTH,
&transparent);
- cogl_framebuffer_push_matrix (priv->offscreen);
+ cogl_framebuffer_push_matrix (offscreen);
/* Override the actor's opacity to fully opaque - we paint the offscreen
* texture with the actor's paint opacity, so we need to do this to avoid
diff --git a/src/tests/clutter/interactive/test-cogl-offscreen.c
b/src/tests/clutter/interactive/test-cogl-offscreen.c
index d98f706ea9..1ce7a1540e 100644
--- a/src/tests/clutter/interactive/test-cogl-offscreen.c
+++ b/src/tests/clutter/interactive/test-cogl-offscreen.c
@@ -73,7 +73,7 @@ struct _TestCoglboxPrivate
{
CoglHandle texhand_id;
CoglHandle texture_id;
- CoglHandle offscreen_id;
+ CoglFramebuffer *framebuffer;
};
G_DEFINE_TYPE_WITH_PRIVATE (TestCoglbox, test_coglbox, CLUTTER_TYPE_ACTOR);
@@ -111,11 +111,11 @@ test_coglbox_paint (ClutterActor *self,
pipeline = cogl_pipeline_new (ctx);
cogl_pipeline_set_color4ub (pipeline, 0xff, 0, 0, 0xff);
- cogl_framebuffer_draw_rectangle (priv->offscreen_id, pipeline,
+ cogl_framebuffer_draw_rectangle (priv->framebuffer, pipeline,
20, 20, 20 + 100, 20 + 100);
cogl_pipeline_set_color4ub (pipeline, 0, 0xff, 0, 0xff);
- cogl_framebuffer_draw_rectangle (priv->offscreen_id, pipeline,
+ cogl_framebuffer_draw_rectangle (priv->framebuffer, pipeline,
80, 80, 80 + 100, 80 + 100);
cogl_object_unref (pipeline);
@@ -146,7 +146,7 @@ test_coglbox_dispose (GObject *object)
priv = TEST_COGLBOX_GET_PRIVATE (object);
cogl_object_unref (priv->texture_id);
- cogl_object_unref (priv->offscreen_id);
+ cogl_object_unref (priv->framebuffer);
G_OBJECT_CLASS (test_coglbox_parent_class)->dispose (object);
}
@@ -257,22 +257,23 @@ test_coglbox_map (ClutterActor *actor)
CLUTTER_ACTOR_CLASS (test_coglbox_parent_class)->map (actor);
printf ("Creating offscreen\n");
- priv->offscreen_id = cogl_offscreen_new_with_texture (priv->texture_id);
- if (!cogl_framebuffer_allocate (priv->offscreen_id, &error))
+ priv->framebuffer =
+ COGL_FRAMEBUFFER (cogl_offscreen_new_with_texture (priv->texture_id));
+ if (!cogl_framebuffer_allocate (priv->framebuffer, &error))
g_error ("Failed to allocate framebuffer: %s", error->message);
stage = clutter_actor_get_stage (actor);
clutter_stage_get_perspective (CLUTTER_STAGE (stage), &perspective);
clutter_actor_get_size (stage, &stage_width, &stage_height);
- setup_viewport (priv->offscreen_id,
+ setup_viewport (priv->framebuffer,
stage_width, stage_height,
perspective.fovy,
perspective.aspect,
perspective.z_near,
perspective.z_far);
- if (priv->offscreen_id == NULL)
+ if (!priv->framebuffer)
printf ("Failed creating offscreen to texture!\n");
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]