[mutter] shaped-texture: Apply viewport and rotation in right order
- From: Marge Bot <marge-bot src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] shaped-texture: Apply viewport and rotation in right order
- Date: Mon, 19 Apr 2021 13:32:25 +0000 (UTC)
commit 2ded9c4bf2d5bea9538beb8c133f67038614c5fd
Author: Robert Mader <robert mader posteo de>
Date: Mon Apr 19 14:46:08 2021 +0200
shaped-texture: Apply viewport and rotation in right order
When using buffer transforms and viewports together, we currently
apply the transformation (read: rotation) first, resulting in
wrong buffer coordinates for viewport source rects.
Flip the order in whitch we apply our matrix transformations.
This can be tested e.g. via:
`weston-simple-damage --use-viewport --transform=flipped-180`
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1832>
src/compositor/meta-shaped-texture.c | 68 ++++++++++++++++++------------------
1 file changed, 34 insertions(+), 34 deletions(-)
---
diff --git a/src/compositor/meta-shaped-texture.c b/src/compositor/meta-shaped-texture.c
index 8614f1fd45..6f6d85345f 100644
--- a/src/compositor/meta-shaped-texture.c
+++ b/src/compositor/meta-shaped-texture.c
@@ -290,6 +290,40 @@ get_base_pipeline (MetaShapedTexture *stex,
graphene_matrix_init_identity (&matrix);
+ if (stex->has_viewport_src_rect)
+ {
+ float scaled_tex_width = stex->tex_width / (float) stex->buffer_scale;
+ float scaled_tex_height = stex->tex_height / (float) stex->buffer_scale;
+ graphene_point3d_t p;
+
+ graphene_point3d_init (&p,
+ stex->viewport_src_rect.origin.x /
+ stex->viewport_src_rect.size.width,
+ stex->viewport_src_rect.origin.y /
+ stex->viewport_src_rect.size.height,
+ 0);
+ graphene_matrix_translate (&matrix, &p);
+
+ if (meta_monitor_transform_is_rotated (stex->transform))
+ {
+ graphene_matrix_scale (&matrix,
+ stex->viewport_src_rect.size.width /
+ scaled_tex_height,
+ stex->viewport_src_rect.size.height /
+ scaled_tex_width,
+ 1);
+ }
+ else
+ {
+ graphene_matrix_scale (&matrix,
+ stex->viewport_src_rect.size.width /
+ scaled_tex_width,
+ stex->viewport_src_rect.size.height /
+ scaled_tex_height,
+ 1);
+ }
+ }
+
if (stex->transform != META_MONITOR_TRANSFORM_NORMAL)
{
graphene_euler_t euler;
@@ -334,40 +368,6 @@ get_base_pipeline (MetaShapedTexture *stex,
&GRAPHENE_POINT3D_INIT (0.5, 0.5, 0.0));
}
- if (stex->has_viewport_src_rect)
- {
- float scaled_tex_width = stex->tex_width / (float) stex->buffer_scale;
- float scaled_tex_height = stex->tex_height / (float) stex->buffer_scale;
- graphene_point3d_t p;
-
- graphene_point3d_init (&p,
- stex->viewport_src_rect.origin.x /
- stex->viewport_src_rect.size.width,
- stex->viewport_src_rect.origin.y /
- stex->viewport_src_rect.size.height,
- 0);
- graphene_matrix_translate (&matrix, &p);
-
- if (meta_monitor_transform_is_rotated (stex->transform))
- {
- graphene_matrix_scale (&matrix,
- stex->viewport_src_rect.size.width /
- scaled_tex_height,
- stex->viewport_src_rect.size.height /
- scaled_tex_width,
- 1);
- }
- else
- {
- graphene_matrix_scale (&matrix,
- stex->viewport_src_rect.size.width /
- scaled_tex_width,
- stex->viewport_src_rect.size.height /
- scaled_tex_height,
- 1);
- }
- }
-
if (!stex->is_y_inverted)
{
graphene_matrix_translate (&matrix, &GRAPHENE_POINT3D_INIT (0, -1, 0));
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]