wined3d: Don't free D3D volumes until the wined3d volume is destroyed.
This commit is contained in:
parent
ff923245e1
commit
e9000d2e6c
|
@ -649,6 +649,5 @@ size_t parse_token(const DWORD* pToken);
|
||||||
|
|
||||||
/* Callbacks */
|
/* Callbacks */
|
||||||
extern ULONG WINAPI D3D8CB_DestroySwapChain (IWineD3DSwapChain *pSwapChain);
|
extern ULONG WINAPI D3D8CB_DestroySwapChain (IWineD3DSwapChain *pSwapChain);
|
||||||
extern ULONG WINAPI D3D8CB_DestroyVolume(IWineD3DVolume *pVolume);
|
|
||||||
|
|
||||||
#endif /* __WINE_D3DX8_PRIVATE_H */
|
#endif /* __WINE_D3DX8_PRIVATE_H */
|
||||||
|
|
|
@ -2762,6 +2762,9 @@ static HRESULT STDMETHODCALLTYPE device_parent_CreateVolume(IWineD3DDeviceParent
|
||||||
}
|
}
|
||||||
|
|
||||||
*volume = object->wineD3DVolume;
|
*volume = object->wineD3DVolume;
|
||||||
|
IWineD3DVolume_AddRef(*volume);
|
||||||
|
IDirect3DVolume8_Release((IDirect3DVolume8 *)object);
|
||||||
|
|
||||||
object->container = superior;
|
object->container = superior;
|
||||||
object->forwardReference = superior;
|
object->forwardReference = superior;
|
||||||
|
|
||||||
|
|
|
@ -52,6 +52,14 @@ static ULONG WINAPI IDirect3DVolume8Impl_AddRef(LPDIRECT3DVOLUME8 iface) {
|
||||||
/* No container, handle our own refcounting */
|
/* No container, handle our own refcounting */
|
||||||
ULONG ref = InterlockedIncrement(&This->ref);
|
ULONG ref = InterlockedIncrement(&This->ref);
|
||||||
TRACE("(%p) : AddRef from %d\n", This, ref - 1);
|
TRACE("(%p) : AddRef from %d\n", This, ref - 1);
|
||||||
|
|
||||||
|
if (ref == 1)
|
||||||
|
{
|
||||||
|
wined3d_mutex_lock();
|
||||||
|
IWineD3DVolume_AddRef(This->wineD3DVolume);
|
||||||
|
wined3d_mutex_unlock();
|
||||||
|
}
|
||||||
|
|
||||||
return ref;
|
return ref;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -75,8 +83,6 @@ static ULONG WINAPI IDirect3DVolume8Impl_Release(LPDIRECT3DVOLUME8 iface) {
|
||||||
wined3d_mutex_lock();
|
wined3d_mutex_lock();
|
||||||
IWineD3DVolume_Release(This->wineD3DVolume);
|
IWineD3DVolume_Release(This->wineD3DVolume);
|
||||||
wined3d_mutex_unlock();
|
wined3d_mutex_unlock();
|
||||||
|
|
||||||
HeapFree(GetProcessHeap(), 0, This);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return ref;
|
return ref;
|
||||||
|
@ -219,16 +225,16 @@ static const IDirect3DVolume8Vtbl Direct3DVolume8_Vtbl =
|
||||||
IDirect3DVolume8Impl_UnlockBox
|
IDirect3DVolume8Impl_UnlockBox
|
||||||
};
|
};
|
||||||
|
|
||||||
ULONG WINAPI D3D8CB_DestroyVolume(IWineD3DVolume *pVolume) {
|
static void STDMETHODCALLTYPE volume_wined3d_object_destroyed(void *parent)
|
||||||
IDirect3DVolume8Impl* volumeParent;
|
{
|
||||||
|
HeapFree(GetProcessHeap(), 0, parent);
|
||||||
IWineD3DVolume_GetParent(pVolume, (IUnknown **) &volumeParent);
|
|
||||||
/* GetParent's AddRef was forwarded to an object in destruction.
|
|
||||||
* Releasing it here again would cause an endless recursion. */
|
|
||||||
volumeParent->forwardReference = NULL;
|
|
||||||
return IDirect3DVolume8_Release((IDirect3DVolume8*) volumeParent);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const struct wined3d_parent_ops d3d8_volume_wined3d_parent_ops =
|
||||||
|
{
|
||||||
|
volume_wined3d_object_destroyed,
|
||||||
|
};
|
||||||
|
|
||||||
HRESULT volume_init(IDirect3DVolume8Impl *volume, IDirect3DDevice8Impl *device, UINT width, UINT height,
|
HRESULT volume_init(IDirect3DVolume8Impl *volume, IDirect3DDevice8Impl *device, UINT width, UINT height,
|
||||||
UINT depth, DWORD usage, WINED3DFORMAT format, WINED3DPOOL pool)
|
UINT depth, DWORD usage, WINED3DFORMAT format, WINED3DPOOL pool)
|
||||||
{
|
{
|
||||||
|
@ -238,7 +244,7 @@ HRESULT volume_init(IDirect3DVolume8Impl *volume, IDirect3DDevice8Impl *device,
|
||||||
volume->ref = 1;
|
volume->ref = 1;
|
||||||
|
|
||||||
hr = IWineD3DDevice_CreateVolume(device->WineD3DDevice, width, height, depth, usage,
|
hr = IWineD3DDevice_CreateVolume(device->WineD3DDevice, width, height, depth, usage,
|
||||||
format, pool, &volume->wineD3DVolume, (IUnknown *)volume);
|
format, pool, &volume->wineD3DVolume, (IUnknown *)volume, &d3d8_volume_wined3d_parent_ops);
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
{
|
{
|
||||||
WARN("Failed to create wined3d volume, hr %#x.\n", hr);
|
WARN("Failed to create wined3d volume, hr %#x.\n", hr);
|
||||||
|
|
|
@ -58,7 +58,7 @@ static ULONG WINAPI IDirect3DVolumeTexture8Impl_Release(LPDIRECT3DVOLUMETEXTURE8
|
||||||
|
|
||||||
if (ref == 0) {
|
if (ref == 0) {
|
||||||
wined3d_mutex_lock();
|
wined3d_mutex_lock();
|
||||||
IWineD3DVolumeTexture_Destroy(This->wineD3DVolumeTexture, D3D8CB_DestroyVolume);
|
IWineD3DVolumeTexture_Destroy(This->wineD3DVolumeTexture);
|
||||||
wined3d_mutex_unlock();
|
wined3d_mutex_unlock();
|
||||||
|
|
||||||
IUnknown_Release(This->parentDevice);
|
IUnknown_Release(This->parentDevice);
|
||||||
|
|
|
@ -538,6 +538,5 @@ typedef struct IDirect3DQuery9Impl {
|
||||||
|
|
||||||
/* Callbacks */
|
/* Callbacks */
|
||||||
extern ULONG WINAPI D3D9CB_DestroySwapChain (IWineD3DSwapChain *pSwapChain);
|
extern ULONG WINAPI D3D9CB_DestroySwapChain (IWineD3DSwapChain *pSwapChain);
|
||||||
extern ULONG WINAPI D3D9CB_DestroyVolume(IWineD3DVolume *pVolume);
|
|
||||||
|
|
||||||
#endif /* __WINE_D3D9_PRIVATE_H */
|
#endif /* __WINE_D3D9_PRIVATE_H */
|
||||||
|
|
|
@ -2158,6 +2158,9 @@ static HRESULT STDMETHODCALLTYPE device_parent_CreateVolume(IWineD3DDeviceParent
|
||||||
}
|
}
|
||||||
|
|
||||||
*volume = object->wineD3DVolume;
|
*volume = object->wineD3DVolume;
|
||||||
|
IWineD3DVolume_AddRef(*volume);
|
||||||
|
IDirect3DVolume9_Release((IDirect3DVolume9 *)object);
|
||||||
|
|
||||||
object->container = superior;
|
object->container = superior;
|
||||||
object->forwardReference = superior;
|
object->forwardReference = superior;
|
||||||
|
|
||||||
|
|
|
@ -53,6 +53,14 @@ static ULONG WINAPI IDirect3DVolume9Impl_AddRef(LPDIRECT3DVOLUME9 iface) {
|
||||||
/* No container, handle our own refcounting */
|
/* No container, handle our own refcounting */
|
||||||
ULONG ref = InterlockedIncrement(&This->ref);
|
ULONG ref = InterlockedIncrement(&This->ref);
|
||||||
TRACE("(%p) : AddRef from %d\n", This, ref - 1);
|
TRACE("(%p) : AddRef from %d\n", This, ref - 1);
|
||||||
|
|
||||||
|
if (ref == 1)
|
||||||
|
{
|
||||||
|
wined3d_mutex_lock();
|
||||||
|
IWineD3DVolume_AddRef(This->wineD3DVolume);
|
||||||
|
wined3d_mutex_unlock();
|
||||||
|
}
|
||||||
|
|
||||||
return ref;
|
return ref;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -75,8 +83,6 @@ static ULONG WINAPI IDirect3DVolume9Impl_Release(LPDIRECT3DVOLUME9 iface) {
|
||||||
wined3d_mutex_lock();
|
wined3d_mutex_lock();
|
||||||
IWineD3DVolume_Release(This->wineD3DVolume);
|
IWineD3DVolume_Release(This->wineD3DVolume);
|
||||||
wined3d_mutex_unlock();
|
wined3d_mutex_unlock();
|
||||||
|
|
||||||
HeapFree(GetProcessHeap(), 0, This);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return ref;
|
return ref;
|
||||||
|
@ -240,16 +246,16 @@ static const IDirect3DVolume9Vtbl Direct3DVolume9_Vtbl =
|
||||||
IDirect3DVolume9Impl_UnlockBox
|
IDirect3DVolume9Impl_UnlockBox
|
||||||
};
|
};
|
||||||
|
|
||||||
ULONG WINAPI D3D9CB_DestroyVolume(IWineD3DVolume *pVolume) {
|
static void STDMETHODCALLTYPE volume_wined3d_object_destroyed(void *parent)
|
||||||
IDirect3DVolume9Impl* volumeParent;
|
{
|
||||||
|
HeapFree(GetProcessHeap(), 0, parent);
|
||||||
IWineD3DVolume_GetParent(pVolume, (IUnknown **) &volumeParent);
|
|
||||||
/* GetParent's AddRef was forwarded to an object in destruction.
|
|
||||||
* Releasing it here again would cause an endless recursion. */
|
|
||||||
volumeParent->forwardReference = NULL;
|
|
||||||
return IDirect3DVolume9_Release((IDirect3DVolume9*) volumeParent);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const struct wined3d_parent_ops d3d9_volume_wined3d_parent_ops =
|
||||||
|
{
|
||||||
|
volume_wined3d_object_destroyed,
|
||||||
|
};
|
||||||
|
|
||||||
HRESULT volume_init(IDirect3DVolume9Impl *volume, IDirect3DDevice9Impl *device, UINT width, UINT height,
|
HRESULT volume_init(IDirect3DVolume9Impl *volume, IDirect3DDevice9Impl *device, UINT width, UINT height,
|
||||||
UINT depth, DWORD usage, WINED3DFORMAT format, WINED3DPOOL pool)
|
UINT depth, DWORD usage, WINED3DFORMAT format, WINED3DPOOL pool)
|
||||||
{
|
{
|
||||||
|
@ -259,7 +265,7 @@ HRESULT volume_init(IDirect3DVolume9Impl *volume, IDirect3DDevice9Impl *device,
|
||||||
volume->ref = 1;
|
volume->ref = 1;
|
||||||
|
|
||||||
hr = IWineD3DDevice_CreateVolume(device->WineD3DDevice, width, height, depth, usage & WINED3DUSAGE_MASK,
|
hr = IWineD3DDevice_CreateVolume(device->WineD3DDevice, width, height, depth, usage & WINED3DUSAGE_MASK,
|
||||||
format, pool, &volume->wineD3DVolume, (IUnknown *)volume);
|
format, pool, &volume->wineD3DVolume, (IUnknown *)volume, &d3d9_volume_wined3d_parent_ops);
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
{
|
{
|
||||||
WARN("Failed to create wined3d volume, hr %#x.\n", hr);
|
WARN("Failed to create wined3d volume, hr %#x.\n", hr);
|
||||||
|
|
|
@ -59,7 +59,7 @@ static ULONG WINAPI IDirect3DVolumeTexture9Impl_Release(LPDIRECT3DVOLUMETEXTURE9
|
||||||
|
|
||||||
if (ref == 0) {
|
if (ref == 0) {
|
||||||
wined3d_mutex_lock();
|
wined3d_mutex_lock();
|
||||||
IWineD3DVolumeTexture_Destroy(This->wineD3DVolumeTexture, D3D9CB_DestroyVolume);
|
IWineD3DVolumeTexture_Destroy(This->wineD3DVolumeTexture);
|
||||||
wined3d_mutex_unlock();
|
wined3d_mutex_unlock();
|
||||||
|
|
||||||
IDirect3DDevice9Ex_Release(This->parentDevice);
|
IDirect3DDevice9Ex_Release(This->parentDevice);
|
||||||
|
|
|
@ -1036,9 +1036,9 @@ static HRESULT WINAPI IWineD3DDeviceImpl_CreateVolumeTexture(IWineD3DDevice *ifa
|
||||||
return WINED3D_OK;
|
return WINED3D_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI IWineD3DDeviceImpl_CreateVolume(IWineD3DDevice *iface,
|
static HRESULT WINAPI IWineD3DDeviceImpl_CreateVolume(IWineD3DDevice *iface, UINT Width, UINT Height,
|
||||||
UINT Width, UINT Height, UINT Depth, DWORD Usage, WINED3DFORMAT Format,
|
UINT Depth, DWORD Usage, WINED3DFORMAT Format, WINED3DPOOL Pool, IWineD3DVolume **ppVolume,
|
||||||
WINED3DPOOL Pool, IWineD3DVolume **ppVolume, IUnknown *parent)
|
IUnknown *parent, const struct wined3d_parent_ops *parent_ops)
|
||||||
{
|
{
|
||||||
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
|
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
|
||||||
IWineD3DVolumeImpl *object;
|
IWineD3DVolumeImpl *object;
|
||||||
|
@ -1055,7 +1055,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_CreateVolume(IWineD3DDevice *iface,
|
||||||
return WINED3DERR_OUTOFVIDEOMEMORY;
|
return WINED3DERR_OUTOFVIDEOMEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
hr = volume_init(object, This, Width, Height, Depth, Usage, Format, Pool, parent);
|
hr = volume_init(object, This, Width, Height, Depth, Usage, Format, Pool, parent, parent_ops);
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
{
|
{
|
||||||
WARN("Failed to initialize volume, returning %#x.\n", hr);
|
WARN("Failed to initialize volume, returning %#x.\n", hr);
|
||||||
|
|
|
@ -123,6 +123,7 @@ static ULONG WINAPI IWineD3DVolumeImpl_Release(IWineD3DVolume *iface) {
|
||||||
ref = InterlockedDecrement(&This->resource.ref);
|
ref = InterlockedDecrement(&This->resource.ref);
|
||||||
if (ref == 0) {
|
if (ref == 0) {
|
||||||
resource_cleanup((IWineD3DResource *)iface);
|
resource_cleanup((IWineD3DResource *)iface);
|
||||||
|
This->parent_ops->wined3d_object_destroyed(This->resource.parent);
|
||||||
HeapFree(GetProcessHeap(), 0, This);
|
HeapFree(GetProcessHeap(), 0, This);
|
||||||
}
|
}
|
||||||
return ref;
|
return ref;
|
||||||
|
@ -374,8 +375,9 @@ static const IWineD3DVolumeVtbl IWineD3DVolume_Vtbl =
|
||||||
IWineD3DVolumeImpl_SetContainer
|
IWineD3DVolumeImpl_SetContainer
|
||||||
};
|
};
|
||||||
|
|
||||||
HRESULT volume_init(IWineD3DVolumeImpl *volume, IWineD3DDeviceImpl *device, UINT width, UINT height,
|
HRESULT volume_init(IWineD3DVolumeImpl *volume, IWineD3DDeviceImpl *device, UINT width,
|
||||||
UINT depth, DWORD usage, WINED3DFORMAT format, WINED3DPOOL pool, IUnknown *parent)
|
UINT height, UINT depth, DWORD usage, WINED3DFORMAT format, WINED3DPOOL pool,
|
||||||
|
IUnknown *parent, const struct wined3d_parent_ops *parent_ops)
|
||||||
{
|
{
|
||||||
const struct wined3d_gl_info *gl_info = &device->adapter->gl_info;
|
const struct wined3d_gl_info *gl_info = &device->adapter->gl_info;
|
||||||
const struct GlPixelFormatDesc *format_desc = getFormatDescEntry(format, gl_info);
|
const struct GlPixelFormatDesc *format_desc = getFormatDescEntry(format, gl_info);
|
||||||
|
@ -397,6 +399,7 @@ HRESULT volume_init(IWineD3DVolumeImpl *volume, IWineD3DDeviceImpl *device, UINT
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
volume->parent_ops = parent_ops;
|
||||||
volume->currentDesc.Width = width;
|
volume->currentDesc.Width = width;
|
||||||
volume->currentDesc.Height = height;
|
volume->currentDesc.Height = height;
|
||||||
volume->currentDesc.Depth = depth;
|
volume->currentDesc.Depth = depth;
|
||||||
|
|
|
@ -76,7 +76,7 @@ static void volumetexture_internal_preload(IWineD3DBaseTexture *iface, enum WINE
|
||||||
This->baseTexture.dirty = FALSE;
|
This->baseTexture.dirty = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void volumetexture_cleanup(IWineD3DVolumeTextureImpl *This, D3DCB_DESTROYVOLUMEFN volume_destroy_cb)
|
static void volumetexture_cleanup(IWineD3DVolumeTextureImpl *This)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
|
@ -90,7 +90,7 @@ static void volumetexture_cleanup(IWineD3DVolumeTextureImpl *This, D3DCB_DESTROY
|
||||||
{
|
{
|
||||||
/* Cleanup the container. */
|
/* Cleanup the container. */
|
||||||
IWineD3DVolume_SetContainer(volume, NULL);
|
IWineD3DVolume_SetContainer(volume, NULL);
|
||||||
volume_destroy_cb(volume);
|
IWineD3DVolume_Release(volume);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
basetexture_cleanup((IWineD3DBaseTexture *)This);
|
basetexture_cleanup((IWineD3DBaseTexture *)This);
|
||||||
|
@ -170,7 +170,7 @@ HRESULT volumetexture_init(IWineD3DVolumeTextureImpl *texture, UINT width, UINT
|
||||||
{
|
{
|
||||||
ERR("Creating a volume for the volume texture failed, hr %#x.\n", hr);
|
ERR("Creating a volume for the volume texture failed, hr %#x.\n", hr);
|
||||||
texture->volumes[i] = NULL;
|
texture->volumes[i] = NULL;
|
||||||
volumetexture_cleanup(texture, D3DCB_DefaultDestroyVolume);
|
volumetexture_cleanup(texture);
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -224,7 +224,7 @@ static ULONG WINAPI IWineD3DVolumeTextureImpl_Release(IWineD3DVolumeTexture *ifa
|
||||||
TRACE("(%p) : Releasing from %d\n", This, This->resource.ref);
|
TRACE("(%p) : Releasing from %d\n", This, This->resource.ref);
|
||||||
ref = InterlockedDecrement(&This->resource.ref);
|
ref = InterlockedDecrement(&This->resource.ref);
|
||||||
if (ref == 0) {
|
if (ref == 0) {
|
||||||
IWineD3DVolumeTexture_Destroy(iface, D3DCB_DefaultDestroyVolume);
|
IWineD3DVolumeTexture_Destroy(iface);
|
||||||
}
|
}
|
||||||
return ref;
|
return ref;
|
||||||
}
|
}
|
||||||
|
@ -344,10 +344,11 @@ static BOOL WINAPI IWineD3DVolumeTextureImpl_IsCondNP2(IWineD3DVolumeTexture *if
|
||||||
/* *******************************************
|
/* *******************************************
|
||||||
IWineD3DVolumeTexture IWineD3DVolumeTexture parts follow
|
IWineD3DVolumeTexture IWineD3DVolumeTexture parts follow
|
||||||
******************************************* */
|
******************************************* */
|
||||||
static void WINAPI IWineD3DVolumeTextureImpl_Destroy(IWineD3DVolumeTexture *iface, D3DCB_DESTROYVOLUMEFN D3DCB_DestroyVolume) {
|
static void WINAPI IWineD3DVolumeTextureImpl_Destroy(IWineD3DVolumeTexture *iface)
|
||||||
|
{
|
||||||
IWineD3DVolumeTextureImpl *This = (IWineD3DVolumeTextureImpl *)iface;
|
IWineD3DVolumeTextureImpl *This = (IWineD3DVolumeTextureImpl *)iface;
|
||||||
|
|
||||||
volumetexture_cleanup(This, D3DCB_DestroyVolume);
|
volumetexture_cleanup(This);
|
||||||
|
|
||||||
HeapFree(GetProcessHeap(), 0, This);
|
HeapFree(GetProcessHeap(), 0, This);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1866,6 +1866,7 @@ typedef struct IWineD3DVolumeImpl
|
||||||
IWineD3DResourceClass resource;
|
IWineD3DResourceClass resource;
|
||||||
|
|
||||||
/* WineD3DVolume Information */
|
/* WineD3DVolume Information */
|
||||||
|
const struct wined3d_parent_ops *parent_ops;
|
||||||
WINED3DVOLUMET_DESC currentDesc;
|
WINED3DVOLUMET_DESC currentDesc;
|
||||||
IWineD3DBase *container;
|
IWineD3DBase *container;
|
||||||
BOOL lockable;
|
BOOL lockable;
|
||||||
|
@ -1876,8 +1877,9 @@ typedef struct IWineD3DVolumeImpl
|
||||||
} IWineD3DVolumeImpl;
|
} IWineD3DVolumeImpl;
|
||||||
|
|
||||||
void volume_add_dirty_box(IWineD3DVolume *iface, const WINED3DBOX *dirty_box) DECLSPEC_HIDDEN;
|
void volume_add_dirty_box(IWineD3DVolume *iface, const WINED3DBOX *dirty_box) DECLSPEC_HIDDEN;
|
||||||
HRESULT volume_init(IWineD3DVolumeImpl *volume, IWineD3DDeviceImpl *device, UINT width, UINT height,
|
HRESULT volume_init(IWineD3DVolumeImpl *volume, IWineD3DDeviceImpl *device, UINT width,
|
||||||
UINT depth, DWORD usage, WINED3DFORMAT format, WINED3DPOOL pool, IUnknown *parent) DECLSPEC_HIDDEN;
|
UINT height, UINT depth, DWORD usage, WINED3DFORMAT format, WINED3DPOOL pool,
|
||||||
|
IUnknown *parent, const struct wined3d_parent_ops *parent_ops) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
* IWineD3DVolumeTexture implementation structure (extends IWineD3DBaseTextureImpl)
|
* IWineD3DVolumeTexture implementation structure (extends IWineD3DBaseTextureImpl)
|
||||||
|
|
|
@ -2215,7 +2215,6 @@ interface IWineD3DDeviceParent : IUnknown
|
||||||
[out] IWineD3DSwapChain **swapchain
|
[out] IWineD3DSwapChain **swapchain
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
typedef ULONG (*D3DCB_DESTROYVOLUMEFN)(IWineD3DVolume *pVolume);
|
|
||||||
typedef ULONG (*D3DCB_DESTROYSWAPCHAINFN)(IWineD3DSwapChain *pSwapChain);
|
typedef ULONG (*D3DCB_DESTROYSWAPCHAINFN)(IWineD3DSwapChain *pSwapChain);
|
||||||
typedef HRESULT (*D3DCB_ENUMRESOURCES)(IWineD3DResource *resource, void *pData);
|
typedef HRESULT (*D3DCB_ENUMRESOURCES)(IWineD3DResource *resource, void *pData);
|
||||||
|
|
||||||
|
@ -2689,7 +2688,6 @@ interface IWineD3DCubeTexture : IWineD3DBaseTexture
|
||||||
interface IWineD3DVolumeTexture : IWineD3DBaseTexture
|
interface IWineD3DVolumeTexture : IWineD3DBaseTexture
|
||||||
{
|
{
|
||||||
void Destroy(
|
void Destroy(
|
||||||
[in] D3DCB_DESTROYVOLUMEFN destroy_volume_callback
|
|
||||||
);
|
);
|
||||||
HRESULT GetLevelDesc(
|
HRESULT GetLevelDesc(
|
||||||
[in] UINT level,
|
[in] UINT level,
|
||||||
|
@ -2968,7 +2966,8 @@ interface IWineD3DDevice : IWineD3DBase
|
||||||
[in] WINED3DFORMAT format,
|
[in] WINED3DFORMAT format,
|
||||||
[in] WINED3DPOOL pool,
|
[in] WINED3DPOOL pool,
|
||||||
[out] IWineD3DVolume **volume,
|
[out] IWineD3DVolume **volume,
|
||||||
[in] IUnknown *parent
|
[in] IUnknown *parent,
|
||||||
|
[in] const struct wined3d_parent_ops *parent_ops
|
||||||
);
|
);
|
||||||
HRESULT CreateCubeTexture(
|
HRESULT CreateCubeTexture(
|
||||||
[in] UINT edge_length,
|
[in] UINT edge_length,
|
||||||
|
|
Loading…
Reference in New Issue