X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2Fmoof%2Fopengl.hh;h=7c802001bed7751ee4e1dbce956b80b2eb914ffb;hp=7608cda61508e68cf8f4a435e718915044e1e5be;hb=44b3014bce798789e795242d1556cb7449e6386a;hpb=831f04d4bc19a390415ac0bbac4331c7a65509bc diff --git a/src/moof/opengl.hh b/src/moof/opengl.hh index 7608cda..7c80200 100644 --- a/src/moof/opengl.hh +++ b/src/moof/opengl.hh @@ -1,31 +1,31 @@ -/*] Copyright (c) 2009-2010, Charles McGarvey [************************** +/*] Copyright (c) 2009-2011, 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_ -/** - * \file opengl.hh - * Defines macros for OpenGL functions that operate on scalars, vectors, - * and matrices. - */ +#if HAVE_CONFIG_H +#include "config.h" +#endif + +#include #include #include -#if HAVE_CONFIG_H -#include "config.h" -#endif +/** + * \file opengl.hh + * Defines macros for OpenGL functions that operate on scalars, vectors, and + * matrices. + */ // generic function arguments @@ -58,60 +58,89 @@ #define ARGS_V4 const moof::vector4& v #define PASS_V4 v[0], v[1], v[2], v[3] +#if ENABLE_DOUBLE_PRECISION -#if USE_DOUBLE_PRECISION - -#define OPENGL_GENERIC_FUNC(R, N, L) \ +#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); } \ +#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 -#define OPENGL_GENERIC_FUNC(R, N, L) \ +#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); } \ +#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); - -OPENGL_GENERIC_FUNC(void, Rect, S4); -OPENGL_GENERIC_FUNC(void, Rect, V4); - - -#if USE_DOUBLE_PRECISION -inline void glGetScalar(GLenum a, GLscalar* b) { glGetDoublev(a, b); } +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); + +OPENGL_GENERIC_FUNC(void, Rect, S4); +OPENGL_GENERIC_FUNC(void, Rect, V4); + +inline void glMaterial(GLenum face, GLenum pname, moof::scalar s) +{ + glMaterialf(face, pname, float(s)); +} + +inline void glMaterial(GLenum face, GLenum pname, const moof::vector4& v) +{ +#if ENABLE_DOUBLE_PRECISION + float f[] = {v[0], v[1], v[2], v[3]}; + glMaterialfv(face, pname, f); +#else + glMaterialfv(face, pname, v.data()); +#endif +} + +inline void glVertexPointer(const std::vector& v) +{ + glVertexPointer(3, GL_SCALAR, 0, v[0].data()); +} +inline void glTexCoordPointer(const std::vector& v) +{ + glTexCoordPointer(2, GL_SCALAR, 0, v[0].data()); +} + +inline void glDrawElements(GLenum type, const std::vector& v) +{ + glDrawElements(type, v.size(), GL_UNSIGNED_INT, &v[0]); +} + +inline void glGetScalar(GLenum a, GLscalar* b) +{ +#if ENABLE_DOUBLE_PRECISION + glGetDoublev(a, b); #else -inline void glGetScalar(GLenum a, GLscalar* b) { glGetFloatv(a, b); } + glGetFloatv(a, b); #endif +} #endif // _MOOF_OPENGL_HH_