=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: d3dx9: Implement D3DXLoadVolumeFromVolume.

Alexandre Julliard julliard at winehq.org
Mon Jul 2 13:22:01 CDT 2012


Module: wine
Branch: master
Commit: 9e262e1a9b8baf239f771c2ef9b7b28b6e7b4850
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=9e262e1a9b8baf239f771c2ef9b7b28b6e7b4850

Author: Józef Kucia <joseph.kucia at 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;
+}




More information about the wine-cvs mailing list