Tony Wasserka : d3dx9: Implement ID3DXSprite_OnLostDevice/OnResetDevice.

Alexandre Julliard julliard at winehq.org
Wed Mar 4 09:00:59 CST 2009


Module: wine
Branch: master
Commit: bdd55d0875bcb16180df8cf2349b32fe2aee8fd2
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=bdd55d0875bcb16180df8cf2349b32fe2aee8fd2

Author: Tony Wasserka <tony.wasserka at freenet.de>
Date:   Wed Mar  4 12:49:23 2009 +0100

d3dx9: Implement ID3DXSprite_OnLostDevice/OnResetDevice.

---

 dlls/d3dx9_36/sprite.c |   39 ++++++++++++++++++++++++++++++---------
 1 files changed, 30 insertions(+), 9 deletions(-)

diff --git a/dlls/d3dx9_36/sprite.c b/dlls/d3dx9_36/sprite.c
index 3699508..41767d8 100644
--- a/dlls/d3dx9_36/sprite.c
+++ b/dlls/d3dx9_36/sprite.c
@@ -410,15 +410,39 @@ static HRESULT WINAPI ID3DXSpriteImpl_End(LPD3DXSPRITE iface)
 static HRESULT WINAPI ID3DXSpriteImpl_OnLostDevice(LPD3DXSPRITE iface)
 {
     ID3DXSpriteImpl *This=(ID3DXSpriteImpl*)iface;
-    FIXME("(%p): stub\n", This);
-    return E_NOTIMPL;
+    TRACE("(%p)\n", This);
+
+    if(This->stateblock) IDirect3DStateBlock9_Release(This->stateblock);
+    if(This->vdecl) IDirect3DVertexDeclaration9_Release(This->vdecl);
+    This->vdecl=NULL;
+    This->stateblock=NULL;
+
+    /* Reset some variables */
+    ID3DXSprite_OnResetDevice(iface);
+
+    return D3D_OK;
 }
 
 static HRESULT WINAPI ID3DXSpriteImpl_OnResetDevice(LPD3DXSPRITE iface)
 {
     ID3DXSpriteImpl *This=(ID3DXSpriteImpl*)iface;
-    FIXME("(%p): stub\n", This);
-    return E_NOTIMPL;
+    int i;
+
+    TRACE("(%p)\n", This);
+
+    for(i=0;i<This->sprite_count;i++)
+        if(This->sprites[i].texture)
+            IDirect3DTexture9_Release(This->sprites[i].texture);
+
+    This->sprite_count=0;
+
+    This->flags=0;
+    This->ready=FALSE;
+
+    /* keep matrices */
+    /* device objects get restored on Begin */
+
+    return D3D_OK;
 }
 
 static const ID3DXSpriteVtbl D3DXSprite_Vtbl =
@@ -465,18 +489,15 @@ HRESULT WINAPI D3DXCreateSprite(LPDIRECT3DDEVICE9 device, LPD3DXSPRITE *sprite)
     D3DXMatrixIdentity(&object->transform);
     D3DXMatrixIdentity(&object->view);
 
-    object->flags=0;
-    object->ready=FALSE;
-
     IDirect3DDevice9_GetDeviceCaps(device, &caps);
     object->texfilter_caps=caps.TextureFilterCaps;
     object->maxanisotropy=caps.MaxAnisotropy;
     object->alphacmp_caps=caps.AlphaCmpCaps;
 
+    ID3DXSprite_OnResetDevice((ID3DXSprite*)object);
+
     object->sprites=NULL;
-    object->sprite_count=0;
     object->allocated_sprites=0;
-
     *sprite=(ID3DXSprite*)object;
 
     return D3D_OK;




More information about the wine-cvs mailing list