Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52561 Signed-off-by: Matteo Bruni mbruni@codeweavers.com --- dlls/d3dx9_36/tests/math.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/d3dx9_36/tests/math.c b/dlls/d3dx9_36/tests/math.c index 62f4eaec124..2ed9131d788 100644 --- a/dlls/d3dx9_36/tests/math.c +++ b/dlls/d3dx9_36/tests/math.c @@ -4520,7 +4520,7 @@ static void test_D3DXSHProjectCubeMap(void) { hr = IDirect3DCubeTexture9_LockRect(texture, face, level, &map_desc, NULL, 0); ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr); - memset(map_desc.pBits, 0xcc, 4 * map_desc.Pitch); + memset(map_desc.pBits, 0xcc, (8 >> level) * map_desc.Pitch); hr = IDirect3DCubeTexture9_UnlockRect(texture, face, level); ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr); }
Signed-off-by: Matteo Bruni mbruni@codeweavers.com --- dlls/d3dx9_36/tests/math.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/dlls/d3dx9_36/tests/math.c b/dlls/d3dx9_36/tests/math.c index 2ed9131d788..501895665f7 100644 --- a/dlls/d3dx9_36/tests/math.c +++ b/dlls/d3dx9_36/tests/math.c @@ -3309,6 +3309,7 @@ static void test_D3DXFloat_Array(void) };
/* exception on NULL out or in parameter */ + single.f = 0.0f; out = D3DXFloat32To16Array(&half, &single.f, 0); ok(out == &half, "Got %p, expected %p.\n", out, &half);
Signed-off-by: Matteo Bruni mbruni@codeweavers.com --- dlls/d3dx9_36/tests/shader.c | 177 +++++++++++++++++------------------ 1 file changed, 85 insertions(+), 92 deletions(-)
diff --git a/dlls/d3dx9_36/tests/shader.c b/dlls/d3dx9_36/tests/shader.c index e2925faad69..a698afcb53b 100644 --- a/dlls/d3dx9_36/tests/shader.c +++ b/dlls/d3dx9_36/tests/shader.c @@ -403,11 +403,15 @@ static void test_find_shader_comment(void)
static void test_get_shader_constant_table_ex(void) { + D3DXCONSTANT_DESC constant_desc_save; ID3DXConstantTable *constant_table; + D3DXCONSTANT_DESC constant_desc; + D3DXCONSTANTTABLE_DESC desc; + D3DXHANDLE constant; HRESULT hr; void *data; DWORD size; - D3DXCONSTANTTABLE_DESC desc; + UINT nb;
constant_table = (ID3DXConstantTable *)0xdeadbeef; hr = D3DXGetShaderConstantTableEx(NULL, 0, &constant_table); @@ -453,115 +457,104 @@ static void test_get_shader_constant_table_ex(void) ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); ok(constant_table != NULL, "D3DXGetShaderConstantTableEx() failed, got NULL\n");
- if (constant_table) - { - size = ID3DXConstantTable_GetBufferSize(constant_table); - ok(size == 28, "Got result %x, expected 28\n", size); + size = ID3DXConstantTable_GetBufferSize(constant_table); + ok(size == 28, "Got result %x, expected 28\n", size);
- data = ID3DXConstantTable_GetBufferPointer(constant_table); - ok(!memcmp(data, shader_with_ctab + 6, size), "Retrieved wrong CTAB data\n"); + data = ID3DXConstantTable_GetBufferPointer(constant_table); + ok(!memcmp(data, shader_with_ctab + 6, size), "Retrieved wrong CTAB data\n");
- hr = ID3DXConstantTable_GetDesc(constant_table, NULL); - ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3DERR_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL); + hr = ID3DXConstantTable_GetDesc(constant_table, NULL); + ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3DERR_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
- hr = ID3DXConstantTable_GetDesc(constant_table, &desc); - ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); - ok(desc.Creator == (const char *)data + 0x10, "Got result %p, expected %p\n", - desc.Creator, (const char *)data + 0x10); - ok(desc.Version == D3DVS_VERSION(3, 0), "Got result %x, expected %x\n", desc.Version, D3DVS_VERSION(3, 0)); - ok(desc.Constants == 0, "Got result %x, expected 0\n", desc.Constants); + hr = ID3DXConstantTable_GetDesc(constant_table, &desc); + ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); + ok(desc.Creator == (const char *)data + 0x10, "Got result %p, expected %p\n", + desc.Creator, (const char *)data + 0x10); + ok(desc.Version == D3DVS_VERSION(3, 0), "Got result %x, expected %x\n", desc.Version, D3DVS_VERSION(3, 0)); + ok(desc.Constants == 0, "Got result %x, expected 0\n", desc.Constants);
- ID3DXConstantTable_Release(constant_table); - } + ID3DXConstantTable_Release(constant_table);
hr = D3DXGetShaderConstantTableEx(shader_with_ctab_constants, 0, &constant_table); ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); ok(constant_table != NULL, "D3DXGetShaderConstantTableEx() failed, got NULL\n");
- if (constant_table) - { - D3DXHANDLE constant; - D3DXCONSTANT_DESC constant_desc; - D3DXCONSTANT_DESC constant_desc_save; - UINT nb; - - /* Test GetDesc */ - hr = ID3DXConstantTable_GetDesc(constant_table, &desc); - ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); - ok(!strcmp(desc.Creator, "Wine project"), "Got result '%s', expected 'Wine project'\n", desc.Creator); - ok(desc.Version == D3DVS_VERSION(3, 0), "Got result %x, expected %x\n", desc.Version, D3DVS_VERSION(3, 0)); - ok(desc.Constants == 3, "Got result %x, expected 3\n", desc.Constants); - - /* Test GetConstant */ - constant = ID3DXConstantTable_GetConstant(constant_table, NULL, 0); - ok(constant != NULL, "No constant found\n"); - hr = ID3DXConstantTable_GetConstantDesc(constant_table, constant, &constant_desc, &nb); - ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); - ok(!strcmp(constant_desc.Name, "Constant1"), "Got result '%s', expected 'Constant1'\n", + /* Test GetDesc */ + hr = ID3DXConstantTable_GetDesc(constant_table, &desc); + ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); + ok(!strcmp(desc.Creator, "Wine project"), "Got result '%s', expected 'Wine project'\n", desc.Creator); + ok(desc.Version == D3DVS_VERSION(3, 0), "Got result %x, expected %x\n", desc.Version, D3DVS_VERSION(3, 0)); + ok(desc.Constants == 3, "Got result %x, expected 3\n", desc.Constants); + + /* Test GetConstant */ + constant = ID3DXConstantTable_GetConstant(constant_table, NULL, 0); + ok(constant != NULL, "No constant found\n"); + hr = ID3DXConstantTable_GetConstantDesc(constant_table, constant, &constant_desc, &nb); + ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); + ok(!strcmp(constant_desc.Name, "Constant1"), "Got result '%s', expected 'Constant1'\n", constant_desc.Name); - ok(constant_desc.Class == D3DXPC_VECTOR, "Got result %x, expected %u (D3DXPC_VECTOR)\n", + ok(constant_desc.Class == D3DXPC_VECTOR, "Got result %x, expected %u (D3DXPC_VECTOR)\n", constant_desc.Class, D3DXPC_VECTOR); - ok(constant_desc.Type == D3DXPT_FLOAT, "Got result %x, expected %u (D3DXPT_FLOAT)\n", + ok(constant_desc.Type == D3DXPT_FLOAT, "Got result %x, expected %u (D3DXPT_FLOAT)\n", constant_desc.Type, D3DXPT_FLOAT); - ok(constant_desc.Rows == 1, "Got result %x, expected 1\n", constant_desc.Rows); - ok(constant_desc.Columns == 4, "Got result %x, expected 4\n", constant_desc.Columns); - - constant = ID3DXConstantTable_GetConstant(constant_table, NULL, 1); - ok(constant != NULL, "No constant found\n"); - hr = ID3DXConstantTable_GetConstantDesc(constant_table, constant, &constant_desc, &nb); - ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); - ok(!strcmp(constant_desc.Name, "Constant2"), "Got result '%s', expected 'Constant2'\n", + ok(constant_desc.Rows == 1, "Got result %x, expected 1\n", constant_desc.Rows); + ok(constant_desc.Columns == 4, "Got result %x, expected 4\n", constant_desc.Columns); + + constant = ID3DXConstantTable_GetConstant(constant_table, NULL, 1); + ok(constant != NULL, "No constant found\n"); + hr = ID3DXConstantTable_GetConstantDesc(constant_table, constant, &constant_desc, &nb); + ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); + ok(!strcmp(constant_desc.Name, "Constant2"), "Got result '%s', expected 'Constant2'\n", constant_desc.Name); - ok(constant_desc.Class == D3DXPC_MATRIX_COLUMNS, "Got result %x, expected %u (D3DXPC_MATRIX_COLUMNS)\n", + ok(constant_desc.Class == D3DXPC_MATRIX_COLUMNS, "Got result %x, expected %u (D3DXPC_MATRIX_COLUMNS)\n", constant_desc.Class, D3DXPC_MATRIX_COLUMNS); - ok(constant_desc.Type == D3DXPT_FLOAT, "Got result %x, expected %u (D3DXPT_FLOAT)\n", + ok(constant_desc.Type == D3DXPT_FLOAT, "Got result %x, expected %u (D3DXPT_FLOAT)\n", constant_desc.Type, D3DXPT_FLOAT); - ok(constant_desc.Rows == 4, "Got result %x, expected 1\n", constant_desc.Rows); - ok(constant_desc.Columns == 4, "Got result %x, expected 4\n", constant_desc.Columns); - - constant = ID3DXConstantTable_GetConstant(constant_table, NULL, 2); - ok(constant != NULL, "No constant found\n"); - hr = ID3DXConstantTable_GetConstantDesc(constant_table, constant, &constant_desc, &nb); - ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); - ok(!strcmp(constant_desc.Name, "Constant3"), "Got result '%s', expected 'Constant3'\n", + ok(constant_desc.Rows == 4, "Got result %x, expected 1\n", constant_desc.Rows); + ok(constant_desc.Columns == 4, "Got result %x, expected 4\n", constant_desc.Columns); + + constant = ID3DXConstantTable_GetConstant(constant_table, NULL, 2); + ok(constant != NULL, "No constant found\n"); + hr = ID3DXConstantTable_GetConstantDesc(constant_table, constant, &constant_desc, &nb); + ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); + ok(!strcmp(constant_desc.Name, "Constant3"), "Got result '%s', expected 'Constant3'\n", constant_desc.Name); - ok(constant_desc.Class == D3DXPC_MATRIX_COLUMNS, "Got result %x, expected %u (D3DXPC_MATRIX_COLUMNS)\n", + ok(constant_desc.Class == D3DXPC_MATRIX_COLUMNS, "Got result %x, expected %u (D3DXPC_MATRIX_COLUMNS)\n", constant_desc.Class, D3DXPC_MATRIX_COLUMNS); - ok(constant_desc.Type == D3DXPT_FLOAT, "Got result %x, expected %u (D3DXPT_FLOAT)\n", + ok(constant_desc.Type == D3DXPT_FLOAT, "Got result %x, expected %u (D3DXPT_FLOAT)\n", constant_desc.Type, D3DXPT_FLOAT); - ok(constant_desc.Rows == 4, "Got result %x, expected 1\n", constant_desc.Rows); - ok(constant_desc.Columns == 4, "Got result %x, expected 4\n", constant_desc.Columns); - constant_desc_save = constant_desc; /* For GetConstantDesc test */ - - constant = ID3DXConstantTable_GetConstant(constant_table, NULL, 3); - ok(constant == NULL, "Got result %p, expected NULL\n", constant); - - /* Test GetConstantByName */ - constant = ID3DXConstantTable_GetConstantByName(constant_table, NULL, "Constant unknown"); - ok(constant == NULL, "Got result %p, expected NULL\n", constant); - constant = ID3DXConstantTable_GetConstantByName(constant_table, NULL, "Constant3"); - ok(constant != NULL, "No constant found\n"); - hr = ID3DXConstantTable_GetConstantDesc(constant_table, constant, &constant_desc, &nb); - ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); - ok(!memcmp(&constant_desc, &constant_desc_save, sizeof(D3DXCONSTANT_DESC)), "Got different constant data\n"); - - /* Test GetConstantDesc */ - constant = ID3DXConstantTable_GetConstant(constant_table, NULL, 0); - ok(constant != NULL, "No constant found\n"); - hr = ID3DXConstantTable_GetConstantDesc(constant_table, NULL, &constant_desc, &nb); - ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3DERR_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL); - hr = ID3DXConstantTable_GetConstantDesc(constant_table, constant, NULL, &nb); - ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); - hr = ID3DXConstantTable_GetConstantDesc(constant_table, constant, &constant_desc, NULL); - ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); - hr = ID3DXConstantTable_GetConstantDesc(constant_table, "Constant unknown", &constant_desc, &nb); - ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3DERR_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL); - hr = ID3DXConstantTable_GetConstantDesc(constant_table, "Constant3", &constant_desc, &nb); - ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); - ok(!memcmp(&constant_desc, &constant_desc_save, sizeof(D3DXCONSTANT_DESC)), "Got different constant data\n"); - - ID3DXConstantTable_Release(constant_table); - } + ok(constant_desc.Rows == 4, "Got result %x, expected 1\n", constant_desc.Rows); + ok(constant_desc.Columns == 4, "Got result %x, expected 4\n", constant_desc.Columns); + constant_desc_save = constant_desc; /* For GetConstantDesc test */ + + constant = ID3DXConstantTable_GetConstant(constant_table, NULL, 3); + ok(constant == NULL, "Got result %p, expected NULL\n", constant); + + /* Test GetConstantByName */ + constant = ID3DXConstantTable_GetConstantByName(constant_table, NULL, "Constant unknown"); + ok(constant == NULL, "Got result %p, expected NULL\n", constant); + constant = ID3DXConstantTable_GetConstantByName(constant_table, NULL, "Constant3"); + ok(constant != NULL, "No constant found\n"); + hr = ID3DXConstantTable_GetConstantDesc(constant_table, constant, &constant_desc, &nb); + ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); + ok(!memcmp(&constant_desc, &constant_desc_save, sizeof(D3DXCONSTANT_DESC)), "Got different constant data\n"); + + /* Test GetConstantDesc */ + constant = ID3DXConstantTable_GetConstant(constant_table, NULL, 0); + ok(constant != NULL, "No constant found\n"); + hr = ID3DXConstantTable_GetConstantDesc(constant_table, NULL, &constant_desc, &nb); + ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3DERR_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL); + hr = ID3DXConstantTable_GetConstantDesc(constant_table, constant, NULL, &nb); + ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); + hr = ID3DXConstantTable_GetConstantDesc(constant_table, constant, &constant_desc, NULL); + ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); + hr = ID3DXConstantTable_GetConstantDesc(constant_table, "Constant unknown", &constant_desc, &nb); + ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3DERR_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL); + hr = ID3DXConstantTable_GetConstantDesc(constant_table, "Constant3", &constant_desc, &nb); + ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); + ok(!memcmp(&constant_desc, &constant_desc_save, sizeof(D3DXCONSTANT_DESC)), "Got different constant data\n"); + + ID3DXConstantTable_Release(constant_table);
hr = D3DXGetShaderConstantTableEx(fx_shader_with_ctab, 0, &constant_table); ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
Signed-off-by: Matteo Bruni mbruni@codeweavers.com --- dlls/d3dx9_36/d3dx9_private.h | 1 - dlls/d3dx9_36/effect.c | 10 +- dlls/d3dx9_36/math.c | 772 +++++++++++++++++----------------- dlls/d3dx9_36/mesh.c | 38 +- 4 files changed, 412 insertions(+), 409 deletions(-)
diff --git a/dlls/d3dx9_36/d3dx9_private.h b/dlls/d3dx9_36/d3dx9_private.h index 2d286b04694..6972c1d0ce0 100644 --- a/dlls/d3dx9_36/d3dx9_private.h +++ b/dlls/d3dx9_36/d3dx9_private.h @@ -23,7 +23,6 @@ #define __WINE_D3DX9_PRIVATE_H
#include <stdint.h> -#define NONAMELESSUNION #include "wine/debug.h" #include "wine/heap.h" #include "wine/rbtree.h" diff --git a/dlls/d3dx9_36/effect.c b/dlls/d3dx9_36/effect.c index bbfb73d64c3..db95e6b592b 100644 --- a/dlls/d3dx9_36/effect.c +++ b/dlls/d3dx9_36/effect.c @@ -826,7 +826,7 @@ static void get_matrix(struct d3dx_parameter *param, D3DXMATRIX *matrix, BOOL tr { for (k = 0; k < 4; ++k) { - FLOAT *tmp = transpose ? (FLOAT *)&matrix->u.m[k][i] : (FLOAT *)&matrix->u.m[i][k]; + FLOAT *tmp = transpose ? (FLOAT *)&matrix->m[k][i] : (FLOAT *)&matrix->m[i][k];
if ((i < param->rows) && (k < param->columns)) set_number(tmp, D3DXPT_FLOAT, (DWORD *)param->data + i * param->columns + k, param->type); @@ -844,12 +844,12 @@ static void set_matrix(struct d3dx_parameter *param, const D3DXMATRIX *matrix, v { if (param->columns == 4) { - memcpy(dst_data, matrix->u.m, param->rows * 4 * sizeof(float)); + memcpy(dst_data, matrix->m, param->rows * 4 * sizeof(float)); } else { for (i = 0; i < param->rows; ++i) - memcpy((float *)dst_data + i * param->columns, matrix->u.m + i, param->columns * sizeof(float)); + memcpy((float *)dst_data + i * param->columns, matrix->m + i, param->columns * sizeof(float)); } return; } @@ -858,7 +858,7 @@ static void set_matrix(struct d3dx_parameter *param, const D3DXMATRIX *matrix, v { for (k = 0; k < param->columns; ++k) set_number((FLOAT *)dst_data + i * param->columns + k, param->type, - &matrix->u.m[i][k], D3DXPT_FLOAT); + &matrix->m[i][k], D3DXPT_FLOAT); } }
@@ -871,7 +871,7 @@ static void set_matrix_transpose(struct d3dx_parameter *param, const D3DXMATRIX for (k = 0; k < param->columns; ++k) { set_number((FLOAT *)dst_data + i * param->columns + k, param->type, - &matrix->u.m[k][i], D3DXPT_FLOAT); + &matrix->m[k][i], D3DXPT_FLOAT); } } } diff --git a/dlls/d3dx9_36/math.c b/dlls/d3dx9_36/math.c index 80f357e00e9..b6f0bed38ad 100644 --- a/dlls/d3dx9_36/math.c +++ b/dlls/d3dx9_36/math.c @@ -109,38 +109,38 @@ D3DXMATRIX * WINAPI D3DXMatrixAffineTransformation(D3DXMATRIX *out, FLOAT scalin temp21 = 2.0f * (rotation->y * rotation->z - rotation->x * rotation->w); temp22 = 1.0f - 2.0f * (rotation->x * rotation->x + rotation->y * rotation->y);
- out->u.m[0][0] = scaling * temp00; - out->u.m[0][1] = scaling * temp01; - out->u.m[0][2] = scaling * temp02; - out->u.m[1][0] = scaling * temp10; - out->u.m[1][1] = scaling * temp11; - out->u.m[1][2] = scaling * temp12; - out->u.m[2][0] = scaling * temp20; - out->u.m[2][1] = scaling * temp21; - out->u.m[2][2] = scaling * temp22; + out->m[0][0] = scaling * temp00; + out->m[0][1] = scaling * temp01; + out->m[0][2] = scaling * temp02; + out->m[1][0] = scaling * temp10; + out->m[1][1] = scaling * temp11; + out->m[1][2] = scaling * temp12; + out->m[2][0] = scaling * temp20; + out->m[2][1] = scaling * temp21; + out->m[2][2] = scaling * temp22;
if (rotationcenter) { - out->u.m[3][0] = rotationcenter->x * (1.0f - temp00) - rotationcenter->y * temp10 + out->m[3][0] = rotationcenter->x * (1.0f - temp00) - rotationcenter->y * temp10 - rotationcenter->z * temp20; - out->u.m[3][1] = rotationcenter->y * (1.0f - temp11) - rotationcenter->x * temp01 + out->m[3][1] = rotationcenter->y * (1.0f - temp11) - rotationcenter->x * temp01 - rotationcenter->z * temp21; - out->u.m[3][2] = rotationcenter->z * (1.0f - temp22) - rotationcenter->x * temp02 + out->m[3][2] = rotationcenter->z * (1.0f - temp22) - rotationcenter->x * temp02 - rotationcenter->y * temp12; } } else { - out->u.m[0][0] = scaling; - out->u.m[1][1] = scaling; - out->u.m[2][2] = scaling; + out->m[0][0] = scaling; + out->m[1][1] = scaling; + out->m[2][2] = scaling; }
if (translation) { - out->u.m[3][0] += translation->x; - out->u.m[3][1] += translation->y; - out->u.m[3][2] += translation->z; + out->m[3][0] += translation->x; + out->m[3][1] += translation->y; + out->m[3][2] += translation->z; }
return out; @@ -159,10 +159,10 @@ D3DXMATRIX * WINAPI D3DXMatrixAffineTransformation2D(D3DXMATRIX *out, FLOAT scal tmp2 = 2.0f * s * cosf(rotation / 2.0f);
D3DXMatrixIdentity(out); - out->u.m[0][0] = scaling * tmp1; - out->u.m[0][1] = scaling * tmp2; - out->u.m[1][0] = -scaling * tmp2; - out->u.m[1][1] = scaling * tmp1; + out->m[0][0] = scaling * tmp1; + out->m[0][1] = scaling * tmp2; + out->m[1][0] = -scaling * tmp2; + out->m[1][1] = scaling * tmp1;
if (rotationcenter) { @@ -171,14 +171,14 @@ D3DXMATRIX * WINAPI D3DXMatrixAffineTransformation2D(D3DXMATRIX *out, FLOAT scal x = rotationcenter->x; y = rotationcenter->y;
- out->u.m[3][0] = y * tmp2 - x * tmp1 + x; - out->u.m[3][1] = -x * tmp2 - y * tmp1 + y; + out->m[3][0] = y * tmp2 - x * tmp1 + x; + out->m[3][1] = -x * tmp2 - y * tmp1 + y; }
if (translation) { - out->u.m[3][0] += translation->x; - out->u.m[3][1] += translation->y; + out->m[3][0] += translation->x; + out->m[3][1] += translation->y; }
return out; @@ -192,38 +192,38 @@ HRESULT WINAPI D3DXMatrixDecompose(D3DXVECTOR3 *poutscale, D3DXQUATERNION *poutr TRACE("poutscale %p, poutrotation %p, pouttranslation %p, pm %p\n", poutscale, poutrotation, pouttranslation, pm);
/*Compute the scaling part.*/ - vec.x=pm->u.m[0][0]; - vec.y=pm->u.m[0][1]; - vec.z=pm->u.m[0][2]; - poutscale->x=D3DXVec3Length(&vec); + vec.x = pm->m[0][0]; + vec.y = pm->m[0][1]; + vec.z = pm->m[0][2]; + poutscale->x = D3DXVec3Length(&vec);
- vec.x=pm->u.m[1][0]; - vec.y=pm->u.m[1][1]; - vec.z=pm->u.m[1][2]; - poutscale->y=D3DXVec3Length(&vec); + vec.x = pm->m[1][0]; + vec.y = pm->m[1][1]; + vec.z = pm->m[1][2]; + poutscale->y = D3DXVec3Length(&vec);
- vec.x=pm->u.m[2][0]; - vec.y=pm->u.m[2][1]; - vec.z=pm->u.m[2][2]; - poutscale->z=D3DXVec3Length(&vec); + vec.x = pm->m[2][0]; + vec.y = pm->m[2][1]; + vec.z = pm->m[2][2]; + poutscale->z = D3DXVec3Length(&vec);
/*Compute the translation part.*/ - pouttranslation->x=pm->u.m[3][0]; - pouttranslation->y=pm->u.m[3][1]; - pouttranslation->z=pm->u.m[3][2]; + pouttranslation->x = pm->m[3][0]; + pouttranslation->y = pm->m[3][1]; + pouttranslation->z = pm->m[3][2];
/*Let's calculate the rotation now*/ if ( (poutscale->x == 0.0f) || (poutscale->y == 0.0f) || (poutscale->z == 0.0f) ) return D3DERR_INVALIDCALL;
- normalized.u.m[0][0]=pm->u.m[0][0]/poutscale->x; - normalized.u.m[0][1]=pm->u.m[0][1]/poutscale->x; - normalized.u.m[0][2]=pm->u.m[0][2]/poutscale->x; - normalized.u.m[1][0]=pm->u.m[1][0]/poutscale->y; - normalized.u.m[1][1]=pm->u.m[1][1]/poutscale->y; - normalized.u.m[1][2]=pm->u.m[1][2]/poutscale->y; - normalized.u.m[2][0]=pm->u.m[2][0]/poutscale->z; - normalized.u.m[2][1]=pm->u.m[2][1]/poutscale->z; - normalized.u.m[2][2]=pm->u.m[2][2]/poutscale->z; + normalized.m[0][0] = pm->m[0][0]/poutscale->x; + normalized.m[0][1] = pm->m[0][1]/poutscale->x; + normalized.m[0][2] = pm->m[0][2]/poutscale->x; + normalized.m[1][0] = pm->m[1][0]/poutscale->y; + normalized.m[1][1] = pm->m[1][1]/poutscale->y; + normalized.m[1][2] = pm->m[1][2]/poutscale->y; + normalized.m[2][0] = pm->m[2][0]/poutscale->z; + normalized.m[2][1] = pm->m[2][1]/poutscale->z; + normalized.m[2][2] = pm->m[2][2]/poutscale->z;
D3DXQuaternionRotationMatrix(poutrotation,&normalized); return S_OK; @@ -235,20 +235,20 @@ FLOAT WINAPI D3DXMatrixDeterminant(const D3DXMATRIX *pm)
TRACE("pm %p\n", pm);
- t[0] = pm->u.m[2][2] * pm->u.m[3][3] - pm->u.m[2][3] * pm->u.m[3][2]; - t[1] = pm->u.m[1][2] * pm->u.m[3][3] - pm->u.m[1][3] * pm->u.m[3][2]; - t[2] = pm->u.m[1][2] * pm->u.m[2][3] - pm->u.m[1][3] * pm->u.m[2][2]; - v[0] = pm->u.m[1][1] * t[0] - pm->u.m[2][1] * t[1] + pm->u.m[3][1] * t[2]; - v[1] = -pm->u.m[1][0] * t[0] + pm->u.m[2][0] * t[1] - pm->u.m[3][0] * t[2]; + t[0] = pm->m[2][2] * pm->m[3][3] - pm->m[2][3] * pm->m[3][2]; + t[1] = pm->m[1][2] * pm->m[3][3] - pm->m[1][3] * pm->m[3][2]; + t[2] = pm->m[1][2] * pm->m[2][3] - pm->m[1][3] * pm->m[2][2]; + v[0] = pm->m[1][1] * t[0] - pm->m[2][1] * t[1] + pm->m[3][1] * t[2]; + v[1] = -pm->m[1][0] * t[0] + pm->m[2][0] * t[1] - pm->m[3][0] * t[2];
- t[0] = pm->u.m[1][0] * pm->u.m[2][1] - pm->u.m[2][0] * pm->u.m[1][1]; - t[1] = pm->u.m[1][0] * pm->u.m[3][1] - pm->u.m[3][0] * pm->u.m[1][1]; - t[2] = pm->u.m[2][0] * pm->u.m[3][1] - pm->u.m[3][0] * pm->u.m[2][1]; - v[2] = pm->u.m[3][3] * t[0] - pm->u.m[2][3] * t[1] + pm->u.m[1][3] * t[2]; - v[3] = -pm->u.m[3][2] * t[0] + pm->u.m[2][2] * t[1] - pm->u.m[1][2] * t[2]; + t[0] = pm->m[1][0] * pm->m[2][1] - pm->m[2][0] * pm->m[1][1]; + t[1] = pm->m[1][0] * pm->m[3][1] - pm->m[3][0] * pm->m[1][1]; + t[2] = pm->m[2][0] * pm->m[3][1] - pm->m[3][0] * pm->m[2][1]; + v[2] = pm->m[3][3] * t[0] - pm->m[2][3] * t[1] + pm->m[1][3] * t[2]; + v[3] = -pm->m[3][2] * t[0] + pm->m[2][2] * t[1] - pm->m[1][2] * t[2];
- return pm->u.m[0][0] * v[0] + pm->u.m[0][1] * v[1] + - pm->u.m[0][2] * v[2] + pm->u.m[0][3] * v[3]; + return pm->m[0][0] * v[0] + pm->m[0][1] * v[1] + + pm->m[0][2] * v[2] + pm->m[0][3] * v[3]; }
D3DXMATRIX* WINAPI D3DXMatrixInverse(D3DXMATRIX *pout, FLOAT *pdeterminant, const D3DXMATRIX *pm) @@ -258,68 +258,68 @@ D3DXMATRIX* WINAPI D3DXMatrixInverse(D3DXMATRIX *pout, FLOAT *pdeterminant, cons
TRACE("pout %p, pdeterminant %p, pm %p\n", pout, pdeterminant, pm);
- t[0] = pm->u.m[2][2] * pm->u.m[3][3] - pm->u.m[2][3] * pm->u.m[3][2]; - t[1] = pm->u.m[1][2] * pm->u.m[3][3] - pm->u.m[1][3] * pm->u.m[3][2]; - t[2] = pm->u.m[1][2] * pm->u.m[2][3] - pm->u.m[1][3] * pm->u.m[2][2]; - v[0] = pm->u.m[1][1] * t[0] - pm->u.m[2][1] * t[1] + pm->u.m[3][1] * t[2]; - v[4] = -pm->u.m[1][0] * t[0] + pm->u.m[2][0] * t[1] - pm->u.m[3][0] * t[2]; + t[0] = pm->m[2][2] * pm->m[3][3] - pm->m[2][3] * pm->m[3][2]; + t[1] = pm->m[1][2] * pm->m[3][3] - pm->m[1][3] * pm->m[3][2]; + t[2] = pm->m[1][2] * pm->m[2][3] - pm->m[1][3] * pm->m[2][2]; + v[0] = pm->m[1][1] * t[0] - pm->m[2][1] * t[1] + pm->m[3][1] * t[2]; + v[4] = -pm->m[1][0] * t[0] + pm->m[2][0] * t[1] - pm->m[3][0] * t[2];
- t[0] = pm->u.m[1][0] * pm->u.m[2][1] - pm->u.m[2][0] * pm->u.m[1][1]; - t[1] = pm->u.m[1][0] * pm->u.m[3][1] - pm->u.m[3][0] * pm->u.m[1][1]; - t[2] = pm->u.m[2][0] * pm->u.m[3][1] - pm->u.m[3][0] * pm->u.m[2][1]; - v[8] = pm->u.m[3][3] * t[0] - pm->u.m[2][3] * t[1] + pm->u.m[1][3] * t[2]; - v[12] = -pm->u.m[3][2] * t[0] + pm->u.m[2][2] * t[1] - pm->u.m[1][2] * t[2]; + t[0] = pm->m[1][0] * pm->m[2][1] - pm->m[2][0] * pm->m[1][1]; + t[1] = pm->m[1][0] * pm->m[3][1] - pm->m[3][0] * pm->m[1][1]; + t[2] = pm->m[2][0] * pm->m[3][1] - pm->m[3][0] * pm->m[2][1]; + v[8] = pm->m[3][3] * t[0] - pm->m[2][3] * t[1] + pm->m[1][3] * t[2]; + v[12] = -pm->m[3][2] * t[0] + pm->m[2][2] * t[1] - pm->m[1][2] * t[2];
- det = pm->u.m[0][0] * v[0] + pm->u.m[0][1] * v[4] + - pm->u.m[0][2] * v[8] + pm->u.m[0][3] * v[12]; + det = pm->m[0][0] * v[0] + pm->m[0][1] * v[4] + + pm->m[0][2] * v[8] + pm->m[0][3] * v[12]; if (det == 0.0f) return NULL; if (pdeterminant) *pdeterminant = det;
- t[0] = pm->u.m[2][2] * pm->u.m[3][3] - pm->u.m[2][3] * pm->u.m[3][2]; - t[1] = pm->u.m[0][2] * pm->u.m[3][3] - pm->u.m[0][3] * pm->u.m[3][2]; - t[2] = pm->u.m[0][2] * pm->u.m[2][3] - pm->u.m[0][3] * pm->u.m[2][2]; - v[1] = -pm->u.m[0][1] * t[0] + pm->u.m[2][1] * t[1] - pm->u.m[3][1] * t[2]; - v[5] = pm->u.m[0][0] * t[0] - pm->u.m[2][0] * t[1] + pm->u.m[3][0] * t[2]; - - t[0] = pm->u.m[0][0] * pm->u.m[2][1] - pm->u.m[2][0] * pm->u.m[0][1]; - t[1] = pm->u.m[3][0] * pm->u.m[0][1] - pm->u.m[0][0] * pm->u.m[3][1]; - t[2] = pm->u.m[2][0] * pm->u.m[3][1] - pm->u.m[3][0] * pm->u.m[2][1]; - v[9] = -pm->u.m[3][3] * t[0] - pm->u.m[2][3] * t[1]- pm->u.m[0][3] * t[2]; - v[13] = pm->u.m[3][2] * t[0] + pm->u.m[2][2] * t[1] + pm->u.m[0][2] * t[2]; - - t[0] = pm->u.m[1][2] * pm->u.m[3][3] - pm->u.m[1][3] * pm->u.m[3][2]; - t[1] = pm->u.m[0][2] * pm->u.m[3][3] - pm->u.m[0][3] * pm->u.m[3][2]; - t[2] = pm->u.m[0][2] * pm->u.m[1][3] - pm->u.m[0][3] * pm->u.m[1][2]; - v[2] = pm->u.m[0][1] * t[0] - pm->u.m[1][1] * t[1] + pm->u.m[3][1] * t[2]; - v[6] = -pm->u.m[0][0] * t[0] + pm->u.m[1][0] * t[1] - pm->u.m[3][0] * t[2]; - - t[0] = pm->u.m[0][0] * pm->u.m[1][1] - pm->u.m[1][0] * pm->u.m[0][1]; - t[1] = pm->u.m[3][0] * pm->u.m[0][1] - pm->u.m[0][0] * pm->u.m[3][1]; - t[2] = pm->u.m[1][0] * pm->u.m[3][1] - pm->u.m[3][0] * pm->u.m[1][1]; - v[10] = pm->u.m[3][3] * t[0] + pm->u.m[1][3] * t[1] + pm->u.m[0][3] * t[2]; - v[14] = -pm->u.m[3][2] * t[0] - pm->u.m[1][2] * t[1] - pm->u.m[0][2] * t[2]; - - t[0] = pm->u.m[1][2] * pm->u.m[2][3] - pm->u.m[1][3] * pm->u.m[2][2]; - t[1] = pm->u.m[0][2] * pm->u.m[2][3] - pm->u.m[0][3] * pm->u.m[2][2]; - t[2] = pm->u.m[0][2] * pm->u.m[1][3] - pm->u.m[0][3] * pm->u.m[1][2]; - v[3] = -pm->u.m[0][1] * t[0] + pm->u.m[1][1] * t[1] - pm->u.m[2][1] * t[2]; - v[7] = pm->u.m[0][0] * t[0] - pm->u.m[1][0] * t[1] + pm->u.m[2][0] * t[2]; - - v[11] = -pm->u.m[0][0] * (pm->u.m[1][1] * pm->u.m[2][3] - pm->u.m[1][3] * pm->u.m[2][1]) + - pm->u.m[1][0] * (pm->u.m[0][1] * pm->u.m[2][3] - pm->u.m[0][3] * pm->u.m[2][1]) - - pm->u.m[2][0] * (pm->u.m[0][1] * pm->u.m[1][3] - pm->u.m[0][3] * pm->u.m[1][1]); - - v[15] = pm->u.m[0][0] * (pm->u.m[1][1] * pm->u.m[2][2] - pm->u.m[1][2] * pm->u.m[2][1]) - - pm->u.m[1][0] * (pm->u.m[0][1] * pm->u.m[2][2] - pm->u.m[0][2] * pm->u.m[2][1]) + - pm->u.m[2][0] * (pm->u.m[0][1] * pm->u.m[1][2] - pm->u.m[0][2] * pm->u.m[1][1]); + t[0] = pm->m[2][2] * pm->m[3][3] - pm->m[2][3] * pm->m[3][2]; + t[1] = pm->m[0][2] * pm->m[3][3] - pm->m[0][3] * pm->m[3][2]; + t[2] = pm->m[0][2] * pm->m[2][3] - pm->m[0][3] * pm->m[2][2]; + v[1] = -pm->m[0][1] * t[0] + pm->m[2][1] * t[1] - pm->m[3][1] * t[2]; + v[5] = pm->m[0][0] * t[0] - pm->m[2][0] * t[1] + pm->m[3][0] * t[2]; + + t[0] = pm->m[0][0] * pm->m[2][1] - pm->m[2][0] * pm->m[0][1]; + t[1] = pm->m[3][0] * pm->m[0][1] - pm->m[0][0] * pm->m[3][1]; + t[2] = pm->m[2][0] * pm->m[3][1] - pm->m[3][0] * pm->m[2][1]; + v[9] = -pm->m[3][3] * t[0] - pm->m[2][3] * t[1]- pm->m[0][3] * t[2]; + v[13] = pm->m[3][2] * t[0] + pm->m[2][2] * t[1] + pm->m[0][2] * t[2]; + + t[0] = pm->m[1][2] * pm->m[3][3] - pm->m[1][3] * pm->m[3][2]; + t[1] = pm->m[0][2] * pm->m[3][3] - pm->m[0][3] * pm->m[3][2]; + t[2] = pm->m[0][2] * pm->m[1][3] - pm->m[0][3] * pm->m[1][2]; + v[2] = pm->m[0][1] * t[0] - pm->m[1][1] * t[1] + pm->m[3][1] * t[2]; + v[6] = -pm->m[0][0] * t[0] + pm->m[1][0] * t[1] - pm->m[3][0] * t[2]; + + t[0] = pm->m[0][0] * pm->m[1][1] - pm->m[1][0] * pm->m[0][1]; + t[1] = pm->m[3][0] * pm->m[0][1] - pm->m[0][0] * pm->m[3][1]; + t[2] = pm->m[1][0] * pm->m[3][1] - pm->m[3][0] * pm->m[1][1]; + v[10] = pm->m[3][3] * t[0] + pm->m[1][3] * t[1] + pm->m[0][3] * t[2]; + v[14] = -pm->m[3][2] * t[0] - pm->m[1][2] * t[1] - pm->m[0][2] * t[2]; + + t[0] = pm->m[1][2] * pm->m[2][3] - pm->m[1][3] * pm->m[2][2]; + t[1] = pm->m[0][2] * pm->m[2][3] - pm->m[0][3] * pm->m[2][2]; + t[2] = pm->m[0][2] * pm->m[1][3] - pm->m[0][3] * pm->m[1][2]; + v[3] = -pm->m[0][1] * t[0] + pm->m[1][1] * t[1] - pm->m[2][1] * t[2]; + v[7] = pm->m[0][0] * t[0] - pm->m[1][0] * t[1] + pm->m[2][0] * t[2]; + + v[11] = -pm->m[0][0] * (pm->m[1][1] * pm->m[2][3] - pm->m[1][3] * pm->m[2][1]) + + pm->m[1][0] * (pm->m[0][1] * pm->m[2][3] - pm->m[0][3] * pm->m[2][1]) - + pm->m[2][0] * (pm->m[0][1] * pm->m[1][3] - pm->m[0][3] * pm->m[1][1]); + + v[15] = pm->m[0][0] * (pm->m[1][1] * pm->m[2][2] - pm->m[1][2] * pm->m[2][1]) - + pm->m[1][0] * (pm->m[0][1] * pm->m[2][2] - pm->m[0][2] * pm->m[2][1]) + + pm->m[2][0] * (pm->m[0][1] * pm->m[1][2] - pm->m[0][2] * pm->m[1][1]);
det = 1.0f / det;
for (i = 0; i < 4; i++) for (j = 0; j < 4; j++) - pout->u.m[i][j] = v[4 * i + j] * det; + pout->m[i][j] = v[4 * i + j] * det;
return pout; } @@ -337,22 +337,22 @@ D3DXMATRIX * WINAPI D3DXMatrixLookAtLH(D3DXMATRIX *out, const D3DXVECTOR3 *eye, D3DXVec3Cross(&upn, &vec, &right); D3DXVec3Normalize(&right, &right); D3DXVec3Normalize(&upn, &upn); - out->u.m[0][0] = right.x; - out->u.m[1][0] = right.y; - out->u.m[2][0] = right.z; - out->u.m[3][0] = -D3DXVec3Dot(&right, eye); - out->u.m[0][1] = upn.x; - out->u.m[1][1] = upn.y; - out->u.m[2][1] = upn.z; - out->u.m[3][1] = -D3DXVec3Dot(&upn, eye); - out->u.m[0][2] = vec.x; - out->u.m[1][2] = vec.y; - out->u.m[2][2] = vec.z; - out->u.m[3][2] = -D3DXVec3Dot(&vec, eye); - out->u.m[0][3] = 0.0f; - out->u.m[1][3] = 0.0f; - out->u.m[2][3] = 0.0f; - out->u.m[3][3] = 1.0f; + out->m[0][0] = right.x; + out->m[1][0] = right.y; + out->m[2][0] = right.z; + out->m[3][0] = -D3DXVec3Dot(&right, eye); + out->m[0][1] = upn.x; + out->m[1][1] = upn.y; + out->m[2][1] = upn.z; + out->m[3][1] = -D3DXVec3Dot(&upn, eye); + out->m[0][2] = vec.x; + out->m[1][2] = vec.y; + out->m[2][2] = vec.z; + out->m[3][2] = -D3DXVec3Dot(&vec, eye); + out->m[0][3] = 0.0f; + out->m[1][3] = 0.0f; + out->m[2][3] = 0.0f; + out->m[3][3] = 1.0f;
return out; } @@ -370,22 +370,22 @@ D3DXMATRIX * WINAPI D3DXMatrixLookAtRH(D3DXMATRIX *out, const D3DXVECTOR3 *eye, D3DXVec3Cross(&upn, &vec, &right); D3DXVec3Normalize(&right, &right); D3DXVec3Normalize(&upn, &upn); - out->u.m[0][0] = -right.x; - out->u.m[1][0] = -right.y; - out->u.m[2][0] = -right.z; - out->u.m[3][0] = D3DXVec3Dot(&right, eye); - out->u.m[0][1] = upn.x; - out->u.m[1][1] = upn.y; - out->u.m[2][1] = upn.z; - out->u.m[3][1] = -D3DXVec3Dot(&upn, eye); - out->u.m[0][2] = -vec.x; - out->u.m[1][2] = -vec.y; - out->u.m[2][2] = -vec.z; - out->u.m[3][2] = D3DXVec3Dot(&vec, eye); - out->u.m[0][3] = 0.0f; - out->u.m[1][3] = 0.0f; - out->u.m[2][3] = 0.0f; - out->u.m[3][3] = 1.0f; + out->m[0][0] = -right.x; + out->m[1][0] = -right.y; + out->m[2][0] = -right.z; + out->m[3][0] = D3DXVec3Dot(&right, eye); + out->m[0][1] = upn.x; + out->m[1][1] = upn.y; + out->m[2][1] = upn.z; + out->m[3][1] = -D3DXVec3Dot(&upn, eye); + out->m[0][2] = -vec.x; + out->m[1][2] = -vec.y; + out->m[2][2] = -vec.z; + out->m[3][2] = D3DXVec3Dot(&vec, eye); + out->m[0][3] = 0.0f; + out->m[1][3] = 0.0f; + out->m[2][3] = 0.0f; + out->m[3][3] = 1.0f;
return out; } @@ -401,7 +401,7 @@ D3DXMATRIX* WINAPI D3DXMatrixMultiply(D3DXMATRIX *pout, const D3DXMATRIX *pm1, c { for (j=0; j<4; j++) { - out.u.m[i][j] = pm1->u.m[i][0] * pm2->u.m[0][j] + pm1->u.m[i][1] * pm2->u.m[1][j] + pm1->u.m[i][2] * pm2->u.m[2][j] + pm1->u.m[i][3] * pm2->u.m[3][j]; + out.m[i][j] = pm1->m[i][0] * pm2->m[0][j] + pm1->m[i][1] * pm2->m[1][j] + pm1->m[i][2] * pm2->m[2][j] + pm1->m[i][3] * pm2->m[3][j]; } }
@@ -418,7 +418,7 @@ D3DXMATRIX* WINAPI D3DXMatrixMultiplyTranspose(D3DXMATRIX *pout, const D3DXMATRI
for (i = 0; i < 4; i++) for (j = 0; j < 4; j++) - temp.u.m[j][i] = pm1->u.m[i][0] * pm2->u.m[0][j] + pm1->u.m[i][1] * pm2->u.m[1][j] + pm1->u.m[i][2] * pm2->u.m[2][j] + pm1->u.m[i][3] * pm2->u.m[3][j]; + temp.m[j][i] = pm1->m[i][0] * pm2->m[0][j] + pm1->m[i][1] * pm2->m[1][j] + pm1->m[i][2] * pm2->m[2][j] + pm1->m[i][3] * pm2->m[3][j];
*pout = temp; return pout; @@ -429,10 +429,10 @@ D3DXMATRIX* WINAPI D3DXMatrixOrthoLH(D3DXMATRIX *pout, FLOAT w, FLOAT h, FLOAT z TRACE("pout %p, w %f, h %f, zn %f, zf %f\n", pout, w, h, zn, zf);
D3DXMatrixIdentity(pout); - pout->u.m[0][0] = 2.0f / w; - pout->u.m[1][1] = 2.0f / h; - pout->u.m[2][2] = 1.0f / (zf - zn); - pout->u.m[3][2] = zn / (zn - zf); + pout->m[0][0] = 2.0f / w; + pout->m[1][1] = 2.0f / h; + pout->m[2][2] = 1.0f / (zf - zn); + pout->m[3][2] = zn / (zn - zf); return pout; }
@@ -441,12 +441,12 @@ D3DXMATRIX* WINAPI D3DXMatrixOrthoOffCenterLH(D3DXMATRIX *pout, FLOAT l, FLOAT r TRACE("pout %p, l %f, r %f, b %f, t %f, zn %f, zf %f\n", pout, l, r, b, t, zn, zf);
D3DXMatrixIdentity(pout); - pout->u.m[0][0] = 2.0f / (r - l); - pout->u.m[1][1] = 2.0f / (t - b); - pout->u.m[2][2] = 1.0f / (zf -zn); - pout->u.m[3][0] = -1.0f -2.0f *l / (r - l); - pout->u.m[3][1] = 1.0f + 2.0f * t / (b - t); - pout->u.m[3][2] = zn / (zn -zf); + pout->m[0][0] = 2.0f / (r - l); + pout->m[1][1] = 2.0f / (t - b); + pout->m[2][2] = 1.0f / (zf -zn); + pout->m[3][0] = -1.0f -2.0f *l / (r - l); + pout->m[3][1] = 1.0f + 2.0f * t / (b - t); + pout->m[3][2] = zn / (zn -zf); return pout; }
@@ -455,12 +455,12 @@ D3DXMATRIX* WINAPI D3DXMatrixOrthoOffCenterRH(D3DXMATRIX *pout, FLOAT l, FLOAT r TRACE("pout %p, l %f, r %f, b %f, t %f, zn %f, zf %f\n", pout, l, r, b, t, zn, zf);
D3DXMatrixIdentity(pout); - pout->u.m[0][0] = 2.0f / (r - l); - pout->u.m[1][1] = 2.0f / (t - b); - pout->u.m[2][2] = 1.0f / (zn -zf); - pout->u.m[3][0] = -1.0f -2.0f *l / (r - l); - pout->u.m[3][1] = 1.0f + 2.0f * t / (b - t); - pout->u.m[3][2] = zn / (zn -zf); + pout->m[0][0] = 2.0f / (r - l); + pout->m[1][1] = 2.0f / (t - b); + pout->m[2][2] = 1.0f / (zn -zf); + pout->m[3][0] = -1.0f -2.0f *l / (r - l); + pout->m[3][1] = 1.0f + 2.0f * t / (b - t); + pout->m[3][2] = zn / (zn -zf); return pout; }
@@ -469,10 +469,10 @@ D3DXMATRIX* WINAPI D3DXMatrixOrthoRH(D3DXMATRIX *pout, FLOAT w, FLOAT h, FLOAT z TRACE("pout %p, w %f, h %f, zn %f, zf %f\n", pout, w, h, zn, zf);
D3DXMatrixIdentity(pout); - pout->u.m[0][0] = 2.0f / w; - pout->u.m[1][1] = 2.0f / h; - pout->u.m[2][2] = 1.0f / (zn - zf); - pout->u.m[3][2] = zn / (zn - zf); + pout->m[0][0] = 2.0f / w; + pout->m[1][1] = 2.0f / h; + pout->m[2][2] = 1.0f / (zn - zf); + pout->m[3][2] = zn / (zn - zf); return pout; }
@@ -481,12 +481,12 @@ D3DXMATRIX* WINAPI D3DXMatrixPerspectiveFovLH(D3DXMATRIX *pout, FLOAT fovy, FLOA TRACE("pout %p, fovy %f, aspect %f, zn %f, zf %f\n", pout, fovy, aspect, zn, zf);
D3DXMatrixIdentity(pout); - pout->u.m[0][0] = 1.0f / (aspect * tanf(fovy/2.0f)); - pout->u.m[1][1] = 1.0f / tanf(fovy/2.0f); - pout->u.m[2][2] = zf / (zf - zn); - pout->u.m[2][3] = 1.0f; - pout->u.m[3][2] = (zf * zn) / (zn - zf); - pout->u.m[3][3] = 0.0f; + pout->m[0][0] = 1.0f / (aspect * tanf(fovy/2.0f)); + pout->m[1][1] = 1.0f / tanf(fovy/2.0f); + pout->m[2][2] = zf / (zf - zn); + pout->m[2][3] = 1.0f; + pout->m[3][2] = (zf * zn) / (zn - zf); + pout->m[3][3] = 0.0f; return pout; }
@@ -495,12 +495,12 @@ D3DXMATRIX* WINAPI D3DXMatrixPerspectiveFovRH(D3DXMATRIX *pout, FLOAT fovy, FLOA TRACE("pout %p, fovy %f, aspect %f, zn %f, zf %f\n", pout, fovy, aspect, zn, zf);
D3DXMatrixIdentity(pout); - pout->u.m[0][0] = 1.0f / (aspect * tanf(fovy/2.0f)); - pout->u.m[1][1] = 1.0f / tanf(fovy/2.0f); - pout->u.m[2][2] = zf / (zn - zf); - pout->u.m[2][3] = -1.0f; - pout->u.m[3][2] = (zf * zn) / (zn - zf); - pout->u.m[3][3] = 0.0f; + pout->m[0][0] = 1.0f / (aspect * tanf(fovy/2.0f)); + pout->m[1][1] = 1.0f / tanf(fovy/2.0f); + pout->m[2][2] = zf / (zn - zf); + pout->m[2][3] = -1.0f; + pout->m[3][2] = (zf * zn) / (zn - zf); + pout->m[3][3] = 0.0f; return pout; }
@@ -509,12 +509,12 @@ D3DXMATRIX* WINAPI D3DXMatrixPerspectiveLH(D3DXMATRIX *pout, FLOAT w, FLOAT h, F TRACE("pout %p, w %f, h %f, zn %f, zf %f\n", pout, w, h, zn, zf);
D3DXMatrixIdentity(pout); - pout->u.m[0][0] = 2.0f * zn / w; - pout->u.m[1][1] = 2.0f * zn / h; - pout->u.m[2][2] = zf / (zf - zn); - pout->u.m[3][2] = (zn * zf) / (zn - zf); - pout->u.m[2][3] = 1.0f; - pout->u.m[3][3] = 0.0f; + pout->m[0][0] = 2.0f * zn / w; + pout->m[1][1] = 2.0f * zn / h; + pout->m[2][2] = zf / (zf - zn); + pout->m[3][2] = (zn * zf) / (zn - zf); + pout->m[2][3] = 1.0f; + pout->m[3][3] = 0.0f; return pout; }
@@ -523,14 +523,14 @@ D3DXMATRIX* WINAPI D3DXMatrixPerspectiveOffCenterLH(D3DXMATRIX *pout, FLOAT l, F TRACE("pout %p, l %f, r %f, b %f, t %f, zn %f, zf %f\n", pout, l, r, b, t, zn, zf);
D3DXMatrixIdentity(pout); - pout->u.m[0][0] = 2.0f * zn / (r - l); - pout->u.m[1][1] = -2.0f * zn / (b - t); - pout->u.m[2][0] = -1.0f - 2.0f * l / (r - l); - pout->u.m[2][1] = 1.0f + 2.0f * t / (b - t); - pout->u.m[2][2] = - zf / (zn - zf); - pout->u.m[3][2] = (zn * zf) / (zn -zf); - pout->u.m[2][3] = 1.0f; - pout->u.m[3][3] = 0.0f; + pout->m[0][0] = 2.0f * zn / (r - l); + pout->m[1][1] = -2.0f * zn / (b - t); + pout->m[2][0] = -1.0f - 2.0f * l / (r - l); + pout->m[2][1] = 1.0f + 2.0f * t / (b - t); + pout->m[2][2] = - zf / (zn - zf); + pout->m[3][2] = (zn * zf) / (zn -zf); + pout->m[2][3] = 1.0f; + pout->m[3][3] = 0.0f; return pout; }
@@ -539,14 +539,14 @@ D3DXMATRIX* WINAPI D3DXMatrixPerspectiveOffCenterRH(D3DXMATRIX *pout, FLOAT l, F TRACE("pout %p, l %f, r %f, b %f, t %f, zn %f, zf %f\n", pout, l, r, b, t, zn, zf);
D3DXMatrixIdentity(pout); - pout->u.m[0][0] = 2.0f * zn / (r - l); - pout->u.m[1][1] = -2.0f * zn / (b - t); - pout->u.m[2][0] = 1.0f + 2.0f * l / (r - l); - pout->u.m[2][1] = -1.0f -2.0f * t / (b - t); - pout->u.m[2][2] = zf / (zn - zf); - pout->u.m[3][2] = (zn * zf) / (zn -zf); - pout->u.m[2][3] = -1.0f; - pout->u.m[3][3] = 0.0f; + pout->m[0][0] = 2.0f * zn / (r - l); + pout->m[1][1] = -2.0f * zn / (b - t); + pout->m[2][0] = 1.0f + 2.0f * l / (r - l); + pout->m[2][1] = -1.0f -2.0f * t / (b - t); + pout->m[2][2] = zf / (zn - zf); + pout->m[3][2] = (zn * zf) / (zn -zf); + pout->m[2][3] = -1.0f; + pout->m[3][3] = 0.0f; return pout; }
@@ -555,12 +555,12 @@ D3DXMATRIX* WINAPI D3DXMatrixPerspectiveRH(D3DXMATRIX *pout, FLOAT w, FLOAT h, F TRACE("pout %p, w %f, h %f, zn %f, zf %f\n", pout, w, h, zn, zf);
D3DXMatrixIdentity(pout); - pout->u.m[0][0] = 2.0f * zn / w; - pout->u.m[1][1] = 2.0f * zn / h; - pout->u.m[2][2] = zf / (zn - zf); - pout->u.m[3][2] = (zn * zf) / (zn - zf); - pout->u.m[2][3] = -1.0f; - pout->u.m[3][3] = 0.0f; + pout->m[0][0] = 2.0f * zn / w; + pout->m[1][1] = 2.0f * zn / h; + pout->m[2][2] = zf / (zn - zf); + pout->m[3][2] = (zn * zf) / (zn - zf); + pout->m[2][3] = -1.0f; + pout->m[3][3] = 0.0f; return pout; }
@@ -572,18 +572,18 @@ D3DXMATRIX* WINAPI D3DXMatrixReflect(D3DXMATRIX *pout, const D3DXPLANE *pplane)
D3DXPlaneNormalize(&Nplane, pplane); D3DXMatrixIdentity(pout); - pout->u.m[0][0] = 1.0f - 2.0f * Nplane.a * Nplane.a; - pout->u.m[0][1] = -2.0f * Nplane.a * Nplane.b; - pout->u.m[0][2] = -2.0f * Nplane.a * Nplane.c; - pout->u.m[1][0] = -2.0f * Nplane.a * Nplane.b; - pout->u.m[1][1] = 1.0f - 2.0f * Nplane.b * Nplane.b; - pout->u.m[1][2] = -2.0f * Nplane.b * Nplane.c; - pout->u.m[2][0] = -2.0f * Nplane.c * Nplane.a; - pout->u.m[2][1] = -2.0f * Nplane.c * Nplane.b; - pout->u.m[2][2] = 1.0f - 2.0f * Nplane.c * Nplane.c; - pout->u.m[3][0] = -2.0f * Nplane.d * Nplane.a; - pout->u.m[3][1] = -2.0f * Nplane.d * Nplane.b; - pout->u.m[3][2] = -2.0f * Nplane.d * Nplane.c; + pout->m[0][0] = 1.0f - 2.0f * Nplane.a * Nplane.a; + pout->m[0][1] = -2.0f * Nplane.a * Nplane.b; + pout->m[0][2] = -2.0f * Nplane.a * Nplane.c; + pout->m[1][0] = -2.0f * Nplane.a * Nplane.b; + pout->m[1][1] = 1.0f - 2.0f * Nplane.b * Nplane.b; + pout->m[1][2] = -2.0f * Nplane.b * Nplane.c; + pout->m[2][0] = -2.0f * Nplane.c * Nplane.a; + pout->m[2][1] = -2.0f * Nplane.c * Nplane.b; + pout->m[2][2] = 1.0f - 2.0f * Nplane.c * Nplane.c; + pout->m[3][0] = -2.0f * Nplane.d * Nplane.a; + pout->m[3][1] = -2.0f * Nplane.d * Nplane.b; + pout->m[3][2] = -2.0f * Nplane.d * Nplane.c; return pout; }
@@ -599,22 +599,22 @@ D3DXMATRIX * WINAPI D3DXMatrixRotationAxis(D3DXMATRIX *out, const D3DXVECTOR3 *v cangle = cosf(angle); cdiff = 1.0f - cangle;
- out->u.m[0][0] = cdiff * nv.x * nv.x + cangle; - out->u.m[1][0] = cdiff * nv.x * nv.y - sangle * nv.z; - out->u.m[2][0] = cdiff * nv.x * nv.z + sangle * nv.y; - out->u.m[3][0] = 0.0f; - out->u.m[0][1] = cdiff * nv.y * nv.x + sangle * nv.z; - out->u.m[1][1] = cdiff * nv.y * nv.y + cangle; - out->u.m[2][1] = cdiff * nv.y * nv.z - sangle * nv.x; - out->u.m[3][1] = 0.0f; - out->u.m[0][2] = cdiff * nv.z * nv.x - sangle * nv.y; - out->u.m[1][2] = cdiff * nv.z * nv.y + sangle * nv.x; - out->u.m[2][2] = cdiff * nv.z * nv.z + cangle; - out->u.m[3][2] = 0.0f; - out->u.m[0][3] = 0.0f; - out->u.m[1][3] = 0.0f; - out->u.m[2][3] = 0.0f; - out->u.m[3][3] = 1.0f; + out->m[0][0] = cdiff * nv.x * nv.x + cangle; + out->m[1][0] = cdiff * nv.x * nv.y - sangle * nv.z; + out->m[2][0] = cdiff * nv.x * nv.z + sangle * nv.y; + out->m[3][0] = 0.0f; + out->m[0][1] = cdiff * nv.y * nv.x + sangle * nv.z; + out->m[1][1] = cdiff * nv.y * nv.y + cangle; + out->m[2][1] = cdiff * nv.y * nv.z - sangle * nv.x; + out->m[3][1] = 0.0f; + out->m[0][2] = cdiff * nv.z * nv.x - sangle * nv.y; + out->m[1][2] = cdiff * nv.z * nv.y + sangle * nv.x; + out->m[2][2] = cdiff * nv.z * nv.z + cangle; + out->m[3][2] = 0.0f; + out->m[0][3] = 0.0f; + out->m[1][3] = 0.0f; + out->m[2][3] = 0.0f; + out->m[3][3] = 1.0f;
return out; } @@ -624,15 +624,15 @@ D3DXMATRIX* WINAPI D3DXMatrixRotationQuaternion(D3DXMATRIX *pout, const D3DXQUAT TRACE("pout %p, pq %p\n", pout, pq);
D3DXMatrixIdentity(pout); - pout->u.m[0][0] = 1.0f - 2.0f * (pq->y * pq->y + pq->z * pq->z); - pout->u.m[0][1] = 2.0f * (pq->x *pq->y + pq->z * pq->w); - pout->u.m[0][2] = 2.0f * (pq->x * pq->z - pq->y * pq->w); - pout->u.m[1][0] = 2.0f * (pq->x * pq->y - pq->z * pq->w); - pout->u.m[1][1] = 1.0f - 2.0f * (pq->x * pq->x + pq->z * pq->z); - pout->u.m[1][2] = 2.0f * (pq->y *pq->z + pq->x *pq->w); - pout->u.m[2][0] = 2.0f * (pq->x * pq->z + pq->y * pq->w); - pout->u.m[2][1] = 2.0f * (pq->y *pq->z - pq->x *pq->w); - pout->u.m[2][2] = 1.0f - 2.0f * (pq->x * pq->x + pq->y * pq->y); + pout->m[0][0] = 1.0f - 2.0f * (pq->y * pq->y + pq->z * pq->z); + pout->m[0][1] = 2.0f * (pq->x *pq->y + pq->z * pq->w); + pout->m[0][2] = 2.0f * (pq->x * pq->z - pq->y * pq->w); + pout->m[1][0] = 2.0f * (pq->x * pq->y - pq->z * pq->w); + pout->m[1][1] = 1.0f - 2.0f * (pq->x * pq->x + pq->z * pq->z); + pout->m[1][2] = 2.0f * (pq->y *pq->z + pq->x *pq->w); + pout->m[2][0] = 2.0f * (pq->x * pq->z + pq->y * pq->w); + pout->m[2][1] = 2.0f * (pq->y *pq->z - pq->x *pq->w); + pout->m[2][2] = 1.0f - 2.0f * (pq->x * pq->x + pq->y * pq->y); return pout; }
@@ -641,10 +641,10 @@ D3DXMATRIX* WINAPI D3DXMatrixRotationX(D3DXMATRIX *pout, FLOAT angle) TRACE("pout %p, angle %f\n", pout, angle);
D3DXMatrixIdentity(pout); - pout->u.m[1][1] = cosf(angle); - pout->u.m[2][2] = cosf(angle); - pout->u.m[1][2] = sinf(angle); - pout->u.m[2][1] = -sinf(angle); + pout->m[1][1] = cosf(angle); + pout->m[2][2] = cosf(angle); + pout->m[1][2] = sinf(angle); + pout->m[2][1] = -sinf(angle); return pout; }
@@ -653,10 +653,10 @@ D3DXMATRIX* WINAPI D3DXMatrixRotationY(D3DXMATRIX *pout, FLOAT angle) TRACE("pout %p, angle %f\n", pout, angle);
D3DXMatrixIdentity(pout); - pout->u.m[0][0] = cosf(angle); - pout->u.m[2][2] = cosf(angle); - pout->u.m[0][2] = -sinf(angle); - pout->u.m[2][0] = sinf(angle); + pout->m[0][0] = cosf(angle); + pout->m[2][2] = cosf(angle); + pout->m[0][2] = -sinf(angle); + pout->m[2][0] = sinf(angle); return pout; }
@@ -673,22 +673,22 @@ D3DXMATRIX * WINAPI D3DXMatrixRotationYawPitchRoll(D3DXMATRIX *out, FLOAT yaw, F syaw = sinf(yaw); cyaw = cosf(yaw);
- out->u.m[0][0] = sroll * spitch * syaw + croll * cyaw; - out->u.m[0][1] = sroll * cpitch; - out->u.m[0][2] = sroll * spitch * cyaw - croll * syaw; - out->u.m[0][3] = 0.0f; - out->u.m[1][0] = croll * spitch * syaw - sroll * cyaw; - out->u.m[1][1] = croll * cpitch; - out->u.m[1][2] = croll * spitch * cyaw + sroll * syaw; - out->u.m[1][3] = 0.0f; - out->u.m[2][0] = cpitch * syaw; - out->u.m[2][1] = -spitch; - out->u.m[2][2] = cpitch * cyaw; - out->u.m[2][3] = 0.0f; - out->u.m[3][0] = 0.0f; - out->u.m[3][1] = 0.0f; - out->u.m[3][2] = 0.0f; - out->u.m[3][3] = 1.0f; + out->m[0][0] = sroll * spitch * syaw + croll * cyaw; + out->m[0][1] = sroll * cpitch; + out->m[0][2] = sroll * spitch * cyaw - croll * syaw; + out->m[0][3] = 0.0f; + out->m[1][0] = croll * spitch * syaw - sroll * cyaw; + out->m[1][1] = croll * cpitch; + out->m[1][2] = croll * spitch * cyaw + sroll * syaw; + out->m[1][3] = 0.0f; + out->m[2][0] = cpitch * syaw; + out->m[2][1] = -spitch; + out->m[2][2] = cpitch * cyaw; + out->m[2][3] = 0.0f; + out->m[3][0] = 0.0f; + out->m[3][1] = 0.0f; + out->m[3][2] = 0.0f; + out->m[3][3] = 1.0f;
return out; } @@ -698,10 +698,10 @@ D3DXMATRIX* WINAPI D3DXMatrixRotationZ(D3DXMATRIX *pout, FLOAT angle) TRACE("pout %p, angle %f\n", pout, angle);
D3DXMatrixIdentity(pout); - pout->u.m[0][0] = cosf(angle); - pout->u.m[1][1] = cosf(angle); - pout->u.m[0][1] = sinf(angle); - pout->u.m[1][0] = -sinf(angle); + pout->m[0][0] = cosf(angle); + pout->m[1][1] = cosf(angle); + pout->m[0][1] = sinf(angle); + pout->m[1][0] = -sinf(angle); return pout; }
@@ -710,9 +710,9 @@ D3DXMATRIX* WINAPI D3DXMatrixScaling(D3DXMATRIX *pout, FLOAT sx, FLOAT sy, FLOAT TRACE("pout %p, sx %f, sy %f, sz %f\n", pout, sx, sy, sz);
D3DXMatrixIdentity(pout); - pout->u.m[0][0] = sx; - pout->u.m[1][1] = sy; - pout->u.m[2][2] = sz; + pout->m[0][0] = sx; + pout->m[1][1] = sy; + pout->m[2][2] = sz; return pout; }
@@ -725,22 +725,22 @@ D3DXMATRIX* WINAPI D3DXMatrixShadow(D3DXMATRIX *pout, const D3DXVECTOR4 *plight,
D3DXPlaneNormalize(&Nplane, pplane); dot = D3DXPlaneDot(&Nplane, plight); - pout->u.m[0][0] = dot - Nplane.a * plight->x; - pout->u.m[0][1] = -Nplane.a * plight->y; - pout->u.m[0][2] = -Nplane.a * plight->z; - pout->u.m[0][3] = -Nplane.a * plight->w; - pout->u.m[1][0] = -Nplane.b * plight->x; - pout->u.m[1][1] = dot - Nplane.b * plight->y; - pout->u.m[1][2] = -Nplane.b * plight->z; - pout->u.m[1][3] = -Nplane.b * plight->w; - pout->u.m[2][0] = -Nplane.c * plight->x; - pout->u.m[2][1] = -Nplane.c * plight->y; - pout->u.m[2][2] = dot - Nplane.c * plight->z; - pout->u.m[2][3] = -Nplane.c * plight->w; - pout->u.m[3][0] = -Nplane.d * plight->x; - pout->u.m[3][1] = -Nplane.d * plight->y; - pout->u.m[3][2] = -Nplane.d * plight->z; - pout->u.m[3][3] = dot - Nplane.d * plight->w; + pout->m[0][0] = dot - Nplane.a * plight->x; + pout->m[0][1] = -Nplane.a * plight->y; + pout->m[0][2] = -Nplane.a * plight->z; + pout->m[0][3] = -Nplane.a * plight->w; + pout->m[1][0] = -Nplane.b * plight->x; + pout->m[1][1] = dot - Nplane.b * plight->y; + pout->m[1][2] = -Nplane.b * plight->z; + pout->m[1][3] = -Nplane.b * plight->w; + pout->m[2][0] = -Nplane.c * plight->x; + pout->m[2][1] = -Nplane.c * plight->y; + pout->m[2][2] = dot - Nplane.c * plight->z; + pout->m[2][3] = -Nplane.c * plight->w; + pout->m[3][0] = -Nplane.d * plight->x; + pout->m[3][1] = -Nplane.d * plight->y; + pout->m[3][2] = -Nplane.d * plight->z; + pout->m[3][3] = dot - Nplane.d * plight->w; return pout; }
@@ -864,23 +864,25 @@ D3DXMATRIX* WINAPI D3DXMatrixTranslation(D3DXMATRIX *pout, FLOAT x, FLOAT y, FLO TRACE("pout %p, x %f, y %f, z %f\n", pout, x, y, z);
D3DXMatrixIdentity(pout); - pout->u.m[3][0] = x; - pout->u.m[3][1] = y; - pout->u.m[3][2] = z; + pout->m[3][0] = x; + pout->m[3][1] = y; + pout->m[3][2] = z; return pout; }
-D3DXMATRIX* WINAPI D3DXMatrixTranspose(D3DXMATRIX *pout, const D3DXMATRIX *pm) +D3DXMATRIX* WINAPI D3DXMatrixTranspose(D3DXMATRIX *out, const D3DXMATRIX *in) { - const D3DXMATRIX m = *pm; - int i,j; + unsigned int i, j; + D3DXMATRIX m;
- TRACE("pout %p, pm %p\n", pout, pm); + TRACE("out %p, in %p.\n", out, in);
- for (i=0; i<4; i++) - for (j=0; j<4; j++) pout->u.m[i][j] = m.u.m[j][i]; + m = *in;
- return pout; + for (i = 0; i < 4; ++i) + for (j = 0; j < 4; ++j) out->m[i][j] = m.m[j][i]; + + return out; }
/*_________________D3DXMatrixStack____________________*/ @@ -1277,10 +1279,10 @@ D3DXPLANE* WINAPI D3DXPlaneTransform(D3DXPLANE *pout, const D3DXPLANE *pplane, c
TRACE("pout %p, pplane %p, pm %p\n", pout, pplane, pm);
- pout->a = pm->u.m[0][0] * plane.a + pm->u.m[1][0] * plane.b + pm->u.m[2][0] * plane.c + pm->u.m[3][0] * plane.d; - pout->b = pm->u.m[0][1] * plane.a + pm->u.m[1][1] * plane.b + pm->u.m[2][1] * plane.c + pm->u.m[3][1] * plane.d; - pout->c = pm->u.m[0][2] * plane.a + pm->u.m[1][2] * plane.b + pm->u.m[2][2] * plane.c + pm->u.m[3][2] * plane.d; - pout->d = pm->u.m[0][3] * plane.a + pm->u.m[1][3] * plane.b + pm->u.m[2][3] * plane.c + pm->u.m[3][3] * plane.d; + pout->a = pm->m[0][0] * plane.a + pm->m[1][0] * plane.b + pm->m[2][0] * plane.c + pm->m[3][0] * plane.d; + pout->b = pm->m[0][1] * plane.a + pm->m[1][1] * plane.b + pm->m[2][1] * plane.c + pm->m[3][1] * plane.d; + pout->c = pm->m[0][2] * plane.a + pm->m[1][2] * plane.b + pm->m[2][2] * plane.c + pm->m[3][2] * plane.d; + pout->d = pm->m[0][3] * plane.a + pm->m[1][3] * plane.b + pm->m[2][3] * plane.c + pm->m[3][3] * plane.d; return pout; }
@@ -1422,13 +1424,13 @@ D3DXQUATERNION * WINAPI D3DXQuaternionRotationMatrix(D3DXQUATERNION *out, const
TRACE("out %p, m %p\n", out, m);
- trace = m->u.m[0][0] + m->u.m[1][1] + m->u.m[2][2] + 1.0f; + trace = m->m[0][0] + m->m[1][1] + m->m[2][2] + 1.0f; if (trace > 1.0f) { s = 2.0f * sqrtf(trace); - out->x = (m->u.m[1][2] - m->u.m[2][1]) / s; - out->y = (m->u.m[2][0] - m->u.m[0][2]) / s; - out->z = (m->u.m[0][1] - m->u.m[1][0]) / s; + out->x = (m->m[1][2] - m->m[2][1]) / s; + out->y = (m->m[2][0] - m->m[0][2]) / s; + out->z = (m->m[0][1] - m->m[1][0]) / s; out->w = 0.25f * s; } else @@ -1437,34 +1439,34 @@ D3DXQUATERNION * WINAPI D3DXQuaternionRotationMatrix(D3DXQUATERNION *out, const
for (i = 1; i < 3; i++) { - if (m->u.m[i][i] > m->u.m[maxi][maxi]) + if (m->m[i][i] > m->m[maxi][maxi]) maxi = i; }
switch (maxi) { case 0: - s = 2.0f * sqrtf(1.0f + m->u.m[0][0] - m->u.m[1][1] - m->u.m[2][2]); + s = 2.0f * sqrtf(1.0f + m->m[0][0] - m->m[1][1] - m->m[2][2]); out->x = 0.25f * s; - out->y = (m->u.m[0][1] + m->u.m[1][0]) / s; - out->z = (m->u.m[0][2] + m->u.m[2][0]) / s; - out->w = (m->u.m[1][2] - m->u.m[2][1]) / s; + out->y = (m->m[0][1] + m->m[1][0]) / s; + out->z = (m->m[0][2] + m->m[2][0]) / s; + out->w = (m->m[1][2] - m->m[2][1]) / s; break;
case 1: - s = 2.0f * sqrtf(1.0f + m->u.m[1][1] - m->u.m[0][0] - m->u.m[2][2]); - out->x = (m->u.m[0][1] + m->u.m[1][0]) / s; + s = 2.0f * sqrtf(1.0f + m->m[1][1] - m->m[0][0] - m->m[2][2]); + out->x = (m->m[0][1] + m->m[1][0]) / s; out->y = 0.25f * s; - out->z = (m->u.m[1][2] + m->u.m[2][1]) / s; - out->w = (m->u.m[2][0] - m->u.m[0][2]) / s; + out->z = (m->m[1][2] + m->m[2][1]) / s; + out->w = (m->m[2][0] - m->m[0][2]) / s; break;
case 2: - s = 2.0f * sqrtf(1.0f + m->u.m[2][2] - m->u.m[0][0] - m->u.m[1][1]); - out->x = (m->u.m[0][2] + m->u.m[2][0]) / s; - out->y = (m->u.m[1][2] + m->u.m[2][1]) / s; + s = 2.0f * sqrtf(1.0f + m->m[2][2] - m->m[0][0] - m->m[1][1]); + out->x = (m->m[0][2] + m->m[2][0]) / s; + out->y = (m->m[1][2] + m->m[2][1]) / s; out->z = 0.25f * s; - out->w = (m->u.m[0][1] - m->u.m[1][0]) / s; + out->w = (m->m[0][1] - m->m[1][0]) / s; break; } } @@ -1679,10 +1681,10 @@ D3DXVECTOR4* WINAPI D3DXVec2Transform(D3DXVECTOR4 *pout, const D3DXVECTOR2 *pv,
TRACE("pout %p, pv %p, pm %p\n", pout, pv, pm);
- out.x = pm->u.m[0][0] * pv->x + pm->u.m[1][0] * pv->y + pm->u.m[3][0]; - out.y = pm->u.m[0][1] * pv->x + pm->u.m[1][1] * pv->y + pm->u.m[3][1]; - out.z = pm->u.m[0][2] * pv->x + pm->u.m[1][2] * pv->y + pm->u.m[3][2]; - out.w = pm->u.m[0][3] * pv->x + pm->u.m[1][3] * pv->y + pm->u.m[3][3]; + out.x = pm->m[0][0] * pv->x + pm->m[1][0] * pv->y + pm->m[3][0]; + out.y = pm->m[0][1] * pv->x + pm->m[1][1] * pv->y + pm->m[3][1]; + out.z = pm->m[0][2] * pv->x + pm->m[1][2] * pv->y + pm->m[3][2]; + out.w = pm->m[0][3] * pv->x + pm->m[1][3] * pv->y + pm->m[3][3]; *pout = out; return pout; } @@ -1710,10 +1712,10 @@ D3DXVECTOR2* WINAPI D3DXVec2TransformCoord(D3DXVECTOR2 *pout, const D3DXVECTOR2 TRACE("pout %p, pv %p, pm %p\n", pout, pv, pm);
v = *pv; - norm = pm->u.m[0][3] * pv->x + pm->u.m[1][3] * pv->y + pm->u.m[3][3]; + norm = pm->m[0][3] * pv->x + pm->m[1][3] * pv->y + pm->m[3][3];
- pout->x = (pm->u.m[0][0] * v.x + pm->u.m[1][0] * v.y + pm->u.m[3][0]) / norm; - pout->y = (pm->u.m[0][1] * v.x + pm->u.m[1][1] * v.y + pm->u.m[3][1]) / norm; + pout->x = (pm->m[0][0] * v.x + pm->m[1][0] * v.y + pm->m[3][0]) / norm; + pout->y = (pm->m[0][1] * v.x + pm->m[1][1] * v.y + pm->m[3][1]) / norm;
return pout; } @@ -1739,8 +1741,8 @@ D3DXVECTOR2* WINAPI D3DXVec2TransformNormal(D3DXVECTOR2 *pout, const D3DXVECTOR2
TRACE("pout %p, pv %p, pm %p\n", pout, pv, pm);
- pout->x = pm->u.m[0][0] * v.x + pm->u.m[1][0] * v.y; - pout->y = pm->u.m[0][1] * v.x + pm->u.m[1][1] * v.y; + pout->x = pm->m[0][0] * v.x + pm->m[1][0] * v.y; + pout->y = pm->m[0][1] * v.x + pm->m[1][1] * v.y; return pout; }
@@ -1865,10 +1867,10 @@ D3DXVECTOR4* WINAPI D3DXVec3Transform(D3DXVECTOR4 *pout, const D3DXVECTOR3 *pv,
TRACE("pout %p, pv %p, pm %p\n", pout, pv, pm);
- out.x = pm->u.m[0][0] * pv->x + pm->u.m[1][0] * pv->y + pm->u.m[2][0] * pv->z + pm->u.m[3][0]; - out.y = pm->u.m[0][1] * pv->x + pm->u.m[1][1] * pv->y + pm->u.m[2][1] * pv->z + pm->u.m[3][1]; - out.z = pm->u.m[0][2] * pv->x + pm->u.m[1][2] * pv->y + pm->u.m[2][2] * pv->z + pm->u.m[3][2]; - out.w = pm->u.m[0][3] * pv->x + pm->u.m[1][3] * pv->y + pm->u.m[2][3] * pv->z + pm->u.m[3][3]; + out.x = pm->m[0][0] * pv->x + pm->m[1][0] * pv->y + pm->m[2][0] * pv->z + pm->m[3][0]; + out.y = pm->m[0][1] * pv->x + pm->m[1][1] * pv->y + pm->m[2][1] * pv->z + pm->m[3][1]; + out.z = pm->m[0][2] * pv->x + pm->m[1][2] * pv->y + pm->m[2][2] * pv->z + pm->m[3][2]; + out.w = pm->m[0][3] * pv->x + pm->m[1][3] * pv->y + pm->m[2][3] * pv->z + pm->m[3][3]; *pout = out; return pout; } @@ -1895,11 +1897,11 @@ D3DXVECTOR3* WINAPI D3DXVec3TransformCoord(D3DXVECTOR3 *pout, const D3DXVECTOR3
TRACE("pout %p, pv %p, pm %p\n", pout, pv, pm);
- norm = pm->u.m[0][3] * pv->x + pm->u.m[1][3] * pv->y + pm->u.m[2][3] *pv->z + pm->u.m[3][3]; + norm = pm->m[0][3] * pv->x + pm->m[1][3] * pv->y + pm->m[2][3] *pv->z + pm->m[3][3];
- out.x = (pm->u.m[0][0] * pv->x + pm->u.m[1][0] * pv->y + pm->u.m[2][0] * pv->z + pm->u.m[3][0]) / norm; - out.y = (pm->u.m[0][1] * pv->x + pm->u.m[1][1] * pv->y + pm->u.m[2][1] * pv->z + pm->u.m[3][1]) / norm; - out.z = (pm->u.m[0][2] * pv->x + pm->u.m[1][2] * pv->y + pm->u.m[2][2] * pv->z + pm->u.m[3][2]) / norm; + out.x = (pm->m[0][0] * pv->x + pm->m[1][0] * pv->y + pm->m[2][0] * pv->z + pm->m[3][0]) / norm; + out.y = (pm->m[0][1] * pv->x + pm->m[1][1] * pv->y + pm->m[2][1] * pv->z + pm->m[3][1]) / norm; + out.z = (pm->m[0][2] * pv->x + pm->m[1][2] * pv->y + pm->m[2][2] * pv->z + pm->m[3][2]) / norm;
*pout = out;
@@ -1927,9 +1929,9 @@ D3DXVECTOR3* WINAPI D3DXVec3TransformNormal(D3DXVECTOR3 *pout, const D3DXVECTOR3
TRACE("pout %p, pv %p, pm %p\n", pout, pv, pm);
- pout->x = pm->u.m[0][0] * v.x + pm->u.m[1][0] * v.y + pm->u.m[2][0] * v.z; - pout->y = pm->u.m[0][1] * v.x + pm->u.m[1][1] * v.y + pm->u.m[2][1] * v.z; - pout->z = pm->u.m[0][2] * v.x + pm->u.m[1][2] * v.y + pm->u.m[2][2] * v.z; + pout->x = pm->m[0][0] * v.x + pm->m[1][0] * v.y + pm->m[2][0] * v.z; + pout->y = pm->m[0][1] * v.x + pm->m[1][1] * v.y + pm->m[2][1] * v.z; + pout->z = pm->m[0][2] * v.x + pm->m[1][2] * v.y + pm->m[2][2] * v.z; return pout;
} @@ -2072,10 +2074,10 @@ D3DXVECTOR4* WINAPI D3DXVec4Transform(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv,
TRACE("pout %p, pv %p, pm %p\n", pout, pv, pm);
- out.x = pm->u.m[0][0] * pv->x + pm->u.m[1][0] * pv->y + pm->u.m[2][0] * pv->z + pm->u.m[3][0] * pv->w; - out.y = pm->u.m[0][1] * pv->x + pm->u.m[1][1] * pv->y + pm->u.m[2][1] * pv->z + pm->u.m[3][1] * pv->w; - out.z = pm->u.m[0][2] * pv->x + pm->u.m[1][2] * pv->y + pm->u.m[2][2] * pv->z + pm->u.m[3][2] * pv->w; - out.w = pm->u.m[0][3] * pv->x + pm->u.m[1][3] * pv->y + pm->u.m[2][3] * pv->z + pm->u.m[3][3] * pv->w; + out.x = pm->m[0][0] * pv->x + pm->m[1][0] * pv->y + pm->m[2][0] * pv->z + pm->m[3][0] * pv->w; + out.y = pm->m[0][1] * pv->x + pm->m[1][1] * pv->y + pm->m[2][1] * pv->z + pm->m[3][1] * pv->w; + out.z = pm->m[0][2] * pv->x + pm->m[1][2] * pv->y + pm->m[2][2] * pv->z + pm->m[3][2] * pv->w; + out.w = pm->m[0][3] * pv->x + pm->m[1][3] * pv->y + pm->m[2][3] * pv->z + pm->m[3][3] * pv->w; *pout = out; return pout; } @@ -3129,44 +3131,46 @@ FLOAT* WINAPI D3DXSHRotate(FLOAT *out, UINT order, const D3DXMATRIX *matrix, con
if (order <= 3) { - out[1] = matrix->u.m[1][1] * in[1] - matrix->u.m[2][1] * in[2] + matrix->u.m[0][1] * in[3]; - out[2] = -matrix->u.m[1][2] * in[1] + matrix->u.m[2][2] * in[2] - matrix->u.m[0][2] * in[3]; - out[3] = matrix->u.m[1][0] * in[1] - matrix->u.m[2][0] * in[2] + matrix->u.m[0][0] * in[3]; + out[1] = matrix->m[1][1] * in[1] - matrix->m[2][1] * in[2] + matrix->m[0][1] * in[3]; + out[2] = -matrix->m[1][2] * in[1] + matrix->m[2][2] * in[2] - matrix->m[0][2] * in[3]; + out[3] = matrix->m[1][0] * in[1] - matrix->m[2][0] * in[2] + matrix->m[0][0] * in[3];
if (order == 3) { - FLOAT coeff[]={ - matrix->u.m[1][0] * matrix->u.m[0][0], matrix->u.m[1][1] * matrix->u.m[0][1], - matrix->u.m[1][1] * matrix->u.m[2][1], matrix->u.m[1][0] * matrix->u.m[2][0], - matrix->u.m[2][0] * matrix->u.m[2][0], matrix->u.m[2][1] * matrix->u.m[2][1], - matrix->u.m[0][0] * matrix->u.m[2][0], matrix->u.m[0][1] * matrix->u.m[2][1], - matrix->u.m[0][1] * matrix->u.m[0][1], matrix->u.m[1][0] * matrix->u.m[1][0], - matrix->u.m[1][1] * matrix->u.m[1][1], matrix->u.m[0][0] * matrix->u.m[0][0], }; - - out[4] = (matrix->u.m[1][1] * matrix->u.m[0][0] + matrix->u.m[0][1] * matrix->u.m[1][0]) * in[4]; - out[4] -= (matrix->u.m[1][0] * matrix->u.m[2][1] + matrix->u.m[1][1] * matrix->u.m[2][0]) * in[5]; - out[4] += 1.7320508076f * matrix->u.m[2][0] * matrix->u.m[2][1] * in[6]; - out[4] -= (matrix->u.m[0][1] * matrix->u.m[2][0] + matrix->u.m[0][0] * matrix->u.m[2][1]) * in[7]; - out[4] += (matrix->u.m[0][0] * matrix->u.m[0][1] - matrix->u.m[1][0] * matrix->u.m[1][1]) * in[8]; - - out[5] = (matrix->u.m[1][1] * matrix->u.m[2][2] + matrix->u.m[1][2] * matrix->u.m[2][1]) * in[5]; - out[5] -= (matrix->u.m[1][1] * matrix->u.m[0][2] + matrix->u.m[1][2] * matrix->u.m[0][1]) * in[4]; - out[5] -= 1.7320508076f * matrix->u.m[2][2] * matrix->u.m[2][1] * in[6]; - out[5] += (matrix->u.m[0][2] * matrix->u.m[2][1] + matrix->u.m[0][1] * matrix->u.m[2][2]) * in[7]; - out[5] -= (matrix->u.m[0][1] * matrix->u.m[0][2] - matrix->u.m[1][1] * matrix->u.m[1][2]) * in[8]; - - out[6] = (matrix->u.m[2][2] * matrix->u.m[2][2] - 0.5f * (coeff[4] + coeff[5])) * in[6]; - out[6] -= (0.5773502692f * (coeff[0] + coeff[1]) - 1.1547005384f * matrix->u.m[1][2] * matrix->u.m[0][2]) * in[4]; - out[6] += (0.5773502692f * (coeff[2] + coeff[3]) - 1.1547005384f * matrix->u.m[1][2] * matrix->u.m[2][2]) * in[5]; - out[6] += (0.5773502692f * (coeff[6] + coeff[7]) - 1.1547005384f * matrix->u.m[0][2] * matrix->u.m[2][2]) * in[7]; + float coeff[] = + { + matrix->m[1][0] * matrix->m[0][0], matrix->m[1][1] * matrix->m[0][1], + matrix->m[1][1] * matrix->m[2][1], matrix->m[1][0] * matrix->m[2][0], + matrix->m[2][0] * matrix->m[2][0], matrix->m[2][1] * matrix->m[2][1], + matrix->m[0][0] * matrix->m[2][0], matrix->m[0][1] * matrix->m[2][1], + matrix->m[0][1] * matrix->m[0][1], matrix->m[1][0] * matrix->m[1][0], + matrix->m[1][1] * matrix->m[1][1], matrix->m[0][0] * matrix->m[0][0], + }; + + out[4] = (matrix->m[1][1] * matrix->m[0][0] + matrix->m[0][1] * matrix->m[1][0]) * in[4]; + out[4] -= (matrix->m[1][0] * matrix->m[2][1] + matrix->m[1][1] * matrix->m[2][0]) * in[5]; + out[4] += 1.7320508076f * matrix->m[2][0] * matrix->m[2][1] * in[6]; + out[4] -= (matrix->m[0][1] * matrix->m[2][0] + matrix->m[0][0] * matrix->m[2][1]) * in[7]; + out[4] += (matrix->m[0][0] * matrix->m[0][1] - matrix->m[1][0] * matrix->m[1][1]) * in[8]; + + out[5] = (matrix->m[1][1] * matrix->m[2][2] + matrix->m[1][2] * matrix->m[2][1]) * in[5]; + out[5] -= (matrix->m[1][1] * matrix->m[0][2] + matrix->m[1][2] * matrix->m[0][1]) * in[4]; + out[5] -= 1.7320508076f * matrix->m[2][2] * matrix->m[2][1] * in[6]; + out[5] += (matrix->m[0][2] * matrix->m[2][1] + matrix->m[0][1] * matrix->m[2][2]) * in[7]; + out[5] -= (matrix->m[0][1] * matrix->m[0][2] - matrix->m[1][1] * matrix->m[1][2]) * in[8]; + + out[6] = (matrix->m[2][2] * matrix->m[2][2] - 0.5f * (coeff[4] + coeff[5])) * in[6]; + out[6] -= (0.5773502692f * (coeff[0] + coeff[1]) - 1.1547005384f * matrix->m[1][2] * matrix->m[0][2]) * in[4]; + out[6] += (0.5773502692f * (coeff[2] + coeff[3]) - 1.1547005384f * matrix->m[1][2] * matrix->m[2][2]) * in[5]; + out[6] += (0.5773502692f * (coeff[6] + coeff[7]) - 1.1547005384f * matrix->m[0][2] * matrix->m[2][2]) * in[7]; out[6] += (0.2886751347f * (coeff[9] - coeff[8] + coeff[10] - coeff[11]) - 0.5773502692f * - (matrix->u.m[1][2] * matrix->u.m[1][2] - matrix->u.m[0][2] * matrix->u.m[0][2])) * in[8]; + (matrix->m[1][2] * matrix->m[1][2] - matrix->m[0][2] * matrix->m[0][2])) * in[8];
- out[7] = (matrix->u.m[0][0] * matrix->u.m[2][2] + matrix->u.m[0][2] * matrix->u.m[2][0]) * in[7]; - out[7] -= (matrix->u.m[1][0] * matrix->u.m[0][2] + matrix->u.m[1][2] * matrix->u.m[0][0]) * in[4]; - out[7] += (matrix->u.m[1][0] * matrix->u.m[2][2] + matrix->u.m[1][2] * matrix->u.m[2][0]) * in[5]; - out[7] -= 1.7320508076f * matrix->u.m[2][2] * matrix->u.m[2][0] * in[6]; - out[7] -= (matrix->u.m[0][0] * matrix->u.m[0][2] - matrix->u.m[1][0] * matrix->u.m[1][2]) * in[8]; + out[7] = (matrix->m[0][0] * matrix->m[2][2] + matrix->m[0][2] * matrix->m[2][0]) * in[7]; + out[7] -= (matrix->m[1][0] * matrix->m[0][2] + matrix->m[1][2] * matrix->m[0][0]) * in[4]; + out[7] += (matrix->m[1][0] * matrix->m[2][2] + matrix->m[1][2] * matrix->m[2][0]) * in[5]; + out[7] -= 1.7320508076f * matrix->m[2][2] * matrix->m[2][0] * in[6]; + out[7] -= (matrix->m[0][0] * matrix->m[0][2] - matrix->m[1][0] * matrix->m[1][2]) * in[8];
out[8] = 0.5f * (coeff[11] - coeff[8] - coeff[9] + coeff[10]) * in[8]; out[8] += (coeff[0] - coeff[1]) * in[4]; @@ -3178,16 +3182,16 @@ FLOAT* WINAPI D3DXSHRotate(FLOAT *out, UINT order, const D3DXMATRIX *matrix, con return out; }
- if (fabsf(matrix->u.m[2][2]) != 1.0f) + if (fabsf(matrix->m[2][2]) != 1.0f) { - sinb = sqrtf(1.0f - matrix->u.m[2][2] * matrix->u.m[2][2]); - alpha = atan2f(matrix->u.m[2][1] / sinb, matrix->u.m[2][0] / sinb); - beta = atan2f(sinb, matrix->u.m[2][2]); - gamma = atan2f(matrix->u.m[1][2] / sinb, -matrix->u.m[0][2] / sinb); + sinb = sqrtf(1.0f - matrix->m[2][2] * matrix->m[2][2]); + alpha = atan2f(matrix->m[2][1] / sinb, matrix->m[2][0] / sinb); + beta = atan2f(sinb, matrix->m[2][2]); + gamma = atan2f(matrix->m[1][2] / sinb, -matrix->m[0][2] / sinb); } else { - alpha = atan2f(matrix->u.m[0][1], matrix->u.m[0][0]); + alpha = atan2f(matrix->m[0][1], matrix->m[0][0]); beta = 0.0f; gamma = 0.0f; } diff --git a/dlls/d3dx9_36/mesh.c b/dlls/d3dx9_36/mesh.c index 48abb7ede41..6cfe97492f3 100644 --- a/dlls/d3dx9_36/mesh.c +++ b/dlls/d3dx9_36/mesh.c @@ -2368,22 +2368,22 @@ BOOL WINAPI D3DXIntersectTri(const D3DXVECTOR3 *p0, const D3DXVECTOR3 *p1, const TRACE("p0 %p, p1 %p, p2 %p, praypos %p, praydir %p, pu %p, pv %p, pdist %p.\n", p0, p1, p2, praypos, praydir, pu, pv, pdist);
- m.u.m[0][0] = p1->x - p0->x; - m.u.m[1][0] = p2->x - p0->x; - m.u.m[2][0] = -praydir->x; - m.u.m[3][0] = 0.0f; - m.u.m[0][1] = p1->y - p0->y; - m.u.m[1][1] = p2->y - p0->y; - m.u.m[2][1] = -praydir->y; - m.u.m[3][1] = 0.0f; - m.u.m[0][2] = p1->z - p0->z; - m.u.m[1][2] = p2->z - p0->z; - m.u.m[2][2] = -praydir->z; - m.u.m[3][2] = 0.0f; - m.u.m[0][3] = 0.0f; - m.u.m[1][3] = 0.0f; - m.u.m[2][3] = 0.0f; - m.u.m[3][3] = 1.0f; + m.m[0][0] = p1->x - p0->x; + m.m[1][0] = p2->x - p0->x; + m.m[2][0] = -praydir->x; + m.m[3][0] = 0.0f; + m.m[0][1] = p1->y - p0->y; + m.m[1][1] = p2->y - p0->y; + m.m[2][1] = -praydir->y; + m.m[3][1] = 0.0f; + m.m[0][2] = p1->z - p0->z; + m.m[1][2] = p2->z - p0->z; + m.m[2][2] = -praydir->z; + m.m[3][2] = 0.0f; + m.m[0][3] = 0.0f; + m.m[1][3] = 0.0f; + m.m[2][3] = 0.0f; + m.m[3][3] = 1.0f;
vec.x = praypos->x - p0->x; vec.y = praypos->y - p0->y; @@ -3772,11 +3772,11 @@ static HRESULT load_mesh_container(struct ID3DXFileData *filedata, DWORD options char *name = NULL;
mesh_data.Type = D3DXMESHTYPE_MESH; - mesh_data.u.pMesh = NULL; + mesh_data.pMesh = NULL;
hr = D3DXLoadSkinMeshFromXof(filedata, options, device, &adjacency, &materials, &effects, &num_materials, - &skin_info, &mesh_data.u.pMesh); + &skin_info, &mesh_data.pMesh); if (FAILED(hr)) return hr;
hr = filedata_get_name(filedata, &name); @@ -3794,7 +3794,7 @@ cleanup: if (effects) ID3DXBuffer_Release(effects); if (adjacency) ID3DXBuffer_Release(adjacency); if (skin_info) IUnknown_Release(skin_info); - if (mesh_data.u.pMesh) IUnknown_Release(mesh_data.u.pMesh); + if (mesh_data.pMesh) IUnknown_Release(mesh_data.pMesh); HeapFree(GetProcessHeap(), 0, name); return hr; }
Signed-off-by: Matteo Bruni mbruni@codeweavers.com --- dlls/d3dx9_36/shader.c | 16 ++++++++++++---- dlls/d3dx9_36/tests/shader.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 4 deletions(-)
diff --git a/dlls/d3dx9_36/shader.c b/dlls/d3dx9_36/shader.c index d5b58222ca2..2241455898e 100644 --- a/dlls/d3dx9_36/shader.c +++ b/dlls/d3dx9_36/shader.c @@ -681,11 +681,13 @@ HRESULT WINAPI D3DXPreprocessShaderFromResourceW(HMODULE module, const WCHAR *re
}
-struct ID3DXConstantTableImpl { +struct ID3DXConstantTableImpl +{ ID3DXConstantTable ID3DXConstantTable_iface; LONG ref; char *ctab; DWORD size; + DWORD flags; D3DXCONSTANTTABLE_DESC desc; struct ctab_constant *constants; }; @@ -860,6 +862,9 @@ static inline struct ctab_constant *get_valid_constant(struct ID3DXConstantTable if (c) return c; }
+ if (table->flags & D3DXCONSTTABLE_LARGEADDRESSAWARE) + return NULL; + return get_constant_by_name(table, NULL, handle); }
@@ -1959,9 +1964,10 @@ HRESULT WINAPI D3DXGetShaderConstantTableEx(const DWORD *byte_code, DWORD flags, const D3DXSHADER_CONSTANTINFO *constant_info; DWORD i;
- TRACE("byte_code %p, flags %x, constant_table %p\n", byte_code, flags, constant_table); + TRACE("byte_code %p, flags %#x, constant_table %p.\n", byte_code, flags, constant_table);
- if (constant_table) *constant_table = NULL; + if (constant_table) + *constant_table = NULL;
if (!byte_code || !constant_table) { @@ -1975,7 +1981,8 @@ HRESULT WINAPI D3DXGetShaderConstantTableEx(const DWORD *byte_code, DWORD flags, return D3D_OK; }
- if (flags) FIXME("Flags (%#x) are not handled, yet!\n", flags); + if (flags & ~D3DXCONSTTABLE_LARGEADDRESSAWARE) + FIXME("Flags %#x not handled.\n", flags);
hr = D3DXFindShaderComment(byte_code, MAKEFOURCC('C','T','A','B'), &data, &size); if (hr != D3D_OK) @@ -2014,6 +2021,7 @@ HRESULT WINAPI D3DXGetShaderConstantTableEx(const DWORD *byte_code, DWORD flags, object->size = size; memcpy(object->ctab, data, object->size);
+ object->flags = flags; object->desc.Creator = ctab_header->Creator ? object->ctab + ctab_header->Creator : NULL; object->desc.Version = ctab_header->Version; object->desc.Constants = ctab_header->Constants; diff --git a/dlls/d3dx9_36/tests/shader.c b/dlls/d3dx9_36/tests/shader.c index a698afcb53b..fe3dfde9001 100644 --- a/dlls/d3dx9_36/tests/shader.c +++ b/dlls/d3dx9_36/tests/shader.c @@ -556,6 +556,34 @@ static void test_get_shader_constant_table_ex(void)
ID3DXConstantTable_Release(constant_table);
+ hr = D3DXGetShaderConstantTableEx(shader_with_ctab_constants, D3DXCONSTTABLE_LARGEADDRESSAWARE, &constant_table); + ok(hr == D3D_OK, "Unexpected hr %#x.\n", hr); + ok(!!constant_table, "Unexpected constant table %p.\n", constant_table); + + hr = ID3DXConstantTable_GetDesc(constant_table, &desc); + ok(hr == D3D_OK, "Unexpected hr %#x.\n", hr); + ok(!strcmp(desc.Creator, "Wine project"), "Unexpected Creator %s.\n", debugstr_a(desc.Creator)); + ok(desc.Version == D3DVS_VERSION(3, 0), "Unexpected Version %#x.\n", desc.Version); + ok(desc.Constants == 3, "Unexpected Constants %u.\n", desc.Constants); + + constant = ID3DXConstantTable_GetConstant(constant_table, NULL, 0); + ok(!!constant, "No constant found.\n"); + hr = ID3DXConstantTable_GetConstantDesc(constant_table, constant, &constant_desc, &nb); + ok(hr == D3D_OK, "Unexpected hr %#x.\n", hr); + ok(!strcmp(constant_desc.Name, "Constant1"), "Unexpected Name %s.\n", debugstr_a(constant_desc.Name)); + ok(constant_desc.Class == D3DXPC_VECTOR, "Unexpected Class %u.\n", constant_desc.Class); + ok(constant_desc.Type == D3DXPT_FLOAT, "Unexpected Type %u.\n", constant_desc.Type); + ok(constant_desc.Rows == 1, "Unexpected Rows %u.\n", constant_desc.Rows); + ok(constant_desc.Columns == 4, "Unexpected Columns %u.\n", constant_desc.Columns); + + if (0) + { + /* Native d3dx crashes with this. */ + hr = ID3DXConstantTable_GetConstantDesc(constant_table, "Constant3", &constant_desc, &nb); + } + + ID3DXConstantTable_Release(constant_table); + hr = D3DXGetShaderConstantTableEx(fx_shader_with_ctab, 0, &constant_table); ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr); ok(!constant_table, "D3DXGetShaderConstantTableEx() returned a non-NULL constant table.\n");