[6/6] d3dx9/tests: Added tests for D3DXCreateSkinInfo.
Dylan Smith
dylan.ah.smith at gmail.com
Wed Jun 22 13:24:41 CDT 2011
---
dlls/d3dx9_36/tests/mesh.c | 229 ++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 229 insertions(+), 0 deletions(-)
diff --git a/dlls/d3dx9_36/tests/mesh.c b/dlls/d3dx9_36/tests/mesh.c
index 26a0c10..a07cc9d 100644
--- a/dlls/d3dx9_36/tests/mesh.c
+++ b/dlls/d3dx9_36/tests/mesh.c
@@ -4676,6 +4676,234 @@ cleanup:
free_test_context(test_context);
}
+static void test_create_skin_info(void)
+{
+ HRESULT hr;
+ ID3DXSkinInfo *skininfo = NULL;
+ D3DVERTEXELEMENT9 empty_declaration[] = { D3DDECL_END() };
+ D3DVERTEXELEMENT9 declaration_out[MAX_FVF_DECL_SIZE];
+ const D3DVERTEXELEMENT9 declaration_with_nonzero_stream[] = {
+ {1, 0, D3DDECLTYPE_FLOAT3, 0, D3DDECLUSAGE_POSITION, 0},
+ D3DDECL_END()
+ };
+
+ hr = D3DXCreateSkinInfo(0, empty_declaration, 0, &skininfo);
+ ok(hr == D3D_OK, "Expected D3D_OK, got %#x\n", hr);
+ if (skininfo) IUnknown_Release(skininfo);
+ skininfo = NULL;
+
+ hr = D3DXCreateSkinInfo(1, NULL, 1, &skininfo);
+ ok(hr == D3DERR_INVALIDCALL, "Expected D3DERR_INVALIDCALL, got %#x\n", hr);
+
+ hr = D3DXCreateSkinInfo(1, declaration_with_nonzero_stream, 1, &skininfo);
+ ok(hr == D3DERR_INVALIDCALL, "Expected D3DERR_INVALIDCALL, got %#x\n", hr);
+
+ hr = D3DXCreateSkinInfoFVF(1, 0, 1, &skininfo);
+ ok(hr == D3D_OK, "Expected D3D_OK, got %#x\n", hr);
+ if (skininfo) {
+ DWORD dword_result;
+ FLOAT flt_result;
+ LPCSTR string_result;
+ D3DXMATRIX *transform;
+ D3DXMATRIX identity_matrix;
+
+ /* test initial values */
+ hr = skininfo->lpVtbl->GetDeclaration(skininfo, declaration_out);
+ ok(hr == D3D_OK, "Expected D3D_OK, got %#x\n", hr);
+ if (SUCCEEDED(hr))
+ compare_elements(declaration_out, empty_declaration, __LINE__, 0);
+
+ dword_result = skininfo->lpVtbl->GetNumBones(skininfo);
+ ok(dword_result == 1, "Expected 1, got %u\n", dword_result);
+
+ flt_result = skininfo->lpVtbl->GetMinBoneInfluence(skininfo);
+ ok(flt_result == 0.0f, "Expected 0.0, got %g\n", flt_result);
+
+ string_result = skininfo->lpVtbl->GetBoneName(skininfo, 0);
+ ok(string_result == NULL, "Expected NULL, got %p\n", string_result);
+
+ dword_result = skininfo->lpVtbl->GetFVF(skininfo);
+ ok(dword_result == 0, "Expected 0, got %u\n", dword_result);
+
+ dword_result = skininfo->lpVtbl->GetNumBoneInfluences(skininfo, 0);
+ ok(dword_result == 0, "Expected 0, got %u\n", dword_result);
+
+ dword_result = skininfo->lpVtbl->GetNumBoneInfluences(skininfo, 1);
+ ok(dword_result == 0, "Expected 0, got %u\n", dword_result);
+
+ transform = skininfo->lpVtbl->GetBoneOffsetMatrix(skininfo, -1);
+ ok(transform == NULL, "Expected NULL, got %p\n", transform);
+
+ {
+ /* test [GS]etBoneOffsetMatrix */
+ hr = skininfo->lpVtbl->SetBoneOffsetMatrix(skininfo, 1, &identity_matrix);
+ ok(hr == D3DERR_INVALIDCALL, "Expected D3DERR_INVALIDCALL, got %#x\n", hr);
+
+ hr = skininfo->lpVtbl->SetBoneOffsetMatrix(skininfo, 0, NULL);
+ ok(hr == D3DERR_INVALIDCALL, "Expected D3DERR_INVALIDCALL, got %#x\n", hr);
+
+ D3DXMatrixIdentity(&identity_matrix);
+ hr = skininfo->lpVtbl->SetBoneOffsetMatrix(skininfo, 0, &identity_matrix);
+ ok(hr == D3D_OK, "Expected D3D_OK, got %#x\n", hr);
+
+ transform = skininfo->lpVtbl->GetBoneOffsetMatrix(skininfo, 0);
+ check_matrix(transform, &identity_matrix);
+ }
+
+ {
+ /* test [GS]etBoneName */
+ const char *name_in = "testBoneName";
+ const char *string_result2;
+
+ hr = skininfo->lpVtbl->SetBoneName(skininfo, 1, name_in);
+ ok(hr == D3DERR_INVALIDCALL, "Expected D3DERR_INVALIDCALL, got %#x\n", hr);
+
+ hr = skininfo->lpVtbl->SetBoneName(skininfo, 0, NULL);
+ ok(hr == D3DERR_INVALIDCALL, "Expected D3DERR_INVALIDCALL, got %#x\n", hr);
+
+ hr = skininfo->lpVtbl->SetBoneName(skininfo, 0, name_in);
+ ok(hr == D3D_OK, "Expected D3D_OK, got %#x\n", hr);
+
+ string_result = skininfo->lpVtbl->GetBoneName(skininfo, 0);
+ ok(string_result != NULL, "Expected non-NULL string, got %p\n", string_result);
+ ok(!strcmp(string_result, name_in), "Expected '%s', got '%s'\n", name_in, string_result);
+
+ string_result2 = skininfo->lpVtbl->GetBoneName(skininfo, 0);
+ ok(string_result == string_result2, "Expected %p, got %p\n", string_result, string_result2);
+
+ string_result = skininfo->lpVtbl->GetBoneName(skininfo, 1);
+ ok(string_result == NULL, "Expected NULL, got %p\n", string_result);
+ }
+
+ {
+ /* test [GS]etBoneInfluence */
+ DWORD vertices[2];
+ FLOAT weights[2];
+ int i;
+ DWORD num_influences;
+ DWORD exp_vertices[2];
+ FLOAT exp_weights[2];
+
+ /* vertex and weight arrays untouched when num_influences is 0 */
+ vertices[0] = 0xdeadbeef;
+ weights[0] = FLT_MAX;
+ hr = skininfo->lpVtbl->GetBoneInfluence(skininfo, 0, vertices, weights);
+ ok(hr == D3D_OK, "Expected D3D_OK, got %#x\n", hr);
+ ok(vertices[0] == 0xdeadbeef, "expected 0xdeadbeef, got %#x\n", vertices[0]);
+ ok(weights[0] == FLT_MAX, "expected %g, got %g\n", FLT_MAX, weights[0]);
+
+ hr = skininfo->lpVtbl->GetBoneInfluence(skininfo, 1, vertices, weights);
+ ok(hr == D3DERR_INVALIDCALL, "Expected D3DERR_INVALIDCALL, got %#x\n", hr);
+
+ hr = skininfo->lpVtbl->GetBoneInfluence(skininfo, 0, NULL, NULL);
+ ok(hr == D3DERR_INVALIDCALL, "Expected D3DERR_INVALIDCALL, got %#x\n", hr);
+
+ hr = skininfo->lpVtbl->GetBoneInfluence(skininfo, 0, vertices, NULL);
+ ok(hr == D3D_OK, "Expected D3D_OK, got %#x\n", hr);
+
+ hr = skininfo->lpVtbl->GetBoneInfluence(skininfo, 0, NULL, weights);
+ ok(hr == D3DERR_INVALIDCALL, "Expected D3DERR_INVALIDCALL, got %#x\n", hr);
+
+
+ /* no vertex or weight value checking */
+ exp_vertices[0] = 0;
+ exp_vertices[1] = 0x87654321;
+ exp_weights[0] = 0.5;
+ exp_weights[1] = FP_NAN;
+ num_influences = 2;
+
+ hr = skininfo->lpVtbl->SetBoneInfluence(skininfo, 1, num_influences, vertices, weights);
+ ok(hr == D3DERR_INVALIDCALL, "Expected D3DERR_INVALIDCALL, got %#x\n", hr);
+
+ hr = skininfo->lpVtbl->SetBoneInfluence(skininfo, 0, num_influences, NULL, weights);
+ ok(hr == D3DERR_INVALIDCALL, "Expected D3DERR_INVALIDCALL, got %#x\n", hr);
+
+ hr = skininfo->lpVtbl->SetBoneInfluence(skininfo, 0, num_influences, vertices, NULL);
+ ok(hr == D3DERR_INVALIDCALL, "Expected D3DERR_INVALIDCALL, got %#x\n", hr);
+
+ hr = skininfo->lpVtbl->SetBoneInfluence(skininfo, 0, num_influences, NULL, NULL);
+ ok(hr == D3DERR_INVALIDCALL, "Expected D3DERR_INVALIDCALL, got %#x\n", hr);
+
+ hr = skininfo->lpVtbl->SetBoneInfluence(skininfo, 0, num_influences, exp_vertices, exp_weights);
+ ok(hr == D3D_OK, "Expected D3D_OK, got %#x\n", hr);
+
+ memset(vertices, 0, sizeof(vertices));
+ memset(weights, 0, sizeof(weights));
+ hr = skininfo->lpVtbl->GetBoneInfluence(skininfo, 0, vertices, weights);
+ ok(hr == D3D_OK, "Expected D3D_OK, got %#x\n", hr);
+ for (i = 0; i < num_influences; i++) {
+ ok(exp_vertices[i] == vertices[i],
+ "influence[%d]: expected vertex %u, got %u\n", i, exp_vertices[i], vertices[i]);
+ ok(exp_weights[i] == weights[i],
+ "influence[%d]: expected weights %g, got %g\n", i, exp_weights[i], weights[i]);
+ }
+
+ /* vertices and weights aren't returned after setting num_influences to 0 */
+ memset(vertices, 0, sizeof(vertices));
+ memset(weights, 0, sizeof(weights));
+ hr = skininfo->lpVtbl->SetBoneInfluence(skininfo, 0, 0, vertices, weights);
+ ok(hr == D3D_OK, "Expected D3D_OK, got %#x\n", hr);
+
+ vertices[0] = 0xdeadbeef;
+ weights[0] = FLT_MAX;
+ hr = skininfo->lpVtbl->GetBoneInfluence(skininfo, 0, vertices, weights);
+ ok(hr == D3D_OK, "Expected D3D_OK, got %#x\n", hr);
+ ok(vertices[0] == 0xdeadbeef, "expected vertex 0xdeadbeef, got %u\n", vertices[0]);
+ ok(weights[0] == FLT_MAX, "expected weight %g, got %g\n", FLT_MAX, weights[0]);
+ }
+
+ {
+ /* test [GS]etFVF and [GS]etDeclaration */
+ D3DVERTEXELEMENT9 declaration_in[MAX_FVF_DECL_SIZE];
+ DWORD fvf = D3DFVF_XYZ;
+ DWORD got_fvf;
+
+ hr = skininfo->lpVtbl->SetDeclaration(skininfo, NULL);
+ ok(hr == D3DERR_INVALIDCALL, "Expected D3DERR_INVALIDCALL, got %#x\n", hr);
+
+ hr = skininfo->lpVtbl->SetDeclaration(skininfo, declaration_with_nonzero_stream);
+ ok(hr == D3DERR_INVALIDCALL, "Expected D3DERR_INVALIDCALL, got %#x\n", hr);
+
+ hr = skininfo->lpVtbl->SetFVF(skininfo, 0);
+ ok(hr == D3D_OK, "Expected D3D_OK, got %#x\n", hr);
+
+ hr = D3DXDeclaratorFromFVF(fvf, declaration_in);
+ ok(hr == D3D_OK, "Expected D3D_OK, got %#x\n", hr);
+ hr = skininfo->lpVtbl->SetDeclaration(skininfo, declaration_in);
+ ok(hr == D3D_OK, "Expected D3D_OK, got %#x\n", hr);
+ got_fvf = skininfo->lpVtbl->GetFVF(skininfo);
+ ok(fvf == got_fvf, "Expected %#x, got %#x\n", fvf, got_fvf);
+ hr = skininfo->lpVtbl->GetDeclaration(skininfo, declaration_out);
+ ok(hr == D3D_OK, "Expected D3D_OK, got %#x\n", hr);
+ compare_elements(declaration_out, declaration_in, __LINE__, 0);
+
+ hr = skininfo->lpVtbl->SetDeclaration(skininfo, empty_declaration);
+ ok(hr == D3D_OK, "Expected D3D_OK, got %#x\n", hr);
+ got_fvf = skininfo->lpVtbl->GetFVF(skininfo);
+ ok(got_fvf == 0, "Expected 0, got %#x\n", got_fvf);
+ hr = skininfo->lpVtbl->GetDeclaration(skininfo, declaration_out);
+ ok(hr == D3D_OK, "Expected D3D_OK, got %#x\n", hr);
+ compare_elements(declaration_out, empty_declaration, __LINE__, 0);
+
+ hr = skininfo->lpVtbl->SetFVF(skininfo, fvf);
+ ok(hr == D3D_OK, "Expected D3D_OK, got %#x\n", hr);
+ got_fvf = skininfo->lpVtbl->GetFVF(skininfo);
+ ok(fvf == got_fvf, "Expected %#x, got %#x\n", fvf, got_fvf);
+ hr = skininfo->lpVtbl->GetDeclaration(skininfo, declaration_out);
+ ok(hr == D3D_OK, "Expected D3D_OK, got %#x\n", hr);
+ compare_elements(declaration_out, declaration_in, __LINE__, 0);
+ }
+ }
+ if (skininfo) IUnknown_Release(skininfo);
+ skininfo = NULL;
+
+ hr = D3DXCreateSkinInfoFVF(1, D3DFVF_XYZ, 1, NULL);
+ ok(hr == D3DERR_INVALIDCALL, "Expected D3DERR_INVALIDCALL, got %#x\n", hr);
+
+ hr = D3DXCreateSkinInfo(1, NULL, 1, &skininfo);
+ ok(hr == D3DERR_INVALIDCALL, "Expected D3DERR_INVALIDCALL, got %#x\n", hr);
+}
+
START_TEST(mesh)
{
D3DXBoundProbeTest();
@@ -4695,4 +4923,5 @@ START_TEST(mesh)
test_fvf_decl_conversion();
D3DXGenerateAdjacencyTest();
test_update_semantics();
+ test_create_skin_info();
}
--
1.7.4.1
More information about the wine-patches
mailing list