From b267cc2927bb82856d5fa244ab009dc2718e45e4 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=B3zef=20Kucia?= Date: Tue, 3 Jul 2012 16:06:47 +0200 Subject: [PATCH] d3dx9: Implement D3DXLoadVolumeFromFile. --- dlls/d3dx9_36/d3dx9_36.spec | 4 +-- dlls/d3dx9_36/volume.c | 59 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 2 deletions(-) diff --git a/dlls/d3dx9_36/d3dx9_36.spec b/dlls/d3dx9_36/d3dx9_36.spec index ac1a197a6ff..58e863684de 100644 --- a/dlls/d3dx9_36/d3dx9_36.spec +++ b/dlls/d3dx9_36/d3dx9_36.spec @@ -189,9 +189,9 @@ @ stdcall D3DXLoadSurfaceFromResourceA(ptr ptr ptr ptr str ptr long long ptr) @ stdcall D3DXLoadSurfaceFromResourceW(ptr ptr ptr ptr wstr ptr long long ptr) @ stdcall D3DXLoadSurfaceFromSurface(ptr ptr ptr ptr ptr ptr long long) -@ stub D3DXLoadVolumeFromFileA(ptr ptr ptr ptr ptr long long ptr) +@ stdcall D3DXLoadVolumeFromFileA(ptr ptr ptr ptr ptr long long ptr) @ stdcall D3DXLoadVolumeFromFileInMemory(ptr ptr ptr ptr long ptr long long ptr) -@ stub D3DXLoadVolumeFromFileW(ptr ptr ptr ptr ptr long long ptr) +@ stdcall D3DXLoadVolumeFromFileW(ptr ptr ptr ptr ptr long long ptr) @ stdcall D3DXLoadVolumeFromMemory(ptr ptr ptr ptr long long long ptr ptr long long) @ stub D3DXLoadVolumeFromResourceA(ptr ptr ptr long ptr ptr long long ptr) @ stub D3DXLoadVolumeFromResourceW(ptr ptr ptr long ptr ptr long long ptr) diff --git a/dlls/d3dx9_36/volume.c b/dlls/d3dx9_36/volume.c index 9132ecd40a9..6164cc37460 100644 --- a/dlls/d3dx9_36/volume.c +++ b/dlls/d3dx9_36/volume.c @@ -21,6 +21,65 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3dx); +HRESULT WINAPI D3DXLoadVolumeFromFileA(IDirect3DVolume9 *dst_volume, + const PALETTEENTRY *dst_palette, + const D3DBOX *dst_box, + const char *filename, + const D3DBOX *src_box, + DWORD filter, + D3DCOLOR color_key, + D3DXIMAGE_INFO *info) +{ + HRESULT hr; + int length; + WCHAR *filenameW; + + TRACE("(%p, %p, %p, %s, %p, %#x, %#x, %p)\n", + dst_volume, dst_palette, dst_box, debugstr_a(filename), src_box, + filter, color_key, info); + + if (!dst_volume || !filename) return D3DERR_INVALIDCALL; + + length = MultiByteToWideChar(CP_ACP, 0, filename, -1, NULL, 0); + filenameW = HeapAlloc(GetProcessHeap(), 0, length * sizeof(*filenameW)); + if (!filenameW) return E_OUTOFMEMORY; + + hr = D3DXLoadVolumeFromFileW(dst_volume, dst_palette, dst_box, filenameW, + src_box, filter, color_key, info); + HeapFree(GetProcessHeap(), 0, filenameW); + + return hr; +} + +HRESULT WINAPI D3DXLoadVolumeFromFileW(IDirect3DVolume9 *dst_volume, + const PALETTEENTRY *dst_palette, + const D3DBOX *dst_box, + const WCHAR *filename, + const D3DBOX *src_box, + DWORD filter, + D3DCOLOR color_key, + D3DXIMAGE_INFO *info) +{ + HRESULT hr; + void *data; + UINT data_size; + + TRACE("(%p, %p, %p, %s, %p, %#x, %#x, %p)\n", + dst_volume, dst_palette, dst_box, debugstr_w(filename), src_box, + filter, color_key, info); + + if (!dst_volume || !filename) return D3DERR_INVALIDCALL; + + if (FAILED(map_view_of_file(filename, &data, &data_size))) + return D3DXERR_INVALIDDATA; + + hr = D3DXLoadVolumeFromFileInMemory(dst_volume, dst_palette, dst_box, + data, data_size, src_box, filter, color_key, info); + UnmapViewOfFile(data); + + return hr; +} + HRESULT WINAPI D3DXLoadVolumeFromMemory(IDirect3DVolume9 *dst_volume, const PALETTEENTRY *dst_palette, const D3DBOX *dst_box, -- 2.11.4.GIT