Henri Verbeet : d3d9: Add a separate function for volume initialization.

Alexandre Julliard julliard at winehq.org
Wed Sep 16 15:59:46 CDT 2009


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

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Wed Sep 16 08:37:17 2009 +0200

d3d9: Add a separate function for volume initialization.

---

 dlls/d3d9/d3d9_private.h |    4 +++-
 dlls/d3d9/device.c       |   10 +++-------
 dlls/d3d9/volume.c       |   21 ++++++++++++++++++++-
 3 files changed, 26 insertions(+), 9 deletions(-)

diff --git a/dlls/d3d9/d3d9_private.h b/dlls/d3d9/d3d9_private.h
index 494a6f3..c50f4d7 100644
--- a/dlls/d3d9/d3d9_private.h
+++ b/dlls/d3d9/d3d9_private.h
@@ -236,7 +236,6 @@ extern HRESULT  WINAPI  IDirect3DDevice9Impl_CreateQuery(LPDIRECT3DDEVICE9EX ifa
 /*****************************************************************************
  * IDirect3DVolume9 implementation structure
  */
-extern const IDirect3DVolume9Vtbl Direct3DVolume9_Vtbl;
 typedef struct IDirect3DVolume9Impl
 {
     /* IUnknown fields */
@@ -253,6 +252,9 @@ typedef struct IDirect3DVolume9Impl
     IUnknown                    *forwardReference;
 } IDirect3DVolume9Impl;
 
+HRESULT volume_init(IDirect3DVolume9Impl *volume, IDirect3DDevice9Impl *device, UINT width, UINT height,
+        UINT depth, DWORD usage, WINED3DFORMAT format, WINED3DPOOL pool);
+
 /* ------------------- */
 /* IDirect3DSwapChain9 */
 /* ------------------- */
diff --git a/dlls/d3d9/device.c b/dlls/d3d9/device.c
index e681542..156490a 100644
--- a/dlls/d3d9/device.c
+++ b/dlls/d3d9/device.c
@@ -2149,15 +2149,11 @@ static HRESULT STDMETHODCALLTYPE device_parent_CreateVolume(IWineD3DDeviceParent
         return D3DERR_OUTOFVIDEOMEMORY;
     }
 
-    object->lpVtbl = &Direct3DVolume9_Vtbl;
-    object->ref = 1;
-    hr = IWineD3DDevice_CreateVolume(This->WineD3DDevice, width, height, depth, usage & WINED3DUSAGE_MASK,
-            format, pool, &object->wineD3DVolume, (IUnknown *)object);
+    hr = volume_init(object, This, width, height, depth, usage, format, pool);
     if (FAILED(hr))
     {
-        ERR("(%p) CreateVolume failed, returning %#x\n", iface, hr);
+        WARN("Failed to initialize volume, hr %#x.\n", hr);
         HeapFree(GetProcessHeap(), 0, object);
-        *volume = NULL;
         return hr;
     }
 
@@ -2165,7 +2161,7 @@ static HRESULT STDMETHODCALLTYPE device_parent_CreateVolume(IWineD3DDeviceParent
     object->container = superior;
     object->forwardReference = superior;
 
-    TRACE("(%p) Created volume %p\n", iface, *volume);
+    TRACE("(%p) Created volume %p\n", iface, object);
 
     return hr;
 }
diff --git a/dlls/d3d9/volume.c b/dlls/d3d9/volume.c
index 9f1252a..389da9e 100644
--- a/dlls/d3d9/volume.c
+++ b/dlls/d3d9/volume.c
@@ -223,7 +223,7 @@ static HRESULT WINAPI IDirect3DVolume9Impl_UnlockBox(LPDIRECT3DVOLUME9 iface) {
     return hr;
 }
 
-const IDirect3DVolume9Vtbl Direct3DVolume9_Vtbl =
+static const IDirect3DVolume9Vtbl Direct3DVolume9_Vtbl =
 {
     /* IUnknown */
     IDirect3DVolume9Impl_QueryInterface,
@@ -249,3 +249,22 @@ ULONG WINAPI D3D9CB_DestroyVolume(IWineD3DVolume *pVolume) {
     volumeParent->forwardReference = NULL;
     return IDirect3DVolume9_Release((IDirect3DVolume9*) volumeParent);
 }
+
+HRESULT volume_init(IDirect3DVolume9Impl *volume, IDirect3DDevice9Impl *device, UINT width, UINT height,
+        UINT depth, DWORD usage, WINED3DFORMAT format, WINED3DPOOL pool)
+{
+    HRESULT hr;
+
+    volume->lpVtbl = &Direct3DVolume9_Vtbl;
+    volume->ref = 1;
+
+    hr = IWineD3DDevice_CreateVolume(device->WineD3DDevice, width, height, depth, usage & WINED3DUSAGE_MASK,
+            format, pool, &volume->wineD3DVolume, (IUnknown *)volume);
+    if (FAILED(hr))
+    {
+        WARN("Failed to create wined3d volume, hr %#x.\n", hr);
+        return hr;
+    }
+
+    return D3D_OK;
+}




More information about the wine-cvs mailing list