From e8f887dc184b6ad9953b3522440627c0a4d7736f Mon Sep 17 00:00:00 2001 From: David Adam Date: Tue, 30 Oct 2007 15:16:12 +0100 Subject: [PATCH] d3dx8: Implement D3DXMatrixTranspose. --- dlls/d3dx8/d3dx8.spec | 2 +- dlls/d3dx8/math.c | 14 ++++++++++++++ dlls/d3dx8/tests/math.c | 8 ++++++++ include/d3dx8math.h | 1 + 4 files changed, 24 insertions(+), 1 deletion(-) diff --git a/dlls/d3dx8/d3dx8.spec b/dlls/d3dx8/d3dx8.spec index 808e5093ff1..5a5efeb5f65 100644 --- a/dlls/d3dx8/d3dx8.spec +++ b/dlls/d3dx8/d3dx8.spec @@ -22,7 +22,7 @@ @ stdcall D3DXVec4Transform(ptr ptr ptr) @ stdcall D3DXMatrixfDeterminant(ptr) @ stdcall D3DXMatrixMultiply(ptr ptr ptr) -@ stub D3DXMatrixTranspose +@ stdcall D3DXMatrixTranspose(ptr ptr) @ stub D3DXMatrixInverse @ stub D3DXMatrixScaling @ stub D3DXMatrixTranslation diff --git a/dlls/d3dx8/math.c b/dlls/d3dx8/math.c index 3c46581903c..7ce5e21d9a1 100644 --- a/dlls/d3dx8/math.c +++ b/dlls/d3dx8/math.c @@ -58,6 +58,20 @@ D3DXMATRIX* WINAPI D3DXMatrixMultiply(D3DXMATRIX *pout, CONST D3DXMATRIX *pm1, C return pout; } +D3DXMATRIX* WINAPI D3DXMatrixTranspose(D3DXMATRIX *pout, CONST D3DXMATRIX *pm) +{ + int i,j; + + for (i=0; i<4; i++) + { + for (j=0; j<4; j++) + { + pout->m[i][j] = pm->m[j][i]; + } + } + return pout; +} + /*_________________D3DXQUATERNION________________*/ D3DXQUATERNION* WINAPI D3DXQuaternionNormalize(D3DXQUATERNION *pout, CONST D3DXQUATERNION *pq) diff --git a/dlls/d3dx8/tests/math.c b/dlls/d3dx8/tests/math.c index fbfe46d4747..8c35b551374 100644 --- a/dlls/d3dx8/tests/math.c +++ b/dlls/d3dx8/tests/math.c @@ -195,6 +195,14 @@ static void D3DXMatrixTest(void) expectedmat.m[3][0] = -164.0f; expectedmat.m[3][1] = -320.0f; expectedmat.m[3][2] = 187.0f; expectedmat.m[3][3] = 31.0f; D3DXMatrixMultiply(&gotmat,&mat,&mat2); expect_mat(expectedmat,gotmat); + +/*____________D3DXMatrixTranspose______________*/ + expectedmat.m[0][0] = 10.0f; expectedmat.m[0][1] = 11.0f; expectedmat.m[0][2] = 19.0f; expectedmat.m[0][3] = 2.0f; + expectedmat.m[1][0] = 5.0; expectedmat.m[1][1] = 20.0f; expectedmat.m[1][2] = -21.0f; expectedmat.m[1][3] = 3.0f; + expectedmat.m[2][0] = 7.0f; expectedmat.m[2][1] = 16.0f; expectedmat.m[2][2] = 30.f; expectedmat.m[2][3] = -4.0f; + expectedmat.m[3][0] = 8.0f; expectedmat.m[3][1] = 33.0f; expectedmat.m[3][2] = 43.0f; expectedmat.m[3][3] = -40.0f; + D3DXMatrixTranspose(&gotmat,&mat); + expect_mat(expectedmat,gotmat); } static void D3DXPlaneTest(void) diff --git a/include/d3dx8math.h b/include/d3dx8math.h index 94a9cfde3de..fda908e94d5 100644 --- a/include/d3dx8math.h +++ b/include/d3dx8math.h @@ -60,6 +60,7 @@ typedef struct D3DXCOLOR FLOAT WINAPI D3DXMatrixfDeterminant(CONST D3DXMATRIX *pm); D3DXMATRIX* WINAPI D3DXMatrixMultiply(D3DXMATRIX *pout, CONST D3DXMATRIX *pm1, CONST D3DXMATRIX *pm2); +D3DXMATRIX* WINAPI D3DXMatrixTranspose(D3DXMATRIX *pout, CONST D3DXMATRIX *pm); D3DXQUATERNION* WINAPI D3DXQuaternionNormalize(D3DXQUATERNION *pout, CONST D3DXQUATERNION *pq);