[PATCH] d3dx9: Recognize the D3DXSPRITE_DONOTSAVESTATE flag
Tony Wasserka
tony.wasserka at freenet.de
Mon Mar 9 11:06:38 CDT 2009
---
dlls/d3dx9_36/sprite.c | 31 +++++++++++++++++--------------
1 files changed, 17 insertions(+), 14 deletions(-)
diff --git a/dlls/d3dx9_36/sprite.c b/dlls/d3dx9_36/sprite.c
index 41767d8..ba41893 100644
--- a/dlls/d3dx9_36/sprite.c
+++ b/dlls/d3dx9_36/sprite.c
@@ -223,7 +223,7 @@ 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
+D3DXSPRITE_DONOTSAVESTATE: don't save and restore the current device state (done)
*/
if(This->vdecl==NULL) {
static const D3DVERTEXELEMENT9 elements[] =
@@ -236,22 +236,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 +401,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;
--
1.5.6.6
--------------060003030705090206060102--
More information about the wine-patches
mailing list