Tony Wasserka : d3dx9: ID3DXSprite: Move vdecl creation to ID3DXSprite_Begin.

Alexandre Julliard julliard at winehq.org
Mon Mar 2 09:01:59 CST 2009


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

Author: Tony Wasserka <tony.wasserka at freenet.de>
Date:   Sat Nov 15 12:48:51 2008 +0100

d3dx9: ID3DXSprite: Move vdecl creation to ID3DXSprite_Begin.

---

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

diff --git a/dlls/d3dx9_36/sprite.c b/dlls/d3dx9_36/sprite.c
index 3924bba..3699508 100644
--- a/dlls/d3dx9_36/sprite.c
+++ b/dlls/d3dx9_36/sprite.c
@@ -225,6 +225,17 @@ 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[] =
+        {
+            { 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
+            { 0, 12, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR, 0 },
+            { 0, 16, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 },
+            D3DDECL_END()
+        };
+        IDirect3DDevice9_CreateVertexDeclaration(This->device, elements, &This->vdecl);
+    }
+
     if(This->stateblock==NULL) {
         /* Tell our state block what it must store */
         hr=IDirect3DDevice9_BeginStateBlock(This->device);
@@ -434,14 +445,6 @@ HRESULT WINAPI D3DXCreateSprite(LPDIRECT3DDEVICE9 device, LPD3DXSPRITE *sprite)
 {
     ID3DXSpriteImpl *object;
     D3DCAPS9 caps;
-    static const D3DVERTEXELEMENT9 elements[] =
-        {
-            { 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
-            { 0, 12, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR, 0 },
-            { 0, 16, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 },
-            D3DDECL_END()
-        };
-
     TRACE("(void): relay\n");
 
     if(device==NULL || sprite==NULL) return D3DERR_INVALIDCALL;
@@ -456,7 +459,7 @@ HRESULT WINAPI D3DXCreateSprite(LPDIRECT3DDEVICE9 device, LPD3DXSPRITE *sprite)
     object->device=device;
     IUnknown_AddRef(device);
 
-    IDirect3DDevice9_CreateVertexDeclaration(object->device, elements, &object->vdecl);
+    object->vdecl=NULL;
     object->stateblock=NULL;
 
     D3DXMatrixIdentity(&object->transform);




More information about the wine-cvs mailing list