summaryrefslogtreecommitdiff
path: root/cogl
diff options
context:
space:
mode:
authorGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>2020-09-10 11:59:46 -0300
committerGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>2020-10-06 15:34:46 +0000
commit5d84f73aa06ee4cd45a3bea8262488e752d1d09e (patch)
treee2485cc216d4a14ad60b52700cb03e3093c18a65 /cogl
parent3ea8af14890684e6c2681e9f98a22b25bed6d254 (diff)
downloadmutter-5d84f73aa06ee4cd45a3bea8262488e752d1d09e.tar.gz
cogl/matrix: Skew using graphene matrices
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1439
Diffstat (limited to 'cogl')
-rw-r--r--cogl/cogl/cogl-matrix.c39
1 files changed, 24 insertions, 15 deletions
diff --git a/cogl/cogl/cogl-matrix.c b/cogl/cogl/cogl-matrix.c
index 4060199a4..f0be09496 100644
--- a/cogl/cogl/cogl-matrix.c
+++ b/cogl/cogl/cogl-matrix.c
@@ -1946,12 +1946,15 @@ void
cogl_matrix_skew_xy (CoglMatrix *matrix,
float factor)
{
- matrix->yx += matrix->xx * factor;
- matrix->yy += matrix->xy * factor;
- matrix->yz += matrix->xz * factor;
- matrix->yw += matrix->xw * factor;
+ graphene_matrix_t skew;
+ graphene_matrix_t m;
+
+ cogl_matrix_to_graphene_matrix (matrix, &m);
+ graphene_matrix_init_identity (&skew);
+ graphene_matrix_skew_xy (&skew, factor);
+ graphene_matrix_multiply (&skew, &m, &m);
+ graphene_matrix_to_cogl_matrix (&m, matrix);
- matrix->flags = (MAT_FLAG_GENERAL | MAT_DIRTY_ALL);
_COGL_MATRIX_DEBUG_PRINT (matrix);
}
@@ -1959,12 +1962,15 @@ void
cogl_matrix_skew_xz (CoglMatrix *matrix,
float factor)
{
- matrix->zx += matrix->xx * factor;
- matrix->zy += matrix->xy * factor;
- matrix->zz += matrix->xz * factor;
- matrix->zw += matrix->xw * factor;
+ graphene_matrix_t skew;
+ graphene_matrix_t m;
+
+ cogl_matrix_to_graphene_matrix (matrix, &m);
+ graphene_matrix_init_identity (&skew);
+ graphene_matrix_skew_xz (&skew, factor);
+ graphene_matrix_multiply (&skew, &m, &m);
+ graphene_matrix_to_cogl_matrix (&m, matrix);
- matrix->flags = (MAT_FLAG_GENERAL | MAT_DIRTY_ALL);
_COGL_MATRIX_DEBUG_PRINT (matrix);
}
@@ -1972,11 +1978,14 @@ void
cogl_matrix_skew_yz (CoglMatrix *matrix,
float factor)
{
- matrix->zx += matrix->yx * factor;
- matrix->zy += matrix->yy * factor;
- matrix->zz += matrix->yz * factor;
- matrix->zw += matrix->yw * factor;
+ graphene_matrix_t skew;
+ graphene_matrix_t m;
+
+ cogl_matrix_to_graphene_matrix (matrix, &m);
+ graphene_matrix_init_identity (&skew);
+ graphene_matrix_skew_yz (&skew, factor);
+ graphene_matrix_multiply (&skew, &m, &m);
+ graphene_matrix_to_cogl_matrix (&m, matrix);
- matrix->flags = (MAT_FLAG_GENERAL | MAT_DIRTY_ALL);
_COGL_MATRIX_DEBUG_PRINT (matrix);
}