Module: wine Branch: master Commit: e92d7cbf2b3058caa010f483ce7d3c5a2df7225c URL: http://source.winehq.org/git/wine.git/?a=commit;h=e92d7cbf2b3058caa010f483ce...
Author: Stefan Dösinger stefandoesinger@gmx.at Date: Sun Oct 15 00:01:23 2006 +0200
ddraw: Implement GetRenderState for D3DRENDERSTATE_TEXTUREHANDLE.
---
dlls/ddraw/device.c | 45 +++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 41 insertions(+), 4 deletions(-)
diff --git a/dlls/ddraw/device.c b/dlls/ddraw/device.c index 1401499..09d2ca9 100644 --- a/dlls/ddraw/device.c +++ b/dlls/ddraw/device.c @@ -2094,16 +2094,53 @@ IDirect3DDeviceImpl_7_GetRenderState(IDi DWORD *Value) { ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface); + HRESULT hr; TRACE("(%p)->(%08x,%p): Relay\n", This, RenderStateType, Value);
if(!Value) return DDERR_INVALIDPARAMS;
- /* FIXME: Unhandled: D3DRENDERSTATE_STIPPLEPATTERN00 - 31 */ + switch(RenderStateType) + { + case D3DRENDERSTATE_TEXTUREHANDLE: + { + /* This state is wrapped to SetTexture in SetRenderState, so + * it has to be wrapped to GetTexture here + */ + IWineD3DBaseTexture *tex = NULL; + *Value = 0; + + hr = IWineD3DDevice_GetTexture(This->wineD3DDevice, + 0, + &tex); + + if(hr == WINED3D_OK && tex) + { + IDirectDrawSurface7 *parent = NULL; + hr = IWineD3DBaseTexture_GetParent(tex, + (IUnknown **) &parent); + if(parent) + { + /* The parent of the texture is the IDirectDrawSurface7 interface + * of the ddraw surface + */ + IDirectDrawSurfaceImpl *texImpl = ICOM_OBJECT(IDirectDrawSurfaceImpl, + IDirectDrawSurface7, + parent); + *Value = texImpl->Handle; + IDirectDrawSurface7_Release(parent); + } + IWineD3DBaseTexture_Release(tex); + } + return hr; + }
- return IWineD3DDevice_GetRenderState(This->wineD3DDevice, - RenderStateType, - Value); + default: + /* FIXME: Unhandled: D3DRENDERSTATE_STIPPLEPATTERN00 - 31 */ + return IWineD3DDevice_GetRenderState(This->wineD3DDevice, + RenderStateType, + Value); + } }
static HRESULT WINAPI