[mutter] compositor: Make meta_actor_painting_untransformed take a framebuffer



commit 37e36e8208883bd0bb7b8a3cafe9de7af8a7bf35
Author: Jonas Ã…dahl <jadahl gmail com>
Date:   Wed Dec 19 11:55:43 2018 +0100

    compositor: Make meta_actor_painting_untransformed take a framebuffer
    
    Stop using the cogl draw framebuffer implicitly.
    
    https://gitlab.gnome.org/GNOME/mutter/merge_requests/362

 src/compositor/clutter-utils.c         | 9 +++++----
 src/compositor/clutter-utils.h         | 9 +++++----
 src/compositor/meta-background-actor.c | 7 ++++++-
 src/compositor/meta-shaped-texture.c   | 7 +++++--
 src/compositor/meta-window-group.c     | 6 +++++-
 5 files changed, 26 insertions(+), 12 deletions(-)
---
diff --git a/src/compositor/clutter-utils.c b/src/compositor/clutter-utils.c
index 33357c7a5..cfa35aaf9 100644
--- a/src/compositor/clutter-utils.c
+++ b/src/compositor/clutter-utils.c
@@ -146,7 +146,8 @@ meta_actor_is_untransformed (ClutterActor *actor,
  * transform.
  */
 gboolean
-meta_actor_painting_untransformed (int              paint_width,
+meta_actor_painting_untransformed (CoglFramebuffer *fb,
+                                   int              paint_width,
                                    int              paint_height,
                                    int             *x_origin,
                                    int             *y_origin)
@@ -156,8 +157,8 @@ meta_actor_painting_untransformed (int              paint_width,
   float viewport[4];
   int i;
 
-  cogl_get_modelview_matrix (&modelview);
-  cogl_get_projection_matrix (&projection);
+  cogl_framebuffer_get_modelview_matrix (fb, &modelview);
+  cogl_framebuffer_get_projection_matrix (fb, &projection);
 
   cogl_matrix_multiply (&modelview_projection,
                         &projection,
@@ -176,7 +177,7 @@ meta_actor_painting_untransformed (int              paint_width,
   vertices[3].y = paint_height;
   vertices[3].z = 0;
 
-  cogl_get_viewport (viewport);
+  cogl_framebuffer_get_viewport4fv (fb, viewport);
 
   for (i = 0; i < 4; i++)
     {
diff --git a/src/compositor/clutter-utils.h b/src/compositor/clutter-utils.h
index 2b6dc8d58..b340ba464 100644
--- a/src/compositor/clutter-utils.h
+++ b/src/compositor/clutter-utils.h
@@ -32,9 +32,10 @@ gboolean meta_actor_is_untransformed (ClutterActor *actor,
                                       int          *x_origin,
                                       int          *y_origin);
 
-gboolean meta_actor_painting_untransformed (int         paint_width,
-                                            int         paint_height,
-                                            int        *x_origin,
-                                            int        *y_origin);
+gboolean meta_actor_painting_untransformed (CoglFramebuffer *fb,
+                                            int              paint_width,
+                                            int              paint_height,
+                                            int             *x_origin,
+                                            int             *y_origin);
 
 #endif /* __META_CLUTTER_UTILS_H__ */
diff --git a/src/compositor/meta-background-actor.c b/src/compositor/meta-background-actor.c
index 5c18e81a8..267f762cc 100644
--- a/src/compositor/meta-background-actor.c
+++ b/src/compositor/meta-background-actor.c
@@ -329,6 +329,7 @@ setup_pipeline (MetaBackgroundActor   *self,
   PipelineFlags pipeline_flags = 0;
   guint8 opacity;
   float color_component;
+  CoglFramebuffer *fb;
   CoglPipelineFilter filter;
 
   opacity = clutter_actor_get_paint_opacity (CLUTTER_ACTOR (self));
@@ -422,8 +423,12 @@ setup_pipeline (MetaBackgroundActor   *self,
                              color_component,
                              opacity / 255.);
 
+  fb = cogl_get_draw_framebuffer ();
   if (!self->force_bilinear &&
-      meta_actor_painting_untransformed (actor_pixel_rect->width, actor_pixel_rect->height, NULL, NULL))
+      meta_actor_painting_untransformed (fb,
+                                         actor_pixel_rect->width,
+                                         actor_pixel_rect->height,
+                                         NULL, NULL))
     filter = COGL_PIPELINE_FILTER_NEAREST;
   else
     filter = COGL_PIPELINE_FILTER_LINEAR;
diff --git a/src/compositor/meta-shaped-texture.c b/src/compositor/meta-shaped-texture.c
index e1aaf1528..051421fe8 100644
--- a/src/compositor/meta-shaped-texture.c
+++ b/src/compositor/meta-shaped-texture.c
@@ -568,17 +568,20 @@ meta_shaped_texture_paint (ClutterActor *actor)
 
   tex_rect = (cairo_rectangle_int_t) { 0, 0, dst_width, dst_height };
 
+  fb = cogl_get_draw_framebuffer ();
+
   /* Use nearest-pixel interpolation if the texture is unscaled. This
    * improves performance, especially with software rendering.
    */
 
   filter = COGL_PIPELINE_FILTER_LINEAR;
 
-  if (meta_actor_painting_untransformed (dst_width, dst_height, NULL, NULL))
+  if (meta_actor_painting_untransformed (fb,
+                                         dst_width, dst_height,
+                                         NULL, NULL))
     filter = COGL_PIPELINE_FILTER_NEAREST;
 
   ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ());
-  fb = cogl_get_draw_framebuffer ();
 
   opacity = clutter_actor_get_paint_opacity (actor);
   clutter_actor_get_allocation_box (actor, &alloc);
diff --git a/src/compositor/meta-window-group.c b/src/compositor/meta-window-group.c
index 44058feea..29ec1e742 100644
--- a/src/compositor/meta-window-group.c
+++ b/src/compositor/meta-window-group.c
@@ -80,7 +80,11 @@ meta_window_group_paint (ClutterActor *actor)
    */
   if (clutter_actor_is_in_clone_paint (actor))
     {
-      if (!meta_actor_painting_untransformed (screen_width,
+      CoglFramebuffer *fb;
+
+      fb = cogl_get_draw_framebuffer ();
+      if (!meta_actor_painting_untransformed (fb,
+                                              screen_width,
                                               screen_height,
                                               &paint_x_origin,
                                               &paint_y_origin) ||


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]