Module: wine Branch: refs/heads/master Commit: 4a25828c0d8d7fa08793027f4c4d2ba14dc5407d URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=4a25828c0d8d7fa08793027f...
Author: Vitaliy Margolen wine-patch@kievinfo.com Date: Tue Apr 11 22:09:27 2006 -0600
d3d9: VertexDeclaration and VertexShader should keep reference to the parent device object.
---
dlls/d3d9/d3d9_private.h | 4 ++++ dlls/d3d9/vertexdeclaration.c | 3 +++ dlls/d3d9/vertexshader.c | 3 +++ 3 files changed, 10 insertions(+), 0 deletions(-)
diff --git a/dlls/d3d9/d3d9_private.h b/dlls/d3d9/d3d9_private.h index 02c15eb..797eb4b 100644 --- a/dlls/d3d9/d3d9_private.h +++ b/dlls/d3d9/d3d9_private.h @@ -541,6 +541,8 @@ typedef struct IDirect3DVertexDeclaratio /* IDirect3DVertexDeclaration9 fields */ IWineD3DVertexDeclaration *wineD3DVertexDeclaration;
+ /* Parent reference */ + LPDIRECT3DDEVICE9 parentDevice; } IDirect3DVertexDeclaration9Impl;
/* ---------------------- */ @@ -563,6 +565,8 @@ typedef struct IDirect3DVertexShader9Imp /* IDirect3DVertexShader9 fields */ IWineD3DVertexShader *wineD3DVertexShader;
+ /* Parent reference */ + LPDIRECT3DDEVICE9 parentDevice; } IDirect3DVertexShader9Impl;
/* --------------------- */ diff --git a/dlls/d3d9/vertexdeclaration.c b/dlls/d3d9/vertexdeclaration.c index ef8ed54..1e1b7b1 100644 --- a/dlls/d3d9/vertexdeclaration.c +++ b/dlls/d3d9/vertexdeclaration.c @@ -56,6 +56,7 @@ ULONG WINAPI IDirect3DVertexDeclaration9
if (ref == 0) { IWineD3DVertexDeclaration_Release(This->wineD3DVertexDeclaration); + IUnknown_Release(This->parentDevice); HeapFree(GetProcessHeap(), 0, This); } return ref; @@ -129,6 +130,8 @@ HRESULT WINAPI IDirect3DDevice9Impl_Cr FIXME("(%p) call to IWineD3DDevice_CreateVertexDeclaration failed\n", This); HeapFree(GetProcessHeap(), 0, object); } else { + IUnknown_AddRef(iface); + object->parentDevice = iface; *ppDecl = (LPDIRECT3DVERTEXDECLARATION9) object; TRACE("(%p) : Created vertex declatanio %p\n", This, object); } diff --git a/dlls/d3d9/vertexshader.c b/dlls/d3d9/vertexshader.c index 034b097..050e387 100644 --- a/dlls/d3d9/vertexshader.c +++ b/dlls/d3d9/vertexshader.c @@ -56,6 +56,7 @@ ULONG WINAPI IDirect3DVertexShader9Impl_
if (ref == 0) { IWineD3DVertexShader_Release(This->wineD3DVertexShader); + IUnknown_Release(This->parentDevice); HeapFree(GetProcessHeap(), 0, This); } return ref; @@ -122,6 +123,8 @@ HRESULT WINAPI IDirect3DDevice9Impl_Crea FIXME("Call to IWineD3DDevice_CreateVertexShader failed\n"); HeapFree(GetProcessHeap(), 0, object); }else{ + IUnknown_AddRef(iface); + object->parentDevice = iface; *ppShader = (IDirect3DVertexShader9 *)object; TRACE("(%p) : Created vertex shader %p\n", This, object); }