e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * Note: m[col][row] matches OpenGL's column-major memory layout
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern "C" {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrMatrixInitFromFloats(CRmatrix *m, const float *v);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrMatrixInitFromDoubles(CRmatrix *m, const double *v);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrMatrixGetFloats(float *values, const CRmatrix *m);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrMatrixIsEqual(const CRmatrix *m, const CRmatrix *n);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrMatrixMultiply(CRmatrix *p, const CRmatrix *a, const CRmatrix *b);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrMatrixTransformPointf(const CRmatrix *m, GLvectorf *p);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrMatrixTransformPointd(const CRmatrix *m, GLvectord *p);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrMatrixInvertTranspose(CRmatrix *inv, const CRmatrix *mat);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrMatrixTranslate(CRmatrix *m, float x, float y, float z);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrMatrixRotate(CRmatrix *m, float angle, float x, float y, float z);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynccrMatrixScale(CRmatrix *m, float x, float y, float z);