From fc13420770edd4db49bd2ec7d3aa5436f2863201 Mon Sep 17 00:00:00 2001 From: Vitaliy Margolen Date: Sun, 2 Apr 2006 13:24:00 -0600 Subject: [PATCH] d3dx: VertexBuffer should keep reference to the parent device object. --- dlls/d3d8/d3d8_private.h | 3 +++ dlls/d3d8/device.c | 2 ++ dlls/d3d8/vertexbuffer.c | 1 + dlls/d3d9/d3d9_private.h | 3 +++ dlls/d3d9/vertexbuffer.c | 3 +++ 5 files changed, 12 insertions(+) diff --git a/dlls/d3d8/d3d8_private.h b/dlls/d3d8/d3d8_private.h index 31fe04c695b..c0f8eb06df7 100644 --- a/dlls/d3d8/d3d8_private.h +++ b/dlls/d3d8/d3d8_private.h @@ -295,6 +295,9 @@ struct IDirect3DVertexBuffer8Impl /* IDirect3DResource8 fields */ IWineD3DVertexBuffer *wineD3DVertexBuffer; + + /* Parent reference */ + LPDIRECT3DDEVICE8 parentDevice; }; /* --------------------- */ diff --git a/dlls/d3d8/device.c b/dlls/d3d8/device.c index f21a5dcc3c7..720bc4a90c3 100644 --- a/dlls/d3d8/device.c +++ b/dlls/d3d8/device.c @@ -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; diff --git a/dlls/d3d8/vertexbuffer.c b/dlls/d3d8/vertexbuffer.c index 5ca8318cb25..fc229368530 100644 --- a/dlls/d3d8/vertexbuffer.c +++ b/dlls/d3d8/vertexbuffer.c @@ -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); } diff --git a/dlls/d3d9/d3d9_private.h b/dlls/d3d9/d3d9_private.h index 916cff23dac..02c15ebf681 100644 --- a/dlls/d3d9/d3d9_private.h +++ b/dlls/d3d9/d3d9_private.h @@ -353,6 +353,9 @@ typedef struct IDirect3DVertexBuffer9Impl /* IDirect3DResource9 fields */ IWineD3DVertexBuffer *wineD3DVertexBuffer; + + /* Parent reference */ + LPDIRECT3DDEVICE9 parentDevice; } IDirect3DVertexBuffer9Impl; /* --------------------- */ diff --git a/dlls/d3d9/vertexbuffer.c b/dlls/d3d9/vertexbuffer.c index d679c140520..b2c43a4f98b 100644 --- a/dlls/d3d9/vertexbuffer.c +++ b/dlls/d3d9/vertexbuffer.c @@ -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; } -- 2.11.4.GIT