1c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// This file is part of Eigen, a lightweight C++ template library 2c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// for linear algebra. 3c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// 4c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Copyright (C) 2008 Gael Guennebaud <gael.guennebaud@inria.fr> 5c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// 6c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// This Source Code Form is subject to the terms of the Mozilla 7c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Public License v. 2.0. If a copy of the MPL was not distributed 8c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. 9c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 10c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#ifndef EIGEN_GPUHELPER_H 11c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define EIGEN_GPUHELPER_H 12c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 13c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <Eigen/Geometry> 14c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <GL/gl.h> 15c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <vector> 16c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 17c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathusing namespace Eigen; 18c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 19c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtypedef Vector4f Color; 20c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 21c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathclass GpuHelper 22c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 23c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath public: 24c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 25c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath GpuHelper(); 26c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 27c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath ~GpuHelper(); 28c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 29c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath enum ProjectionMode2D { PM_Normalized = 1, PM_Viewport = 2 }; 30c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath void pushProjectionMode2D(ProjectionMode2D pm); 31c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath void popProjectionMode2D(); 32c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 33c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath /** Multiply the OpenGL matrix \a matrixTarget by the matrix \a mat. 34c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Essentially, this helper function automatically calls glMatrixMode(matrixTarget) if required 35c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath and does a proper call to the right glMultMatrix*() function according to the scalar type 36c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath and storage order. 37c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath \warning glMatrixMode() must never be called directly. If your're unsure, use forceMatrixMode(). 38c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath \sa Matrix, loadMatrix(), forceMatrixMode() 39c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 40c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template<typename Scalar, int _Flags> 41c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath void multMatrix(const Matrix<Scalar,4,4, _Flags, 4,4>& mat, GLenum matrixTarget); 42c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 43c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath /** Load the matrix \a mat to the OpenGL matrix \a matrixTarget. 44c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Essentially, this helper function automatically calls glMatrixMode(matrixTarget) if required 45c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath and does a proper call to the right glLoadMatrix*() or glLoadIdentity() function according to the scalar type 46c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath and storage order. 47c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath \warning glMatrixMode() must never be called directly. If your're unsure, use forceMatrixMode(). 48c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath \sa Matrix, multMatrix(), forceMatrixMode() 49c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 50c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template<typename Scalar, int _Flags> 51c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath void loadMatrix(const Eigen::Matrix<Scalar,4,4, _Flags, 4,4>& mat, GLenum matrixTarget); 52c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 53c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template<typename Scalar, typename Derived> 54c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath void loadMatrix( 55c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const Eigen::CwiseNullaryOp<Eigen::internal::scalar_identity_op<Scalar>,Derived>&, 56c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath GLenum matrixTarget); 57c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 58c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath /** Make the matrix \a matrixTarget the current OpenGL matrix target. 59c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Call this function before loadMatrix() or multMatrix() if you cannot guarantee that glMatrixMode() 60c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath has never been called after the last loadMatrix() or multMatrix() calls. 61c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath \todo provides a debug mode checking the sanity of the cached matrix mode. 62c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 63c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline void forceMatrixTarget(GLenum matrixTarget) {glMatrixMode(mCurrentMatrixTarget=matrixTarget);} 64c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 65c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline void setMatrixTarget(GLenum matrixTarget); 66c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 67c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath /** Push the OpenGL matrix \a matrixTarget and load \a mat. 68c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 69c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template<typename Scalar, int _Flags> 70c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline void pushMatrix(const Matrix<Scalar,4,4, _Flags, 4,4>& mat, GLenum matrixTarget); 71c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 72c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template<typename Scalar, typename Derived> 73c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath void pushMatrix( 74c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const Eigen::CwiseNullaryOp<Eigen::internal::scalar_identity_op<Scalar>,Derived>&, 75c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath GLenum matrixTarget); 76c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 77c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath /** Push and clone the OpenGL matrix \a matrixTarget 78c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 79c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline void pushMatrix(GLenum matrixTarget); 80c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 81c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath /** Pop the OpenGL matrix \a matrixTarget 82c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 83c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline void popMatrix(GLenum matrixTarget); 84c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 85c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath void drawVector(const Vector3f& position, const Vector3f& vec, const Color& color, float aspect = 50.); 86c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath void drawVectorBox(const Vector3f& position, const Vector3f& vec, const Color& color, float aspect = 50.); 87c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath void drawUnitCube(void); 88c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath void drawUnitSphere(int level=0); 89c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 90c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath /// draw the \a nofElement first elements 91c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline void draw(GLenum mode, uint nofElement); 92c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 93c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath /// draw a range of elements 94c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline void draw(GLenum mode, uint start, uint end); 95c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 96c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath /// draw an indexed subset 97c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline void draw(GLenum mode, const std::vector<uint>* pIndexes); 98c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 99c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathprotected: 100c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 101c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath void update(void); 102c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 103c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath GLuint mColorBufferId; 104c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int mVpWidth, mVpHeight; 105c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath GLenum mCurrentMatrixTarget; 106c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath bool mInitialized; 107c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}; 108c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 109c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** Singleton shortcut 110c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath*/ 111c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathextern GpuHelper gpu; 112c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 113c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 114c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** \internal 115c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath*/ 116c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<bool RowMajor, int _Flags> struct GlMatrixHelper; 117c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 118c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<int _Flags> struct GlMatrixHelper<false,_Flags> 119c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 120c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static void loadMatrix(const Matrix<float, 4,4, _Flags, 4,4>& mat) { glLoadMatrixf(mat.data()); } 121c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static void loadMatrix(const Matrix<double,4,4, _Flags, 4,4>& mat) { glLoadMatrixd(mat.data()); } 122c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static void multMatrix(const Matrix<float, 4,4, _Flags, 4,4>& mat) { glMultMatrixf(mat.data()); } 123c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static void multMatrix(const Matrix<double,4,4, _Flags, 4,4>& mat) { glMultMatrixd(mat.data()); } 124c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}; 125c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 126c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<int _Flags> struct GlMatrixHelper<true,_Flags> 127c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 128c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static void loadMatrix(const Matrix<float, 4,4, _Flags, 4,4>& mat) { glLoadMatrixf(mat.transpose().eval().data()); } 129c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static void loadMatrix(const Matrix<double,4,4, _Flags, 4,4>& mat) { glLoadMatrixd(mat.transpose().eval().data()); } 130c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static void multMatrix(const Matrix<float, 4,4, _Flags, 4,4>& mat) { glMultMatrixf(mat.transpose().eval().data()); } 131c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static void multMatrix(const Matrix<double,4,4, _Flags, 4,4>& mat) { glMultMatrixd(mat.transpose().eval().data()); } 132c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}; 133c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 134c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline void GpuHelper::setMatrixTarget(GLenum matrixTarget) 135c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 136c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if (matrixTarget != mCurrentMatrixTarget) 137c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath glMatrixMode(mCurrentMatrixTarget=matrixTarget); 138c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 139c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 140c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar, int _Flags> 141c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathvoid GpuHelper::multMatrix(const Matrix<Scalar,4,4, _Flags, 4,4>& mat, GLenum matrixTarget) 142c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 143c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath setMatrixTarget(matrixTarget); 144c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath GlMatrixHelper<_Flags&Eigen::RowMajorBit, _Flags>::multMatrix(mat); 145c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 146c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 147c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar, typename Derived> 148c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathvoid GpuHelper::loadMatrix( 149c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const Eigen::CwiseNullaryOp<Eigen::internal::scalar_identity_op<Scalar>,Derived>&, 150c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath GLenum matrixTarget) 151c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 152c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath setMatrixTarget(matrixTarget); 153c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath glLoadIdentity(); 154c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 155c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 156c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar, int _Flags> 157c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathvoid GpuHelper::loadMatrix(const Eigen::Matrix<Scalar,4,4, _Flags, 4,4>& mat, GLenum matrixTarget) 158c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 159c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath setMatrixTarget(matrixTarget); 160c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath GlMatrixHelper<(_Flags&Eigen::RowMajorBit)!=0, _Flags>::loadMatrix(mat); 161c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 162c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 163c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline void GpuHelper::pushMatrix(GLenum matrixTarget) 164c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 165c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath setMatrixTarget(matrixTarget); 166c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath glPushMatrix(); 167c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 168c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 169c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar, int _Flags> 170c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline void GpuHelper::pushMatrix(const Matrix<Scalar,4,4, _Flags, 4,4>& mat, GLenum matrixTarget) 171c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 172c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath pushMatrix(matrixTarget); 173c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath GlMatrixHelper<_Flags&Eigen::RowMajorBit,_Flags>::loadMatrix(mat); 174c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 175c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 176c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar, typename Derived> 177c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathvoid GpuHelper::pushMatrix( 178c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const Eigen::CwiseNullaryOp<Eigen::internal::scalar_identity_op<Scalar>,Derived>&, 179c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath GLenum matrixTarget) 180c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 181c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath pushMatrix(matrixTarget); 182c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath glLoadIdentity(); 183c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 184c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 185c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline void GpuHelper::popMatrix(GLenum matrixTarget) 186c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 187c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath setMatrixTarget(matrixTarget); 188c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath glPopMatrix(); 189c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 190c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 191c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline void GpuHelper::draw(GLenum mode, uint nofElement) 192c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 193c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath glDrawArrays(mode, 0, nofElement); 194c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 195c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 196c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 197c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline void GpuHelper::draw(GLenum mode, const std::vector<uint>* pIndexes) 198c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 199c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath glDrawElements(mode, pIndexes->size(), GL_UNSIGNED_INT, &(pIndexes->front())); 200c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 201c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 202c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline void GpuHelper::draw(GLenum mode, uint start, uint end) 203c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 204c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath glDrawArrays(mode, start, end-start); 205c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 206c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 207c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif // EIGEN_GPUHELPER_H 208