d3dx: VertexBuffer should keep reference to the parent device object.

This commit is contained in:
Vitaliy Margolen 2006-04-02 13:24:00 -06:00 committed by Alexandre Julliard
parent 605574bebf
commit fc13420770
5 changed files with 12 additions and 0 deletions

View File

@ -295,6 +295,9 @@ struct IDirect3DVertexBuffer8Impl
/* IDirect3DResource8 fields */
IWineD3DVertexBuffer *wineD3DVertexBuffer;
/* Parent reference */
LPDIRECT3DDEVICE8 parentDevice;
};
/* --------------------- */

View File

@ -418,6 +418,8 @@ HRESULT WINAPI IDirect3DDevice8Impl_CreateVertexBuffer(LPDIRECT3DDEVICE8 iface,
HeapFree(GetProcessHeap(), 0, object);
*ppVertexBuffer = NULL;
} else {
IUnknown_AddRef(iface);
object->parentDevice = iface;
*ppVertexBuffer = (LPDIRECT3DVERTEXBUFFER8) object;
}
return hrc;

View File

@ -57,6 +57,7 @@ ULONG WINAPI IDirect3DVertexBuffer8Impl_Release(LPDIRECT3DVERTEXBUFFER8 iface) {
if (ref == 0) {
IWineD3DVertexBuffer_Release(This->wineD3DVertexBuffer);
IUnknown_Release(This->parentDevice);
HeapFree(GetProcessHeap(), 0, This);
}

View File

@ -353,6 +353,9 @@ typedef struct IDirect3DVertexBuffer9Impl
/* IDirect3DResource9 fields */
IWineD3DVertexBuffer *wineD3DVertexBuffer;
/* Parent reference */
LPDIRECT3DDEVICE9 parentDevice;
} IDirect3DVertexBuffer9Impl;
/* --------------------- */

View File

@ -58,6 +58,7 @@ ULONG WINAPI IDirect3DVertexBuffer9Impl_Release(LPDIRECT3DVERTEXBUFFER9 iface) {
if (ref == 0) {
IWineD3DVertexBuffer_Release(This->wineD3DVertexBuffer);
IUnknown_Release(This->parentDevice);
HeapFree(GetProcessHeap(), 0, This);
}
return ref;
@ -180,6 +181,8 @@ HRESULT WINAPI IDirect3DDevice9Impl_CreateVertexBuffer(LPDIRECT3DDEVICE9 iface,
FIXME("(%p) call to IWineD3DDevice_CreateVertexBuffer failed\n", This);
HeapFree(GetProcessHeap(), 0, object);
} else {
IUnknown_AddRef(iface);
object->parentDevice = iface;
TRACE("(%p) : Created vertex buffer %p\n", This, object);
*ppVertexBuffer = (LPDIRECT3DVERTEXBUFFER9) object;
}