X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FMoof%2FOpenGL.hh;h=1e37b5e1f86d3be952826fab83e514ebe858ad53;hp=e74f6010b584b7ab646b2d0b3391bd1ea9dd8cdb;hb=2d77fb5fb3480f522658f30af6addd5146530517;hpb=64e3c3202d2c1956759fb4da36ca329816c9369a diff --git a/src/Moof/OpenGL.hh b/src/Moof/OpenGL.hh index e74f601..1e37b5e 100644 --- a/src/Moof/OpenGL.hh +++ b/src/Moof/OpenGL.hh @@ -31,126 +31,97 @@ #include +#include + #if HAVE_CONFIG_H #include "config.h" #endif +// generic function arguments + +#define ARGS_P const GLscalar* p +#define PASS_P p + +#define ARGS_M const Mf::Matrix4& m +#define PASS_M m.data() + +// ordinal function arguments + +#define ARGS_S2 GLscalar a, GLscalar b +#define PASS_S2 a, b +#define ARGS_S3 GLscalar a, GLscalar b, GLscalar c +#define PASS_S3 a, b, c +#define ARGS_S4 GLscalar a, GLscalar b, GLscalar c, GLscalar d +#define PASS_S4 a, b, c, d + +#define ARGS_P2 const Mf::Vector2& p +#define PASS_P2 p.data() +#define ARGS_P3 const Mf::Vector3& p +#define PASS_P3 p.data() +#define ARGS_P4 const Mf::Vector4& p +#define PASS_P4 p.data() + +#define ARGS_V2 const Mf::Vector2& v +#define PASS_V2 v[0], v[1] +#define ARGS_V3 const Mf::Vector3& v +#define PASS_V3 v[0], v[1], v[2] +#define ARGS_V4 const Mf::Vector4& v +#define PASS_V4 v[0], v[1], v[2], v[3] + + #if USE_DOUBLE_PRECISION -typedef GLdouble GLscalar; -#define GL_SCALAR GL_DOUBLE -#define SCALAR(D) (D) - -inline void glGetScalarv(GLenum a, GLscalar* b) -{ glGetDoublev(a, b); } - -inline void glLoadMatrix(const GLscalar* a) -{ glLoadMatrixd(a); } -inline void glMultMatrix(const GLscalar* a) -{ glMultMatrixd(a); } - -inline void glScale(GLscalar a, GLscalar b, GLscalar c) -{ glScaled(a, b, c); } -inline void glRotate(GLscalar a, GLscalar b, GLscalar c, GLscalar d) -{ glRotated(a, b, c, d); } -inline void glTranslate(GLscalar a, GLscalar b, GLscalar c) -{ glTranslated(a, b, c); } - -inline void glColor3(GLscalar a, GLscalar b, GLscalar c) -{ glColor3d(a, b, c); } -inline void glColor4(GLscalar a, GLscalar b, GLscalar c, GLscalar d) -{ glColor4d(a, b, c, d); } -inline void glColor3v(const GLscalar *a) -{ glColor3dv(a); } -inline void glColor4v(const GLscalar *a) -{ glColor4dv(a); } - -inline void glVertex2(GLscalar a, GLscalar b) -{ glVertex2d(a, b); } -inline void glVertex3(GLscalar a, GLscalar b, GLscalar c) -{ glVertex3d(a, b, c); } -inline void glVertex4(GLscalar a, GLscalar b, GLscalar c, GLscalar d) -{ glVertex4d(a, b, c, d); } -inline void glVertex2v(const GLscalar* a) -{ glVertex2dv(a); } -inline void glVertex3v(const GLscalar* a) -{ glVertex3dv(a); } -inline void glVertex4v(const GLscalar* a) -{ glVertex4dv(a); } - -inline void glTexCoord2(GLscalar a, GLscalar b) -{ glTexCoord2d(a, b); } -inline void glTexCoord3(GLscalar a, GLscalar b, GLscalar c) -{ glTexCoord3d(a, b, c); } -inline void glTexCoord4(GLscalar a, GLscalar b, GLscalar c, GLscalar d) -{ glTexCoord4d(a, b, c, d); } -inline void glTexCoord2v(const GLscalar* a) -{ glTexCoord2dv(a); } -inline void glTexCoord3v(const GLscalar* a) -{ glTexCoord3dv(a); } -inline void glTexCoord4v(const GLscalar* a) -{ glTexCoord4dv(a); } +#define OPENGL_GENERIC_FUNC(R, N, L) \ + inline R gl##N(ARGS_##L) { gl##N##d(PASS_##L); }// + +#define OPENGL_ORDINAL_FUNC(R, N, K) \ + inline R gl##N(ARGS_##S##K) { gl##N##K##d(PASS_##S##K); } \ + inline R gl##N(ARGS_##P##K) { gl##N##K##d##v(PASS_##P##K); }// #else -typedef GLfloat GLscalar; -#define GL_SCALAR GL_FLOAT -#define SCALAR(F) (F##f) - -inline void glGetScalarv(GLenum a, GLscalar* b) -{ glGetFloatv(a, b); } - -inline void glLoadMatrix(const GLscalar* a) -{ glLoadMatrixf(a); } -inline void glMultMatrix(const GLscalar* a) -{ glMultMatrixf(a); } - -inline void glScale(GLscalar a, GLscalar b, GLscalar c) -{ glScalef(a, b, c); } -inline void glRotate(GLscalar a, GLscalar b, GLscalar c, GLscalar d) -{ glRotatef(a, b, c, d); } -inline void glTranslate(GLscalar a, GLscalar b, GLscalar c) -{ glTranslatef(a, b, c); } - -inline void glColor3(GLscalar a, GLscalar b, GLscalar c) -{ glColor3f(a, b, c); } -inline void glColor4(GLscalar a, GLscalar b, GLscalar c, GLscalar d) -{ glColor4f(a, b, c, d); } -inline void glColor3v(const GLscalar *a) -{ glColor3fv(a); } -inline void glColor4v(const GLscalar *a) -{ glColor4fv(a); } - -inline void glVertex2(GLscalar a, GLscalar b) -{ glVertex2f(a, b); } -inline void glVertex3(GLscalar a, GLscalar b, GLscalar c) -{ glVertex3f(a, b, c); } -inline void glVertex4(GLscalar a, GLscalar b, GLscalar c, GLscalar d) -{ glVertex4f(a, b, c, d); } -inline void glVertex2v(const GLscalar* a) -{ glVertex2fv(a); } -inline void glVertex3v(const GLscalar* a) -{ glVertex3fv(a); } -inline void glVertex4v(const GLscalar* a) -{ glVertex4fv(a); } - -inline void glTexCoord2(GLscalar a, GLscalar b) -{ glTexCoord2f(a, b); } -inline void glTexCoord3(GLscalar a, GLscalar b, GLscalar c) -{ glTexCoord3f(a, b, c); } -inline void glTexCoord4(GLscalar a, GLscalar b, GLscalar c, GLscalar d) -{ glTexCoord4f(a, b, c, d); } -inline void glTexCoord2v(const GLscalar* a) -{ glTexCoord2fv(a); } -inline void glTexCoord3v(const GLscalar* a) -{ glTexCoord3fv(a); } -inline void glTexCoord4v(const GLscalar* a) -{ glTexCoord4fv(a); } +#define OPENGL_GENERIC_FUNC(R, N, L) \ + inline R gl##N(ARGS_##L) { gl##N##f(PASS_##L); }// + +#define OPENGL_ORDINAL_FUNC(R, N, K) \ + inline R gl##N(ARGS_##S##K) { gl##N##K##f(PASS_##S##K); } \ + inline R gl##N(ARGS_##P##K) { gl##N##K##f##v(PASS_##P##K); }// #endif +OPENGL_GENERIC_FUNC(void, LoadMatrix, P); +OPENGL_GENERIC_FUNC(void, LoadMatrix, M); +OPENGL_GENERIC_FUNC(void, MultMatrix, P); +OPENGL_GENERIC_FUNC(void, MultMatrix, M); + +OPENGL_GENERIC_FUNC(void, Scale, S3); +OPENGL_GENERIC_FUNC(void, Scale, V3); +OPENGL_GENERIC_FUNC(void, Rotate, S4); +OPENGL_GENERIC_FUNC(void, Rotate, V4); +OPENGL_GENERIC_FUNC(void, Translate, S3); +OPENGL_GENERIC_FUNC(void, Translate, V3); + +OPENGL_ORDINAL_FUNC(void, Color, 3); +OPENGL_ORDINAL_FUNC(void, Color, 4); + +OPENGL_ORDINAL_FUNC(void, Vertex, 2); +OPENGL_ORDINAL_FUNC(void, Vertex, 3); +OPENGL_ORDINAL_FUNC(void, Vertex, 4); + +OPENGL_ORDINAL_FUNC(void, TexCoord, 2); +OPENGL_ORDINAL_FUNC(void, TexCoord, 3); +OPENGL_ORDINAL_FUNC(void, TexCoord, 4); + + +#if USE_DOUBLE_PRECISION +inline void glGetScalar(GLenum a, GLscalar* b) { glGetDoublev(a, b); } +#else +inline void glGetScalar(GLenum a, GLscalar* b) { glGetFloatv(a, b); } +#endif + + #endif // _MOOF_OPENGL_HH_ /** vim: set ts=4 sw=4 tw=80: *************************************************/