Module: wine Branch: master Commit: 66693a6e80aa98cb82ca187f0a1347b5a77b38b0 URL: http://source.winehq.org/git/wine.git/?a=commit;h=66693a6e80aa98cb82ca187f0a...
Author: Dylan Smith dylan.ah.smith@gmail.com Date: Mon Jun 6 12:54:52 2011 -0400
d3dx9: Implement D3DXLoadMeshHierarchyFromX.
---
dlls/d3dx9_36/d3dx9_36.spec | 4 +- dlls/d3dx9_36/mesh.c | 60 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 2 deletions(-)
diff --git a/dlls/d3dx9_36/d3dx9_36.spec b/dlls/d3dx9_36/d3dx9_36.spec index 9f42937..5a6e6e6 100644 --- a/dlls/d3dx9_36/d3dx9_36.spec +++ b/dlls/d3dx9_36/d3dx9_36.spec @@ -173,9 +173,9 @@ @ stub D3DXLoadMeshFromXResource(long ptr ptr long ptr ptr ptr ptr ptr ptr) @ stub D3DXLoadMeshFromXW(ptr long ptr ptr ptr ptr ptr ptr) @ stub D3DXLoadMeshFromXof(ptr long ptr ptr ptr ptr ptr ptr) -@ stub D3DXLoadMeshHierarchyFromXA(ptr long ptr ptr ptr ptr ptr) +@ stdcall D3DXLoadMeshHierarchyFromXA(str long ptr ptr ptr ptr ptr) @ stdcall D3DXLoadMeshHierarchyFromXInMemory(ptr long long ptr ptr ptr ptr ptr) -@ stub D3DXLoadMeshHierarchyFromXW(ptr long ptr ptr ptr ptr ptr) +@ stdcall D3DXLoadMeshHierarchyFromXW(wstr long ptr ptr ptr ptr ptr) @ stub D3DXLoadPatchMeshFromXof(ptr long ptr ptr ptr long ptr) @ stub D3DXLoadPRTBufferFromFileA(ptr ptr) @ stub D3DXLoadPRTBufferFromFileW(ptr ptr) diff --git a/dlls/d3dx9_36/mesh.c b/dlls/d3dx9_36/mesh.c index da40402..c05b268 100644 --- a/dlls/d3dx9_36/mesh.c +++ b/dlls/d3dx9_36/mesh.c @@ -2724,6 +2724,66 @@ cleanup: return hr; }
+HRESULT WINAPI D3DXLoadMeshHierarchyFromXA(LPCSTR filename, + DWORD options, + LPDIRECT3DDEVICE9 device, + LPD3DXALLOCATEHIERARCHY alloc_hier, + LPD3DXLOADUSERDATA load_user_data, + LPD3DXFRAME *frame_hierarchy, + LPD3DXANIMATIONCONTROLLER *anim_controller) +{ + HRESULT hr; + int len; + LPWSTR filenameW; + + TRACE("(%s, %x, %p, %p, %p, %p, %p)\n", debugstr_a(filename), options, + device, alloc_hier, load_user_data, frame_hierarchy, anim_controller); + + if (!filename) + return D3DERR_INVALIDCALL; + + len = MultiByteToWideChar(CP_ACP, 0, filename, -1, NULL, 0); + filenameW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + if (!filenameW) return E_OUTOFMEMORY; + MultiByteToWideChar(CP_ACP, 0, filename, -1, filenameW, len); + + hr = D3DXLoadMeshHierarchyFromXW(filenameW, options, device, + alloc_hier, load_user_data, frame_hierarchy, anim_controller); + HeapFree(GetProcessHeap(), 0, filenameW); + + return hr; +} + +HRESULT WINAPI D3DXLoadMeshHierarchyFromXW(LPCWSTR filename, + DWORD options, + LPDIRECT3DDEVICE9 device, + LPD3DXALLOCATEHIERARCHY alloc_hier, + LPD3DXLOADUSERDATA load_user_data, + LPD3DXFRAME *frame_hierarchy, + LPD3DXANIMATIONCONTROLLER *anim_controller) +{ + HRESULT hr; + DWORD size; + LPVOID buffer; + + TRACE("(%s, %x, %p, %p, %p, %p, %p)\n", debugstr_w(filename), options, + device, alloc_hier, load_user_data, frame_hierarchy, anim_controller); + + if (!filename) + return D3DERR_INVALIDCALL; + + hr = map_view_of_file(filename, &buffer, &size); + if (FAILED(hr)) + return D3DXERR_INVALIDDATA; + + hr = D3DXLoadMeshHierarchyFromXInMemory(buffer, size, options, device, + alloc_hier, load_user_data, frame_hierarchy, anim_controller); + + UnmapViewOfFile(buffer); + + return hr; +} + static HRESULT filedata_get_name(IDirectXFileData *filedata, char **name) { HRESULT hr;