=?UTF-8?Q?Ri=C4=8Dardas=20Barkauskas=20?=: ddraw: COM cleanup for IDirect3DDevice2 interface.

Alexandre Julliard julliard at winehq.org
Mon Oct 17 13:08:56 CDT 2011


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

Author: Ričardas Barkauskas <rbarkauskas at codeweavers.com>
Date:   Mon Oct 17 16:57:46 2011 +0300

ddraw: COM cleanup for IDirect3DDevice2 interface.

---

 dlls/ddraw/ddraw.c         |   11 ++++++++---
 dlls/ddraw/ddraw_private.h |    4 ++--
 dlls/ddraw/device.c        |   10 +++++-----
 dlls/ddraw/executebuffer.c |    2 +-
 dlls/ddraw/surface.c       |    2 +-
 5 files changed, 17 insertions(+), 12 deletions(-)

diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
index 831ee85..75a4546 100644
--- a/dlls/ddraw/ddraw.c
+++ b/dlls/ddraw/ddraw.c
@@ -4359,15 +4359,20 @@ static HRESULT WINAPI d3d2_CreateDevice(IDirect3D2 *iface, REFCLSID riid,
 {
     IDirectDrawImpl *This = impl_from_IDirect3D2(iface);
     IDirectDrawSurfaceImpl *surface_impl = unsafe_impl_from_IDirectDrawSurface(surface);
+    IDirect3DDevice7 *device7;
+    IDirect3DDeviceImpl *device_impl;
     HRESULT hr;
 
     TRACE("iface %p, riid %s, surface %p, device %p.\n",
             iface, debugstr_guid(riid), surface, device);
 
     hr = d3d7_CreateDevice(&This->IDirect3D7_iface, riid,
-            surface_impl ? &surface_impl->IDirectDrawSurface7_iface : NULL,
-            (IDirect3DDevice7 **)device);
-    if (*device) *device = (IDirect3DDevice2 *)&((IDirect3DDeviceImpl *)*device)->IDirect3DDevice2_vtbl;
+            surface_impl ? &surface_impl->IDirectDrawSurface7_iface : NULL, device ? &device7 : NULL);
+    if (SUCCEEDED(hr))
+    {
+        device_impl = (IDirect3DDeviceImpl *)device7;
+        *device = &device_impl->IDirect3DDevice2_iface;
+    }
 
     return hr;
 }
diff --git a/dlls/ddraw/ddraw_private.h b/dlls/ddraw/ddraw_private.h
index 6009a51..1072f67 100644
--- a/dlls/ddraw/ddraw_private.h
+++ b/dlls/ddraw/ddraw_private.h
@@ -279,7 +279,7 @@ struct IDirect3DDeviceImpl
     /* IUnknown */
     const IDirect3DDevice7Vtbl *lpVtbl;
     const IDirect3DDevice3Vtbl *IDirect3DDevice3_vtbl;
-    const IDirect3DDevice2Vtbl *IDirect3DDevice2_vtbl;
+    IDirect3DDevice2 IDirect3DDevice2_iface;
     IDirect3DDevice IDirect3DDevice_iface;
     LONG                    ref;
 
