| Index: third_party/glew/src/glew.c
|
| ===================================================================
|
| --- third_party/glew/src/glew.c (revision 51153)
|
| +++ third_party/glew/src/glew.c (working copy)
|
| @@ -72,11 +72,35 @@
|
| #endif /* GLEW_MX */
|
|
|
| #ifdef _WIN32
|
| +
|
| +#ifndef GLEW_MX
|
| +void* WinGetProcAddress(const GLubyte* name);
|
| +
|
| +GLboolean wglewInit()
|
| +{
|
| + GLboolean r = GL_FALSE;
|
| +
|
| + r = ((wglewCopyContext = (PFNWGLCOPYCONTEXTPROC)WinGetProcAddress((const GLubyte*)"wglCopyContext")) == NULL) || r;
|
| + r = ((wglewCreateContext = (PFNWGLCREATECONTEXTPROC)WinGetProcAddress((const GLubyte*)"wglCreateContext")) == NULL) || r;
|
| + r = ((wglewCreateLayerContext = (PFNWGLCREATELAYERCONTEXTPROC)WinGetProcAddress((const GLubyte*)"wglCreateLayerContext")) == NULL) || r;
|
| + r = ((wglewDeleteContext = (PFNWGLDELETECONTEXTPROC)WinGetProcAddress((const GLubyte*)"wglDeleteContext")) == NULL) || r;
|
| + r = ((wglewGetCurrentContext = (PFNWGLGETCURRENTCONTEXTPROC)WinGetProcAddress((const GLubyte*)"wglGetCurrentContext")) == NULL) || r;
|
| + r = ((wglewGetCurrentDC = (PFNWGLGETCURRENTDCPROC)WinGetProcAddress((const GLubyte*)"wglGetCurrentDC")) == NULL) || r;
|
| + r = ((wglewGetProcAddress = (PFNWGLGETPROCADDRESSPROC)WinGetProcAddress((const GLubyte*)"wglGetProcAddress")) == NULL) || r;
|
| + r = ((wglewMakeCurrent = (PFNWGLMAKECURRENTPROC)WinGetProcAddress((const GLubyte*)"wglMakeCurrent")) == NULL) || r;
|
| + r = ((wglewShareLists = (PFNWGLSHARELISTSPROC)WinGetProcAddress((const GLubyte*)"wglShareLists")) == NULL) || r;
|
| + r = ((wglewSwapBuffers = (PFNSWAPBUFFERSPROC)WinGetProcAddress((const GLubyte*)"SwapBuffers")) == NULL) || r;
|
| +
|
| + return !r;
|
| +}
|
| +#endif /* !GLEW_MX */
|
| +
|
| void* WinGetProcAddress(const GLubyte* name)
|
| {
|
| /* Need to use GetProcAddress to bootstrap things now that we are
|
| dynamically looking up OpenGL 1.1 entry points as well. */
|
| static HMODULE oglImage = NULL;
|
| + static HMODULE gdi32Image = NULL; // For SwapBuffers.
|
| static PFNOSMESAGETPROCADDRESSPROC osmesaGetProcAddress = NULL;
|
| void* proc = NULL;
|
|
|
| @@ -84,6 +108,12 @@
|
| oglImage = LoadLibraryA("osmesa.dll");
|
| if (NULL == oglImage) {
|
| oglImage = LoadLibraryA("opengl32.dll");
|
| +#ifndef GLEW_MX
|
| + if (NULL != oglImage) {
|
| + gdi32Image = LoadLibraryA("gdi32.dll");
|
| + wglewInit();
|
| + }
|
| +#endif /* !GLEW_MX */
|
| }
|
| else {
|
| osmesaGetProcAddress = (PFNOSMESAGETPROCADDRESSPROC) GetProcAddress(oglImage, "OSMesaGetProcAddress");
|
| @@ -91,14 +121,25 @@
|
| }
|
| if (NULL != oglImage) {
|
| proc = (void*) GetProcAddress(oglImage, (LPCSTR) name);
|
| +#ifndef GLEW_MX
|
| + if (NULL == proc) {
|
| + proc = (void*) GetProcAddress(gdi32Image, (LPCSTR) name);
|
| + }
|
| +#endif
|
| }
|
| if (NULL == proc) {
|
| if (osmesaGetProcAddress) {
|
| proc = osmesaGetProcAddress(name);
|
| }
|
| +#ifdef GLEW_MX
|
| else {
|
| proc = wglGetProcAddress((LPCSTR) name);
|
| }
|
| +#else
|
| + else if (wglewGetProcAddress) {
|
| + proc = wglewGetProcAddress((LPCSTR) name);
|
| + }
|
| +#endif
|
| }
|
| return proc;
|
| }
|
| @@ -8077,6 +8118,17 @@
|
|
|
| #if !defined(GLEW_MX)
|
|
|
| +PFNWGLCOPYCONTEXTPROC __wglewCopyContext = NULL;
|
| +PFNWGLCREATECONTEXTPROC __wglewCreateContext = NULL;
|
| +PFNWGLCREATELAYERCONTEXTPROC __wglewCreateLayerContext = NULL;
|
| +PFNWGLDELETECONTEXTPROC __wglewDeleteContext = NULL;
|
| +PFNWGLGETCURRENTCONTEXTPROC __wglewGetCurrentContext = NULL;
|
| +PFNWGLGETCURRENTDCPROC __wglewGetCurrentDC = NULL;
|
| +PFNWGLGETPROCADDRESSPROC __wglewGetProcAddress = NULL;
|
| +PFNWGLMAKECURRENTPROC __wglewMakeCurrent = NULL;
|
| +PFNWGLSHARELISTSPROC __wglewShareLists = NULL;
|
| +PFNSWAPBUFFERSPROC __wglewSwapBuffers = NULL;
|
| +
|
| PFNWGLSETSTEREOEMITTERSTATE3DLPROC __wglewSetStereoEmitterState3DL = NULL;
|
|
|
| PFNWGLCREATEBUFFERREGIONARBPROC __wglewCreateBufferRegionARB = NULL;
|
| @@ -8714,7 +8766,7 @@
|
| else
|
| p = (GLubyte*)_wglewGetExtensionsStringEXT();
|
| else
|
| - p = (GLubyte*)_wglewGetExtensionsStringARB(wglGetCurrentDC());
|
| + p = (GLubyte*)_wglewGetExtensionsStringARB(wglewGetCurrentDC());
|
| if (0 == p) return GL_FALSE;
|
| end = p + _glewStrLen(p);
|
| while (p < end)
|
|
|