X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FMoof%2FOpenGL.hh;h=05d8317caefa4b001f3bdf67a23072945aaa82dc;hp=0ac6612723025b65858cb6da55798b00f1127109;hb=41f8dd670e963aad94527ce2be0486268993a477;hpb=8ad81a8282ce6e9e488a453e6bcd05fbc09715dc diff --git a/src/Moof/OpenGL.hh b/src/Moof/OpenGL.hh index 0ac6612..05d8317 100644 --- a/src/Moof/OpenGL.hh +++ b/src/Moof/OpenGL.hh @@ -1,111 +1,112 @@ -/******************************************************************************* - - 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 +#include -/* Define to 1 if you want to use double precision floating-point numbers. */ -#define USE_DOUBLE_PRECISION 1 +#if HAVE_CONFIG_H +#include "config.h" +#endif -#if USE_DOUBLE_PRECISION +// generic function arguments -typedef GLdouble GLscalar; -#define GL_SCALAR GL_DOUBLE +#define ARGS_P const GLscalar* p +#define PASS_P p -inline void glGetScalarv(GLenum a, GLscalar* b) { glGetDoublev(a, b); } +#define ARGS_M const Mf::Matrix4& m +#define PASS_M m.data() -inline void glLoadMatrix(const GLscalar* a) { glLoadMatrixd(a); } -inline void glMultMatrix(const GLscalar* a) { glMultMatrixd(a); } +// ordinal function arguments -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); } +#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 -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); } +#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() -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); } +#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] -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); } + +#if USE_DOUBLE_PRECISION + +#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 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); }// -inline void glGetScalarv(GLenum a, GLscalar* b) { glGetFloatv(a, b); } +#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); -inline void glLoadMatrix(const GLscalar* a) { glLoadMatrixf(a); } -inline void glMultMatrix(const GLscalar* a) { glMultMatrixf(a); } +OPENGL_ORDINAL_FUNC(void, Color, 3); +OPENGL_ORDINAL_FUNC(void, Color, 4); -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); } +OPENGL_ORDINAL_FUNC(void, Vertex, 2); +OPENGL_ORDINAL_FUNC(void, Vertex, 3); +OPENGL_ORDINAL_FUNC(void, Vertex, 4); -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); } +OPENGL_ORDINAL_FUNC(void, TexCoord, 2); +OPENGL_ORDINAL_FUNC(void, TexCoord, 3); +OPENGL_ORDINAL_FUNC(void, TexCoord, 4); -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); } +OPENGL_GENERIC_FUNC(void, Rect, S4); +OPENGL_GENERIC_FUNC(void, Rect, V4); -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); } +#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: *************************************************/ -