Module: wine Branch: master Commit: f44734b7240d7c096db9ec308092aae934f48687 URL: http://source.winehq.org/git/wine.git/?a=commit;h=f44734b7240d7c096db9ec3080...
Author: Ričardas Barkauskas miegalius@gmail.com Date: Mon Oct 3 17:14:37 2011 -0500
ddraw: Use unsafe_impl_from_IDirect3DViewport3 for application provided interfaces.
---
dlls/ddraw/ddraw_private.h | 2 ++ dlls/ddraw/device.c | 8 ++++---- dlls/ddraw/viewport.c | 7 +++++++ 3 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/dlls/ddraw/ddraw_private.h b/dlls/ddraw/ddraw_private.h index f587126..a2f0007 100644 --- a/dlls/ddraw/ddraw_private.h +++ b/dlls/ddraw/ddraw_private.h @@ -469,6 +469,8 @@ struct IDirect3DViewportImpl IDirect3DMaterialImpl *background; };
+IDirect3DViewportImpl *unsafe_impl_from_IDirect3DViewport3(IDirect3DViewport3 *iface) DECLSPEC_HIDDEN; + /* Helper functions */ void viewport_activate(IDirect3DViewportImpl* This, BOOL ignore_lights) DECLSPEC_HIDDEN; void d3d_viewport_init(IDirect3DViewportImpl *viewport, IDirectDrawImpl *ddraw) DECLSPEC_HIDDEN; diff --git a/dlls/ddraw/device.c b/dlls/ddraw/device.c index 28e1eaf..eb43aa3 100644 --- a/dlls/ddraw/device.c +++ b/dlls/ddraw/device.c @@ -750,7 +750,7 @@ IDirect3DDeviceImpl_3_AddViewport(IDirect3DDevice3 *iface, IDirect3DViewport3 *Viewport) { IDirect3DDeviceImpl *This = device_from_device3(iface); - IDirect3DViewportImpl *vp = (IDirect3DViewportImpl *)Viewport; + IDirect3DViewportImpl *vp = unsafe_impl_from_IDirect3DViewport3(Viewport);
TRACE("iface %p, viewport %p.\n", iface, Viewport);
@@ -808,7 +808,7 @@ static HRESULT WINAPI IDirect3DDeviceImpl_1_AddViewport(IDirect3DDevice *iface, static HRESULT WINAPI IDirect3DDeviceImpl_3_DeleteViewport(IDirect3DDevice3 *iface, IDirect3DViewport3 *viewport) { IDirect3DDeviceImpl *device = device_from_device3(iface); - IDirect3DViewportImpl *vp = (IDirect3DViewportImpl *)viewport; + IDirect3DViewportImpl *vp = unsafe_impl_from_IDirect3DViewport3(viewport);
TRACE("iface %p, viewport %p.\n", iface, viewport);
@@ -875,7 +875,7 @@ IDirect3DDeviceImpl_3_NextViewport(IDirect3DDevice3 *iface, DWORD Flags) { IDirect3DDeviceImpl *This = device_from_device3(iface); - IDirect3DViewportImpl *vp = (IDirect3DViewportImpl *)Viewport3; + IDirect3DViewportImpl *vp = unsafe_impl_from_IDirect3DViewport3(Viewport3); struct list *entry;
TRACE("iface %p, viewport %p, next %p, flags %#x.\n", @@ -1703,7 +1703,7 @@ IDirect3DDeviceImpl_3_SetCurrentViewport(IDirect3DDevice3 *iface, IDirect3DViewport3 *Direct3DViewport3) { IDirect3DDeviceImpl *This = device_from_device3(iface); - IDirect3DViewportImpl *vp = (IDirect3DViewportImpl *)Direct3DViewport3; + IDirect3DViewportImpl *vp = unsafe_impl_from_IDirect3DViewport3(Direct3DViewport3);
TRACE("iface %p, viewport %p.\n", iface, Direct3DViewport3);
diff --git a/dlls/ddraw/viewport.c b/dlls/ddraw/viewport.c index 7dc3dd4..741090d 100644 --- a/dlls/ddraw/viewport.c +++ b/dlls/ddraw/viewport.c @@ -1115,6 +1115,13 @@ static const struct IDirect3DViewport3Vtbl d3d_viewport_vtbl = IDirect3DViewportImpl_Clear2, };
+IDirect3DViewportImpl *unsafe_impl_from_IDirect3DViewport3(IDirect3DViewport3 *iface) +{ + if (!iface) return NULL; + assert(iface->lpVtbl == &d3d_viewport_vtbl); + return CONTAINING_RECORD(iface, IDirect3DViewportImpl, lpVtbl); +} + void d3d_viewport_init(IDirect3DViewportImpl *viewport, IDirectDrawImpl *ddraw) { viewport->lpVtbl = &d3d_viewport_vtbl;