Stefan Dösinger : ddraw: Implement GetRenderState for D3DRENDERSTATE_TEXTUREHANDLE.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Oct 16 05:29:01 CDT 2006
Module: wine
Branch: master
Commit: e92d7cbf2b3058caa010f483ce7d3c5a2df7225c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=e92d7cbf2b3058caa010f483ce7d3c5a2df7225c
Author: Stefan Dösinger <stefandoesinger at 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
More information about the wine-cvs
mailing list