mirror of
https://github.com/nigels-com/glew.git
synced 2024-11-28 00:31:56 +00:00
EGL glewinfo now working for both Nvidia and Mesa implementations
This commit is contained in:
parent
4c5472555a
commit
06f66b2915
@ -185,11 +185,11 @@ GLboolean glewCreateContext (struct createParams *params)
|
|||||||
EGLint numDevices;
|
EGLint numDevices;
|
||||||
EGLSurface surface;
|
EGLSurface surface;
|
||||||
EGLint majorVersion, minorVersion;
|
EGLint majorVersion, minorVersion;
|
||||||
static const EGLint configAttribs[] = {
|
EGLint configAttribs[] = {
|
||||||
|
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
|
||||||
EGL_RED_SIZE, 1,
|
EGL_RED_SIZE, 1,
|
||||||
EGL_GREEN_SIZE, 1,
|
EGL_GREEN_SIZE, 1,
|
||||||
EGL_BLUE_SIZE, 1,
|
EGL_BLUE_SIZE, 1,
|
||||||
EGL_SURFACE_TYPE, EGL_PBUFFER_BIT,
|
|
||||||
EGL_RENDERABLE_TYPE, EGL_OPENGL_BIT,
|
EGL_RENDERABLE_TYPE, EGL_OPENGL_BIT,
|
||||||
EGL_NONE
|
EGL_NONE
|
||||||
};
|
};
|
||||||
@ -204,7 +204,7 @@ GLboolean glewCreateContext (struct createParams *params)
|
|||||||
};
|
};
|
||||||
EGLConfig config;
|
EGLConfig config;
|
||||||
EGLint numConfig;
|
EGLint numConfig;
|
||||||
EGLint error;
|
EGLBoolean pBuffer;
|
||||||
|
|
||||||
PFNEGLQUERYDEVICESEXTPROC queryDevices = NULL;
|
PFNEGLQUERYDEVICESEXTPROC queryDevices = NULL;
|
||||||
PFNEGLGETPLATFORMDISPLAYEXTPROC getPlatformDisplay = NULL;
|
PFNEGLGETPLATFORMDISPLAYEXTPROC getPlatformDisplay = NULL;
|
||||||
@ -233,17 +233,22 @@ GLboolean glewCreateContext (struct createParams *params)
|
|||||||
if (!getError || !getDisplay || !initialize || !bindAPI || !chooseConfig || !createWindowSurface || !createContext || !makeCurrent)
|
if (!getError || !getDisplay || !initialize || !bindAPI || !chooseConfig || !createWindowSurface || !createContext || !makeCurrent)
|
||||||
return GL_TRUE;
|
return GL_TRUE;
|
||||||
|
|
||||||
|
pBuffer = 0;
|
||||||
display = EGL_NO_DISPLAY;
|
display = EGL_NO_DISPLAY;
|
||||||
if (queryDevices && getPlatformDisplay)
|
if (queryDevices && getPlatformDisplay)
|
||||||
{
|
{
|
||||||
queryDevices(1, devices, &numDevices);
|
queryDevices(1, devices, &numDevices);
|
||||||
if (numDevices==1)
|
if (numDevices==1)
|
||||||
{
|
{
|
||||||
|
/* Nvidia EGL doesn't need X11 for p-buffer surface */
|
||||||
display = getPlatformDisplay(EGL_PLATFORM_DEVICE_EXT, devices[0], 0);
|
display = getPlatformDisplay(EGL_PLATFORM_DEVICE_EXT, devices[0], 0);
|
||||||
|
configAttribs[1] = EGL_PBUFFER_BIT;
|
||||||
|
pBuffer = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (display==EGL_NO_DISPLAY)
|
if (display==EGL_NO_DISPLAY)
|
||||||
{
|
{
|
||||||
|
/* Fall-back to X11 surface, works on Mesa */
|
||||||
display = getDisplay(EGL_DEFAULT_DISPLAY);
|
display = getDisplay(EGL_DEFAULT_DISPLAY);
|
||||||
}
|
}
|
||||||
if (display == EGL_NO_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))
|
if (chooseConfig(display, configAttribs, &config, 1, &numConfig) != EGL_TRUE || (numConfig != 1))
|
||||||
return GL_TRUE;
|
return GL_TRUE;
|
||||||
|
|
||||||
ctx = createContext(display, config, EGL_NO_CONTEXT, contextAttribs);
|
ctx = createContext(display, config, EGL_NO_CONTEXT, pBuffer ? contextAttribs : NULL);
|
||||||
if (NULL == ctx)
|
if (NULL == ctx)
|
||||||
return GL_TRUE;
|
return GL_TRUE;
|
||||||
|
|
||||||
surface = EGL_NO_SURFACE;
|
surface = EGL_NO_SURFACE;
|
||||||
/* Create a p-buffer surface if possible */
|
/* Create a p-buffer surface if possible */
|
||||||
if (createPbufferSurface)
|
if (pBuffer && createPbufferSurface)
|
||||||
{
|
{
|
||||||
surface = createPbufferSurface(display, config, pBufferAttribs);
|
surface = createPbufferSurface(display, config, pBufferAttribs);
|
||||||
}
|
}
|
||||||
@ -272,19 +277,14 @@ GLboolean glewCreateContext (struct createParams *params)
|
|||||||
{
|
{
|
||||||
surface = createWindowSurface(display, config, (EGLNativeWindowType) NULL, NULL);
|
surface = createWindowSurface(display, config, (EGLNativeWindowType) NULL, NULL);
|
||||||
}
|
}
|
||||||
|
#if 0
|
||||||
if (surface == EGL_NO_SURFACE)
|
if (surface == EGL_NO_SURFACE)
|
||||||
return GL_TRUE;
|
return GL_TRUE;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (makeCurrent(display, surface, surface, ctx) != EGL_TRUE)
|
if (makeCurrent(display, surface, surface, ctx) != EGL_TRUE)
|
||||||
return GL_TRUE;
|
return GL_TRUE;
|
||||||
|
|
||||||
error = getError();
|
|
||||||
if (error!=EGL_SUCCESS)
|
|
||||||
{
|
|
||||||
printf("eglGetError: %d\n", error);
|
|
||||||
return GL_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return GL_FALSE;
|
return GL_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user