From 9b6833e5216619ed4386d3002178562a73e2c8c0 Mon Sep 17 00:00:00 2001 From: cignoni Date: Wed, 6 Aug 2014 22:37:55 +0000 Subject: [PATCH] added templated glLoadMatrix that automatically choose the right OpenGL call according the matrix type --- wrap/gl/math.h | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/wrap/gl/math.h b/wrap/gl/math.h index 4e382f99..956aee13 100644 --- a/wrap/gl/math.h +++ b/wrap/gl/math.h @@ -74,18 +74,23 @@ Revision 1.1 2004/03/31 15:27:17 ponchio namespace vcg { +template +inline void glLoadMatrix(const vcg::Matrix44 &m) { assert(0); } +template<> inline void glLoadMatrix(const vcg::Matrix44f &m) {glLoadMatrixf(m.V()); } +template<> inline void glLoadMatrix(const vcg::Matrix44d &m) {glLoadMatrixd(m.V()); } + template inline void glLoadMatrix(const Eigen::Matrix& matrix) { assert(0); } template<> inline void glLoadMatrix(const Eigen::Matrix& matrix) { glLoadMatrixf(matrix.data()); } template<> inline void glLoadMatrix(const Eigen::Matrix& matrix) { - Eigen::Matrix4f tmp(matrix); - glLoadMatrixf(tmp.data()); + Eigen::Matrix4f tmp(matrix); + glLoadMatrixf(tmp.data()); } inline void glLoadMatrix(const Eigen::Matrix& matrix) { glLoadMatrixd(matrix.data()); } inline void glLoadMatrix(const Eigen::Matrix& matrix) { - Eigen::Matrix4d tmp(matrix); - glLoadMatrixd(tmp.data()); + Eigen::Matrix4d tmp(matrix); + glLoadMatrixd(tmp.data()); } template inline void glLoadMatrix(const Eigen::Transform& t) { glLoadMatrix(t.matrix()); } @@ -96,13 +101,13 @@ inline void glMultMatrix(const Eigen::Matrix& matrix) { asse template<> inline void glMultMatrix(const Eigen::Matrix& matrix) { glMultMatrixf(matrix.data()); } inline void glMultMatrix(const Eigen::Matrix& matrix) { - Eigen::Matrix tmp(matrix); - glMultMatrixf(tmp.data()); + Eigen::Matrix tmp(matrix); + glMultMatrixf(tmp.data()); } template<> inline void glMultMatrix(const Eigen::Matrix& matrix) { glMultMatrixd(matrix.data()); } template<> inline void glMultMatrix(const Eigen::Matrix& matrix) { - Eigen::Matrix tmp(matrix); - glMultMatrixd(tmp.data()); + Eigen::Matrix tmp(matrix); + glMultMatrixd(tmp.data()); } template inline void glMultMatrix(const Eigen::Transform& t) { glMultMatrix(t.matrix()); } @@ -127,18 +132,18 @@ inline void glMultMatrix(const Similarityd &s) { } inline void glGetv(const GLenum pname, Eigen::Matrix& matrix){ - glGetFloatv(pname,matrix.data()); + glGetFloatv(pname,matrix.data()); } inline void glGetv(const GLenum pname, Eigen::Matrix& matrix){ - glGetDoublev(pname,matrix.data()); + glGetDoublev(pname,matrix.data()); } inline void glGetv(const GLenum pname, Eigen::Matrix& matrix){ - glGetFloatv(pname,matrix.data()); - matrix.transposeInPlace(); + glGetFloatv(pname,matrix.data()); + matrix.transposeInPlace(); } inline void glGetv(const GLenum pname, Eigen::Matrix& matrix){ - glGetDoublev(pname,matrix.data()); - matrix.transposeInPlace(); + glGetDoublev(pname,matrix.data()); + matrix.transposeInPlace(); } template inline void glGetv(const GLenum pname, const Eigen::Transform& t)