diff --git a/cogl/cogl-matrix.c b/cogl/cogl-matrix.c index 51c98fb83..4ceece7d2 100644 --- a/cogl/cogl-matrix.c +++ b/cogl/cogl-matrix.c @@ -2041,3 +2041,13 @@ cogl_matrix_project_points (const CoglMatrix *matrix, n_points); } } + +gboolean +cogl_matrix_is_identity (const CoglMatrix *matrix) +{ + if (!(matrix->flags & MAT_DIRTY_TYPE) && + matrix->type == COGL_MATRIX_TYPE_IDENTITY) + return TRUE; + else + return memcmp (matrix, identity, sizeof (float) * 16) == 0; +} diff --git a/cogl/cogl-matrix.h b/cogl/cogl-matrix.h index 903d2ea62..a2c238544 100644 --- a/cogl/cogl-matrix.h +++ b/cogl/cogl-matrix.h @@ -585,6 +585,18 @@ cogl_matrix_project_points (const CoglMatrix *matrix, #endif /* COGL_ENABLE_EXPERIMENTAL_API */ +/** + * cogl_matrix_is_identity: + * @matrix: A #CoglMatrix + * + * Determines if the given matrix is an identity matrix. + * + * Returns: %TRUE if @matrix is an identity matrix else %FALSE + * Since: 1.8 + */ +gboolean +cogl_matrix_is_identity (const CoglMatrix *matrix); + #ifdef _COGL_SUPPORTS_GTYPE_INTEGRATION #define COGL_GTYPE_TYPE_MATRIX (cogl_gtype_matrix_get_type ()) diff --git a/doc/reference/cogl-2.0-experimental/cogl-sections.txt b/doc/reference/cogl-2.0-experimental/cogl-sections.txt index 02f793155..1f7216fa2 100644 --- a/doc/reference/cogl-2.0-experimental/cogl-sections.txt +++ b/doc/reference/cogl-2.0-experimental/cogl-sections.txt @@ -387,6 +387,7 @@ cogl_matrix_scale cogl_matrix_init_from_array cogl_matrix_get_array cogl_matrix_get_inverse +cogl_matrix_is_identity cogl-euler diff --git a/doc/reference/cogl/cogl-sections.txt b/doc/reference/cogl/cogl-sections.txt index c737a8b4c..1bbb50b08 100644 --- a/doc/reference/cogl/cogl-sections.txt +++ b/doc/reference/cogl/cogl-sections.txt @@ -469,6 +469,7 @@ cogl_matrix_get_inverse cogl_matrix_transform_point cogl_matrix_project_points cogl_matrix_transform_points +cogl_matrix_is_identity