From cf636cc3b3b1de0d966d43e04314a0454fc055a4 Mon Sep 17 00:00:00 2001 From: Henri Verbeet Date: Tue, 17 Jan 2012 21:13:32 +0100 Subject: [PATCH] ddraw: Allow querying the surface interface if a device was created from a surface. --- dlls/ddraw/ddraw_private.h | 2 ++ dlls/ddraw/device.c | 7 +++++++ dlls/ddraw/surface.c | 1 + 3 files changed, 10 insertions(+) diff --git a/dlls/ddraw/ddraw_private.h b/dlls/ddraw/ddraw_private.h index c23007e185..2e5b65b802 100644 --- a/dlls/ddraw/ddraw_private.h +++ b/dlls/ddraw/ddraw_private.h @@ -299,6 +299,8 @@ struct IDirect3DDeviceImpl /* Required to keep track which of two available texture blending modes in d3ddevice3 is used */ BOOL legacyTextureBlending; + BOOL from_surface; + D3DMATRIX legacy_projection; D3DMATRIX legacy_clipspace; diff --git a/dlls/ddraw/device.c b/dlls/ddraw/device.c index 7e935e520c..a056d9dbf1 100644 --- a/dlls/ddraw/device.c +++ b/dlls/ddraw/device.c @@ -179,6 +179,13 @@ IDirect3DDeviceImpl_7_QueryInterface(IDirect3DDevice7 *iface, TRACE("(%p) Returning IDirect3DDevice7 interface at %p\n", This, *obj); } + /* DirectDrawSurface */ + else if (IsEqualGUID(&IID_IDirectDrawSurface, refiid) && This->from_surface) + { + *obj = &This->target->IDirectDrawSurface_iface; + TRACE("Returning IDirectDrawSurface interface %p.\n", *obj); + } + /* Unknown interface */ else { diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c index f1477f4df5..e57762ca11 100644 --- a/dlls/ddraw/surface.c +++ b/dlls/ddraw/surface.c @@ -199,6 +199,7 @@ static HRESULT WINAPI ddraw_surface7_QueryInterface(IDirectDrawSurface7 *iface, if (d3d) { device_impl = impl_from_IDirect3DDevice7(d3d); + device_impl->from_surface = TRUE; *obj = &device_impl->IDirect3DDevice_iface; TRACE("(%p) Returning IDirect3DDevice interface at %p\n", This, *obj); return S_OK;