cogl/matrix: Import skew functions from Clutter

Graphene provides skewing as part of graphene_matrix_t API, and it'll
be easier for the transition to just expose similar API surfaces.

Move the matrix skew methods to CoglMatrix.

https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1439
This commit is contained in:
Georges Basile Stavracas Neto 2020-09-09 19:10:09 -03:00
parent 566b081cd7
commit fe0a325e9f
5 changed files with 87 additions and 40 deletions

View File

@ -83,15 +83,15 @@ cogl_matrix_progress (const GValue *a,
/* skew */
shear_res = shear1[2] + (shear2[2] - shear1[2]) * progress; /* YZ */
if (shear_res != 0.f)
_clutter_util_matrix_skew_yz (&res, shear_res);
cogl_matrix_skew_yz (&res, shear_res);
shear_res = shear1[1] + (shear2[1] - shear1[1]) * progress; /* XZ */
if (shear_res != 0.f)
_clutter_util_matrix_skew_xz (&res, shear_res);
cogl_matrix_skew_xz (&res, shear_res);
shear_res = shear1[0] + (shear2[0] - shear1[0]) * progress; /* XY */
if (shear_res != 0.f)
_clutter_util_matrix_skew_xy (&res, shear_res);
cogl_matrix_skew_xy (&res, shear_res);
/* scale */
graphene_point3d_interpolate (&scale1, &scale2, progress, &scale_res);

View File

@ -257,13 +257,6 @@ _clutter_util_vertex4_interpolate (const ClutterVertex4 *a,
float _clutter_util_matrix_determinant (const CoglMatrix *matrix);
void _clutter_util_matrix_skew_xy (CoglMatrix *matrix,
float factor);
void _clutter_util_matrix_skew_xz (CoglMatrix *matrix,
float factor);
void _clutter_util_matrix_skew_yz (CoglMatrix *matrix,
float factor);
gboolean _clutter_util_matrix_decompose (const CoglMatrix *src,
graphene_point3d_t *scale_p,
float shear_p[3],

View File

@ -285,36 +285,6 @@ _clutter_util_matrix_transpose_vector4_transform (const CoglMatrix *matrix,
+ matrix->ww * point->w;
}
void
_clutter_util_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;
}
void
_clutter_util_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;
}
void
_clutter_util_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;
}
static void
_clutter_util_vertex_combine (const graphene_point3d_t *a,
const graphene_point3d_t *b,

View File

@ -2246,3 +2246,42 @@ cogl_gtype_matrix_get_type (void)
{
return cogl_matrix_get_gtype ();
}
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;
matrix->flags = (MAT_FLAG_GENERAL | MAT_DIRTY_ALL);
_COGL_MATRIX_DEBUG_PRINT (matrix);
}
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;
matrix->flags = (MAT_FLAG_GENERAL | MAT_DIRTY_ALL);
_COGL_MATRIX_DEBUG_PRINT (matrix);
}
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;
matrix->flags = (MAT_FLAG_GENERAL | MAT_DIRTY_ALL);
_COGL_MATRIX_DEBUG_PRINT (matrix);
}

View File

@ -760,6 +760,51 @@ GType cogl_matrix_get_gtype (void);
COGL_EXPORT GType
cogl_gtype_matrix_get_type (void);
/**
* cogl_matrix_determinant:
* @matrix: a #CoglMatrix
*
* Computes the determinant of the @matrix.
*
* Returns: the value of the determinant
*/
COGL_EXPORT float
cogl_matrix_determinant (const CoglMatrix *matrix);
/**
* cogl_matrix_skew_xy:
* @matrix: a #CoglMatrix
* @factor: skew factor
*
* Adds a skew of factor on the X and Y axis to @matrix.
*/
COGL_EXPORT void
cogl_matrix_skew_xy (CoglMatrix *matrix,
float factor);
/**
* cogl_matrix_skew_xz:
* @matrix: a #CoglMatrix
* @factor: skew factor
*
* Adds a skew of factor on the X and Z axis to @matrix.
*/
COGL_EXPORT void
cogl_matrix_skew_xz (CoglMatrix *matrix,
float factor);
/**
* cogl_matrix_skew_yz:
* @matrix: a #CoglMatrix
* @factor: skew factor
*
* Adds a skew of factor on the Y and Z axis to @matrix.
*/
COGL_EXPORT void
cogl_matrix_skew_yz (CoglMatrix *matrix,
float factor);
G_END_DECLS
#endif /* __COGL_MATRIX_H */