Module: wine Branch: master Commit: 9e262e1a9b8baf239f771c2ef9b7b28b6e7b4850 URL: http://source.winehq.org/git/wine.git/?a=commit;h=9e262e1a9b8baf239f771c2ef9...
Author: Józef Kucia joseph.kucia@gmail.com Date: Fri Jun 29 14:17:00 2012 +0200
d3dx9: Implement D3DXLoadVolumeFromVolume.
---
dlls/d3dx9_36/d3dx9_36.spec | 2 +- dlls/d3dx9_36/volume.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletions(-)
diff --git a/dlls/d3dx9_36/d3dx9_36.spec b/dlls/d3dx9_36/d3dx9_36.spec index f6a29df..fbfa5f1 100644 --- a/dlls/d3dx9_36/d3dx9_36.spec +++ b/dlls/d3dx9_36/d3dx9_36.spec @@ -195,7 +195,7 @@ @ 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) -@ stub D3DXLoadVolumeFromVolume(ptr ptr ptr ptr ptr ptr long long) +@ stdcall D3DXLoadVolumeFromVolume(ptr ptr ptr ptr ptr ptr long long) @ stdcall D3DXMatrixAffineTransformation(ptr float ptr ptr ptr) @ stdcall D3DXMatrixAffineTransformation2D(ptr float ptr float ptr) @ stdcall D3DXMatrixDecompose(ptr ptr ptr ptr) diff --git a/dlls/d3dx9_36/volume.c b/dlls/d3dx9_36/volume.c index c008070..51e6072 100644 --- a/dlls/d3dx9_36/volume.c +++ b/dlls/d3dx9_36/volume.c @@ -141,3 +141,46 @@ HRESULT WINAPI D3DXLoadVolumeFromMemory(IDirect3DVolume9 *dst_volume,
return D3D_OK; } + +HRESULT WINAPI D3DXLoadVolumeFromVolume(IDirect3DVolume9 *dst_volume, + const PALETTEENTRY *dst_palette, + const D3DBOX *dst_box, + IDirect3DVolume9 *src_volume, + const PALETTEENTRY *src_palette, + const D3DBOX *src_box, + DWORD filter, + D3DCOLOR color_key) +{ + HRESULT hr; + D3DBOX box; + D3DVOLUME_DESC desc; + D3DLOCKED_BOX locked_box; + + TRACE("(%p, %p, %p, %p, %p, %p, %#x, %#x)\n", + dst_volume, dst_palette, dst_box, src_volume, src_palette, src_box, + filter, color_key); + + if (!dst_volume || !src_volume) return D3DERR_INVALIDCALL; + + IDirect3DVolume9_GetDesc(src_volume, &desc); + + if (!src_box) + { + box.Left = box.Top = 0; + box.Right = desc.Width; + box.Bottom = desc.Height; + box.Front = 0; + box.Back = desc.Depth; + } + else box = *src_box; + + hr = IDirect3DVolume9_LockBox(src_volume, &locked_box, &box, D3DLOCK_READONLY); + if (FAILED(hr)) return hr; + + hr = D3DXLoadVolumeFromMemory(dst_volume, dst_palette, dst_box, + locked_box.pBits, desc.Format, locked_box.RowPitch, locked_box.SlicePitch, + src_palette, &box, filter, color_key); + + IDirect3DVolume9_UnlockBox(src_volume); + return hr; +}