compositor: handle non-invertible surface transformations
Detect a non-invertible surface total transformation, disable it, and
warn about it.
Signed-off-by: Pekka Paalanen <ppaalanen@gmail.com>
diff --git a/src/compositor.c b/src/compositor.c
index 02358b2..3950ad7 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -250,7 +250,12 @@
wl_list_for_each(tform, &surface->transform.list, link)
weston_matrix_multiply(matrix, &tform->matrix);
- weston_matrix_invert(inverse, matrix);
+ if (weston_matrix_invert(inverse, matrix) < 0) {
+ /* Oops, bad total transformation, not invertible */
+ surface->transform.enabled = 0;
+ fprintf(stderr, "error: weston_surface %p"
+ " transformation not invertible.\n", surface);
+ }
}
WL_EXPORT void