d3dx9: Generate ID3DXSkinInfo in D3DXLoadSkinMeshFromXof() when needed.

Based on a patch by Michael Müller.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=33904
Signed-off-by: Vijay Kiran Kamuju <infyquest@gmail.com>
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 70d722340a)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
oldstable
Vijay Kiran Kamuju 2019-04-04 16:54:35 +02:00 committed by Michael Stefaniuc
parent ec32204921
commit e06b8d3e8d
2 changed files with 34 additions and 31 deletions

View File

@ -3332,6 +3332,13 @@ static HRESULT parse_mesh(ID3DXFileData *filedata, struct mesh_data *mesh_data,
goto end;
}
if ((provide_flags & PROVIDE_SKININFO) && !mesh_data->skin_info)
{
if (FAILED(hr = D3DXCreateSkinInfoFVF(mesh_data->num_vertices, mesh_data->fvf,
mesh_data->nb_bones, &mesh_data->skin_info)))
goto end;
}
hr = D3D_OK;
end:

View File

@ -11319,15 +11319,13 @@ static void test_load_skin_mesh_from_xof(void)
ok(!materials, "Got unexpected value %p.\n", materials);
ok(!effects, "Got unexpected value %p.\n", effects);
ok(!count, "Got unexpected value %u.\n", count);
todo_wine ok(!!skin_info, "Got unexpected value %p.\n", skin_info);
ok(!!skin_info, "Got unexpected value %p.\n", skin_info);
ok(!!mesh, "Got unexpected value %p.\n", mesh);
count = mesh->lpVtbl->GetNumVertices(mesh);
ok(count == 3, "Got unexpected value %u.\n", count);
count = mesh->lpVtbl->GetNumFaces(mesh);
ok(count == 1, "Got unexpected value %u.\n", count);
if (skin_info)
{
hr = skin_info->lpVtbl->GetDeclaration(skin_info, declaration);
ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
compare_elements(declaration, expected_declaration, __LINE__, 0);
@ -11343,8 +11341,8 @@ static void test_load_skin_mesh_from_xof(void)
memset(max_influences, 0x55, sizeof(max_influences));
hr = skin_info->lpVtbl->GetMaxVertexInfluences(skin_info, max_influences);
ok(hr == D3D_OK, "Got unexpected value %#x.\n", hr);
ok(!max_influences[0], "Got unexpected value %u.\n", max_influences[0]);
todo_wine ok(hr == D3D_OK, "Got unexpected value %#x.\n", hr);
todo_wine ok(!max_influences[0], "Got unexpected value %u.\n", max_influences[0]);
ok(max_influences[1] == 0x55555555, "Got unexpected value %u.\n", max_influences[1]);
ok(max_influences[2] == 0x55555555, "Got unexpected value %u.\n", max_influences[2]);
@ -11364,8 +11362,6 @@ static void test_load_skin_mesh_from_xof(void)
ok(!matrix, "Got unexpected value %p.\n", matrix);
skin_info->lpVtbl->Release(skin_info);
}
mesh->lpVtbl->Release(mesh);
adjacency->lpVtbl->Release(adjacency);
file_data->lpVtbl->Release(file_data);