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