mirror of https://github.com/PCSX2/pcsx2.git
gsdx ogl: fix crash when pause/resume with EGL (opensource driver)
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@5690 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
parent
ba20bb0258
commit
91d39de645
|
@ -360,22 +360,30 @@ static int _GSopen(void** dsp, char* title, int renderer, int threads = -1)
|
||||||
s_gs->SetMultithreaded(true);
|
s_gs->SetMultithreaded(true);
|
||||||
|
|
||||||
#ifdef _LINUX
|
#ifdef _LINUX
|
||||||
for(uint32 i = 0; i < 2; i++) {
|
if (s_gs->m_wnd) {
|
||||||
try
|
// A window was already attached to s_gs so we also
|
||||||
{
|
// need to restore the window state (Attach)
|
||||||
if (wnd[i] == NULL) continue;
|
s_gs->m_wnd->Attach((void*)((uint32*)(dsp)+1), false);
|
||||||
|
} else {
|
||||||
|
// No window found, try to attach a GLX win and retry
|
||||||
|
// with EGL win if failed.
|
||||||
|
for(uint32 i = 0; i < 2; i++) {
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (wnd[i] == NULL) continue;
|
||||||
|
|
||||||
wnd[i]->Attach((void*)((uint32*)(dsp)+1), false);
|
wnd[i]->Attach((void*)((uint32*)(dsp)+1), false);
|
||||||
s_gs->m_wnd = wnd[i];
|
s_gs->m_wnd = wnd[i];
|
||||||
|
|
||||||
if (i == 0) delete wnd[1];
|
if (i == 0) delete wnd[1];
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
catch (GSDXRecoverableError)
|
catch (GSDXRecoverableError)
|
||||||
{
|
{
|
||||||
wnd[i]->Detach();
|
wnd[i]->Detach();
|
||||||
delete wnd[i];
|
delete wnd[i];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (s_gs->m_wnd == NULL)
|
if (s_gs->m_wnd == NULL)
|
||||||
|
|
|
@ -267,6 +267,7 @@ void GSWndEGL::HideFrame()
|
||||||
|
|
||||||
void GSWndEGL::CloseEGLDisplay()
|
void GSWndEGL::CloseEGLDisplay()
|
||||||
{
|
{
|
||||||
|
eglReleaseThread();
|
||||||
eglTerminate(m_eglDisplay);
|
eglTerminate(m_eglDisplay);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -63,8 +63,6 @@ void GSWndOGL::CreateContext(int major, int minor)
|
||||||
if (!fbc || fbcount < 1) {
|
if (!fbc || fbcount < 1) {
|
||||||
throw GSDXRecoverableError();
|
throw GSDXRecoverableError();
|
||||||
}
|
}
|
||||||
XFree(fbc);
|
|
||||||
GLXFBConfig fbc_cp = fbc[0];
|
|
||||||
|
|
||||||
PFNGLXCREATECONTEXTATTRIBSARBPROC glX_CreateContextAttribsARB = (PFNGLXCREATECONTEXTATTRIBSARBPROC)glXGetProcAddress((const GLubyte*) "glXCreateContextAttribsARB");
|
PFNGLXCREATECONTEXTATTRIBSARBPROC glX_CreateContextAttribsARB = (PFNGLXCREATECONTEXTATTRIBSARBPROC)glXGetProcAddress((const GLubyte*) "glXCreateContextAttribsARB");
|
||||||
if (!glX_CreateContextAttribsARB) {
|
if (!glX_CreateContextAttribsARB) {
|
||||||
|
@ -88,7 +86,8 @@ void GSWndOGL::CreateContext(int major, int minor)
|
||||||
None
|
None
|
||||||
};
|
};
|
||||||
|
|
||||||
m_context = glX_CreateContextAttribsARB(m_NativeDisplay, fbc_cp, 0, true, context_attribs);
|
m_context = glX_CreateContextAttribsARB(m_NativeDisplay, fbc[0], 0, true, context_attribs);
|
||||||
|
XFree(fbc);
|
||||||
|
|
||||||
// Don't forget to reinstall the older Handler
|
// Don't forget to reinstall the older Handler
|
||||||
XSetErrorHandler(oldHandler);
|
XSetErrorHandler(oldHandler);
|
||||||
|
|
Loading…
Reference in New Issue