mirror of https://github.com/PCSX2/pcsx2.git
gsdx ogl: install a GLX error handler before the context creation. Allow to print a nice message when the user doesn't support opengl 3.3
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@5607 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
parent
a28ca6554d
commit
fa7d10cfb1
|
@ -225,6 +225,13 @@ GSWnd::~GSWnd()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool ctxError = false;
|
||||||
|
static int ctxErrorHandler(Display *dpy, XErrorEvent *ev)
|
||||||
|
{
|
||||||
|
ctxError = true;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
bool GSWnd::CreateContext(int major, int minor)
|
bool GSWnd::CreateContext(int major, int minor)
|
||||||
{
|
{
|
||||||
if ( !m_XDisplay || !m_Xwindow )
|
if ( !m_XDisplay || !m_Xwindow )
|
||||||
|
@ -255,6 +262,11 @@ bool GSWnd::CreateContext(int major, int minor)
|
||||||
PFNGLXCREATECONTEXTATTRIBSARBPROC glXCreateContextAttribsARB = (PFNGLXCREATECONTEXTATTRIBSARBPROC)glXGetProcAddress((const GLubyte*) "glXCreateContextAttribsARB");
|
PFNGLXCREATECONTEXTATTRIBSARBPROC glXCreateContextAttribsARB = (PFNGLXCREATECONTEXTATTRIBSARBPROC)glXGetProcAddress((const GLubyte*) "glXCreateContextAttribsARB");
|
||||||
if (!glXCreateContextAttribsARB) return false;
|
if (!glXCreateContextAttribsARB) return false;
|
||||||
|
|
||||||
|
// Install a dummy handler to handle gracefully (aka not segfault) the support of GL version
|
||||||
|
int (*oldHandler)(Display*, XErrorEvent*) = XSetErrorHandler(&ctxErrorHandler);
|
||||||
|
// Be sure the handler is installed
|
||||||
|
XSync( m_XDisplay, false);
|
||||||
|
|
||||||
// Create a context
|
// Create a context
|
||||||
int context_attribs[] =
|
int context_attribs[] =
|
||||||
{
|
{
|
||||||
|
@ -268,9 +280,18 @@ bool GSWnd::CreateContext(int major, int minor)
|
||||||
};
|
};
|
||||||
|
|
||||||
m_context = glXCreateContextAttribsARB(m_XDisplay, fbc[0], 0, true, context_attribs);
|
m_context = glXCreateContextAttribsARB(m_XDisplay, fbc[0], 0, true, context_attribs);
|
||||||
if (!m_context) return false;
|
|
||||||
|
|
||||||
|
// Don't forget to reinstall the older Handler
|
||||||
|
XSetErrorHandler(oldHandler);
|
||||||
|
|
||||||
|
// Get latest error
|
||||||
XSync( m_XDisplay, false);
|
XSync( m_XDisplay, false);
|
||||||
|
|
||||||
|
if (!m_context || ctxError) {
|
||||||
|
fprintf(stderr, "Failed to create the opengl context. Check your drivers support openGL %d.%d. Hint: opensource drivers don't\n", major, minor );
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue