=?UTF-8?Q?Ri=C4=8Dardas=20Barkauskas=20?=: ddraw: Use unsafe_impl_from_IDirect3DViewport2 for application provided interfaces .
Alexandre Julliard
julliard at winehq.org
Tue Oct 4 17:43:04 CDT 2011
Module: wine
Branch: master
Commit: 38982ddf114aceff064afff88a3d73250be61c80
URL: http://source.winehq.org/git/wine.git/?a=commit;h=38982ddf114aceff064afff88a3d73250be61c80
Author: Ričardas Barkauskas <miegalius at gmail.com>
Date: Mon Oct 3 17:14:59 2011 -0500
ddraw: Use unsafe_impl_from_IDirect3DViewport2 for application provided interfaces.
---
dlls/ddraw/ddraw_private.h | 1 +
dlls/ddraw/device.c | 8 ++++----
dlls/ddraw/viewport.c | 8 ++++++++
3 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/dlls/ddraw/ddraw_private.h b/dlls/ddraw/ddraw_private.h
index b50c0bc..e75acc0 100644
--- a/dlls/ddraw/ddraw_private.h
+++ b/dlls/ddraw/ddraw_private.h
@@ -470,6 +470,7 @@ struct IDirect3DViewportImpl
};
IDirect3DViewportImpl *unsafe_impl_from_IDirect3DViewport3(IDirect3DViewport3 *iface) DECLSPEC_HIDDEN;
+IDirect3DViewportImpl *unsafe_impl_from_IDirect3DViewport2(IDirect3DViewport2 *iface) DECLSPEC_HIDDEN;
IDirect3DViewportImpl *unsafe_impl_from_IDirect3DViewport(IDirect3DViewport *iface) DECLSPEC_HIDDEN;
/* Helper functions */
diff --git a/dlls/ddraw/device.c b/dlls/ddraw/device.c
index a2e27ac..8cfeac1 100644
--- a/dlls/ddraw/device.c
+++ b/dlls/ddraw/device.c
@@ -771,7 +771,7 @@ static HRESULT WINAPI IDirect3DDeviceImpl_2_AddViewport(IDirect3DDevice2 *iface,
IDirect3DViewport2 *Direct3DViewport2)
{
IDirect3DDeviceImpl *This = device_from_device2(iface);
- IDirect3DViewportImpl *vp = (IDirect3DViewportImpl *)Direct3DViewport2;
+ IDirect3DViewportImpl *vp = unsafe_impl_from_IDirect3DViewport2(Direct3DViewport2);
TRACE("iface %p, viewport %p.\n", iface, Direct3DViewport2);
@@ -832,7 +832,7 @@ static HRESULT WINAPI IDirect3DDeviceImpl_2_DeleteViewport(IDirect3DDevice2 *ifa
IDirect3DViewport2 *Direct3DViewport2)
{
IDirect3DDeviceImpl *This = device_from_device2(iface);
- IDirect3DViewportImpl *vp = (IDirect3DViewportImpl *)Direct3DViewport2;
+ IDirect3DViewportImpl *vp = unsafe_impl_from_IDirect3DViewport2(Direct3DViewport2);
TRACE("iface %p, viewport %p.\n", iface, Direct3DViewport2);
@@ -927,7 +927,7 @@ static HRESULT WINAPI IDirect3DDeviceImpl_2_NextViewport(IDirect3DDevice2 *iface
IDirect3DViewport2 *Viewport2, IDirect3DViewport2 **lplpDirect3DViewport2, DWORD Flags)
{
IDirect3DDeviceImpl *This = device_from_device2(iface);
- IDirect3DViewportImpl *vp = (IDirect3DViewportImpl *)Viewport2;
+ IDirect3DViewportImpl *vp = unsafe_impl_from_IDirect3DViewport2(Viewport2);
IDirect3DViewport3 *res;
HRESULT hr;
@@ -1749,7 +1749,7 @@ static HRESULT WINAPI IDirect3DDeviceImpl_2_SetCurrentViewport(IDirect3DDevice2
IDirect3DViewport2 *Direct3DViewport2)
{
IDirect3DDeviceImpl *This = device_from_device2(iface);
- IDirect3DViewportImpl *vp = (IDirect3DViewportImpl *)Direct3DViewport2;
+ IDirect3DViewportImpl *vp = unsafe_impl_from_IDirect3DViewport2(Direct3DViewport2);
TRACE("iface %p, viewport %p.\n", iface, Direct3DViewport2);
diff --git a/dlls/ddraw/viewport.c b/dlls/ddraw/viewport.c
index bbff45b..1becbc7 100644
--- a/dlls/ddraw/viewport.c
+++ b/dlls/ddraw/viewport.c
@@ -1127,6 +1127,14 @@ IDirect3DViewportImpl *unsafe_impl_from_IDirect3DViewport3(IDirect3DViewport3 *i
return CONTAINING_RECORD(iface, IDirect3DViewportImpl, IDirect3DViewport3_iface);
}
+IDirect3DViewportImpl *unsafe_impl_from_IDirect3DViewport2(IDirect3DViewport2 *iface)
+{
+ /* IDirect3DViewport and IDirect3DViewport3 use the same iface. */
+ if (!iface) return NULL;
+ assert(iface->lpVtbl == (IDirect3DViewport2Vtbl *)&d3d_viewport_vtbl);
+ return CONTAINING_RECORD(iface, IDirect3DViewportImpl, IDirect3DViewport3_iface);
+}
+
IDirect3DViewportImpl *unsafe_impl_from_IDirect3DViewport(IDirect3DViewport *iface)
{
/* IDirect3DViewport and IDirect3DViewport3 use the same iface. */
More information about the wine-cvs
mailing list