Henri Verbeet : wined3d: Avoid destroying the currently active context for non-implicit swapchains.
Alexandre Julliard
julliard at winehq.org
Wed Jul 8 14:35:54 CDT 2009
Module: wine
Branch: master
Commit: 6d8e1e52c83edbb3598db90b2e3a4121237fefc0
URL: http://source.winehq.org/git/wine.git/?a=commit;h=6d8e1e52c83edbb3598db90b2e3a4121237fefc0
Author: Henri Verbeet <hverbeet at codeweavers.com>
Date: Wed Jul 8 09:49:26 2009 +0200
wined3d: Avoid destroying the currently active context for non-implicit swapchains.
---
dlls/wined3d/swapchain.c | 19 ++++++++++++++++++-
1 files changed, 18 insertions(+), 1 deletions(-)
diff --git a/dlls/wined3d/swapchain.c b/dlls/wined3d/swapchain.c
index 3591e83..272a425 100644
--- a/dlls/wined3d/swapchain.c
+++ b/dlls/wined3d/swapchain.c
@@ -64,7 +64,24 @@ static void WINAPI IWineD3DSwapChainImpl_Destroy(IWineD3DSwapChain *iface, D3DCB
HeapFree(GetProcessHeap(), 0, This->backBuffer);
}
- for(i = 0; i < This->num_contexts; i++) {
+ for (i = 0; i < This->num_contexts; ++i)
+ {
+ if (This->context[i] == This->wineD3DDevice->activeContext)
+ {
+ IWineD3DSwapChainImpl *swapchain = (IWineD3DSwapChainImpl *)This->wineD3DDevice->swapchains[0];
+
+ /* Avoid destroying the currently active context for non-implicit swapchains. */
+ if (This != swapchain)
+ {
+ TRACE("Would destroy currently active context %p on a non-implicit swapchain.\n", This->context[i]);
+
+ if (swapchain->backBuffer)
+ ActivateContext(This->wineD3DDevice, swapchain->backBuffer[0], CTXUSAGE_RESOURCELOAD);
+ else
+ ActivateContext(This->wineD3DDevice, swapchain->frontBuffer, CTXUSAGE_RESOURCELOAD);
+ }
+ }
+
DestroyContext(This->wineD3DDevice, This->context[i]);
}
/* Restore the screen resolution if we rendered in fullscreen
More information about the wine-cvs
mailing list