clutter/stage-cogl: Use buffer age when view monitor is rotated

We failed to use the buffer age when monitors were rotated, as when they
are, we first composite to an offscreen framebuffer, then later again to
the onscreen. The buffer age checking happened on the offscreen, and an
offscreen being single buffered, they can't possible support buffer
ages.

Instead, move the buffer age check to check the actual onscreen
framebuffer. The offscreen to onscreen painting is still always full
frame, but that will be fixed in a later commit.

https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1237
This commit is contained in:
Jonas Ådahl
2020-05-05 19:05:36 +02:00
committed by Georges Basile Stavracas Neto
parent 03c65b93e6
commit 9d3e4fd402
5 changed files with 64 additions and 50 deletions

View File

@ -34,6 +34,7 @@
#include "backends/meta-renderer.h"
#include "clutter/clutter-mutter.h"
#include "compositor/region-utils.h"
enum
{
@ -117,6 +118,25 @@ meta_renderer_view_setup_offscreen_blit_pipeline (ClutterStageView *view,
cogl_pipeline_set_layer_matrix (pipeline, 0, &matrix);
}
static void
meta_renderer_view_transform_rect_to_onscreen (ClutterStageView *view,
const cairo_rectangle_int_t *src_rect,
int dst_width,
int dst_height,
cairo_rectangle_int_t *dst_rect)
{
MetaRendererView *renderer_view = META_RENDERER_VIEW (view);
MetaMonitorTransform inverted_transform;
inverted_transform =
meta_monitor_transform_invert (renderer_view->transform);
return meta_rectangle_transform (src_rect,
inverted_transform,
dst_width,
dst_height,
dst_rect);
}
static void
meta_renderer_view_set_transform (MetaRendererView *view,
MetaMonitorTransform transform)
@ -181,6 +201,8 @@ meta_renderer_view_class_init (MetaRendererViewClass *klass)
meta_renderer_view_setup_offscreen_blit_pipeline;
view_class->get_offscreen_transformation_matrix =
meta_renderer_view_get_offscreen_transformation_matrix;
view_class->transform_rect_to_onscreen =
meta_renderer_view_transform_rect_to_onscreen;
object_class->get_property = meta_renderer_view_get_property;
object_class->set_property = meta_renderer_view_set_property;