=?UTF-8?Q?Ri=C4=8Dardas=20Barkauskas=20?=: ddraw: Use unsafe_impl_from_IDirect3DViewport for application provided interfaces .

Alexandre Julliard julliard at winehq.org
Tue Oct 4 17:43:04 CDT 2011


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

Author: Ričardas Barkauskas <miegalius at gmail.com>
Date:   Mon Oct  3 17:14:54 2011 -0500

ddraw: Use unsafe_impl_from_IDirect3DViewport 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 a8f384f..b50c0bc 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_IDirect3DViewport(IDirect3DViewport *iface) DECLSPEC_HIDDEN;
 
 /* Helper functions */
 void viewport_activate(IDirect3DViewportImpl* This, BOOL ignore_lights) DECLSPEC_HIDDEN;
diff --git a/dlls/ddraw/device.c b/dlls/ddraw/device.c
index 4ca94f6..a2e27ac 100644
--- a/dlls/ddraw/device.c
+++ b/dlls/ddraw/device.c
@@ -712,7 +712,7 @@ static HRESULT WINAPI IDirect3DDeviceImpl_1_Execute(IDirect3DDevice *iface,
 {
     IDirect3DDeviceImpl *This = device_from_device1(iface);
     IDirect3DExecuteBufferImpl *buffer = unsafe_impl_from_IDirect3DExecuteBuffer(ExecuteBuffer);
-    IDirect3DViewportImpl *Direct3DViewportImpl = (IDirect3DViewportImpl *)Viewport;
+    IDirect3DViewportImpl *Direct3DViewportImpl = unsafe_impl_from_IDirect3DViewport(Viewport);
     HRESULT hr;
 
     TRACE("iface %p, buffer %p, viewport %p, flags %#x.\n", iface, ExecuteBuffer, Viewport, Flags);
@@ -782,7 +782,7 @@ static HRESULT WINAPI IDirect3DDeviceImpl_1_AddViewport(IDirect3DDevice *iface,
         IDirect3DViewport *Direct3DViewport)
 {
     IDirect3DDeviceImpl *This = device_from_device1(iface);
-    IDirect3DViewportImpl *vp = (IDirect3DViewportImpl *)Direct3DViewport;
+    IDirect3DViewportImpl *vp = unsafe_impl_from_IDirect3DViewport(Direct3DViewport);
 
     TRACE("iface %p, viewport %p.\n", iface, Direct3DViewport);
 
@@ -843,7 +843,7 @@ static HRESULT WINAPI IDirect3DDeviceImpl_1_DeleteViewport(IDirect3DDevice *ifac
         IDirect3DViewport *Direct3DViewport)
 {
     IDirect3DDeviceImpl *This = device_from_device1(iface);
-    IDirect3DViewportImpl *vp = (IDirect3DViewportImpl *)Direct3DViewport;
+    IDirect3DViewportImpl *vp = unsafe_impl_from_IDirect3DViewport(Direct3DViewport);
 
     TRACE("iface %p, viewport %p.\n", iface, Direct3DViewport);
 
@@ -944,7 +944,7 @@ static HRESULT WINAPI IDirect3DDeviceImpl_1_NextViewport(IDirect3DDevice *iface,
         IDirect3DViewport *Viewport, IDirect3DViewport **lplpDirect3DViewport, DWORD Flags)
 {
     IDirect3DDeviceImpl *This = device_from_device1(iface);
-    IDirect3DViewportImpl *vp = (IDirect3DViewportImpl *)Viewport;
+    IDirect3DViewportImpl *vp = unsafe_impl_from_IDirect3DViewport(Viewport);
     IDirect3DViewport3 *res;
     HRESULT hr;
 
diff --git a/dlls/ddraw/viewport.c b/dlls/ddraw/viewport.c
index 6024aae..bbff45b 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_IDirect3DViewport(IDirect3DViewport *iface)
+{
+    /* IDirect3DViewport and IDirect3DViewport3 use the same iface. */
+    if (!iface) return NULL;
+    assert(iface->lpVtbl == (IDirect3DViewportVtbl *)&d3d_viewport_vtbl);
+    return CONTAINING_RECORD(iface, IDirect3DViewportImpl, IDirect3DViewport3_iface);
+}
+
 void d3d_viewport_init(IDirect3DViewportImpl *viewport, IDirectDrawImpl *ddraw)
 {
     viewport->IDirect3DViewport3_iface.lpVtbl = &d3d_viewport_vtbl;




More information about the wine-cvs mailing list