Index: utOpenGL.cpp =================================================================== --- utOpenGL.cpp (revision 245) +++ utOpenGL.cpp (working copy) @@ -17,7 +17,11 @@ using namespace std; +// Possible opengl library names +const char* GL_LIBV2[] = { "opengl32.dll", "libGLESv2", 0 }; +DYNLIB_HANDLE g_glLib; + namespace glExt { bool EXT_framebuffer_object = false; @@ -35,6 +39,80 @@ namespace h3dGL { + +#ifdef PLATFORM_WIN + PFNWGLGETPROCADDRESS winGlGetProcAddress = 0x0; +#endif +// GL 1.1 +PFNGLBINDTEXTURE glBindTexture = 0x0; +PFNGLBLENDFUNC glBlendFunc = 0x0; +PFNGLCLEAR glClear = 0x0; +PFNGLCLEARCOLOR glClearColor = 0x0; +PFNGLCLEARDEPTH glClearDepth = 0x0; +PFNGLCLEARSTENCIL glClearStencil = 0x0; +PFNGLCOLORMASK glColorMask = 0x0; +PFNGLCOPYTEXIMAGE2D glCopyTexImage2D = 0x0; +PFNGLCOPYTEXSUBIMAGE2D glCopyTexSubImage2D = 0x0; +PFNGLCULLFACE glCullFace = 0x0; +PFNGLDELETETEXTURES glDeleteTextures = 0x0; +PFNGLDEPTHFUNC glDepthFunc = 0x0; +PFNGLDEPTHMASK glDepthMask = 0x0; +PFNGLDEPTHRANGEF glDepthRangef = 0x0; +PFNGLDEPTHRANGE glDepthRange = 0x0; +PFNGLDISABLE glDisable = 0x0; +PFNGLDRAWARRAYS glDrawArrays = 0x0; +PFNGLDRAWELEMENTS glDrawElements = 0x0; +PFNGLDRAWBUFFER glDrawBuffer = 0x0; +PFNGLENABLE glEnable = 0x0; +PFNGLFINISH glFinish = 0x0; +PFNGLFLUSH glFlush = 0x0; +PFNGLFRONTFACE glFrontFace = 0x0; +PFNGLGENTEXTURES glGenTextures = 0x0; +PFNGLGETBOOLEANV glGetBooleanv = 0x0; +PFNGLGETDOUBLEV glGetDoublev = 0x0; +PFNGLGETERROR glGetError = 0x0; +PFNGLGETFLOATV glGetFloatv = 0x0; +PFNGLGETINTEGERV glGetIntegerv = 0x0; +PFNGLGETPOINTERV glGetPointerv = 0x0; +PFNGLGETSTRING glGetString = 0x0; +PFNGLGETTEXIMAGE glGetTexImage = 0x0; +PFNGLGETTEXLEVELPARAMETERFV glGetTexLevelParameterfv = 0x0; +PFNGLGETTEXLEVELPARAMETERIV glGetTexLevelParameteriv = 0x0; +PFNGLHINT glHint = 0x0; +PFNGLISENABLED glIsEnabled = 0x0; +PFNGLISTEXTURE glIsTexture = 0x0; +PFNGLLINEWIDTH glLineWidth = 0x0; +PFNGLLOGICOP glLogicOp = 0x0; +PFNGLPIXELSTOREF glPixelStoref = 0x0; +PFNGLPIXELSTOREI glPixelStorei = 0x0; +PFNGLPOINTSIZE glPointSize = 0x0; +PFNGLPOLYGONMODE glPolygonMode = 0x0; +PFNGLPOLYGONOFFSET glPolygonOffset = 0x0; +PFNGLREADBUFFER glReadBuffer = 0x0; +PFNGLREADPIXELS glReadPixels = 0x0; +PFNGLSCISSOR glScissor = 0x0; +PFNGLSTENCILFUNC glStencilFunc = 0x0; +PFNGLSTENCILMASK glStencilMask = 0x0; +PFNGLSTENCILOP glStencilOp = 0x0; +PFNGLTEXIMAGE1D glTexImage1D = 0x0; +PFNGLTEXIMAGE2D glTexImage2D = 0x0; +PFNGLTEXPARAMETERF glTexParameterf = 0x0; +PFNGLTEXPARAMETERFV glTexParameterfv = 0x0; +PFNGLTEXPARAMETERI glTexParameteri = 0x0; +PFNGLTEXPARAMETERIV glTexParameteriv = 0x0; +PFNGLTEXSUBIMAGE1D glTexSubImage1D = 0x0; +PFNGLTEXSUBIMAGE2D glTexSubImage2D = 0x0; +PFNGLVIEWPORT glViewport = 0x0; +// Deprecated 1.1 +PFNGLBEGIN glBegin = 0x0; +PFNGLEND glEnd = 0x0; +PFNGLVERTEX3F glVertex3f = 0x0; +PFNGLVERTEX3FV glVertex3fv = 0x0; +PFNGLTEXCOORD2F glTexCoord2f = 0x0; +PFNGLTEXCOORD2FV glTexCoord2fv = 0x0; +PFNGLCOLOR4F glColor4f = 0x0; + + // GL 1.2 PFNGLBLENDCOLORPROC glBlendColor = 0x0; PFNGLBLENDEQUATIONPROC glBlendEquation = 0x0; @@ -216,7 +294,14 @@ void *platGetProcAddress( const char *funcName ) { #if defined( PLATFORM_WIN ) - return (void *)wglGetProcAddress( funcName ); + if( winGlGetProcAddress ) + { + void* retVal = (void*) winGlGetProcAddress( funcName ); + if( !retVal ) return DYNLIB_GETSYM( g_glLib, funcName ); + else return retVal; + } + else + return DYNLIB_GETSYM( g_glLib, funcName ); #elif defined( PLATFORM_MAC ) CFStringRef functionName = CFStringCreateWithCString( kCFAllocatorDefault, funcName, kCFStringEncodingASCII ); CFURLRef bundleURL = CFURLCreateWithFileSystemPath( @@ -235,13 +320,114 @@ #endif } +bool initOpenGL() +{ + // Already loaded ? + if( g_glLib != 0x0 ) return true; + int i = 0; + do + { + const char* glLibName = GL_LIBV2[i++]; + #ifdef LINUX + // dlopen() does not add .so to the filename, like windows does for .dll + if( !glLibName.endsWith( L".so", false ) ) + glLibName += L".so"; + #endif + g_glLib = (DYNLIB_HANDLE)DYNLIB_LOAD( glLibName ); + } + while( g_glLib == 0 && GL_LIBV2[i] != 0 ); + + if( !g_glLib ) return false; + + bool r = true; + +#ifdef PLATFORM_WIN + r &= (winGlGetProcAddress = (PFNWGLGETPROCADDRESS) platGetProcAddress( "wglGetProcAddress" )) != 0x0; +#endif + + // GL 1.1 + r &= (glBindTexture = (PFNGLBINDTEXTURE) platGetProcAddress( "glBindTexture" )) != 0x0; + r &= (glBlendFunc = (PFNGLBLENDFUNC) platGetProcAddress( "glBlendFunc" )) != 0x0; + r &= (glClear = (PFNGLCLEAR) platGetProcAddress( "glClear" )) != 0x0; + r &= (glClearColor = (PFNGLCLEARCOLOR) platGetProcAddress( "glClearColor" )) != 0x0; + r &= (glClearDepth = (PFNGLCLEARDEPTH) platGetProcAddress( "glClearDepth" )) != 0x0; + r &= (glClearStencil = (PFNGLCLEARSTENCIL) platGetProcAddress( "glClearStencil" )) != 0x0; + r &= (glColorMask = (PFNGLCOLORMASK) platGetProcAddress( "glColorMask" )) != 0x0; + r &= (glCopyTexImage2D = (PFNGLCOPYTEXIMAGE2D) platGetProcAddress( "glCopyTexImage2D" )) != 0x0; + r &= (glCopyTexSubImage2D = (PFNGLCOPYTEXSUBIMAGE2D) platGetProcAddress( "glCopyTexSubImage2D" )) != 0x0; + r &= (glCullFace = (PFNGLCULLFACE) platGetProcAddress( "glCullFace" )) != 0x0; + r &= (glDeleteTextures = (PFNGLDELETETEXTURES) platGetProcAddress( "glDeleteTextures" )) != 0x0; + r &= (glDepthFunc = (PFNGLDEPTHFUNC) platGetProcAddress( "glDepthFunc" )) != 0x0; + r &= (glDepthMask = (PFNGLDEPTHMASK) platGetProcAddress( "glDepthMask" )) != 0x0; + // ES 2.0 + if( (glDepthRangef = (PFNGLDEPTHRANGEF) platGetProcAddress( "glDepthRangef" )) == 0x0 ) + // Desktop GL + r &= (glDepthRange = (PFNGLDEPTHRANGE) platGetProcAddress( "glDepthRange" )) != 0x0; + r &= (glDisable = (PFNGLDISABLE) platGetProcAddress( "glDisable" )) != 0x0; + r &= (glDrawArrays = (PFNGLDRAWARRAYS) platGetProcAddress( "glDrawArrays" )) != 0x0; + r &= (glDrawElements = (PFNGLDRAWELEMENTS) platGetProcAddress( "glDrawElements" )) != 0x0; + r &= (glDrawBuffer = (PFNGLDRAWBUFFER) platGetProcAddress( "glDrawBuffer" )) != 0x0; + r &= (glEnable = (PFNGLENABLE) platGetProcAddress( "glEnable" )) != 0x0; + r &= (glFinish = (PFNGLFINISH) platGetProcAddress( "glFinish" )) != 0x0; + r &= (glFlush = (PFNGLFLUSH) platGetProcAddress( "glFlush" )) != 0x0; + r &= (glFrontFace = (PFNGLFRONTFACE) platGetProcAddress( "glFrontFace" )) != 0x0; + r &= (glGenTextures = (PFNGLGENTEXTURES) platGetProcAddress( "glGenTextures" )) != 0x0; + r &= (glGetBooleanv = (PFNGLGETBOOLEANV) platGetProcAddress( "glGetBooleanv" )) != 0x0; + r &= (glGetDoublev = (PFNGLGETDOUBLEV) platGetProcAddress( "glGetDoublev" )) != 0x0; + r &= (glGetError = (PFNGLGETERROR) platGetProcAddress( "glGetError" )) != 0x0; + r &= (glGetFloatv = (PFNGLGETFLOATV) platGetProcAddress( "glGetFloatv" )) != 0x0; + r &= (glGetIntegerv = (PFNGLGETINTEGERV) platGetProcAddress( "glGetIntegerv" )) != 0x0; + r &= (glGetPointerv = (PFNGLGETPOINTERV) platGetProcAddress( "glGetPointerv" )) != 0x0; + r &= (glGetString = (PFNGLGETSTRING) platGetProcAddress( "glGetString" )) != 0x0; + r &= (glGetTexImage = (PFNGLGETTEXIMAGE) platGetProcAddress( "glGetTexImage" )) != 0x0; + r &= (glGetTexLevelParameterfv = (PFNGLGETTEXLEVELPARAMETERFV) platGetProcAddress( "glGetTexLevelParameterfv" )) != 0x0; + r &= (glGetTexLevelParameteriv = (PFNGLGETTEXLEVELPARAMETERIV) platGetProcAddress( "glGetTexLevelParameteriv" )) != 0x0; + r &= (glTexParameterfv = (PFNGLTEXPARAMETERFV) platGetProcAddress( "glTexParameterfv" )) != 0x0; + r &= (glTexParameteriv = (PFNGLTEXPARAMETERIV) platGetProcAddress( "glTexParameteriv" )) != 0x0; + r &= (glHint = (PFNGLHINT) platGetProcAddress( "glHint" )) != 0x0; + r &= (glIsEnabled = (PFNGLISENABLED) platGetProcAddress( "glIsEnabled" )) != 0x0; + r &= (glIsTexture = (PFNGLISTEXTURE) platGetProcAddress( "glIsTexture" )) != 0x0; + r &= (glLineWidth = (PFNGLLINEWIDTH) platGetProcAddress( "glLineWidth" )) != 0x0; + r &= (glLogicOp = (PFNGLLOGICOP) platGetProcAddress( "glLogicOp" )) != 0x0; + r &= (glPixelStoref = (PFNGLPIXELSTOREF) platGetProcAddress( "glPixelStoref" )) != 0x0; + r &= (glPixelStorei = (PFNGLPIXELSTOREI) platGetProcAddress( "glPixelStorei" )) != 0x0; + r &= (glPointSize = (PFNGLPOINTSIZE) platGetProcAddress( "glPointSize" )) != 0x0; + r &= (glPolygonMode = (PFNGLPOLYGONMODE) platGetProcAddress( "glPolygonMode" )) != 0x0; + r &= (glPolygonOffset = (PFNGLPOLYGONOFFSET) platGetProcAddress( "glPolygonOffset" )) != 0x0; + r &= (glReadBuffer = (PFNGLREADBUFFER) platGetProcAddress( "glReadBuffer" )) != 0x0; + r &= (glReadPixels = (PFNGLREADPIXELS) platGetProcAddress( "glReadPixels" )) != 0x0; + r &= (glScissor = (PFNGLSCISSOR) platGetProcAddress( "glScissor" )) != 0x0; + r &= (glStencilFunc = (PFNGLSTENCILFUNC) platGetProcAddress( "glStencilFunc" )) != 0x0; + r &= (glStencilMask = (PFNGLSTENCILMASK) platGetProcAddress( "glStencilMask" )) != 0x0; + r &= (glStencilOp = (PFNGLSTENCILOP) platGetProcAddress( "glStencilOp" )) != 0x0; + r &= (glTexImage1D = (PFNGLTEXIMAGE1D) platGetProcAddress( "glTexImage1D" )) != 0x0; + r &= (glTexImage2D = (PFNGLTEXIMAGE2D) platGetProcAddress( "glTexImage2D" )) != 0x0; + r &= (glTexParameterf = (PFNGLTEXPARAMETERF) platGetProcAddress( "glTexParameterf" )) != 0x0; + r &= (glTexParameterfv = (PFNGLTEXPARAMETERFV) platGetProcAddress( "glTexParameterfv" )) != 0x0; + r &= (glTexParameteri = (PFNGLTEXPARAMETERI) platGetProcAddress( "glTexParameteri" )) != 0x0; + r &= (glTexParameteriv = (PFNGLTEXPARAMETERIV) platGetProcAddress( "glTexParameteriv" )) != 0x0; + r &= (glTexSubImage1D = (PFNGLTEXSUBIMAGE1D) platGetProcAddress( "glTexSubImage1D" )) != 0x0; + r &= (glTexSubImage2D = (PFNGLTEXSUBIMAGE2D) platGetProcAddress( "glTexSubImage2D" )) != 0x0; + r &= (glViewport = (PFNGLVIEWPORT) platGetProcAddress( "glViewport" )) != 0x0; + + // Deprecated + r &= (glBegin = (PFNGLBEGIN) platGetProcAddress( "glBegin" )) != 0x0; + r &= (glEnd = (PFNGLEND) platGetProcAddress( "glEnd" )) != 0x0; + r &= (glVertex3f = (PFNGLVERTEX3F) platGetProcAddress( "glVertex3f" )) != 0x0; + r &= (glVertex3fv = (PFNGLVERTEX3FV) platGetProcAddress( "glVertex3fv" )) != 0x0; + r &= (glTexCoord2f = (PFNGLTEXCOORD2F) platGetProcAddress( "glTexCoord2f" )) != 0x0; + r &= (glTexCoord2fv = (PFNGLTEXCOORD2FV) platGetProcAddress( "glTexCoord2fv" )) != 0x0; + r &= (glColor4f = (PFNGLCOLOR4F) platGetProcAddress( "glColor4f" )) != 0x0; + + return r; +} + bool initOpenGLExtensions() { bool r = true; getOpenGLVersion(); - // GL 1.2 r &= (glBlendColor = (PFNGLBLENDCOLORPROC) platGetProcAddress( "glBlendColor" )) != 0x0; r &= (glBlendEquation = (PFNGLBLENDEQUATIONPROC) platGetProcAddress( "glBlendEquation" )) != 0x0; Index: utOpenGL.h =================================================================== --- utOpenGL.h (revision 245) +++ utOpenGL.h (working copy) @@ -31,6 +31,15 @@ # define GLAPI __declspec( dllimport ) # define GLAPIENTRY _stdcall # define GLAPIENTRYP _stdcall * +# ifndef PROC + typedef int (WINAPI *PROC)(); +# endif +# define DYNLIB_HANDLE hInstance +# define DYNLIB_LOAD( a ) LoadLibrary( a ) +# define DYNLIB_GETSYM( a, b ) GetProcAddress( a, b ) +# define DYNLIB_UNLOAD( a ) !FreeLibrary( a ) + struct HINSTANCE__; + typedef struct HINSTANCE__* hInstance; #else # include # define GLAPI @@ -38,8 +47,16 @@ # define GLAPIENTRYP * # ifdef PLATFORM_MAC # include +# define DYNLIB_HANDLE CFBundleRef +# define DYNLIB_LOAD( a ) mac_loadExeBundle( a ) +# define DYNLIB_GETSYM( a, b ) mac_getBundleSym( a, b ) +# define DYNLIB_UNLOAD( a ) mac_unloadExeBundle( a ) # else -extern "C" void (*glXGetProcAddressARB( const unsigned char *procName ))( void ); +# define DYNLIB_HANDLE void* +# define DYNLIB_LOAD( a ) dlopen( a, RTLD_LAZY | RTLD_GLOBAL) +# define DYNLIB_GETSYM( a, b ) dlsym( a, b ) +# define DYNLIB_UNLOAD( a ) dlclose( a ) + extern "C" void (*glXGetProcAddressARB( const unsigned char *procName ))( void ); # endif #endif @@ -58,9 +75,12 @@ extern int majorVersion, minorVersion; } +bool initOpenGL(); bool initOpenGLExtensions(); +namespace h3dGL +{ // ================================================================================================= // OpenGL 2.1 functionality that has not been deprecated by GL3 // ================================================================================================= @@ -313,77 +333,164 @@ #define GL_PROXY_TEXTURE_1D 0x8063 #define GL_PROXY_TEXTURE_2D 0x8064 -extern "C" -{ -GLAPI void GLAPIENTRY glBindTexture (GLenum target, GLuint texture); -GLAPI void GLAPIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor); -GLAPI void GLAPIENTRY glClear (GLbitfield mask); -GLAPI void GLAPIENTRY glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -GLAPI void GLAPIENTRY glClearDepth (GLclampd depth); -GLAPI void GLAPIENTRY glClearStencil (GLint s); -GLAPI void GLAPIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -GLAPI void GLAPIENTRY glCopyTexImage1D (GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border); -GLAPI void GLAPIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GLAPI void GLAPIENTRY glCopyTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -GLAPI void GLAPIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void GLAPIENTRY glCullFace (GLenum mode); -GLAPI void GLAPIENTRY glDeleteTextures (GLsizei n, const GLuint *textures); -GLAPI void GLAPIENTRY glDepthFunc (GLenum func); -GLAPI void GLAPIENTRY glDepthMask (GLboolean flag); -GLAPI void GLAPIENTRY glDepthRange (GLclampd zNear, GLclampd zFar); -GLAPI void GLAPIENTRY glDisable (GLenum cap); -GLAPI void GLAPIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count); -GLAPI void GLAPIENTRY glDrawBuffer (GLenum mode); -GLAPI void GLAPIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices); -GLAPI void GLAPIENTRY glEnable (GLenum cap); -GLAPI void GLAPIENTRY glFinish (void); -GLAPI void GLAPIENTRY glFlush (void); -GLAPI void GLAPIENTRY glFrontFace (GLenum mode); -GLAPI void GLAPIENTRY glGenTextures (GLsizei n, GLuint *textures); -GLAPI void GLAPIENTRY glGetBooleanv (GLenum pname, GLboolean *params); -GLAPI void GLAPIENTRY glGetDoublev (GLenum pname, GLdouble *params); -GLAPI GLenum GLAPIENTRY glGetError (void); -GLAPI void GLAPIENTRY glGetFloatv (GLenum pname, GLfloat *params); -GLAPI void GLAPIENTRY glGetIntegerv (GLenum pname, GLint *params); -GLAPI void GLAPIENTRY glGetPointerv (GLenum pname, GLvoid* *params); -GLAPI const GLubyte * GLAPIENTRY glGetString (GLenum name); -GLAPI void GLAPIENTRY glGetTexImage (GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); -GLAPI void GLAPIENTRY glGetTexLevelParameterfv (GLenum target, GLint level, GLenum pname, GLfloat *params); -GLAPI void GLAPIENTRY glGetTexLevelParameteriv (GLenum target, GLint level, GLenum pname, GLint *params); -GLAPI void GLAPIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat *params); -GLAPI void GLAPIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void GLAPIENTRY glHint (GLenum target, GLenum mode); -GLAPI GLboolean GLAPIENTRY glIsEnabled (GLenum cap); -GLAPI GLboolean GLAPIENTRY glIsTexture (GLuint texture); -GLAPI void GLAPIENTRY glLineWidth (GLfloat width); -GLAPI void GLAPIENTRY glLogicOp (GLenum opcode); -GLAPI void GLAPIENTRY glPixelStoref (GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glPixelStorei (GLenum pname, GLint param); -GLAPI void GLAPIENTRY glPointSize (GLfloat size); -GLAPI void GLAPIENTRY glPolygonMode (GLenum face, GLenum mode); -GLAPI void GLAPIENTRY glPolygonOffset (GLfloat factor, GLfloat units); -GLAPI void GLAPIENTRY glReadBuffer (GLenum mode); -GLAPI void GLAPIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels); -GLAPI void GLAPIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void GLAPIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask); -GLAPI void GLAPIENTRY glStencilMask (GLuint mask); -GLAPI void GLAPIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass); -GLAPI void GLAPIENTRY glTexImage1D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void GLAPIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void GLAPIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void GLAPIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param); -GLAPI void GLAPIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint *params); -GLAPI void GLAPIENTRY glTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void GLAPIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void GLAPIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height); -} // extern "C" +#ifdef PLATFORM_WIN +typedef PROC (GLAPIENTRYP PFNWGLGETPROCADDRESS) (const char* funcName); +extern PFNWGLGETPROCADDRESS winGlGetProcAddress; +#endif + +typedef void (GLAPIENTRYP PFNGLBINDTEXTURE) (GLenum target, GLuint texture); +typedef void (GLAPIENTRYP PFNGLBLENDFUNC ) (GLenum sfactor, GLenum dfactor); +typedef void (GLAPIENTRYP PFNGLCLEAR ) (GLbitfield mask); +typedef void (GLAPIENTRYP PFNGLCLEARCOLOR ) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); +typedef void (GLAPIENTRYP PFNGLCLEARDEPTH ) (GLclampf depth); +typedef void (GLAPIENTRYP PFNGLCLEARSTENCIL ) (GLint s); +typedef void (GLAPIENTRYP PFNGLCOLORMASK ) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +typedef void (GLAPIENTRYP PFNGLCOPYTEXIMAGE2D ) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (GLAPIENTRYP PFNGLCOPYTEXSUBIMAGE2D ) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRYP PFNGLCULLFACE ) (GLenum mode); +typedef void (GLAPIENTRYP PFNGLDELETETEXTURES ) (GLsizei n, const GLuint* textures); +typedef void (GLAPIENTRYP PFNGLDEPTHFUNC ) (GLenum func); +typedef void (GLAPIENTRYP PFNGLDEPTHMASK ) (GLboolean flag); +// ES 2.0 +typedef void (GLAPIENTRYP PFNGLDEPTHRANGEF ) (GLclampf zNear, GLclampf zFar); +// Desktop GL +typedef void (GLAPIENTRYP PFNGLDEPTHRANGE ) (GLclampd zNear, GLclampd zFar); +typedef void (GLAPIENTRYP PFNGLDISABLE ) (GLenum cap); +typedef void (GLAPIENTRYP PFNGLDRAWARRAYS ) (GLenum mode, GLint first, GLsizei count); +typedef void (GLAPIENTRYP PFNGLDRAWELEMENTS ) (GLenum mode, GLsizei count, GLenum type, const void* indices); +typedef void (GLAPIENTRYP PFNGLDRAWBUFFER ) (GLenum mode); +typedef void (GLAPIENTRYP PFNGLENABLE ) (GLenum cap); +typedef void (GLAPIENTRYP PFNGLFINISH ) (void); +typedef void (GLAPIENTRYP PFNGLFLUSH ) (void); +typedef void (GLAPIENTRYP PFNGLFRONTFACE ) (GLenum mode); +typedef void (GLAPIENTRYP PFNGLGENTEXTURES ) (GLsizei n, GLuint* textures); +typedef void (GLAPIENTRYP PFNGLGETBOOLEANV ) (GLenum pname, GLboolean* params); +typedef void (GLAPIENTRYP PFNGLGETDOUBLEV ) ( GLenum pname, GLdouble *params ); +typedef GLenum ( GLAPIENTRYP PFNGLGETERROR ) (void); +typedef void (GLAPIENTRYP PFNGLGETFLOATV ) (GLenum pname, GLfloat* params); +typedef void (GLAPIENTRYP PFNGLGETINTEGERV ) (GLenum pname, GLint* params); +typedef void (GLAPIENTRYP PFNGLGETPOINTERV ) (GLenum pname, GLvoid ** params); +typedef const GLubyte* (GLAPIENTRYP PFNGLGETSTRING ) (GLenum name); +typedef void (GLAPIENTRYP PFNGLGETTEXIMAGE) ( GLenum target, GLint level, GLenum format, GLenum type, GLvoid * img); +typedef void (GLAPIENTRYP PFNGLGETTEXLEVELPARAMETERFV ) ( GLenum target, GLint level, GLenum pname, GLfloat *params ); +typedef void (GLAPIENTRYP PFNGLGETTEXLEVELPARAMETERIV ) ( GLenum target, GLint level, GLenum pname, GLint *params ); +typedef void (GLAPIENTRYP PFNGLGETTEXPARAMETERFV ) (GLenum target, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRYP PFNGLGETTEXPARAMETERIV ) (GLenum target, GLenum pname, GLint* params); +typedef void (GLAPIENTRYP PFNGLHINT ) (GLenum target, GLenum mode); +typedef GLboolean (GLAPIENTRYP PFNGLISENABLED ) (GLenum cap); +typedef GLboolean (GLAPIENTRYP PFNGLISTEXTURE ) (GLuint texture); +typedef void (GLAPIENTRYP PFNGLLINEWIDTH ) (GLfloat width); +typedef void (GLAPIENTRYP PFNGLLOGICOP ) ( GLenum opcode); +typedef void (GLAPIENTRYP PFNGLPIXELSTOREF )(GLenum pname, GLfloat param); +typedef void (GLAPIENTRYP PFNGLPIXELSTOREI )(GLenum pname, GLint param); +typedef void (GLAPIENTRYP PFNGLPOINTSIZE )( GLfloat size ); +typedef void (GLAPIENTRYP PFNGLPOLYGONMODE) (GLenum face, GLenum mode); +typedef void (GLAPIENTRYP PFNGLPOLYGONOFFSET ) (GLfloat factor, GLfloat units); +typedef void (GLAPIENTRYP PFNGLREADBUFFER ) (GLenum mode); +typedef void (GLAPIENTRYP PFNGLREADPIXELS ) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void* pixels); +typedef void (GLAPIENTRYP PFNGLSCISSOR ) (GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRYP PFNGLSTENCILFUNC ) (GLenum func, GLint ref, GLuint mask); +typedef void (GLAPIENTRYP PFNGLSTENCILMASK ) (GLuint mask); +typedef void (GLAPIENTRYP PFNGLSTENCILOP ) (GLenum fail, GLenum zfail, GLenum zpass); +typedef void (GLAPIENTRYP PFNGLTEXIMAGE1D ) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void* pixels); +typedef void (GLAPIENTRYP PFNGLTEXIMAGE2D ) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void* pixels); +typedef void (GLAPIENTRYP PFNGLTEXPARAMETERF ) (GLenum target, GLenum pname, GLfloat param); +typedef void (GLAPIENTRYP PFNGLTEXPARAMETERFV ) (GLenum target, GLenum pname, const GLfloat* params); +typedef void (GLAPIENTRYP PFNGLTEXPARAMETERI ) (GLenum target, GLenum pname, GLint param); +typedef void (GLAPIENTRYP PFNGLTEXPARAMETERIV ) (GLenum target, GLenum pname, const GLint* params); +typedef void (GLAPIENTRYP PFNGLTEXSUBIMAGE1D ) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void* pixels); +typedef void (GLAPIENTRYP PFNGLTEXSUBIMAGE2D ) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels); +typedef void (GLAPIENTRYP PFNGLVIEWPORT ) (GLint x, GLint y, GLsizei width, GLsizei height); +extern PFNGLBINDTEXTURE glBindTexture; +extern PFNGLBLENDFUNC glBlendFunc; +extern PFNGLCLEAR glClear; +extern PFNGLCLEARCOLOR glClearColor; +extern PFNGLCLEARDEPTH glClearDepth; +extern PFNGLCLEARSTENCIL glClearStencil; +extern PFNGLCOLORMASK glColorMask; +extern PFNGLCOPYTEXIMAGE2D glCopyTexImage2D; +extern PFNGLCOPYTEXSUBIMAGE2D glCopyTexSubImage2D; +extern PFNGLCULLFACE glCullFace; +extern PFNGLDELETETEXTURES glDeleteTextures; +extern PFNGLDEPTHFUNC glDepthFunc; +extern PFNGLDEPTHMASK glDepthMask; +// ES 2.0 +extern PFNGLDEPTHRANGEF glDepthRangef; +// Desktop GL +extern PFNGLDEPTHRANGE glDepthRange; +extern PFNGLDISABLE glDisable; +extern PFNGLDRAWARRAYS glDrawArrays; +extern PFNGLDRAWELEMENTS glDrawElements; +extern PFNGLDRAWBUFFER glDrawBuffer; +extern PFNGLENABLE glEnable; +extern PFNGLFINISH glFinish; +extern PFNGLFLUSH glFlush; +extern PFNGLFRONTFACE glFrontFace; +extern PFNGLGENTEXTURES glGenTextures; +extern PFNGLGETBOOLEANV glGetBooleanv; +extern PFNGLGETDOUBLEV glGetDoublev; +extern PFNGLGETERROR glGetError; +extern PFNGLGETFLOATV glGetFloatv; +extern PFNGLGETINTEGERV glGetIntegerv; +extern PFNGLGETPOINTERV glGetPointerv; +extern PFNGLGETSTRING glGetString; +extern PFNGLGETTEXIMAGE glGetTexImage; +extern PFNGLGETTEXLEVELPARAMETERFV glGetTexLevelParameterfv; +extern PFNGLGETTEXLEVELPARAMETERIV glGetTexLevelParameteriv; +extern PFNGLTEXPARAMETERFV glTexParameterfv; +extern PFNGLTEXPARAMETERIV glTexParameteriv; +extern PFNGLHINT glHint; +extern PFNGLISENABLED glIsEnabled; +extern PFNGLISTEXTURE glIsTexture; +extern PFNGLLINEWIDTH glLineWidth; +extern PFNGLLOGICOP glLogicOp; +extern PFNGLPIXELSTOREF glPixelStoref; +extern PFNGLPIXELSTOREI glPixelStorei; +extern PFNGLPOINTSIZE glPointSize; +extern PFNGLPOLYGONMODE glPolygonMode; +extern PFNGLPOLYGONOFFSET glPolygonOffset; +extern PFNGLREADBUFFER glReadBuffer; +extern PFNGLREADPIXELS glReadPixels; +extern PFNGLSCISSOR glScissor; +extern PFNGLSTENCILFUNC glStencilFunc; +extern PFNGLSTENCILMASK glStencilMask; +extern PFNGLSTENCILOP glStencilOp; +extern PFNGLTEXIMAGE1D glTexImage1D; +extern PFNGLTEXIMAGE2D glTexImage2D; +extern PFNGLTEXPARAMETERF glTexParameterf; +extern PFNGLTEXPARAMETERFV glTexParameterfv; +extern PFNGLTEXPARAMETERI glTexParameteri; +extern PFNGLTEXPARAMETERIV glTexParameteriv; +extern PFNGLTEXSUBIMAGE1D glTexSubImage1D; +extern PFNGLTEXSUBIMAGE2D glTexSubImage2D; +extern PFNGLVIEWPORT glViewport; + +// ================================================================================================= +// Deprecated OpenGL 1.1 functionality (that is still required by the renderer) +// ================================================================================================= + +#define GL_QUADS 0x0007 +#define GL_GENERATE_MIPMAP 0x8191 + + +typedef void (GLAPIENTRYP PFNGLBEGIN) (GLenum mode); +typedef void (GLAPIENTRYP PFNGLEND) (void); +typedef void (GLAPIENTRYP PFNGLVERTEX3F) (GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRYP PFNGLVERTEX3FV) (const GLfloat *v); +typedef void (GLAPIENTRYP PFNGLTEXCOORD2F) (GLfloat s, GLfloat t); +typedef void (GLAPIENTRYP PFNGLTEXCOORD2FV) (const GLfloat *v); +typedef void (GLAPIENTRYP PFNGLCOLOR4F) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +extern PFNGLBEGIN glBegin; +extern PFNGLEND glEnd; +extern PFNGLVERTEX3F glVertex3f; +extern PFNGLVERTEX3FV glVertex3fv; +extern PFNGLTEXCOORD2F glTexCoord2f; +extern PFNGLTEXCOORD2FV glTexCoord2fv; +extern PFNGLCOLOR4F glColor4f; + #endif // GL_VERSION_1_1 - -namespace h3dGL -{ // GL 1.2 #ifndef GL_VERSION_1_2 #define GL_VERSION_1_2 1 @@ -904,25 +1011,7 @@ } // namespace h3dGL -// ================================================================================================= -// Deprecated OpenGL 1.1 functionality (that is still required by the renderer) -// ================================================================================================= -#define GL_QUADS 0x0007 -#define GL_GENERATE_MIPMAP 0x8191 - -extern "C" -{ -GLAPI void GLAPIENTRY glBegin (GLenum mode); -GLAPI void GLAPIENTRY glEnd (void); -GLAPI void GLAPIENTRY glVertex3f (GLfloat x, GLfloat y, GLfloat z); -GLAPI void GLAPIENTRY glVertex3fv (const GLfloat *v); -GLAPI void GLAPIENTRY glTexCoord2f (GLfloat s, GLfloat t); -GLAPI void GLAPIENTRY glTexCoord2fv (const GLfloat *v); -GLAPI void GLAPIENTRY glColor4f (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -} - - // ================================================================================================= // Extensions // =================================================================================================