]> Dogcows Code - chaz/yoink/blobdiff - src/Moof/OpenGL.hh
reformatting
[chaz/yoink] / src / Moof / OpenGL.hh
index e74f6010b584b7ab646b2d0b3391bd1ea9dd8cdb..2fc919779682dd725b179a59ecd9b2a746236ce7 100644 (file)
 
-/*******************************************************************************
-
- Copyright (c) 2009, Charles McGarvey
- All rights reserved.
- Redistribution   and   use  in  source  and  binary  forms,  with  or  without
- modification, are permitted provided that the following conditions are met:
-   * Redistributions  of  source  code  must retain the above copyright notice,
-     this list of conditions and the following disclaimer.
-   * Redistributions  in binary form must reproduce the above copyright notice,
-     this  list of conditions and the following disclaimer in the documentation
-     and/or other materials provided with the distribution.
- THIS  SOFTWARE  IS  PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND  ANY  EXPRESS  OR  IMPLIED  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED.  IN  NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR  ANY  DIRECT,  INDIRECT,  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES  (INCLUDING,  BUT  NOT  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES;  LOSS  OF  USE,  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-*******************************************************************************/
+/*]  Copyright (c) 2009-2010, Charles McGarvey  [**************************
+**]  All rights reserved.
+*
+* vi:ts=4 sw=4 tw=75
+*
+* Distributable under the terms and conditions of the 2-clause BSD license;
+* see the file COPYING for a complete text of the license.
+*
+**************************************************************************/
 
 #ifndef _MOOF_OPENGL_HH_
 #define _MOOF_OPENGL_HH_
 
 #include <SDL/SDL_opengl.h>
 
+#include <Moof/Math.hh>
+
 #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
 
 
-#endif // _MOOF_OPENGL_HH_
+OPENGL_GENERIC_FUNC(void,      LoadMatrix,     P);
+OPENGL_GENERIC_FUNC(void,      LoadMatrix,     M);
+OPENGL_GENERIC_FUNC(void,      MultMatrix, P);
+OPENGL_GENERIC_FUNC(void,      MultMatrix, M);
 
-/** vim: set ts=4 sw=4 tw=80: *************************************************/
+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_
 
This page took 0.021013 seconds and 4 git commands to generate.