ddraw: Use unsafe_impl_from_IDirect3DExecuteBuffer for an app provided iface.

This commit is contained in:
Michael Stefaniuc 2011-07-08 12:28:27 +02:00 committed by Alexandre Julliard
parent 663483e16e
commit faa269c42a
3 changed files with 15 additions and 8 deletions

View File

@ -508,6 +508,7 @@ struct IDirect3DExecuteBufferImpl
HRESULT d3d_execute_buffer_init(IDirect3DExecuteBufferImpl *execute_buffer,
IDirect3DDeviceImpl *device, D3DEXECUTEBUFFERDESC *desc) DECLSPEC_HIDDEN;
IDirect3DExecuteBufferImpl *unsafe_impl_from_IDirect3DExecuteBuffer(IDirect3DExecuteBuffer *iface) DECLSPEC_HIDDEN;
/* The execute function */
HRESULT d3d_execute_buffer_execute(IDirect3DExecuteBufferImpl *execute_buffer,

View File

@ -707,25 +707,22 @@ IDirect3DDeviceImpl_1_CreateExecuteBuffer(IDirect3DDevice *iface,
* D3D_OK on success
*
*****************************************************************************/
static HRESULT WINAPI
IDirect3DDeviceImpl_1_Execute(IDirect3DDevice *iface,
IDirect3DExecuteBuffer *ExecuteBuffer,
IDirect3DViewport *Viewport,
DWORD Flags)
static HRESULT WINAPI IDirect3DDeviceImpl_1_Execute(IDirect3DDevice *iface,
IDirect3DExecuteBuffer *ExecuteBuffer, IDirect3DViewport *Viewport, DWORD Flags)
{
IDirect3DDeviceImpl *This = device_from_device1(iface);
IDirect3DExecuteBufferImpl *Direct3DExecuteBufferImpl = (IDirect3DExecuteBufferImpl *)ExecuteBuffer;
IDirect3DExecuteBufferImpl *buffer = unsafe_impl_from_IDirect3DExecuteBuffer(ExecuteBuffer);
IDirect3DViewportImpl *Direct3DViewportImpl = (IDirect3DViewportImpl *)Viewport;
HRESULT hr;
TRACE("iface %p, buffer %p, viewport %p, flags %#x.\n", iface, ExecuteBuffer, Viewport, Flags);
if(!Direct3DExecuteBufferImpl)
if(!buffer)
return DDERR_INVALIDPARAMS;
/* Execute... */
EnterCriticalSection(&ddraw_cs);
hr = d3d_execute_buffer_execute(Direct3DExecuteBufferImpl, This, Direct3DViewportImpl);
hr = d3d_execute_buffer_execute(buffer, This, Direct3DViewportImpl);
LeaveCriticalSection(&ddraw_cs);
return hr;

View File

@ -870,3 +870,12 @@ HRESULT d3d_execute_buffer_init(IDirect3DExecuteBufferImpl *execute_buffer,
return D3D_OK;
}
IDirect3DExecuteBufferImpl *unsafe_impl_from_IDirect3DExecuteBuffer(IDirect3DExecuteBuffer *iface)
{
if (!iface)
return NULL;
assert(iface->lpVtbl == &d3d_execute_buffer_vtbl);
return impl_from_IDirect3DExecuteBuffer(iface);
}