Tony Wasserka : d3dx9: Recognize the D3DXSPRITE_DONOTSAVESTATE flag.

Alexandre Julliard julliard at winehq.org
Tue Mar 10 10:53:28 CDT 2009


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

Author: Tony Wasserka <tony.wasserka at freenet.de>
Date:   Mon Mar  9 17:06:38 2009 +0100

d3dx9: Recognize the D3DXSPRITE_DONOTSAVESTATE flag.

---

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

diff --git a/dlls/d3dx9_36/sprite.c b/dlls/d3dx9_36/sprite.c
index 41767d8..afca6cf 100644
--- a/dlls/d3dx9_36/sprite.c
+++ b/dlls/d3dx9_36/sprite.c
@@ -223,7 +223,6 @@ 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_DONOTSAVESTATE: don't restore the current device state on ID3DXSprite_End
 */
     if(This->vdecl==NULL) {
         static const D3DVERTEXELEMENT9 elements[] =
@@ -236,22 +235,23 @@ D3DXSPRITE_DONOTSAVESTATE: don't restore the current device state on ID3DXSprite
         IDirect3DDevice9_CreateVertexDeclaration(This->device, elements, &This->vdecl);
     }
 
-    if(This->stateblock==NULL) {
-        /* Tell our state block what it must store */
-        hr=IDirect3DDevice9_BeginStateBlock(This->device);
-        if(hr!=D3D_OK) return hr;
+    if(!(flags & D3DXSPRITE_DONOTSAVESTATE)) {
+        if(This->stateblock==NULL) {
+            /* Tell our state block what it must store */
+            hr=IDirect3DDevice9_BeginStateBlock(This->device);
+            if(hr!=D3D_OK) return hr;
 
-        set_states(This);
+            set_states(This);
 
-        IDirect3DDevice9_SetVertexDeclaration(This->device, This->vdecl);
-        IDirect3DDevice9_SetStreamSource(This->device, 0, NULL, 0, sizeof(SPRITEVERTEX));
-        IDirect3DDevice9_SetIndices(This->device, NULL);
-        IDirect3DDevice9_SetTexture(This->device, 0, NULL);
+            IDirect3DDevice9_SetVertexDeclaration(This->device, This->vdecl);
+            IDirect3DDevice9_SetStreamSource(This->device, 0, NULL, 0, sizeof(SPRITEVERTEX));
+            IDirect3DDevice9_SetIndices(This->device, NULL);
+            IDirect3DDevice9_SetTexture(This->device, 0, NULL);
 
-        IDirect3DDevice9_EndStateBlock(This->device, &This->stateblock);
+            IDirect3DDevice9_EndStateBlock(This->device, &This->stateblock);
+        }
+        IDirect3DStateBlock9_Capture(This->stateblock); /* Save current state */
     }
-    /* Save current state */
-    IDirect3DStateBlock9_Capture(This->stateblock);
 
     /* Apply device state */
     set_states(This);
@@ -400,7 +400,9 @@ static HRESULT WINAPI ID3DXSpriteImpl_End(LPD3DXSPRITE iface)
     if(!This->ready) return D3DERR_INVALIDCALL;
 
     ID3DXSprite_Flush(iface);
-    if(This->stateblock) IDirect3DStateBlock9_Apply(This->stateblock); /* Restore old state */
+
+    if(!(This->flags & D3DXSPRITE_DONOTSAVESTATE))
+        if(This->stateblock) IDirect3DStateBlock9_Apply(This->stateblock); /* Restore old state */
 
     This->ready=FALSE;
 




More information about the wine-cvs mailing list