diff --git a/dlls/d3d8/d3d8_private.h b/dlls/d3d8/d3d8_private.h index af5b77aeb38..867434210db 100644 --- a/dlls/d3d8/d3d8_private.h +++ b/dlls/d3d8/d3d8_private.h @@ -218,7 +218,6 @@ struct IDirect3DDevice8Impl /***************************************************************************** * IDirect3DVolume8 implementation structure */ -extern const IDirect3DVolume8Vtbl Direct3DVolume8_Vtbl; struct IDirect3DVolume8Impl { /* IUnknown fields */ @@ -235,6 +234,9 @@ struct IDirect3DVolume8Impl IUnknown *forwardReference; }; +HRESULT volume_init(IDirect3DVolume8Impl *volume, IDirect3DDevice8Impl *device, UINT width, UINT height, + UINT depth, DWORD usage, WINED3DFORMAT format, WINED3DPOOL pool); + /* ------------------- */ /* IDirect3DSwapChain8 */ /* ------------------- */ diff --git a/dlls/d3d8/device.c b/dlls/d3d8/device.c index 95425e54728..7cb85630a5a 100644 --- a/dlls/d3d8/device.c +++ b/dlls/d3d8/device.c @@ -2753,15 +2753,11 @@ static HRESULT STDMETHODCALLTYPE device_parent_CreateVolume(IWineD3DDeviceParent return D3DERR_OUTOFVIDEOMEMORY; } - object->lpVtbl = &Direct3DVolume8_Vtbl; - object->ref = 1; - hr = IWineD3DDevice_CreateVolume(This->WineD3DDevice, width, height, depth, usage, - 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; } @@ -2769,7 +2765,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/d3d8/volume.c b/dlls/d3d8/volume.c index 968b5348a87..7f525d485a4 100644 --- a/dlls/d3d8/volume.c +++ b/dlls/d3d8/volume.c @@ -202,7 +202,7 @@ static HRESULT WINAPI IDirect3DVolume8Impl_UnlockBox(LPDIRECT3DVOLUME8 iface) { return hr; } -const IDirect3DVolume8Vtbl Direct3DVolume8_Vtbl = +static const IDirect3DVolume8Vtbl Direct3DVolume8_Vtbl = { /* IUnknown */ IDirect3DVolume8Impl_QueryInterface, @@ -228,3 +228,22 @@ ULONG WINAPI D3D8CB_DestroyVolume(IWineD3DVolume *pVolume) { volumeParent->forwardReference = NULL; return IDirect3DVolume8_Release((IDirect3DVolume8*) volumeParent); } + +HRESULT volume_init(IDirect3DVolume8Impl *volume, IDirect3DDevice8Impl *device, UINT width, UINT height, + UINT depth, DWORD usage, WINED3DFORMAT format, WINED3DPOOL pool) +{ + HRESULT hr; + + volume->lpVtbl = &Direct3DVolume8_Vtbl; + volume->ref = 1; + + hr = IWineD3DDevice_CreateVolume(device->WineD3DDevice, width, height, depth, usage, + format, pool, &volume->wineD3DVolume, (IUnknown *)volume); + if (FAILED(hr)) + { + WARN("Failed to create wined3d volume, hr %#x.\n", hr); + return hr; + } + + return D3D_OK; +}