ogl: fix single core crash

osx is missing, sorry but I'm too stupid for objective-c
This commit is contained in:
degasus
2013-04-11 03:32:07 +02:00
parent 6af14bd4ce
commit 3c87512180
8 changed files with 24 additions and 2 deletions

View File

@ -87,6 +87,13 @@ bool cInterfaceAGL::MakeCurrent()
return true; return true;
} }
bool cInterfaceAGL::ClearCurrent()
{
// not tested at all
//clearCurrentContext();
return true;
}
// Close backend // Close backend
void cInterfaceAGL::Shutdown() void cInterfaceAGL::Shutdown()
{ {

View File

@ -30,6 +30,7 @@ public:
void Swap(); void Swap();
bool Create(void *&window_handle); bool Create(void *&window_handle);
bool MakeCurrent(); bool MakeCurrent();
bool ClearCurrent();
void Shutdown(); void Shutdown();
void Update(); void Update();

View File

@ -141,12 +141,17 @@ bool cInterfaceGLX::MakeCurrent()
#endif #endif
return glXMakeCurrent(GLWin.dpy, GLWin.win, GLWin.ctx); return glXMakeCurrent(GLWin.dpy, GLWin.win, GLWin.ctx);
} }
bool cInterfaceGLX::ClearCurrent()
{
return glXMakeCurrent(GLWin.dpy, None, NULL);
}
// Close backend // Close backend
void cInterfaceGLX::Shutdown() void cInterfaceGLX::Shutdown()
{ {
XWindow.DestroyXWindow(); XWindow.DestroyXWindow();
if (GLWin.ctx && !glXMakeCurrent(GLWin.dpy, None, NULL))
NOTICE_LOG(VIDEO, "Could not release drawing context.");
if (GLWin.ctx) if (GLWin.ctx)
{ {
glXDestroyContext(GLWin.dpy, GLWin.ctx); glXDestroyContext(GLWin.dpy, GLWin.ctx);

View File

@ -36,6 +36,7 @@ public:
void UpdateFPSDisplay(const char *Text); void UpdateFPSDisplay(const char *Text);
bool Create(void *&window_handle); bool Create(void *&window_handle);
bool MakeCurrent(); bool MakeCurrent();
bool ClearCurrent();
void Shutdown(); void Shutdown();
}; };
#endif #endif

View File

@ -27,6 +27,7 @@ public:
virtual void UpdateFPSDisplay(const char *Text) {} virtual void UpdateFPSDisplay(const char *Text) {}
virtual bool Create(void *&window_handle) { return true; } virtual bool Create(void *&window_handle) { return true; }
virtual bool MakeCurrent() { return true; } virtual bool MakeCurrent() { return true; }
virtual bool ClearCurrent() { return true; }
virtual void Shutdown() {} virtual void Shutdown() {}
virtual void SwapInterval(int Interval) { } virtual void SwapInterval(int Interval) { }

View File

@ -131,6 +131,11 @@ bool cInterfaceWGL::MakeCurrent()
return wglMakeCurrent(hDC, hRC) ? true : false; return wglMakeCurrent(hDC, hRC) ? true : false;
} }
bool cInterfaceWGL::ClearCurrent()
{
return wglMakeCurrent(hDC, NULL) ? true : false;
}
// Update window width, size and etc. Called from Render.cpp // Update window width, size and etc. Called from Render.cpp
void cInterfaceWGL::Update() void cInterfaceWGL::Update()
{ {

View File

@ -33,6 +33,7 @@ public:
void UpdateFPSDisplay(const char *Text); void UpdateFPSDisplay(const char *Text);
bool Create(void *&window_handle); bool Create(void *&window_handle);
bool MakeCurrent(); bool MakeCurrent();
bool ClearCurrent();
void Shutdown(); void Shutdown();
void Update(); void Update();

View File

@ -253,6 +253,7 @@ void VideoBackend::Video_Cleanup() {
OpcodeDecoder_Shutdown(); OpcodeDecoder_Shutdown();
delete g_renderer; delete g_renderer;
g_renderer = NULL; g_renderer = NULL;
GLInterface->ClearCurrent();
} }
} }