opt/glew/egl+glx.patch
2023-08-27 17:48:07 +02:00

169 lines
5.0 KiB
Diff

--- a/src/glew.c
+++ b/src/glew.c
@@ -36,11 +36,13 @@
# include GLEW_INCLUDE
#endif
+#if defined(GLEW_EGL)
+# include <GL/eglew.h>
+#endif
+
#if defined(GLEW_OSMESA)
# define GLAPI extern
# include <GL/osmesa.h>
-#elif defined(GLEW_EGL)
-# include <GL/eglew.h>
#elif defined(_WIN32)
/*
* If NOGDI is defined, wingdi.h won't be included by windows.h, and thus
@@ -57,8 +59,7 @@
#include <stddef.h> /* For size_t */
-#if defined(GLEW_EGL)
-#elif defined(GLEW_REGAL)
+#if defined(GLEW_REGAL)
/* In GLEW_REGAL mode we call direcly into the linked
libRegal.so glGetProcAddressREGAL for looking up
@@ -159,23 +160,37 @@
* Define glewGetProcAddress.
*/
#if defined(GLEW_REGAL)
-# define glewGetProcAddress(name) regalGetProcAddress((const GLchar *)name)
+# define _glewGetProcAddress(name) regalGetProcAddress((const GLchar *)name)
#elif defined(GLEW_OSMESA)
-# define glewGetProcAddress(name) OSMesaGetProcAddress((const char *)name)
-#elif defined(GLEW_EGL)
-# define glewGetProcAddress(name) eglGetProcAddress((const char *)name)
+# define _glewGetProcAddress(name) OSMesaGetProcAddress((const char *)name)
#elif defined(_WIN32)
-# define glewGetProcAddress(name) wglGetProcAddress((LPCSTR)name)
+# define _glewGetProcAddress(name) wglGetProcAddress((LPCSTR)name)
#elif defined(__APPLE__) && !defined(GLEW_APPLE_GLX)
-# define glewGetProcAddress(name) NSGLGetProcAddress(name)
+# define _glewGetProcAddress(name) NSGLGetProcAddress(name)
#elif defined(__sgi) || defined(__sun) || defined(__HAIKU__)
-# define glewGetProcAddress(name) dlGetProcAddress(name)
+# define _glewGetProcAddress(name) dlGetProcAddress(name)
#elif defined(__ANDROID__)
-# define glewGetProcAddress(name) NULL /* TODO */
+# define _glewGetProcAddress(name) NULL /* TODO */
#elif defined(__native_client__)
-# define glewGetProcAddress(name) NULL /* TODO */
+# define _glewGetProcAddress(name) NULL /* TODO */
#else /* __linux */
-# define glewGetProcAddress(name) (*glXGetProcAddressARB)(name)
+# define _glewGetProcAddress(name) (*glXGetProcAddressARB)(name)
+#endif
+
+#if defined(GLEW_EGL)
+static GLboolean _EGL_available = GL_FALSE;
+static void (*glewGetProcAddress (const GLubyte *name)) (void)
+{
+ void (*addr)(void);
+ if (_EGL_available)
+ {
+ addr = eglGetProcAddress((const char *)name);
+ if (addr) return addr;
+ }
+ return _glewGetProcAddress(name);
+}
+#else
+# define glewGetProcAddress(name) _glewGetProcAddress(name)
#endif
/*
@@ -19297,9 +19312,7 @@
}
-#if defined(GLEW_OSMESA)
-
-#elif defined(GLEW_EGL)
+#if defined(GLEW_EGL)
PFNEGLCHOOSECONFIGPROC __eglewChooseConfig = NULL;
PFNEGLCOPYBUFFERSPROC __eglewCopyBuffers = NULL;
@@ -20490,8 +20503,8 @@
PFNEGLQUERYSTRINGPROC queryString = NULL;
/* Load necessary entry points */
- initialize = (PFNEGLINITIALIZEPROC) glewGetProcAddress("eglInitialize");
- queryString = (PFNEGLQUERYSTRINGPROC) glewGetProcAddress("eglQueryString");
+ initialize = (PFNEGLINITIALIZEPROC) eglGetProcAddress("eglInitialize");
+ queryString = (PFNEGLQUERYSTRINGPROC) eglGetProcAddress("eglQueryString");
if (!initialize || !queryString)
return 1;
@@ -21029,7 +21042,9 @@
return GLEW_OK;
}
-#elif defined(_WIN32)
+#endif
+
+#if defined(_WIN32)
PFNWGLSETSTEREOEMITTERSTATE3DLPROC __wglewSetStereoEmitterState3DL = NULL;
@@ -23105,13 +23120,26 @@
GLenum r;
#if defined(GLEW_EGL)
PFNEGLGETCURRENTDISPLAYPROC getCurrentDisplay = NULL;
+ EGLDisplay display;
#endif
r = glewContextInit();
if ( r != 0 ) return r;
#if defined(GLEW_EGL)
- getCurrentDisplay = (PFNEGLGETCURRENTDISPLAYPROC) glewGetProcAddress("eglGetCurrentDisplay");
- return eglewInit(getCurrentDisplay());
-#elif defined(GLEW_OSMESA) || defined(__ANDROID__) || defined(__native_client__) || defined(__HAIKU__)
+ getCurrentDisplay = (PFNEGLGETCURRENTDISPLAYPROC) eglGetProcAddress("eglGetCurrentDisplay");
+ if (getCurrentDisplay)
+ display = getCurrentDisplay();
+ else
+ display = EGL_NO_DISPLAY;
+ if (display != EGL_NO_DISPLAY)
+ {
+ r = eglewInit(display);
+ if ( r == 0 ) {
+ _EGL_available = GL_TRUE;
+ return r;
+ }
+ }
+#endif
+#if defined(GLEW_OSMESA) || defined(__ANDROID__) || defined(__native_client__) || defined(__HAIKU__)
return r;
#elif defined(_WIN32)
return wglewInit();
@@ -29785,7 +29813,7 @@
return ret;
}
-#if defined(_WIN32) && !defined(GLEW_EGL) && !defined(GLEW_OSMESA)
+#if defined(_WIN32) && !defined(GLEW_OSMESA)
GLboolean GLEWAPIENTRY wglewIsSupported (const char* name)
{
@@ -30228,7 +30256,7 @@
return ret;
}
-#elif !defined(GLEW_OSMESA) && !defined(GLEW_EGL) && !defined(__ANDROID__) && !defined(__native_client__) && !defined(__HAIKU__) && !defined(__APPLE__) || defined(GLEW_APPLE_GLX)
+#elif !defined(GLEW_OSMESA) && !defined(__ANDROID__) && !defined(__native_client__) && !defined(__HAIKU__) && !defined(__APPLE__) || defined(GLEW_APPLE_GLX)
GLboolean glxewIsSupported (const char* name)
{
@@ -30805,7 +30833,9 @@
return ret;
}
-#elif defined(GLEW_EGL)
+#endif
+
+#if defined(GLEW_EGL)
GLboolean eglewIsSupported (const char* name)
{