@@ -332,7 +332,7 @@ static inline IDirect3DDeviceImpl *impl_from_IDirect3DDevice(IDirect3DDevice *if
 
 static inline IDirect3DDeviceImpl *impl_from_IDirect3DDevice2(IDirect3DDevice2 *iface)
 {
-    return CONTAINING_RECORD(iface, IDirect3DDeviceImpl, IDirect3DDevice2_vtbl);
+    return CONTAINING_RECORD(iface, IDirect3DDeviceImpl, IDirect3DDevice2_iface);
 }
 
 static inline IDirect3DDeviceImpl *device_from_device3(IDirect3DDevice3 *iface)
diff --git a/dlls/ddraw/device.c b/dlls/ddraw/device.c
index cbf2aae..dcc6475 100644
--- a/dlls/ddraw/device.c
+++ b/dlls/ddraw/device.c
@@ -167,7 +167,7 @@ IDirect3DDeviceImpl_7_QueryInterface(IDirect3DDevice7 *iface,
         TRACE("(%p) Returning IDirect3DDevice interface at %p\n", This, *obj);
     }
     else if ( IsEqualGUID( &IID_IDirect3DDevice2  , refiid ) ) {
-        *obj = &This->IDirect3DDevice2_vtbl;
+        *obj = &This->IDirect3DDevice2_iface;
         TRACE("(%p) Returning IDirect3DDevice2 interface at %p\n", This, *obj);
     }
     else if ( IsEqualGUID( &IID_IDirect3DDevice3  , refiid ) ) {
@@ -581,7 +581,7 @@ static HRESULT WINAPI IDirect3DDeviceImpl_1_SwapTextureHandles(IDirect3DDevice *
 
     TRACE("iface %p, tex1 %p, tex2 %p.\n", iface, D3DTex1, D3DTex2);
 
-    return IDirect3DDevice2_SwapTextureHandles((IDirect3DDevice2 *)&This->IDirect3DDevice2_vtbl, t1, t2);
+    return IDirect3DDevice2_SwapTextureHandles(&This->IDirect3DDevice2_iface, t1, t2);
 }
 
 /*****************************************************************************
@@ -1274,7 +1274,7 @@ static HRESULT WINAPI IDirect3DDeviceImpl_1_EnumTextureFormats(IDirect3DDevice *
 
     TRACE("iface %p, callback %p, context %p.\n", iface, Callback, Arg);
 
-    return IDirect3DDevice2_EnumTextureFormats((IDirect3DDevice2 *)&This->IDirect3DDevice2_vtbl, Callback, Arg);
+    return IDirect3DDevice2_EnumTextureFormats(&This->IDirect3DDevice2_iface, Callback, Arg);
 }
 
 /*****************************************************************************
@@ -6750,7 +6750,7 @@ IDirect3DDeviceImpl *unsafe_impl_from_IDirect3DDevice2(IDirect3DDevice2 *iface)
 {
     if (!iface) return NULL;
     assert(iface->lpVtbl == &d3d_device2_vtbl);
-    return CONTAINING_RECORD(iface, IDirect3DDeviceImpl, IDirect3DDevice2_vtbl);
+    return CONTAINING_RECORD(iface, IDirect3DDeviceImpl, IDirect3DDevice2_iface);
 }
 
 IDirect3DDeviceImpl *unsafe_impl_from_IDirect3DDevice(IDirect3DDevice *iface)
@@ -6803,7 +6803,7 @@ HRESULT d3d_device_init(IDirect3DDeviceImpl *device, IDirectDrawImpl *ddraw, IDi
         device->lpVtbl = &d3d_device7_fpu_setup_vtbl;
 
     device->IDirect3DDevice3_vtbl = &d3d_device3_vtbl;
-    device->IDirect3DDevice2_vtbl = &d3d_device2_vtbl;
+    device->IDirect3DDevice2_iface.lpVtbl = &d3d_device2_vtbl;
     device->IDirect3DDevice_iface.lpVtbl = &d3d_device1_vtbl;
     device->ref = 1;
     device->ddraw = ddraw;
diff --git a/dlls/ddraw/executebuffer.c b/dlls/ddraw/executebuffer.c
index 379862a..75687f6 100644
--- a/dlls/ddraw/executebuffer.c
+++ b/dlls/ddraw/executebuffer.c
@@ -292,7 +292,7 @@ HRESULT d3d_execute_buffer_execute(IDirect3DExecuteBufferImpl *This,
 
 	    case D3DOP_STATERENDER: {
 	        int i;
-                IDirect3DDevice2 *d3d_device2 = (IDirect3DDevice2 *)&lpDevice->IDirect3DDevice2_vtbl;
+                IDirect3DDevice2 *d3d_device2 = &lpDevice->IDirect3DDevice2_iface;
 		TRACE("STATERENDER      (%d)\n", count);
 
 		for (i = 0; i < count; i++) {
diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c
index 9ef33b3..7febc5e 100644
--- a/dlls/ddraw/surface.c
+++ b/dlls/ddraw/surface.c
@@ -4557,7 +4557,7 @@ static HRESULT WINAPI d3d_texture1_GetHandle(IDirect3DTexture *iface,
     TRACE("iface %p, device %p, handle %p.\n", iface, device, handle);
 
     return d3d_texture2_GetHandle(&This->IDirect3DTexture2_iface,
-            device_impl ? (IDirect3DDevice2 *)&device_impl->IDirect3DDevice2_vtbl : NULL, handle);
+            device_impl ? &device_impl->IDirect3DDevice2_iface : NULL, handle);
 }
 
 /*****************************************************************************




More information about the wine-cvs mailing list