On 07/17/2015 05:48 PM, Brian Paul wrote: > Skip memcpy() calls, etc. if the matrix is already the identity. Return > true/false to indicate if we're really changing the matrix or not. > --- > src/mesa/math/m_matrix.c | 23 +++++++++++++++-------- > src/mesa/math/m_matrix.h | 2 +- > 2 files changed, 16 insertions(+), 9 deletions(-) > > diff --git a/src/mesa/math/m_matrix.c b/src/mesa/math/m_matrix.c > index ecf564c..37c7612 100644 > --- a/src/mesa/math/m_matrix.c > +++ b/src/mesa/math/m_matrix.c > @@ -1132,17 +1132,24 @@ _math_matrix_viewport(GLmatrix *m, const double > scale[3], > * > * Copies ::Identity into \p GLmatrix::m, and into GLmatrix::inv if not NULL. > * Sets the matrix type to identity, and clear the dirty flags. > + * \return true if prev matrix wasn't identity, false otherwise > */ > -void > -_math_matrix_set_identity( GLmatrix *mat ) > +bool > +_math_matrix_set_identity(GLmatrix *mat) > { > - memcpy( mat->m, Identity, 16*sizeof(GLfloat) ); > - memcpy( mat->inv, Identity, 16*sizeof(GLfloat) ); > + if (mat->type != MATRIX_IDENTITY || mat->flags) { > + memcpy(mat->m, Identity, 16 * sizeof(GLfloat)); > + memcpy(mat->inv, Identity, 16 * sizeof(GLfloat)); > + > + mat->type = MATRIX_IDENTITY; > + mat->flags = 0; > > - mat->type = MATRIX_IDENTITY; > - mat->flags &= ~(MAT_DIRTY_FLAGS| > - MAT_DIRTY_TYPE| > - MAT_DIRTY_INVERSE); > + return true; > + } > + else {
Most places use } else { these days. > + /* no change */ > + return false; > + } > } > > /*@}*/ > diff --git a/src/mesa/math/m_matrix.h b/src/mesa/math/m_matrix.h > index 778d716..0bb63c8 100644 > --- a/src/mesa/math/m_matrix.h > +++ b/src/mesa/math/m_matrix.h > @@ -125,7 +125,7 @@ extern void > _math_matrix_viewport( GLmatrix *m, const double scale[3], > const double translate[3], double depthMax ); > > -extern void > +extern bool > _math_matrix_set_identity( GLmatrix *dest ); > > extern void > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev