[PATCH] d3dx9: Recognize the D3DXSPRITE_DO_NOT_ADDREF_TEXTURE flag
Tony Wasserka
tony.wasserka at freenet.de
Mon Mar 9 11:10:28 CDT 2009
---
dlls/d3dx9_36/sprite.c | 9 +++++----
1 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/dlls/d3dx9_36/sprite.c b/dlls/d3dx9_36/sprite.c
index ba41893..82db409 100644
--- a/dlls/d3dx9_36/sprite.c
+++ b/dlls/d3dx9_36/sprite.c
@@ -222,7 +222,7 @@ D3DXSPRITE_OBJECTSPACE: do not change device transforms
D3DXSPRITE_SORT_DEPTH_BACKTOFRONT: sort by position
D3DXSPRITE_SORT_DEPTH_FRONTTOBACK: sort by position
D3DXSPRITE_SORT_TEXTURE: sort by texture (so that it doesn't change too often)
-D3DXSPRITE_DO_NOT_ADDREF_TEXTURE: don't call AddRef/Release on every Draw/Flush call
+D3DXSPRITE_DO_NOT_ADDREF_TEXTURE: don't call AddRef/Release on every Draw/Flush call (done)
D3DXSPRITE_DONOTSAVESTATE: don't save and restore the current device state (done)
*/
if(This->vdecl==NULL) {
@@ -284,7 +284,8 @@ static HRESULT WINAPI ID3DXSpriteImpl_Draw(LPD3DXSPRITE iface, LPDIRECT3DTEXTURE
This->sprites=HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, This->sprites, This->allocated_sprites*sizeof(SPRITE));
}
This->sprites[This->sprite_count].texture=texture;
- IUnknown_AddRef(texture);
+ if(!(This->flags & D3DXSPRITE_DO_NOT_ADDREF_TEXTURE))
+ IDirect3DTexture9_AddRef(texture);
/* Reuse the texture desc if possible */
if(This->sprite_count) {
@@ -382,8 +383,8 @@ static HRESULT WINAPI ID3DXSpriteImpl_Flush(LPD3DXSPRITE iface)
}
HeapFree(GetProcessHeap(), 0, vertices);
- for(i=0;i<This->sprite_count;i++)
- if(This->sprites[i].texture)
+ if(!(This->flags & D3DXSPRITE_DO_NOT_ADDREF_TEXTURE))
+ for(i=0;i<This->sprite_count;i++)
IDirect3DTexture9_Release(This->sprites[i].texture);
This->sprite_count=0;
--
1.5.6.6
--------------010108090105010302040101--
More information about the wine-patches
mailing list