OpenSceneGraph/include/osg/GL
Robert Osfield b199a334d9 Introduced OSG_GL*_FEATURES macros defined in include/GL that are set to 0 or 1 according to what the assocoated version of GL is compiled against.
Removed EXT postfix of FrameBufferObject functions, and added support for checking non EXT versions frame buffer object GL functions.

Introduced usage of OSG_GL*_FEATURES to avoid some #if #else #endif code blocks.

Using a submissions from Paul Martz as a guide added perliminary GL3 support to a range of OSG classes
2009-11-10 17:01:08 +00:00

197 lines
5.1 KiB
C++

/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
*
* This library is open source and may be redistributed and/or modified under
* the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
* (at your option) any later version. The full license is in LICENSE file
* included with this distribution, and on the openscenegraph.org website.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* OpenSceneGraph Public License for more details.
*/
#ifndef OSG_GL
#define OSG_GL 1
#include <osg/Config>
#include <osg/Export>
#ifndef WIN32
// Required for compatibility with glext.h sytle function definitions of
// OpenGL extensions, such as in src/osg/Point.cpp.
#ifndef APIENTRY
#define APIENTRY
#endif
#else // WIN32
#if defined(__CYGWIN__) || defined(__MINGW32__)
#ifndef APIENTRY
#define GLUT_APIENTRY_DEFINED
#define APIENTRY __stdcall
#endif
// XXX This is from Win32's <windef.h>
#ifndef CALLBACK
#define CALLBACK __stdcall
#endif
#else // ! __CYGWIN__
// Under Windows avoid including <windows.h>
// to avoid name space pollution, but Win32's <GL/gl.h>
// needs APIENTRY and WINGDIAPI defined properly.
// XXX This is from Win32's <windef.h>
#ifndef APIENTRY
#define GLUT_APIENTRY_DEFINED
#if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED)
#define WINAPI __stdcall
#define APIENTRY WINAPI
#else
#define APIENTRY
#endif
#endif
// XXX This is from Win32's <windef.h>
#ifndef CALLBACK
#if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED)
#define CALLBACK __stdcall
#else
#define CALLBACK
#endif
#endif
#endif // __CYGWIN__
// XXX This is from Win32's <wingdi.h> and <winnt.h>
#ifndef WINGDIAPI
#define GLUT_WINGDIAPI_DEFINED
#define DECLSPEC_IMPORT __declspec(dllimport)
#define WINGDIAPI DECLSPEC_IMPORT
#endif
// XXX This is from Win32's <ctype.h>
#if !defined(_WCHAR_T_DEFINED) && !(defined(__GNUC__)&&((__GNUC__ == 3)||(__GNUC__ == 4)))
typedef unsigned short wchar_t;
#define _WCHAR_T_DEFINED
#endif
#endif // WIN32
#if defined(OSG_GLES1_AVAILABLE)
#include <GLES/gl.h>
#elif defined(OSG_GLES2_AVAILABLE)
#include <GLES2/gl2.h>
#elif defined(OSG_GL3_AVAILABLE)
#define GL3_PROTOTYPES 1
#include <GL3/gl3.h>
#else
#ifndef __gl_h_
#ifdef __APPLE__
#include <OpenGL/gl.h>
#else
#include <GL/gl.h>
#endif
#endif
#endif
#ifdef OSG_GL_MATRICES_AVAILABLE
inline void glLoadMatrix(const float* mat) { glLoadMatrixf(static_cast<const GLfloat*>(mat)); }
inline void glMultMatrix(const float* mat) { glMultMatrixf(static_cast<const GLfloat*>(mat)); }
#ifdef OSG_GLES1_AVAILABLE
inline void glLoadMatrix(const double* mat)
{
GLfloat flt_mat[16];
for(unsigned int i=0;i<16;++i) flt_mat[i] = mat[i];
glLoadMatrixf(flt_mat);
}
inline void glMultMatrix(const double* mat)
{
GLfloat flt_mat[16];
for(unsigned int i=0;i<16;++i) flt_mat[i] = mat[i];
glMultMatrixf(flt_mat);
}
#else
inline void glLoadMatrix(const double* mat) { glLoadMatrixd(static_cast<const GLdouble*>(mat)); }
inline void glMultMatrix(const double* mat) { glMultMatrixd(static_cast<const GLdouble*>(mat)); }
#endif
#endif
// add defines for OpenGL targets that don't define them, just to ease compatibility across targets
#ifndef GL_DOUBLE
#define GL_DOUBLE 0x140A
typedef double GLdouble;
#endif
#ifndef GL_INT
#define GL_INT 0x1404
#endif
#ifndef GL_UNSIGNED_INT
#define GL_UNSIGNED_INT 0x1405
#endif
#ifndef GL_NONE
// OpenGL ES1 doesn't provide GL_NONE
#define GL_NONE 0x0
#endif
#if defined(OSG_GLES1_AVAILABLE) || defined(OSG_GLES2_AVAILABLE) || defined(OSG_GL3_AVAILABLE)
#define GL_POLYGON 0x0009
#define GL_QUADS 0x0007
#define GL_QUAD_STRIP 0x0008
#endif
#if defined(OSG_GL3_AVAILABLE)
#define GL_LUMINANCE 0x1909
#define GL_LUMINANCE_ALPHA 0x190A
#endif
#ifdef OSG_GL1_AVAILABLE
#define OSG_GL1_FEATURES 1
#else
#define OSG_GL1_FEATURES 0
#endif
#ifdef OSG_GL2_AVAILABLE
#define OSG_GL2_FEATURES 1
#else
#define OSG_GL2_FEATURES 0
#endif
#ifdef OSG_GL3_AVAILABLE
#define OSG_GL3_FEATURES 1
#else
#define OSG_GL3_FEATURES 0
#endif
#ifdef OSG_GLES1_AVAILABLE
#define OSG_GLES1_FEATURES 1
#else
#define OSG_GLES1_FEATURES 0
#endif
#ifdef OSG_GLES2_AVAILABLE
#define OSG_GLES2_FEATURES 1
#else
#define OSG_GLES2_FEATURES 0
#endif
#endif // __osgGL_h