Henri Verbeet : wined3d: glDeleteFramebuffersEXT() needs a context.
Alexandre Julliard
julliard at winehq.org
Mon Aug 25 06:20:40 CDT 2008
Module: wine
Branch: master
Commit: e3507a725f9a039f460dea21071aab2649bd27ef
URL: http://source.winehq.org/git/wine.git/?a=commit;h=e3507a725f9a039f460dea21071aab2649bd27ef
Author: Henri Verbeet <hverbeet at gmail.com>
Date: Sun Aug 24 23:43:02 2008 +0200
wined3d: glDeleteFramebuffersEXT() needs a context.
---
dlls/wined3d/context.c | 15 ++++++++++-----
1 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c
index 6a05434..a190b2b 100644
--- a/dlls/wined3d/context.c
+++ b/dlls/wined3d/context.c
@@ -644,15 +644,16 @@ static void RemoveContextFromArray(IWineD3DDeviceImpl *This, WineD3DContext *con
*****************************************************************************/
void DestroyContext(IWineD3DDeviceImpl *This, WineD3DContext *context) {
- /* check that we are the current context first */
TRACE("Destroying ctx %p\n", context);
- if(pwglGetCurrentContext() == context->glCtx){
- pwglMakeCurrent(NULL, NULL);
- } else {
+
+ /* The correct GL context needs to be active to cleanup the GL resources below */
+ if(pwglGetCurrentContext() != context->glCtx){
+ pwglMakeCurrent(context->hdc, context->glCtx);
last_device = NULL;
}
- /* FIXME: We probably need an active context to do this... */
+ ENTER_GL();
+
if (context->fbo) {
GL_EXTCALL(glDeleteFramebuffersEXT(1, &context->fbo));
}
@@ -663,9 +664,13 @@ void DestroyContext(IWineD3DDeviceImpl *This, WineD3DContext *context) {
GL_EXTCALL(glDeleteFramebuffersEXT(1, &context->dst_fbo));
}
+ LEAVE_GL();
+
HeapFree(GetProcessHeap(), 0, context->fbo_color_attachments);
context->fbo_color_attachments = NULL;
+ /* Cleanup the GL context */
+ pwglMakeCurrent(NULL, NULL);
if(context->isPBuffer) {
GL_EXTCALL(wglReleasePbufferDCARB(context->pbuffer, context->hdc));
GL_EXTCALL(wglDestroyPbufferARB(context->pbuffer));
More information about the wine-cvs
mailing list