Michael Stefaniuc : ddraw: Rename d3d_vertex_buffer_init() and have it allocate the object too.

Alexandre Julliard julliard at winehq.org
Wed Jun 15 13:42:58 CDT 2011


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

Author: Michael Stefaniuc <mstefani at redhat.de>
Date:   Wed Jun 15 12:36:49 2011 +0200

ddraw: Rename d3d_vertex_buffer_init() and have it allocate the object too.

---

 dlls/ddraw/ddraw.c         |   30 +++++++-----------------------
 dlls/ddraw/ddraw_private.h |    4 ++--
 dlls/ddraw/vertexbuffer.c  |   36 ++++++++++++++++++++++++------------
 3 files changed, 33 insertions(+), 37 deletions(-)

diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
index 2233e25..0faaecc 100644
--- a/dlls/ddraw/ddraw.c
+++ b/dlls/ddraw/ddraw.c
@@ -4952,32 +4952,16 @@ static HRESULT WINAPI d3d7_CreateVertexBuffer(IDirect3D7 *iface, D3DVERTEXBUFFER
 
     if (!vertex_buffer || !desc) return DDERR_INVALIDPARAMS;
 
-    TRACE("Vertex buffer description:\n");
-    TRACE("    dwSize %u\n", desc->dwSize);
-    TRACE("    dwCaps %#x\n", desc->dwCaps);
-    TRACE("    FVF %#x\n", desc->dwFVF);
-    TRACE("    dwNumVertices %u\n", desc->dwNumVertices);
-
-    /* Now create the vertex buffer */
-    object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object));
-    if (!object)
-    {
-        ERR("Failed to allocate vertex buffer memory.\n");
-        return DDERR_OUTOFMEMORY;
-    }
-
-    hr = d3d_vertex_buffer_init(object, This, desc);
-    if (FAILED(hr))
+    hr = d3d_vertex_buffer_create(&object, This, desc);
+    if (hr == D3D_OK)
     {
-        WARN("Failed to initialize vertex buffer, hr %#x.\n", hr);
-        HeapFree(GetProcessHeap(), 0, object);
-        return hr;
+        TRACE("Created vertex buffer %p.\n", object);
+        *vertex_buffer = (IDirect3DVertexBuffer7 *)object;
     }
+    else
+        WARN("Failed to create vertex buffer, hr %#x.\n", hr);
 
-    TRACE("Created vertex buffer %p.\n", object);
-    *vertex_buffer = (IDirect3DVertexBuffer7 *)object;
-
-    return D3D_OK;
+    return hr;
 }
 
 static HRESULT WINAPI d3d3_CreateVertexBuffer(IDirect3D3 *iface, D3DVERTEXBUFFERDESC *desc,
diff --git a/dlls/ddraw/ddraw_private.h b/dlls/ddraw/ddraw_private.h
index 42c1f13..05a6e27 100644
--- a/dlls/ddraw/ddraw_private.h
+++ b/dlls/ddraw/ddraw_private.h
@@ -534,8 +534,8 @@ struct IDirect3DVertexBufferImpl
     DWORD                fvf;
 };
 
-HRESULT d3d_vertex_buffer_init(IDirect3DVertexBufferImpl *buffer,
-        IDirectDrawImpl *ddraw, D3DVERTEXBUFFERDESC *desc) DECLSPEC_HIDDEN;
+HRESULT d3d_vertex_buffer_create(IDirect3DVertexBufferImpl **vertex_buf, IDirectDrawImpl *ddraw,
+        D3DVERTEXBUFFERDESC *desc) DECLSPEC_HIDDEN;
 
 static inline IDirect3DVertexBufferImpl *vb_from_vb1(IDirect3DVertexBuffer *iface)
 {
diff --git a/dlls/ddraw/vertexbuffer.c b/dlls/ddraw/vertexbuffer.c
index af4e8bc..e0e0a09 100644
--- a/dlls/ddraw/vertexbuffer.c
+++ b/dlls/ddraw/vertexbuffer.c
@@ -526,11 +526,22 @@ static const struct IDirect3DVertexBufferVtbl d3d_vertex_buffer1_vtbl =
     IDirect3DVertexBufferImpl_1_Optimize
 };
 
-HRESULT d3d_vertex_buffer_init(IDirect3DVertexBufferImpl *buffer,
-        IDirectDrawImpl *ddraw, D3DVERTEXBUFFERDESC *desc)
+HRESULT d3d_vertex_buffer_create(IDirect3DVertexBufferImpl **vertex_buf, IDirectDrawImpl *ddraw,
+        D3DVERTEXBUFFERDESC *desc)
 {
+    IDirect3DVertexBufferImpl *buffer;
     DWORD usage;
-    HRESULT hr;
+    HRESULT hr = D3D_OK;
+
+    TRACE("Vertex buffer description:\n");
+    TRACE("    dwSize %u\n", desc->dwSize);
+    TRACE("    dwCaps %#x\n", desc->dwCaps);
+    TRACE("    FVF %#x\n", desc->dwFVF);
+    TRACE("    dwNumVertices %u\n", desc->dwNumVertices);
+
+    buffer = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*buffer));
+    if (!buffer)
+        return DDERR_OUTOFMEMORY;
 
     buffer->lpVtbl = &d3d_vertex_buffer7_vtbl;
     buffer->IDirect3DVertexBuffer_vtbl = &d3d_vertex_buffer1_vtbl;
@@ -552,12 +563,9 @@ HRESULT d3d_vertex_buffer_init(IDirect3DVertexBufferImpl *buffer,
     if (FAILED(hr))
     {
         WARN("Failed to create wined3d vertex buffer, hr %#x.\n", hr);
-        LeaveCriticalSection(&ddraw_cs);
-
         if (hr == WINED3DERR_INVALIDCALL)
-            return DDERR_INVALIDPARAMS;
-        else
-            return hr;
+            hr = DDERR_INVALIDPARAMS;
+        goto end;
     }
 
     buffer->wineD3DVertexDeclaration = ddraw_find_decl(ddraw, desc->dwFVF);
@@ -565,13 +573,17 @@ HRESULT d3d_vertex_buffer_init(IDirect3DVertexBufferImpl *buffer,
     {
         ERR("Failed to find vertex declaration for fvf %#x.\n", desc->dwFVF);
         wined3d_buffer_decref(buffer->wineD3DVertexBuffer);
-        LeaveCriticalSection(&ddraw_cs);
-
-        return DDERR_INVALIDPARAMS;
+        hr = DDERR_INVALIDPARAMS;
+        goto end;
     }
     wined3d_vertex_declaration_incref(buffer->wineD3DVertexDeclaration);
 
+end:
     LeaveCriticalSection(&ddraw_cs);
+    if (hr == D3D_OK)
+        *vertex_buf = buffer;
+    else
+        HeapFree(GetProcessHeap(), 0, buffer);
 
-    return D3D_OK;
+    return hr;
 }




More information about the wine-cvs mailing list