ddraw: COM cleanup for the IDirect3DExecuteBuffer iface.
diff --git a/dlls/ddraw/ddraw_private.h b/dlls/ddraw/ddraw_private.h index 0f3864a..755ac2a 100644 --- a/dlls/ddraw/ddraw_private.h +++ b/dlls/ddraw/ddraw_private.h
@@ -486,10 +486,8 @@ *****************************************************************************/ struct IDirect3DExecuteBufferImpl { - /* IUnknown */ - const IDirect3DExecuteBufferVtbl *lpVtbl; - LONG ref; - + IDirect3DExecuteBuffer IDirect3DExecuteBuffer_iface; + LONG ref; /* IDirect3DExecuteBuffer fields */ IDirectDrawImpl *ddraw; IDirect3DDeviceImpl *d3ddev;
diff --git a/dlls/ddraw/device.c b/dlls/ddraw/device.c index b395272..f8dfaa8 100644 --- a/dlls/ddraw/device.c +++ b/dlls/ddraw/device.c
@@ -685,7 +685,7 @@ return hr; } - *ExecuteBuffer = (IDirect3DExecuteBuffer *)object; + *ExecuteBuffer = &object->IDirect3DExecuteBuffer_iface; TRACE(" Returning IDirect3DExecuteBuffer at %p, implementation is at %p\n", *ExecuteBuffer, object);
diff --git a/dlls/ddraw/executebuffer.c b/dlls/ddraw/executebuffer.c index 86a3aa9..5f738bb 100644 --- a/dlls/ddraw/executebuffer.c +++ b/dlls/ddraw/executebuffer.c
@@ -547,6 +547,11 @@ return D3D_OK; } +static inline IDirect3DExecuteBufferImpl *impl_from_IDirect3DExecuteBuffer(IDirect3DExecuteBuffer *iface) +{ + return CONTAINING_RECORD(iface, IDirect3DExecuteBufferImpl, IDirect3DExecuteBuffer_iface); +} + /***************************************************************************** * IDirect3DExecuteBuffer::QueryInterface * @@ -598,10 +603,9 @@ * The new refcount * *****************************************************************************/ -static ULONG WINAPI -IDirect3DExecuteBufferImpl_AddRef(IDirect3DExecuteBuffer *iface) +static ULONG WINAPI IDirect3DExecuteBufferImpl_AddRef(IDirect3DExecuteBuffer *iface) { - IDirect3DExecuteBufferImpl *This = (IDirect3DExecuteBufferImpl *)iface; + IDirect3DExecuteBufferImpl *This = impl_from_IDirect3DExecuteBuffer(iface); ULONG ref = InterlockedIncrement(&This->ref); TRACE("%p increasing refcount to %u.\n", This, ref); @@ -618,10 +622,9 @@ * The new refcount * *****************************************************************************/ -static ULONG WINAPI -IDirect3DExecuteBufferImpl_Release(IDirect3DExecuteBuffer *iface) +static ULONG WINAPI IDirect3DExecuteBufferImpl_Release(IDirect3DExecuteBuffer *iface) { - IDirect3DExecuteBufferImpl *This = (IDirect3DExecuteBufferImpl *)iface; + IDirect3DExecuteBufferImpl *This = impl_from_IDirect3DExecuteBuffer(iface); ULONG ref = InterlockedDecrement(&This->ref); TRACE("%p decreasing refcount to %u.\n", This, ref); @@ -669,11 +672,10 @@ * This implementation always returns D3D_OK * *****************************************************************************/ -static HRESULT WINAPI -IDirect3DExecuteBufferImpl_Lock(IDirect3DExecuteBuffer *iface, - D3DEXECUTEBUFFERDESC *lpDesc) +static HRESULT WINAPI IDirect3DExecuteBufferImpl_Lock(IDirect3DExecuteBuffer *iface, + D3DEXECUTEBUFFERDESC *lpDesc) { - IDirect3DExecuteBufferImpl *This = (IDirect3DExecuteBufferImpl *)iface; + IDirect3DExecuteBufferImpl *This = impl_from_IDirect3DExecuteBuffer(iface); DWORD dwSize; TRACE("iface %p, desc %p.\n", iface, lpDesc); @@ -719,11 +721,10 @@ * DDERR_OUTOFMEMORY if the vertex buffer allocation failed * *****************************************************************************/ -static HRESULT WINAPI -IDirect3DExecuteBufferImpl_SetExecuteData(IDirect3DExecuteBuffer *iface, - D3DEXECUTEDATA *lpData) +static HRESULT WINAPI IDirect3DExecuteBufferImpl_SetExecuteData(IDirect3DExecuteBuffer *iface, + D3DEXECUTEDATA *lpData) { - IDirect3DExecuteBufferImpl *This = (IDirect3DExecuteBufferImpl *)iface; + IDirect3DExecuteBufferImpl *This = impl_from_IDirect3DExecuteBuffer(iface); DWORD nbvert; TRACE("iface %p, data %p.\n", iface, lpData); @@ -755,11 +756,10 @@ * D3D_OK on success * *****************************************************************************/ -static HRESULT WINAPI -IDirect3DExecuteBufferImpl_GetExecuteData(IDirect3DExecuteBuffer *iface, - D3DEXECUTEDATA *lpData) +static HRESULT WINAPI IDirect3DExecuteBufferImpl_GetExecuteData(IDirect3DExecuteBuffer *iface, + D3DEXECUTEDATA *lpData) { - IDirect3DExecuteBufferImpl *This = (IDirect3DExecuteBufferImpl *)iface; + IDirect3DExecuteBufferImpl *This = impl_from_IDirect3DExecuteBuffer(iface); DWORD dwSize; TRACE("iface %p, data %p.\n", iface, lpData); @@ -839,7 +839,7 @@ HRESULT d3d_execute_buffer_init(IDirect3DExecuteBufferImpl *execute_buffer, IDirect3DDeviceImpl *device, D3DEXECUTEBUFFERDESC *desc) { - execute_buffer->lpVtbl = &d3d_execute_buffer_vtbl; + execute_buffer->IDirect3DExecuteBuffer_iface.lpVtbl = &d3d_execute_buffer_vtbl; execute_buffer->ref = 1; execute_buffer->d3ddev = device;