Stefan Dösinger : wined3d: Keep track of the last used device.
Alexandre Julliard
julliard at winehq.org
Wed Aug 20 08:13:55 CDT 2008
Module: wine
Branch: master
Commit: 5d75939b09538444b125d31cf618e8424059097f
URL: http://source.winehq.org/git/wine.git/?a=commit;h=5d75939b09538444b125d31cf618e8424059097f
Author: Stefan Dösinger <stefan at codeweavers.com>
Date: Thu Jul 31 13:29:50 2008 -0500
wined3d: Keep track of the last used device.
---
dlls/wined3d/context.c | 14 +++++++++++++-
1 files changed, 13 insertions(+), 1 deletions(-)
diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c
index 4440848..68ec2a7 100644
--- a/dlls/wined3d/context.c
+++ b/dlls/wined3d/context.c
@@ -29,6 +29,13 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3d);
#define GLINFO_LOCATION This->adapter->gl_info
+/* The last used device.
+ *
+ * If the application creates multiple devices and switches between them, ActivateContext has to
+ * change the opengl context. This flag allows to keep track which device is active
+ */
+static IWineD3DDeviceImpl *last_device;
+
/*****************************************************************************
* Context_MarkStateDirty
*
@@ -562,6 +569,8 @@ WineD3DContext *CreateContext(IWineD3DDeviceImpl *This, IWineD3DSurfaceImpl *tar
*/
if(oldDrawable && oldCtx) {
pwglMakeCurrent(oldDrawable, oldCtx);
+ } else {
+ last_device = This;
}
This->frag_pipe->enable_extension((IWineD3DDevice *) This, TRUE);
@@ -627,6 +636,8 @@ void DestroyContext(IWineD3DDeviceImpl *This, WineD3DContext *context) {
TRACE("Destroying ctx %p\n", context);
if(pwglGetCurrentContext() == context->glCtx){
pwglMakeCurrent(NULL, NULL);
+ } else {
+ last_device = NULL;
}
if(context->isPBuffer) {
@@ -1125,7 +1136,7 @@ void ActivateContext(IWineD3DDeviceImpl *This, IWineD3DSurface *target, ContextU
}
/* Activate the opengl context */
- if(context != This->activeContext) {
+ if(last_device != This || context != This->activeContext) {
BOOL ret;
/* Prevent an unneeded context switch as those are expensive */
@@ -1152,6 +1163,7 @@ void ActivateContext(IWineD3DDeviceImpl *This, IWineD3DSurface *target, ContextU
sizeof(*This->activeContext->pshader_const_dirty) * GL_LIMITS(pshader_constantsF));
}
This->activeContext = context;
+ last_device = This;
}
/* We only need ENTER_GL for the gl calls made below and for the helper functions which make GL calls */
More information about the wine-cvs
mailing list