mirror of
https://github.com/reactos/reactos.git
synced 2025-02-23 00:45:24 +00:00
[WINESYNC] d3dx9: Don't release textures when D3DXSPRITE_DO_NOT_ADDREF_TEXTURE is specified.
Signed-off-by: Sven Baars <sbaars@codeweavers.com> Signed-off-by: Matteo Bruni <mbruni@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org> wine commit id 9eda5c043047fd117441473651b2089b80a4ed80 by Sven Baars <sbaars@codeweavers.com>
This commit is contained in:
parent
fe25fbb5fe
commit
31f063ffbf
3 changed files with 27 additions and 7 deletions
|
@ -116,10 +116,13 @@ static ULONG WINAPI d3dx9_sprite_Release(ID3DXSprite *iface)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < sprite->sprite_count; ++i)
|
if (!(sprite->flags & D3DXSPRITE_DO_NOT_ADDREF_TEXTURE))
|
||||||
{
|
{
|
||||||
if (sprite->sprites[i].texture)
|
for (i = 0; i < sprite->sprite_count; ++i)
|
||||||
IDirect3DTexture9_Release(sprite->sprites[i].texture);
|
{
|
||||||
|
if (sprite->sprites[i].texture)
|
||||||
|
IDirect3DTexture9_Release(sprite->sprites[i].texture);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
HeapFree(GetProcessHeap(), 0, sprite->sprites);
|
HeapFree(GetProcessHeap(), 0, sprite->sprites);
|
||||||
|
@ -522,10 +525,13 @@ static HRESULT WINAPI d3dx9_sprite_OnResetDevice(ID3DXSprite *iface)
|
||||||
|
|
||||||
TRACE("iface %p.\n", iface);
|
TRACE("iface %p.\n", iface);
|
||||||
|
|
||||||
for (i = 0; i < sprite->sprite_count; ++i)
|
if (!(sprite->flags & D3DXSPRITE_DO_NOT_ADDREF_TEXTURE))
|
||||||
{
|
{
|
||||||
if (sprite->sprites[i].texture)
|
for (i = 0; i < sprite->sprite_count; ++i)
|
||||||
IDirect3DTexture9_Release(sprite->sprites[i].texture);
|
{
|
||||||
|
if (sprite->sprites[i].texture)
|
||||||
|
IDirect3DTexture9_Release(sprite->sprites[i].texture);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sprite->sprite_count = 0;
|
sprite->sprite_count = 0;
|
||||||
|
|
|
@ -306,6 +306,20 @@ static void test_ID3DXSprite(IDirect3DDevice9 *device)
|
||||||
hr = ID3DXSprite_End(sprite);
|
hr = ID3DXSprite_End(sprite);
|
||||||
ok (hr == D3DERR_INVALIDCALL, "End returned %#x, expected %#x\n", hr, D3DERR_INVALIDCALL);
|
ok (hr == D3DERR_INVALIDCALL, "End returned %#x, expected %#x\n", hr, D3DERR_INVALIDCALL);
|
||||||
|
|
||||||
|
/* Test D3DXSPRITE_DO_NOT_ADDREF_TEXTURE */
|
||||||
|
hr = ID3DXSprite_Begin(sprite, D3DXSPRITE_DO_NOT_ADDREF_TEXTURE);
|
||||||
|
ok (hr == D3D_OK, "Begin returned %#x, expected %#x\n", hr, D3D_OK);
|
||||||
|
hr = ID3DXSprite_Draw(sprite, tex2, &rect, ¢er, &pos, D3DCOLOR_XRGB(255, 255, 255));
|
||||||
|
ok (hr == D3D_OK, "Draw returned %#x, expected %#x\n", hr, D3D_OK);
|
||||||
|
hr = ID3DXSprite_OnResetDevice(sprite);
|
||||||
|
ok (hr == D3D_OK, "OnResetDevice returned %#x, expected %#x\n", hr, D3D_OK);
|
||||||
|
check_ref((IUnknown*)tex2, 1);
|
||||||
|
|
||||||
|
hr = ID3DXSprite_Begin(sprite, D3DXSPRITE_DO_NOT_ADDREF_TEXTURE);
|
||||||
|
ok (hr == D3D_OK, "Begin returned %#x, expected %#x\n", hr, D3D_OK);
|
||||||
|
hr = ID3DXSprite_Draw(sprite, tex2, &rect, ¢er, &pos, D3DCOLOR_XRGB(255, 255, 255));
|
||||||
|
ok (hr == D3D_OK, "Draw returned %#x, expected %#x\n", hr, D3D_OK);
|
||||||
|
|
||||||
IDirect3DDevice9_EndScene(device);
|
IDirect3DDevice9_EndScene(device);
|
||||||
check_release((IUnknown*)sprite, 0);
|
check_release((IUnknown*)sprite, 0);
|
||||||
check_release((IUnknown*)tex2, 0);
|
check_release((IUnknown*)tex2, 0);
|
||||||
|
|
|
@ -34,4 +34,4 @@ files:
|
||||||
include/d3dx9tex.h: sdk/include/dxsdk/d3dx9tex.h
|
include/d3dx9tex.h: sdk/include/dxsdk/d3dx9tex.h
|
||||||
include/d3dx9xof.h: sdk/include/dxsdk/d3dx9xof.h
|
include/d3dx9xof.h: sdk/include/dxsdk/d3dx9xof.h
|
||||||
tags:
|
tags:
|
||||||
wine: bffe111672972cb26c319c029ca469520742c720
|
wine: 9eda5c043047fd117441473651b2089b80a4ed80
|
||||||
|
|
Loading…
Reference in a new issue