If a transformation matrix causes a scale or a rotation not a multiple of 90
degrees then textures rendered with it would benefit from bilinear filtering.

weston_matrix_needs_filtering() checks for this.
---
 src/compositor.c | 23 +++++++++++++++++++++++
 src/compositor.h |  3 +++
 2 files changed, 26 insertions(+)

diff --git a/src/compositor.c b/src/compositor.c
index bc1b733..2f21a36 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -726,6 +726,29 @@ weston_matrix_transform_region(pixman_region32_t *dest,
        free(dest_rects);
 }
 
+static int rot_is_90(float radians)
+{
+       radians /= M_PI_2;
+       if (fabs(floor(radians) - radians) > 0.0001)
+               return 0;
+
+       return 1;
+}
+
+WL_EXPORT int
+weston_matrix_needs_filtering(struct weston_matrix *matrix)
+{
+       if (!rot_is_90(weston_matrix_get_rotation_x(matrix))
+        || !rot_is_90(weston_matrix_get_rotation_y(matrix))
+        || !rot_is_90(weston_matrix_get_rotation_z(matrix))
+        || (fabs(weston_matrix_get_scale_x(matrix) - 1.0) > 0.0001)
+        || (fabs(weston_matrix_get_scale_y(matrix) - 1.0) > 0.0001)
+        || (fabs(weston_matrix_get_scale_y(matrix) - 1.0) > 0.0001))
+               return 1;
+
+       return 0;
+}
+
 WL_EXPORT void
 weston_surface_to_buffer_float(struct weston_surface *surface,
                               float sx, float sy, float *bx, float *by)
diff --git a/src/compositor.h b/src/compositor.h
index 2fc42ec..26f81c4 100644
--- a/src/compositor.h
+++ b/src/compositor.h
@@ -969,6 +969,9 @@ weston_view_from_global_fixed(struct weston_view *view,
                              wl_fixed_t x, wl_fixed_t y,
                              wl_fixed_t *vx, wl_fixed_t *vy);
 
+int
+weston_matrix_needs_filtering(struct weston_matrix *matrix);
+
 void
 weston_surface_to_buffer_float(struct weston_surface *surface,
                               float x, float y, float *bx, float *by);
-- 
2.1.0

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to