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:
parent
6c695ec39d
commit
2e986ed3e8
@ -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);
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
@ -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 */
|
||||||
|
Loading…
Reference in New Issue
Block a user