From d32df839ac0dbe7b812e20e1781cbabf1b9edac0 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Ri=C4=8Dardas=20Barkauskas?= Date: Mon, 17 Oct 2011 16:57:46 +0300 Subject: [PATCH] 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 831ee857d60..75a4546f39f 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 6009a51e1c9..1072f672281 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 cbf2aae4f6c..dcc64756721 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 379862a6f90..75687f662d2 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 9ef33b3f304..7febc5ed6b7 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); } /***************************************************************************** -- 2.11.4.GIT