Alexander Dorofeyev : ddraw: Set active_device in AddViewport.

Alexandre Julliard julliard at winehq.org
Fri Apr 11 06:28:39 CDT 2008


Module: wine
Branch: master
Commit: 3e237c6199847a62c4c9f4dac12eba6f136ff08e
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=3e237c6199847a62c4c9f4dac12eba6f136ff08e

Author: Alexander Dorofeyev <alexd4 at inbox.lv>
Date:   Thu Apr 10 23:11:52 2008 +0300

ddraw: Set active_device in AddViewport.

---

 dlls/ddraw/device.c   |    2 ++
 dlls/ddraw/viewport.c |   20 ++++++++++++--------
 2 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/dlls/ddraw/device.c b/dlls/ddraw/device.c
index 4e528af..9ff24f3 100644
--- a/dlls/ddraw/device.c
+++ b/dlls/ddraw/device.c
@@ -817,6 +817,8 @@ IDirect3DDeviceImpl_3_AddViewport(IDirect3DDevice3 *iface,
     EnterCriticalSection(&ddraw_cs);
     vp->next = This->viewport_list;
     This->viewport_list = vp;
+    vp->active_device = This; /* Viewport must be usable for Clear() after AddViewport,
+                                    so set active_device here. */
     LeaveCriticalSection(&ddraw_cs);
 
     return D3D_OK;
diff --git a/dlls/ddraw/viewport.c b/dlls/ddraw/viewport.c
index c720a57..90054ee 100644
--- a/dlls/ddraw/viewport.c
+++ b/dlls/ddraw/viewport.c
@@ -312,10 +312,12 @@ IDirect3DViewportImpl_SetViewport(IDirect3DViewport3 *iface,
     This->viewports.vp1.dvMaxZ = 1.0;
 
     if (This->active_device) {
-      IDirect3DDevice3_GetCurrentViewport(ICOM_INTERFACE(This->active_device, IDirect3DDevice3), &current_viewport);
-      if (ICOM_OBJECT(IDirect3DViewportImpl, IDirect3DViewport3, current_viewport) == This)
-          This->activate(This, FALSE);
-      if(current_viewport) IDirect3DViewport3_Release(current_viewport);
+        IDirect3DDevice3_GetCurrentViewport(ICOM_INTERFACE(This->active_device, IDirect3DDevice3), &current_viewport);
+        if (current_viewport) {
+            if (ICOM_OBJECT(IDirect3DViewportImpl, IDirect3DViewport3, current_viewport) == This)
+                This->activate(This, FALSE);
+            IDirect3DViewport3_Release(current_viewport);
+        }
     }
     LeaveCriticalSection(&ddraw_cs);
 
@@ -900,10 +902,12 @@ IDirect3DViewportImpl_SetViewport2(IDirect3DViewport3 *iface,
     memcpy(&(This->viewports.vp2), lpData, lpData->dwSize);
 
     if (This->active_device) {
-      IDirect3DDevice3_GetCurrentViewport(ICOM_INTERFACE(This->active_device, IDirect3DDevice3), &current_viewport);
-      if (ICOM_OBJECT(IDirect3DViewportImpl, IDirect3DViewport3, current_viewport) == This)
-        This->activate(This, FALSE);
-      IDirect3DViewport3_Release(current_viewport);
+        IDirect3DDevice3_GetCurrentViewport(ICOM_INTERFACE(This->active_device, IDirect3DDevice3), &current_viewport);
+        if (current_viewport) {
+            if (ICOM_OBJECT(IDirect3DViewportImpl, IDirect3DViewport3, current_viewport) == This)
+                This->activate(This, FALSE);
+            IDirect3DViewport3_Release(current_viewport);
+        }
     }
     LeaveCriticalSection(&ddraw_cs);
 




More information about the wine-cvs mailing list