Module: wine Branch: master Commit: d010dac84d9b03b3f9f5f7aced7b3bbef0209b86 URL: http://source.winehq.org/git/wine.git/?a=commit;h=d010dac84d9b03b3f9f5f7aced...
Author: Michael Stefaniuc mstefani@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; }