[mutter/gbsneto/graphene-matrix: 1/57] cogl/matrix: Multiply using graphene matrices
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/gbsneto/graphene-matrix: 1/57] cogl/matrix: Multiply using graphene matrices
- Date: Thu, 24 Sep 2020 11:43:34 +0000 (UTC)
commit 8c9b2d8542aacdc2d60f03ece40ef2be98a33093
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Thu Sep 10 10:34:15 2020 -0300
cogl/matrix: Multiply using graphene matrices
At this point, we are still only changing CoglMatrix APIs internally,
and it should still produce the same output as before. To achieve this,
exploit the fact that graphene matrices are row-major with row vectors,
which allows us to multiply as B x A and result in the same matrix that
Cogl would generate. By doing this, no consumer of this API needs to be
changed for now.
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1439
cogl/cogl/cogl-matrix.c | 32 +++++++++++---------------------
1 file changed, 11 insertions(+), 21 deletions(-)
---
diff --git a/cogl/cogl/cogl-matrix.c b/cogl/cogl/cogl-matrix.c
index 4f65b16cf9..d191bed9e9 100644
--- a/cogl/cogl/cogl-matrix.c
+++ b/cogl/cogl/cogl-matrix.c
@@ -326,32 +326,22 @@ matrix_multiply_array_with_flags (CoglMatrix *result,
matrix_multiply4x4 ((float *)result, (float *)result, array);
}
-/* Joins both flags and marks the type and inverse as dirty. Calls
- * matrix_multiply3x4() if both matrices are 3D, or matrix_multiply4x4()
- * otherwise.
- */
-static void
-_cogl_matrix_multiply (CoglMatrix *result,
- const CoglMatrix *a,
- const CoglMatrix *b)
-{
- result->flags = (a->flags |
- b->flags |
- MAT_DIRTY_TYPE |
- MAT_DIRTY_INVERSE);
-
- if (TEST_MAT_FLAGS(result, MAT_FLAGS_3D))
- matrix_multiply3x4 ((float *)result, (float *)a, (float *)b);
- else
- matrix_multiply4x4 ((float *)result, (float *)a, (float *)b);
-}
-
void
cogl_matrix_multiply (CoglMatrix *result,
const CoglMatrix *a,
const CoglMatrix *b)
{
- _cogl_matrix_multiply (result, a, b);
+ graphene_matrix_t res;
+ graphene_matrix_t ma;
+ graphene_matrix_t mb;
+
+ cogl_matrix_to_graphene_matrix (a, &ma);
+ cogl_matrix_to_graphene_matrix (b, &mb);
+ graphene_matrix_multiply (&mb, &ma, &res);
+ graphene_matrix_to_cogl_matrix (&res, result);
+
+ result->flags = a->flags | b->flags | MAT_DIRTY_TYPE | MAT_DIRTY_INVERSE;
+
_COGL_MATRIX_DEBUG_PRINT (result);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]