From 06f66b29158fa6e13db243886d02a1aa2c17b93a Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Wed, 27 Jan 2016 22:46:59 +1000 Subject: [PATCH] EGL glewinfo now working for both Nvidia and Mesa implementations --- auto/src/glewinfo_tail.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/auto/src/glewinfo_tail.c b/auto/src/glewinfo_tail.c index 1975286..30f25fd 100644 --- a/auto/src/glewinfo_tail.c +++ b/auto/src/glewinfo_tail.c @@ -185,11 +185,11 @@ GLboolean glewCreateContext (struct createParams *params) EGLint numDevices; EGLSurface surface; EGLint majorVersion, minorVersion; - static const EGLint configAttribs[] = { + EGLint configAttribs[] = { + EGL_SURFACE_TYPE, EGL_WINDOW_BIT, EGL_RED_SIZE, 1, EGL_GREEN_SIZE, 1, EGL_BLUE_SIZE, 1, - EGL_SURFACE_TYPE, EGL_PBUFFER_BIT, EGL_RENDERABLE_TYPE, EGL_OPENGL_BIT, EGL_NONE }; @@ -204,7 +204,7 @@ GLboolean glewCreateContext (struct createParams *params) }; EGLConfig config; EGLint numConfig; - EGLint error; + EGLBoolean pBuffer; PFNEGLQUERYDEVICESEXTPROC queryDevices = NULL; PFNEGLGETPLATFORMDISPLAYEXTPROC getPlatformDisplay = NULL; @@ -233,17 +233,22 @@ GLboolean glewCreateContext (struct createParams *params) if (!getError || !getDisplay || !initialize || !bindAPI || !chooseConfig || !createWindowSurface || !createContext || !makeCurrent) return GL_TRUE; + pBuffer = 0; display = EGL_NO_DISPLAY; if (queryDevices && getPlatformDisplay) { queryDevices(1, devices, &numDevices); if (numDevices==1) { + /* Nvidia EGL doesn't need X11 for p-buffer surface */ display = getPlatformDisplay(EGL_PLATFORM_DEVICE_EXT, devices[0], 0); + configAttribs[1] = EGL_PBUFFER_BIT; + pBuffer = 1; } } if (display==EGL_NO_DISPLAY) { + /* Fall-back to X11 surface, works on Mesa */ display = getDisplay(EGL_DEFAULT_DISPLAY); } if (display == EGL_NO_DISPLAY) @@ -257,13 +262,13 @@ GLboolean glewCreateContext (struct createParams *params) if (chooseConfig(display, configAttribs, &config, 1, &numConfig) != EGL_TRUE || (numConfig != 1)) return GL_TRUE; - ctx = createContext(display, config, EGL_NO_CONTEXT, contextAttribs); + ctx = createContext(display, config, EGL_NO_CONTEXT, pBuffer ? contextAttribs : NULL); if (NULL == ctx) return GL_TRUE; surface = EGL_NO_SURFACE; /* Create a p-buffer surface if possible */ - if (createPbufferSurface) + if (pBuffer && createPbufferSurface) { surface = createPbufferSurface(display, config, pBufferAttribs); } @@ -272,19 +277,14 @@ GLboolean glewCreateContext (struct createParams *params) { surface = createWindowSurface(display, config, (EGLNativeWindowType) NULL, NULL); } +#if 0 if (surface == EGL_NO_SURFACE) return GL_TRUE; +#endif if (makeCurrent(display, surface, surface, ctx) != EGL_TRUE) return GL_TRUE; - error = getError(); - if (error!=EGL_SUCCESS) - { - printf("eglGetError: %d\n", error); - return GL_TRUE; - } - return GL_FALSE; }