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