Vijay Kiran Kamuju : d3dx9: Generate ID3DXSkinInfo in D3DXLoadSkinMeshFromXof() when needed.
Alexandre Julliard
julliard at winehq.org
Fri Aug 23 09:31:25 CDT 2019
Module: wine
Branch: stable
Commit: e06b8d3e8d37143800f00dcbf4f0f403d2a698e2
URL: https://source.winehq.org/git/wine.git/?a=commit;h=e06b8d3e8d37143800f00dcbf4f0f403d2a698e2
Author: Vijay Kiran Kamuju <infyquest at gmail.com>
Date: Thu Apr 4 16:54:35 2019 +0200
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 at gmail.com>
Signed-off-by: Matteo Bruni <mbruni at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
(cherry picked from commit 70d722340ad546ab988fffe4577e0c0ebe35a982)
Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>
---
dlls/d3dx9_36/mesh.c | 7 ++++++
dlls/d3dx9_36/tests/mesh.c | 58 +++++++++++++++++++++-------------------------
2 files changed, 34 insertions(+), 31 deletions(-)
diff --git a/dlls/d3dx9_36/mesh.c b/dlls/d3dx9_36/mesh.c
index acbb247..40f0355 100644
--- a/dlls/d3dx9_36/mesh.c
+++ b/dlls/d3dx9_36/mesh.c
@@ -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:
diff --git a/dlls/d3dx9_36/tests/mesh.c b/dlls/d3dx9_36/tests/mesh.c
index 90d817d..ca14a76 100644
--- a/dlls/d3dx9_36/tests/mesh.c
+++ b/dlls/d3dx9_36/tests/mesh.c
@@ -11319,53 +11319,49 @@ 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);
-
- fvf = skin_info->lpVtbl->GetFVF(skin_info);
- ok(fvf == D3DFVF_XYZ, "Got unexpected value %u.\n", fvf);
+ 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);
- count = skin_info->lpVtbl->GetNumBones(skin_info);
- ok(!count, "Got unexpected value %u.\n", count);
+ fvf = skin_info->lpVtbl->GetFVF(skin_info);
+ ok(fvf == D3DFVF_XYZ, "Got unexpected value %u.\n", fvf);
- influence = skin_info->lpVtbl->GetMinBoneInfluence(skin_info);
- ok(!influence, "Got unexpected value %.8e.\n", influence);
+ count = skin_info->lpVtbl->GetNumBones(skin_info);
+ ok(!count, "Got unexpected value %u.\n", count);
- 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]);
- 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]);
+ influence = skin_info->lpVtbl->GetMinBoneInfluence(skin_info);
+ ok(!influence, "Got unexpected value %.8e.\n", influence);
- bone_name = skin_info->lpVtbl->GetBoneName(skin_info, 0);
- ok(!bone_name, "Got unexpected value %p.\n", bone_name);
+ memset(max_influences, 0x55, sizeof(max_influences));
+ hr = skin_info->lpVtbl->GetMaxVertexInfluences(skin_info, max_influences);
+ 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]);
- count = skin_info->lpVtbl->GetNumBoneInfluences(skin_info, 0);
- ok(!count, "Got unexpected value %u.\n", count);
+ bone_name = skin_info->lpVtbl->GetBoneName(skin_info, 0);
+ ok(!bone_name, "Got unexpected value %p.\n", bone_name);
- count = skin_info->lpVtbl->GetNumBoneInfluences(skin_info, 1);
- ok(!count, "Got unexpected value %u.\n", count);
+ count = skin_info->lpVtbl->GetNumBoneInfluences(skin_info, 0);
+ ok(!count, "Got unexpected value %u.\n", count);
- matrix = skin_info->lpVtbl->GetBoneOffsetMatrix(skin_info, -1);
- ok(!matrix, "Got unexpected value %p.\n", matrix);
+ count = skin_info->lpVtbl->GetNumBoneInfluences(skin_info, 1);
+ ok(!count, "Got unexpected value %u.\n", count);
- matrix = skin_info->lpVtbl->GetBoneOffsetMatrix(skin_info, 0);
- ok(!matrix, "Got unexpected value %p.\n", matrix);
+ matrix = skin_info->lpVtbl->GetBoneOffsetMatrix(skin_info, -1);
+ ok(!matrix, "Got unexpected value %p.\n", matrix);
- skin_info->lpVtbl->Release(skin_info);
- }
+ matrix = skin_info->lpVtbl->GetBoneOffsetMatrix(skin_info, 0);
+ 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);
More information about the wine-cvs
mailing list