[PATCH 04/12] d3d8: Add a separate function for vertex declaration initialization from an FVF.

Henri Verbeet hverbeet at codeweavers.com
Wed Sep 23 03:05:51 CDT 2009


---
 dlls/d3d8/d3d8_private.h      |    5 ++---
 dlls/d3d8/device.c            |   11 ++---------
 dlls/d3d8/vertexdeclaration.c |   23 ++++++++++++++++++++++-
 3 files changed, 26 insertions(+), 13 deletions(-)

diff --git a/dlls/d3d8/d3d8_private.h b/dlls/d3d8/d3d8_private.h
index 46cea98..e79d336 100644
--- a/dlls/d3d8/d3d8_private.h
+++ b/dlls/d3d8/d3d8_private.h
@@ -530,9 +530,6 @@ DECLARE_INTERFACE_(IDirect3DVertexDeclaration8, IUnknown)
 #define IDirect3DVertexDeclaration8_AddRef(p)              (p)->lpVtbl->AddRef(p)
 #define IDirect3DVertexDeclaration8_Release(p)             (p)->lpVtbl->Release(p)
 
-/*** Implementation ***/
-extern const IDirect3DVertexDeclaration8Vtbl Direct3DVertexDeclaration8_Vtbl DECLSPEC_HIDDEN;
-
 typedef struct {
     const IDirect3DVertexDeclaration8Vtbl *lpVtbl;
     LONG ref_count;
@@ -546,6 +543,8 @@ typedef struct {
 
 HRESULT vertexdeclaration_init(IDirect3DVertexDeclaration8Impl *declaration,
         IDirect3DDevice8Impl *device, const DWORD *elements) DECLSPEC_HIDDEN;
+HRESULT vertexdeclaration_init_fvf(IDirect3DVertexDeclaration8Impl *declaration,
+        IDirect3DDevice8Impl *device, DWORD fvf) DECLSPEC_HIDDEN;
 
 /*****************************************************************************
  * IDirect3DVertexShader8 interface
diff --git a/dlls/d3d8/device.c b/dlls/d3d8/device.c
index 80dc249..1e68ce3 100644
--- a/dlls/d3d8/device.c
+++ b/dlls/d3d8/device.c
@@ -1863,17 +1863,10 @@ static IDirect3DVertexDeclaration8Impl *IDirect3DDevice8Impl_FindDecl(IDirect3DD
         return NULL;
     }
 
-    d3d8_declaration->ref_count = 1;
-    d3d8_declaration->lpVtbl = &Direct3DVertexDeclaration8_Vtbl;
-    d3d8_declaration->elements = NULL;
-    d3d8_declaration->elements_size = 0;
-    d3d8_declaration->shader_handle = fvf;
-
-    hr = IWineD3DDevice_CreateVertexDeclarationFromFVF(This->WineD3DDevice,
-            &d3d8_declaration->wined3d_vertex_declaration, (IUnknown *)d3d8_declaration, fvf);
+    hr = vertexdeclaration_init_fvf(d3d8_declaration, This, fvf);
     if (FAILED(hr))
     {
-        ERR("Failed to create wined3d vertex declaration.\n");
+        WARN("Failed to initialize vertex declaration, hr %#x.\n", hr);
         HeapFree(GetProcessHeap(), 0, d3d8_declaration);
         return NULL;
     }
diff --git a/dlls/d3d8/vertexdeclaration.c b/dlls/d3d8/vertexdeclaration.c
index 2878ebc..cf0a3f4 100644
--- a/dlls/d3d8/vertexdeclaration.c
+++ b/dlls/d3d8/vertexdeclaration.c
@@ -352,7 +352,7 @@ UINT convert_to_wined3d_declaration(const DWORD *d3d8_elements, DWORD *d3d8_elem
     return element_count;
 }
 
-const IDirect3DVertexDeclaration8Vtbl Direct3DVertexDeclaration8_Vtbl =
+static const IDirect3DVertexDeclaration8Vtbl Direct3DVertexDeclaration8_Vtbl =
 {
     IDirect3DVertexDeclaration8Impl_QueryInterface,
     IDirect3DVertexDeclaration8Impl_AddRef,
@@ -395,3 +395,24 @@ HRESULT vertexdeclaration_init(IDirect3DVertexDeclaration8Impl *declaration,
     return D3D_OK;
 }
 
+HRESULT vertexdeclaration_init_fvf(IDirect3DVertexDeclaration8Impl *declaration,
+        IDirect3DDevice8Impl *device, DWORD fvf)
+{
+    HRESULT hr;
+
+    declaration->ref_count = 1;
+    declaration->lpVtbl = &Direct3DVertexDeclaration8_Vtbl;
+    declaration->elements = NULL;
+    declaration->elements_size = 0;
+    declaration->shader_handle = fvf;
+
+    hr = IWineD3DDevice_CreateVertexDeclarationFromFVF(device->WineD3DDevice,
+            &declaration->wined3d_vertex_declaration, (IUnknown *)declaration, fvf);
+    if (FAILED(hr))
+    {
+        WARN("Failed to create wined3d vertex declaration, hr %#x.\n", hr);
+        return hr;
+    }
+
+    return D3D_OK;
+}
-- 
1.6.0.6




More information about the wine-patches mailing list