Stefan Dösinger : ddraw: Forward all 4 world matrices to wined3d.

Alexandre Julliard julliard at wine.codeweavers.com
Thu May 3 08:57:09 CDT 2007


Module: wine
Branch: master
Commit: 6acc0a151de888cc06d8c0b95710fe5e551fec3b
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=6acc0a151de888cc06d8c0b95710fe5e551fec3b

Author: Stefan Dösinger <stefan at codeweavers.com>
Date:   Wed Apr 25 16:44:47 2007 +0200

ddraw: Forward all 4 world matrices to wined3d.

---

 dlls/ddraw/device.c |   63 +++++++++++++++++++++------------------------------
 1 files changed, 26 insertions(+), 37 deletions(-)

diff --git a/dlls/ddraw/device.c b/dlls/ddraw/device.c
index 5ef8748..30f80ad 100644
--- a/dlls/ddraw/device.c
+++ b/dlls/ddraw/device.c
@@ -2721,18 +2721,14 @@ IDirect3DDeviceImpl_7_SetTransform(IDirect3DDevice7 *iface,
     if(!Matrix)
         return DDERR_INVALIDPARAMS;
 
-    /* D3DTRANSFORMSTATE_WORLD doesn't exist in WineD3D,
-     * use D3DTS_WORLDMATRIX(0) instead
-     * D3DTS_WORLDMATRIX(index) is (D3DTRANSFORMSTATETYPE)(index + 256)
-     */
-    if(TransformStateType == D3DTRANSFORMSTATE_WORLD)
-        type = (D3DTRANSFORMSTATETYPE)(0 + 256);
-
-    /* FIXME:
-       Unhandled: D3DTRANSFORMSTATE_WORLD1
-       Unhandled: D3DTRANSFORMSTATE_WORLD2
-       Unhandled: D3DTRANSFORMSTATE_WORLD3
-     */
+    switch(TransformStateType)
+    {
+        case D3DTRANSFORMSTATE_WORLD :  type = WINED3DTS_WORLDMATRIX(0); break;
+        case D3DTRANSFORMSTATE_WORLD1:  type = WINED3DTS_WORLDMATRIX(1); break;
+        case D3DTRANSFORMSTATE_WORLD2:  type = WINED3DTS_WORLDMATRIX(2); break;
+        case D3DTRANSFORMSTATE_WORLD3:  type = WINED3DTS_WORLDMATRIX(3); break;
+        default:                        type = TransformStateType;
+    }
 
     /* Note: D3DMATRIX is compatible with WINED3DMATRIX */
     return IWineD3DDevice_SetTransform(This->wineD3DDevice,
@@ -2793,18 +2789,14 @@ IDirect3DDeviceImpl_7_GetTransform(IDirect3DDevice7 *iface,
     if(!Matrix)
         return DDERR_INVALIDPARAMS;
 
-    /* D3DTRANSFORMSTATE_WORLD doesn't exist in WineD3D,
-     * use D3DTS_WORLDMATRIX(0) instead
-     * D3DTS_WORLDMATRIX(index) is (D3DTRANSFORMSTATETYPE)(index + 256)
-     */
-    if(TransformStateType == D3DTRANSFORMSTATE_WORLD)
-        type = (D3DTRANSFORMSTATETYPE)(0 + 256);
-
-    /* FIXME:
-       Unhandled: D3DTRANSFORMSTATE_WORLD1
-       Unhandled: D3DTRANSFORMSTATE_WORLD2
-       Unhandled: D3DTRANSFORMSTATE_WORLD3
-     */
+    switch(TransformStateType)
+    {
+        case D3DTRANSFORMSTATE_WORLD :  type = WINED3DTS_WORLDMATRIX(0); break;
+        case D3DTRANSFORMSTATE_WORLD1:  type = WINED3DTS_WORLDMATRIX(1); break;
+        case D3DTRANSFORMSTATE_WORLD2:  type = WINED3DTS_WORLDMATRIX(2); break;
+        case D3DTRANSFORMSTATE_WORLD3:  type = WINED3DTS_WORLDMATRIX(3); break;
+        default:                        type = TransformStateType;
+    }
 
     /* Note: D3DMATRIX is compatible with WINED3DMATRIX */
     return IWineD3DDevice_GetTransform(This->wineD3DDevice, type, (WINED3DMATRIX*) Matrix);
@@ -2858,24 +2850,21 @@ IDirect3DDeviceImpl_7_MultiplyTransform(IDirect3DDevice7 *iface,
                                         D3DMATRIX *D3DMatrix)
 {
     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
+    D3DTRANSFORMSTATETYPE type;
     TRACE("(%p)->(%08x,%p): Relay\n", This, TransformStateType, D3DMatrix);
 
-    /* D3DTRANSFORMSTATE_WORLD doesn't exist in WineD3D,
-     * use D3DTS_WORLDMATRIX(0) instead
-     * D3DTS_WORLDMATRIX(index) is (D3DTRANSFORMSTATETYPE)(index + 256)
-     */
-    if(TransformStateType == D3DTRANSFORMSTATE_WORLD)
-        TransformStateType = (D3DTRANSFORMSTATETYPE)(0 + 256);
-
-    /* FIXME:
-       Unhandled: D3DTRANSFORMSTATE_WORLD1
-       Unhandled: D3DTRANSFORMSTATE_WORLD2
-       Unhandled: D3DTRANSFORMSTATE_WORLD3
-     */
+    switch(TransformStateType)
+    {
+        case D3DTRANSFORMSTATE_WORLD :  type = WINED3DTS_WORLDMATRIX(0); break;
+        case D3DTRANSFORMSTATE_WORLD1:  type = WINED3DTS_WORLDMATRIX(1); break;
+        case D3DTRANSFORMSTATE_WORLD2:  type = WINED3DTS_WORLDMATRIX(2); break;
+        case D3DTRANSFORMSTATE_WORLD3:  type = WINED3DTS_WORLDMATRIX(3); break;
+        default:                        type = TransformStateType;
+    }
 
     /* Note: D3DMATRIX is compatible with WINED3DMATRIX */
     return IWineD3DDevice_MultiplyTransform(This->wineD3DDevice,
-                                            TransformStateType,
+                                            type,
                                             (WINED3DMATRIX*) D3DMatrix);
 }
 




More information about the wine-cvs mailing list