cogl/matrix: Add graphene_matrix_t utility function

CoglMatrix doesn't have a 1:1 mapping of graphene functions, and
sometimes it's just not worth adding wrappers over it. It is easier
to expose the internal graphene_matrix_t and let callers use it
directly.

Add new cogl_matrix_get_graphene_matrix() helper function, and
simplify Clutter's matrix progress function.

https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1439
This commit is contained in:
Georges Basile Stavracas Neto 2020-09-11 09:33:43 -03:00
parent 6c695ec39d
commit 2e986ed3e8
3 changed files with 23 additions and 9 deletions

View File

@ -37,18 +37,14 @@ cogl_matrix_progress (const GValue *a,
{ {
const CoglMatrix *matrix1 = g_value_get_boxed (a); const CoglMatrix *matrix1 = g_value_get_boxed (a);
const CoglMatrix *matrix2 = g_value_get_boxed (b); const CoglMatrix *matrix2 = g_value_get_boxed (b);
graphene_matrix_t m1, m2, interpolated; graphene_matrix_t interpolated;
CoglMatrix res; CoglMatrix res;
float fm1[16];
float fm2[16];
float v[16]; float v[16];
cogl_matrix_to_float (matrix1, fm1); graphene_matrix_interpolate (cogl_matrix_get_graphene_matrix (matrix1),
cogl_matrix_to_float (matrix2, fm2); cogl_matrix_get_graphene_matrix (matrix2),
progress,
graphene_matrix_init_from_float (&m1, fm1); &interpolated);
graphene_matrix_init_from_float (&m2, fm2);
graphene_matrix_interpolate (&m1, &m2, progress, &interpolated);
graphene_matrix_to_float (&interpolated, v); graphene_matrix_to_float (&interpolated, v);
cogl_matrix_init_from_array (&res, v); cogl_matrix_init_from_array (&res, v);

View File

@ -810,3 +810,9 @@ cogl_matrix_skew_yz (CoglMatrix *matrix,
matrix->flags |= COGL_MATRIX_FLAG_DIRTY_INVERSE; matrix->flags |= COGL_MATRIX_FLAG_DIRTY_INVERSE;
_COGL_MATRIX_DEBUG_PRINT (matrix); _COGL_MATRIX_DEBUG_PRINT (matrix);
} }
const graphene_matrix_t *
cogl_matrix_get_graphene_matrix (const CoglMatrix *matrix)
{
return &matrix->m;
}

View File

@ -777,6 +777,18 @@ COGL_EXPORT void
cogl_matrix_skew_yz (CoglMatrix *matrix, cogl_matrix_skew_yz (CoglMatrix *matrix,
float factor); float factor);
/**
* cogl_matrix_get_graphene_matrix:
* @matrix: a #CoglMatrix
*
* Retrieves the internal #graphene_matrix_t of @matrix. It should not
* be modified, and must be considered read-only.
*
* Returns: (transfer none): a #graphene_matrix_t
*/
COGL_EXPORT const graphene_matrix_t *
cogl_matrix_get_graphene_matrix (const CoglMatrix *matrix);
G_END_DECLS G_END_DECLS
#endif /* __COGL_MATRIX_H */ #endif /* __COGL_MATRIX_H */