=?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