=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: d3dx9: Handle NULL arguments in D3DXVec3Unproject.

Alexandre Julliard julliard at winehq.org
Thu Nov 8 15:39:55 CST 2012


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

Author: Józef Kucia <joseph.kucia at gmail.com>
Date:   Thu Nov  8 13:45:55 2012 +0100

d3dx9: Handle NULL arguments in D3DXVec3Unproject.

---

 dlls/d3dx9_36/math.c       |   14 +++++---------
 dlls/d3dx9_36/tests/math.c |   12 ++++++++++++
 2 files changed, 17 insertions(+), 9 deletions(-)

diff --git a/dlls/d3dx9_36/math.c b/dlls/d3dx9_36/math.c
index 78317e8..0aebff0 100644
--- a/dlls/d3dx9_36/math.c
+++ b/dlls/d3dx9_36/math.c
@@ -1936,16 +1936,12 @@ D3DXVECTOR3* WINAPI D3DXVec3Unproject(D3DXVECTOR3 *pout, CONST D3DXVECTOR3 *pv,
 
     TRACE("(%p, %p, %p, %p, %p, %p)\n", pout, pv, pviewport, pprojection, pview, pworld);
 
-    if (pworld)
-    {
-        D3DXMatrixMultiply(&m, pworld, pview);
-        D3DXMatrixMultiply(&m, &m, pprojection);
-    }
-    else
-    {
-        D3DXMatrixMultiply(&m, pview, pprojection);
-    }
+    D3DXMatrixIdentity(&m);
+    if (pworld) D3DXMatrixMultiply(&m, &m, pworld);
+    if (pview) D3DXMatrixMultiply(&m, &m, pview);
+    if (pprojection) D3DXMatrixMultiply(&m, &m, pprojection);
     D3DXMatrixInverse(&m, NULL, &m);
+
     *pout = *pv;
     if (pviewport)
     {
diff --git a/dlls/d3dx9_36/tests/math.c b/dlls/d3dx9_36/tests/math.c
index 9bcd42c..53262b7 100644
--- a/dlls/d3dx9_36/tests/math.c
+++ b/dlls/d3dx9_36/tests/math.c
@@ -1401,6 +1401,18 @@ static void D3DXVector3Test(void)
     D3DXMatrixMultiply(&mat,&world,&view);
     D3DXVec3Unproject(&gotvec,&u,&viewport,&projection,&mat,NULL);
     expect_vec3(expectedvec,gotvec);
+    /* Projection matrix can be omitted */
+    D3DXMatrixMultiply(&mat,&view,&projection);
+    D3DXVec3Unproject(&gotvec,&u,&viewport,NULL,&mat,&world);
+    expect_vec3(expectedvec,gotvec);
+    /* View matrix can be omitted */
+    D3DXMatrixMultiply(&mat,&world,&view);
+    D3DXVec3Unproject(&gotvec,&u,&viewport,&projection,NULL,&mat);
+    expect_vec3(expectedvec,gotvec);
+    /* All matrices can be omitted */
+    expectedvec.x = -1.002500f; expectedvec.y = 0.997059f; expectedvec.z = 2.571429f;
+    D3DXVec3Unproject(&gotvec,&u,&viewport,NULL,NULL,NULL);
+    expect_vec3(expectedvec,gotvec);
     /* Viewport can be omitted */
     expectedvec.x = -11.018396f; expectedvec.y = 3.218991f; expectedvec.z = 1.380329f;
     D3DXVec3Unproject(&gotvec,&u,NULL,&projection,&view,&world);




More information about the wine-cvs mailing list