added templated glLoadMatrix that automatically choose the right OpenGL call according the matrix type
This commit is contained in:
parent
b06ff095a1
commit
9b6833e521
|
@ -74,18 +74,23 @@ Revision 1.1 2004/03/31 15:27:17 ponchio
|
||||||
|
|
||||||
namespace vcg {
|
namespace vcg {
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
inline void glLoadMatrix(const vcg::Matrix44<T> &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<typename T,int StorageOrder>
|
template<typename T,int StorageOrder>
|
||||||
inline void glLoadMatrix(const Eigen::Matrix<T,4,4,StorageOrder>& matrix) { assert(0); }
|
inline void glLoadMatrix(const Eigen::Matrix<T,4,4,StorageOrder>& matrix) { assert(0); }
|
||||||
|
|
||||||
template<> inline void glLoadMatrix(const Eigen::Matrix<float,4,4>& matrix) { glLoadMatrixf(matrix.data()); }
|
template<> inline void glLoadMatrix(const Eigen::Matrix<float,4,4>& matrix) { glLoadMatrixf(matrix.data()); }
|
||||||
template<> inline void glLoadMatrix(const Eigen::Matrix<float,4,4,Eigen::RowMajor>& matrix) {
|
template<> inline void glLoadMatrix(const Eigen::Matrix<float,4,4,Eigen::RowMajor>& matrix) {
|
||||||
Eigen::Matrix4f tmp(matrix);
|
Eigen::Matrix4f tmp(matrix);
|
||||||
glLoadMatrixf(tmp.data());
|
glLoadMatrixf(tmp.data());
|
||||||
}
|
}
|
||||||
inline void glLoadMatrix(const Eigen::Matrix<double,4,4>& matrix) { glLoadMatrixd(matrix.data()); }
|
inline void glLoadMatrix(const Eigen::Matrix<double,4,4>& matrix) { glLoadMatrixd(matrix.data()); }
|
||||||
inline void glLoadMatrix(const Eigen::Matrix<double,4,4,Eigen::RowMajor>& matrix) {
|
inline void glLoadMatrix(const Eigen::Matrix<double,4,4,Eigen::RowMajor>& matrix) {
|
||||||
Eigen::Matrix4d tmp(matrix);
|
Eigen::Matrix4d tmp(matrix);
|
||||||
glLoadMatrixd(tmp.data());
|
glLoadMatrixd(tmp.data());
|
||||||
}
|
}
|
||||||
template<typename Scalar>
|
template<typename Scalar>
|
||||||
inline void glLoadMatrix(const Eigen::Transform<Scalar,3>& t) { glLoadMatrix(t.matrix()); }
|
inline void glLoadMatrix(const Eigen::Transform<Scalar,3>& t) { glLoadMatrix(t.matrix()); }
|
||||||
|
@ -96,13 +101,13 @@ inline void glMultMatrix(const Eigen::Matrix<T,4,4,StorageOrder>& matrix) { asse
|
||||||
|
|
||||||
template<> inline void glMultMatrix(const Eigen::Matrix<float,4,4>& matrix) { glMultMatrixf(matrix.data()); }
|
template<> inline void glMultMatrix(const Eigen::Matrix<float,4,4>& matrix) { glMultMatrixf(matrix.data()); }
|
||||||
inline void glMultMatrix(const Eigen::Matrix<float,4,4,Eigen::RowMajor>& matrix) {
|
inline void glMultMatrix(const Eigen::Matrix<float,4,4,Eigen::RowMajor>& matrix) {
|
||||||
Eigen::Matrix<float,4,4> tmp(matrix);
|
Eigen::Matrix<float,4,4> tmp(matrix);
|
||||||
glMultMatrixf(tmp.data());
|
glMultMatrixf(tmp.data());
|
||||||
}
|
}
|
||||||
template<> inline void glMultMatrix(const Eigen::Matrix<double,4,4>& matrix) { glMultMatrixd(matrix.data()); }
|
template<> inline void glMultMatrix(const Eigen::Matrix<double,4,4>& matrix) { glMultMatrixd(matrix.data()); }
|
||||||
template<> inline void glMultMatrix(const Eigen::Matrix<double,4,4,Eigen::RowMajor>& matrix) {
|
template<> inline void glMultMatrix(const Eigen::Matrix<double,4,4,Eigen::RowMajor>& matrix) {
|
||||||
Eigen::Matrix<double,4,4> tmp(matrix);
|
Eigen::Matrix<double,4,4> tmp(matrix);
|
||||||
glMultMatrixd(tmp.data());
|
glMultMatrixd(tmp.data());
|
||||||
}
|
}
|
||||||
template<typename Scalar>
|
template<typename Scalar>
|
||||||
inline void glMultMatrix(const Eigen::Transform<Scalar,3>& t) { glMultMatrix(t.matrix()); }
|
inline void glMultMatrix(const Eigen::Transform<Scalar,3>& t) { glMultMatrix(t.matrix()); }
|
||||||
|
@ -127,18 +132,18 @@ inline void glMultMatrix(const Similarityd &s) {
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void glGetv(const GLenum pname, Eigen::Matrix<float,4,4>& matrix){
|
inline void glGetv(const GLenum pname, Eigen::Matrix<float,4,4>& matrix){
|
||||||
glGetFloatv(pname,matrix.data());
|
glGetFloatv(pname,matrix.data());
|
||||||
}
|
}
|
||||||
inline void glGetv(const GLenum pname, Eigen::Matrix<double,4,4>& matrix){
|
inline void glGetv(const GLenum pname, Eigen::Matrix<double,4,4>& matrix){
|
||||||
glGetDoublev(pname,matrix.data());
|
glGetDoublev(pname,matrix.data());
|
||||||
}
|
}
|
||||||
inline void glGetv(const GLenum pname, Eigen::Matrix<float,4,4,Eigen::RowMajor>& matrix){
|
inline void glGetv(const GLenum pname, Eigen::Matrix<float,4,4,Eigen::RowMajor>& matrix){
|
||||||
glGetFloatv(pname,matrix.data());
|
glGetFloatv(pname,matrix.data());
|
||||||
matrix.transposeInPlace();
|
matrix.transposeInPlace();
|
||||||
}
|
}
|
||||||
inline void glGetv(const GLenum pname, Eigen::Matrix<double,4,4,Eigen::RowMajor>& matrix){
|
inline void glGetv(const GLenum pname, Eigen::Matrix<double,4,4,Eigen::RowMajor>& matrix){
|
||||||
glGetDoublev(pname,matrix.data());
|
glGetDoublev(pname,matrix.data());
|
||||||
matrix.transposeInPlace();
|
matrix.transposeInPlace();
|
||||||
}
|
}
|
||||||
template<typename Scalar>
|
template<typename Scalar>
|
||||||
inline void glGetv(const GLenum pname, const Eigen::Transform<Scalar,3>& t)
|
inline void glGetv(const GLenum pname, const Eigen::Transform<Scalar,3>& t)
|
||||||
|
|
Loading…
Reference in New Issue