//C++ header - Open Scene Graph - Copyright (C) 1998-2002 Robert Osfield //Distributed under the terms of the GNU Library General Public License (LGPL) //as published by the Free Software Foundation. #ifndef OSG_GLEXTENSIONS #define OSG_GLEXTENSIONS 1 #include #if defined(WIN32) #define WIN32_LEAN_AND_MEAN #include #elif defined(__DARWIN_OSX__) #include #include #else #include #endif namespace osg { /** return true if OpenGL "extension" is supported. * note: Must only called within a valid OpenGL context, * undefined behavior may occur otherwise. */ SG_EXPORT extern bool isGLExtensionSupported(const char *extension); /** return the address of the specified OpenGL function. * return NULL if function not supported by OpenGL library. * Note, glGLExtensionFuncPtr is declared inline so that the code * is compiled localy to the calling code. This should get by Windows * dumb implementation of having different GL function ptr's for each * library when links to it. */ inline void* getGLExtensionFuncPtr(const char *funcName) { #if defined(WIN32) return (void*)wglGetProcAddress(funcName); #elif defined(__DARWIN_OSX__) std::string temp( "_" ); temp += funcName; // Mac OS X prepends an underscore on function names if ( NSIsSymbolNameDefined( temp.c_str() ) ) { NSSymbol symbol = NSLookupAndBindSymbol( temp.c_str() ); return NSAddressOfSymbol( symbol ); } else return NULL; #else // all other unixes return dlsym(0, funcName); #endif } /** return the address of the specified OpenGL function, if not found then * check a second function name, if this fails then return NULL as function is * not supported by OpenGL library. This is usual for checking something * like glActiveTexture (which is in OGL1.3) or glActiveTextureARB. */ inline void* getGLExtensionFuncPtr(const char *funcName,const char *fallbackFuncName) { void* ptr = getGLExtensionFuncPtr(funcName); if (ptr) return ptr; return getGLExtensionFuncPtr(fallbackFuncName); } /** return true if OpenGL "extension" is supported. * note: Must only called within a valid OpenGL context, * undefined behavior may occur otherwise. */ SG_EXPORT extern bool isGLUExtensionSupported(const char *extension); } #endif