Module: wine Branch: master Commit: 3e264ced0f2502093940ddda21ecbd024b7dd815 URL: http://source.winehq.org/git/wine.git/?a=commit;h=3e264ced0f2502093940ddda21...
Author: Józef Kucia joseph.kucia@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);