ddraw: Use unsafe_impl_from_IDirect3DExecuteBuffer for an app provided iface.
This commit is contained in:
parent
663483e16e
commit
faa269c42a
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue