Commit 10dcee21 authored by Henri Verbeet's avatar Henri Verbeet Committed by Alexandre Julliard

winex11: Only handle errors from GLX requests in GLXErrorHandler().

Spurious errors that would otherwise be handled by ignore_error() may cause OpenGL context creation to fail. Signed-off-by: 's avatarHenri Verbeet <hverbeet@codeweavers.com> Signed-off-by: 's avatarAlexandre Julliard <julliard@winehq.org>
parent b6dc9717
...@@ -182,6 +182,7 @@ static char *glExtensions; ...@@ -182,6 +182,7 @@ static char *glExtensions;
static const char *glxExtensions; static const char *glxExtensions;
static char wglExtensions[4096]; static char wglExtensions[4096];
static int glxVersion[2]; static int glxVersion[2];
static int glx_opcode;
struct wgl_pixel_format struct wgl_pixel_format
{ {
...@@ -336,7 +337,6 @@ static void (*pglXDestroyContext)( Display *dpy, GLXContext ctx ); ...@@ -336,7 +337,6 @@ static void (*pglXDestroyContext)( Display *dpy, GLXContext ctx );
static Bool (*pglXMakeCurrent)( Display *dpy, GLXDrawable drawable, GLXContext ctx); static Bool (*pglXMakeCurrent)( Display *dpy, GLXDrawable drawable, GLXContext ctx);
static void (*pglXCopyContext)( Display *dpy, GLXContext src, GLXContext dst, unsigned long mask ); static void (*pglXCopyContext)( Display *dpy, GLXContext src, GLXContext dst, unsigned long mask );
static void (*pglXSwapBuffers)( Display *dpy, GLXDrawable drawable ); static void (*pglXSwapBuffers)( Display *dpy, GLXDrawable drawable );
static Bool (*pglXQueryExtension)( Display *dpy, int *errorb, int *event );
static Bool (*pglXQueryVersion)( Display *dpy, int *maj, int *min ); static Bool (*pglXQueryVersion)( Display *dpy, int *maj, int *min );
static Bool (*pglXIsDirect)( Display *dpy, GLXContext ctx ); static Bool (*pglXIsDirect)( Display *dpy, GLXContext ctx );
static GLXContext (*pglXGetCurrentContext)( void ); static GLXContext (*pglXGetCurrentContext)( void );
...@@ -412,6 +412,8 @@ static BOOL has_extension( const char *list, const char *ext ) ...@@ -412,6 +412,8 @@ static BOOL has_extension( const char *list, const char *ext )
static int GLXErrorHandler(Display *dpy, XErrorEvent *event, void *arg) static int GLXErrorHandler(Display *dpy, XErrorEvent *event, void *arg)
{ {
/* In the future we might want to find the exact X or GLX error to report back to the app */ /* In the future we might want to find the exact X or GLX error to report back to the app */
if (event->request_code != glx_opcode)
return 0;
return 1; return 1;
} }
...@@ -594,7 +596,6 @@ static BOOL WINAPI init_opengl( INIT_ONCE *once, void *param, void **context ) ...@@ -594,7 +596,6 @@ static BOOL WINAPI init_opengl( INIT_ONCE *once, void *param, void **context )
LOAD_FUNCPTR(glXIsDirect); LOAD_FUNCPTR(glXIsDirect);
LOAD_FUNCPTR(glXMakeCurrent); LOAD_FUNCPTR(glXMakeCurrent);
LOAD_FUNCPTR(glXSwapBuffers); LOAD_FUNCPTR(glXSwapBuffers);
LOAD_FUNCPTR(glXQueryExtension);
LOAD_FUNCPTR(glXQueryVersion); LOAD_FUNCPTR(glXQueryVersion);
/* GLX 1.1 */ /* GLX 1.1 */
...@@ -633,7 +634,8 @@ static BOOL WINAPI init_opengl( INIT_ONCE *once, void *param, void **context ) ...@@ -633,7 +634,8 @@ static BOOL WINAPI init_opengl( INIT_ONCE *once, void *param, void **context )
if(!X11DRV_WineGL_InitOpenglInfo()) goto failed; if(!X11DRV_WineGL_InitOpenglInfo()) goto failed;
if (pglXQueryExtension(gdi_display, &error_base, &event_base)) { if (XQueryExtension( gdi_display, "GLX", &glx_opcode, &event_base, &error_base ))
{
TRACE("GLX is up and running error_base = %d\n", error_base); TRACE("GLX is up and running error_base = %d\n", error_base);
} else { } else {
ERR( "GLX extension is missing, disabling OpenGL.\n" ); ERR( "GLX extension is missing, disabling OpenGL.\n" );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment