| /* |
| * Copyright 2000 Marcus Meissner |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2.1 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library; if not, write to the Free Software |
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| */ |
| |
| #include "config.h" |
| |
| #include <assert.h> |
| #ifdef HAVE_UNISTD_H |
| # include <unistd.h> |
| #endif |
| #include <fcntl.h> |
| #include <string.h> |
| #include <stdio.h> |
| |
| #include "winerror.h" |
| #include "ddraw.h" |
| #include "d3d.h" |
| #include "wine/debug.h" |
| |
| #include "d3d_private.h" |
| |
| WINE_DEFAULT_DEBUG_CHANNEL(ddraw); |
| |
| HRESULT WINAPI |
| Main_IDirect3DImpl_7_3T_2T_1T_QueryInterface(LPDIRECT3D7 iface, |
| REFIID riid, |
| LPVOID* obp) |
| { |
| ICOM_THIS_FROM(IDirect3DImpl, IDirect3D7, iface); |
| |
| TRACE("(%p/%p)->(%s,%p)\n", This, iface, debugstr_guid(riid), obp); |
| |
| /* By default, set the object pointer to NULL */ |
| *obp = NULL; |
| |
| if (( IsEqualGUID( &IID_IDirectDraw, riid ) ) || |
| ( IsEqualGUID (&IID_IDirectDraw2, riid ) ) || |
| ( IsEqualGUID (&IID_IDirectDraw4, riid ) ) || |
| ( IsEqualGUID( &IID_IDirectDraw7, riid ) ) |
| ) { |
| HRESULT ret; |
| TRACE(" Creating IDirectDrawX interface by calling DirectDraw function.\n"); |
| ret = IDirectDraw_QueryInterface(ICOM_INTERFACE(This->ddraw,IDirectDraw), riid, obp); |
| if (ret == S_OK) { |
| IDirectDraw_Release(ICOM_INTERFACE(This->ddraw,IDirectDraw)); |
| IDirect3D_AddRef(ICOM_INTERFACE(This,IDirect3D)); |
| } |
| return ret; |
| } |
| if ( IsEqualGUID( &IID_IUnknown, riid ) ) { |
| IDirect3D_AddRef(ICOM_INTERFACE(This,IDirect3D)); |
| *obp = iface; |
| TRACE(" Creating IUnknown interface at %p.\n", *obp); |
| return S_OK; |
| } |
| if ( IsEqualGUID( &IID_IDirect3D, riid ) ) { |
| IDirect3D_AddRef(ICOM_INTERFACE(This,IDirect3D)); |
| *obp = ICOM_INTERFACE(This, IDirect3D); |
| TRACE(" Creating IDirect3D interface %p\n", *obp); |
| return S_OK; |
| } |
| if ( IsEqualGUID( &IID_IDirect3D2, riid ) ) { |
| IDirect3D_AddRef(ICOM_INTERFACE(This,IDirect3D)); |
| *obp = ICOM_INTERFACE(This, IDirect3D2); |
| TRACE(" Creating IDirect3D2 interface %p\n", *obp); |
| return S_OK; |
| } |
| if ( IsEqualGUID( &IID_IDirect3D3, riid ) ) { |
| IDirect3D_AddRef(ICOM_INTERFACE(This,IDirect3D)); |
| *obp = ICOM_INTERFACE(This, IDirect3D3); |
| TRACE(" Creating IDirect3D3 interface %p\n", *obp); |
| return S_OK; |
| } |
| if ( IsEqualGUID( &IID_IDirect3D7, riid ) ) { |
| /* This is not 100 % true as we should not be able to QueryInterface a '7' version from another one. |
| But well, to factorize the code, why check for application bugs :-) ? |
| */ |
| IDirect3D_AddRef(ICOM_INTERFACE(This,IDirect3D)); |
| *obp = ICOM_INTERFACE(This, IDirect3D7); |
| TRACE(" Creating IDirect3D7 interface %p\n", *obp); |
| return S_OK; |
| } |
| FIXME("(%p): interface for IID %s NOT found!\n", This, debugstr_guid(riid)); |
| return OLE_E_ENUM_NOMORE; |
| } |
| |
| ULONG WINAPI |
| Main_IDirect3DImpl_7_3T_2T_1T_AddRef(LPDIRECT3D7 iface) |
| { |
| ICOM_THIS_FROM(IDirect3DImpl, IDirect3D7, iface); |
| TRACE("(%p/%p)->() incrementing from %lu.\n", This, iface, This->ref); |
| |
| return ++(This->ref); |
| } |
| |
| ULONG WINAPI |
| Main_IDirect3DImpl_7_3T_2T_1T_Release(LPDIRECT3D7 iface) |
| { |
| ICOM_THIS_FROM(IDirect3DImpl, IDirect3D7, iface); |
| TRACE("(%p/%p)->() decrementing from %lu.\n", This, iface, This->ref); |
| if (--(This->ref) == 0) { |
| IDirectDraw_Release(ICOM_INTERFACE(This->ddraw, IDirectDraw)); |
| HeapFree(GetProcessHeap(), 0, This); |
| return 0; |
| } |
| return This->ref; |
| } |
| |
| HRESULT WINAPI |
| Main_IDirect3DImpl_1_Initialize(LPDIRECT3D iface, |
| REFIID riid) |
| { |
| ICOM_THIS_FROM(IDirect3DImpl, IDirect3D, iface); |
| TRACE("(%p/%p)->(%s) no-op...\n", This, iface, debugstr_guid(riid)); |
| return D3D_OK; |
| } |
| |
| HRESULT WINAPI |
| Main_IDirect3DImpl_3_2T_1T_EnumDevices(LPDIRECT3D3 iface, |
| LPD3DENUMDEVICESCALLBACK lpEnumDevicesCallback, |
| LPVOID lpUserArg) |
| { |
| ICOM_THIS_FROM(IDirect3DImpl, IDirect3D3, iface); |
| FIXME("(%p/%p)->(%p,%p): stub!\n", This, iface, lpEnumDevicesCallback, lpUserArg); |
| return D3D_OK; |
| } |
| |
| HRESULT WINAPI |
| Main_IDirect3DImpl_3_2T_1T_CreateLight(LPDIRECT3D3 iface, |
| LPDIRECT3DLIGHT* lplpDirect3DLight, |
| IUnknown* pUnkOuter) |
| { |
| ICOM_THIS_FROM(IDirect3DImpl, IDirect3D3, iface); |
| FIXME("(%p/%p)->(%p,%p): stub!\n", This, iface, lplpDirect3DLight, pUnkOuter); |
| return D3D_OK; |
| } |
| |
| HRESULT WINAPI |
| Main_IDirect3DImpl_3_2T_1T_CreateMaterial(LPDIRECT3D3 iface, |
| LPDIRECT3DMATERIAL3* lplpDirect3DMaterial3, |
| IUnknown* pUnkOuter) |
| { |
| ICOM_THIS_FROM(IDirect3DImpl, IDirect3D3, iface); |
| FIXME("(%p/%p)->(%p,%p): stub!\n", This, iface, lplpDirect3DMaterial3, pUnkOuter); |
| return D3D_OK; |
| } |
| |
| HRESULT WINAPI |
| Main_IDirect3DImpl_3_2T_1T_CreateViewport(LPDIRECT3D3 iface, |
| LPDIRECT3DVIEWPORT3* lplpD3DViewport3, |
| IUnknown* pUnkOuter) |
| { |
| ICOM_THIS_FROM(IDirect3DImpl, IDirect3D3, iface); |
| FIXME("(%p/%p)->(%p,%p): stub!\n", This, iface, lplpD3DViewport3, pUnkOuter); |
| return D3D_OK; |
| } |
| |
| HRESULT WINAPI |
| Main_IDirect3DImpl_3_2T_1T_FindDevice(LPDIRECT3D3 iface, |
| LPD3DFINDDEVICESEARCH lpD3DDFS, |
| LPD3DFINDDEVICERESULT lpD3DFDR) |
| { |
| ICOM_THIS_FROM(IDirect3DImpl, IDirect3D3, iface); |
| FIXME("(%p/%p)->(%p,%p): stub!\n", This, iface, lpD3DDFS, lpD3DFDR); |
| return D3D_OK; |
| } |
| |
| HRESULT WINAPI |
| Main_IDirect3DImpl_2_CreateDevice(LPDIRECT3D2 iface, |
| REFCLSID rclsid, |
| LPDIRECTDRAWSURFACE lpDDS, |
| LPDIRECT3DDEVICE2* lplpD3DDevice2) |
| { |
| ICOM_THIS_FROM(IDirect3DImpl, IDirect3D2, iface); |
| FIXME("(%p/%p)->(%s,%p,%p): stub!\n", This, iface, debugstr_guid(rclsid), lpDDS, lplpD3DDevice2); |
| return D3D_OK; |
| } |
| |
| HRESULT WINAPI |
| Main_IDirect3DImpl_3_CreateDevice(LPDIRECT3D3 iface, |
| REFCLSID rclsid, |
| LPDIRECTDRAWSURFACE4 lpDDS, |
| LPDIRECT3DDEVICE3* lplpD3DDevice3, |
| LPUNKNOWN lpUnk) |
| { |
| ICOM_THIS_FROM(IDirect3DImpl, IDirect3D3, iface); |
| FIXME("(%p/%p)->(%s,%p,%p,%p): stub!\n", This, iface, debugstr_guid(rclsid), lpDDS, lplpD3DDevice3, lpUnk); |
| return D3D_OK; |
| } |
| |
| HRESULT WINAPI |
| Main_IDirect3DImpl_7_3T_EnumZBufferFormats(LPDIRECT3D7 iface, |
| REFCLSID riidDevice, |
| LPD3DENUMPIXELFORMATSCALLBACK lpEnumCallback, |
| LPVOID lpContext) |
| { |
| ICOM_THIS_FROM(IDirect3DImpl, IDirect3D7, iface); |
| FIXME("(%p/%p)->(%s,%p,%p): stub!\n", This, iface, debugstr_guid(riidDevice), lpEnumCallback, lpContext); |
| return D3D_OK; |
| } |
| |
| HRESULT WINAPI |
| Main_IDirect3DImpl_7_3T_EvictManagedTextures(LPDIRECT3D7 iface) |
| { |
| ICOM_THIS_FROM(IDirect3DImpl, IDirect3D7, iface); |
| FIXME("(%p/%p)->(): stub!\n", This, iface); |
| return D3D_OK; |
| } |
| |
| HRESULT WINAPI |
| Main_IDirect3DImpl_7_EnumDevices(LPDIRECT3D7 iface, |
| LPD3DENUMDEVICESCALLBACK7 lpEnumDevicesCallback, |
| LPVOID lpUserArg) |
| { |
| ICOM_THIS_FROM(IDirect3DImpl, IDirect3D7, iface); |
| FIXME("(%p/%p)->(%p,%p): stub!\n", This, iface, lpEnumDevicesCallback, lpUserArg); |
| return D3D_OK; |
| } |
| |
| HRESULT WINAPI |
| Main_IDirect3DImpl_7_CreateDevice(LPDIRECT3D7 iface, |
| REFCLSID rclsid, |
| LPDIRECTDRAWSURFACE7 lpDDS, |
| LPDIRECT3DDEVICE7* lplpD3DDevice) |
| { |
| ICOM_THIS_FROM(IDirect3DImpl, IDirect3D7, iface); |
| FIXME("(%p/%p)->(%s,%p,%p): stub!\n", This, iface, debugstr_guid(rclsid), lpDDS, lplpD3DDevice); |
| return D3D_OK; |
| } |
| |
| HRESULT WINAPI |
| Main_IDirect3DImpl_7_3T_CreateVertexBuffer(LPDIRECT3D7 iface, |
| LPD3DVERTEXBUFFERDESC lpD3DVertBufDesc, |
| LPDIRECT3DVERTEXBUFFER7* lplpD3DVertBuf, |
| DWORD dwFlags) |
| { |
| ICOM_THIS_FROM(IDirect3DImpl, IDirect3D7, iface); |
| FIXME("(%p/%p)->(%p,%p,%08lx): stub!\n", This, iface, lpD3DVertBufDesc, lplpD3DVertBuf, dwFlags); |
| return D3D_OK; |
| } |
| |
| HRESULT WINAPI |
| Thunk_IDirect3DImpl_3_QueryInterface(LPDIRECT3D3 iface, |
| REFIID riid, |
| LPVOID* obp) |
| { |
| TRACE("(%p)->(%s,%p) thunking to IDirect3D7 interface.\n", iface, debugstr_guid(riid), obp); |
| return IDirect3D7_QueryInterface(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D3, IDirect3D7, iface), |
| riid, |
| obp); |
| } |
| |
| HRESULT WINAPI |
| Thunk_IDirect3DImpl_2_QueryInterface(LPDIRECT3D2 iface, |
| REFIID riid, |
| LPVOID* obp) |
| { |
| TRACE("(%p)->(%s,%p) thunking to IDirect3D7 interface.\n", iface, debugstr_guid(riid), obp); |
| return IDirect3D7_QueryInterface(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D2, IDirect3D7, iface), |
| riid, |
| obp); |
| } |
| |
| HRESULT WINAPI |
| Thunk_IDirect3DImpl_1_QueryInterface(LPDIRECT3D iface, |
| REFIID riid, |
| LPVOID* obp) |
| { |
| TRACE("(%p)->(%s,%p) thunking to IDirect3D7 interface.\n", iface, debugstr_guid(riid), obp); |
| return IDirect3D7_QueryInterface(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D, IDirect3D7, iface), |
| riid, |
| obp); |
| } |
| |
| ULONG WINAPI |
| Thunk_IDirect3DImpl_3_AddRef(LPDIRECT3D3 iface) |
| { |
| TRACE("(%p)->() thunking to IDirect3D7 interface.\n", iface); |
| return IDirect3D7_AddRef(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D3, IDirect3D7, iface)); |
| } |
| |
| ULONG WINAPI |
| Thunk_IDirect3DImpl_2_AddRef(LPDIRECT3D2 iface) |
| { |
| TRACE("(%p)->() thunking to IDirect3D7 interface.\n", iface); |
| return IDirect3D7_AddRef(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D2, IDirect3D7, iface)); |
| } |
| |
| ULONG WINAPI |
| Thunk_IDirect3DImpl_1_AddRef(LPDIRECT3D iface) |
| { |
| TRACE("(%p)->() thunking to IDirect3D7 interface.\n", iface); |
| return IDirect3D7_AddRef(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D, IDirect3D7, iface)); |
| } |
| |
| ULONG WINAPI |
| Thunk_IDirect3DImpl_3_Release(LPDIRECT3D3 iface) |
| { |
| TRACE("(%p)->() thunking to IDirect3D7 interface.\n", iface); |
| return IDirect3D7_Release(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D3, IDirect3D7, iface)); |
| } |
| |
| ULONG WINAPI |
| Thunk_IDirect3DImpl_2_Release(LPDIRECT3D2 iface) |
| { |
| TRACE("(%p)->() thunking to IDirect3D7 interface.\n", iface); |
| return IDirect3D7_Release(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D2, IDirect3D7, iface)); |
| } |
| |
| ULONG WINAPI |
| Thunk_IDirect3DImpl_1_Release(LPDIRECT3D iface) |
| { |
| TRACE("(%p)->() thunking to IDirect3D7 interface.\n", iface); |
| return IDirect3D7_Release(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D, IDirect3D7, iface)); |
| } |
| |
| HRESULT WINAPI |
| Thunk_IDirect3DImpl_3_EnumZBufferFormats(LPDIRECT3D3 iface, |
| REFCLSID riidDevice, |
| LPD3DENUMPIXELFORMATSCALLBACK lpEnumCallback, |
| LPVOID lpContext) |
| { |
| TRACE("(%p)->(%s,%p,%p) thunking to IDirect3D7 interface.\n", iface, debugstr_guid(riidDevice), lpEnumCallback, lpContext); |
| return IDirect3D7_EnumZBufferFormats(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D3, IDirect3D7, iface), |
| riidDevice, |
| lpEnumCallback, |
| lpContext); |
| } |
| |
| HRESULT WINAPI |
| Thunk_IDirect3DImpl_3_EvictManagedTextures(LPDIRECT3D3 iface) |
| { |
| TRACE("(%p)->() thunking to IDirect3D7 interface.\n", iface); |
| return IDirect3D7_EvictManagedTextures(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D3, IDirect3D7, iface)); |
| } |
| |
| HRESULT WINAPI |
| Thunk_IDirect3DImpl_2_EnumDevices(LPDIRECT3D2 iface, |
| LPD3DENUMDEVICESCALLBACK lpEnumDevicesCallback, |
| LPVOID lpUserArg) |
| { |
| TRACE("(%p)->(%p,%p) thunking to IDirect3D3 interface.\n", iface, lpEnumDevicesCallback, lpUserArg); |
| return IDirect3D3_EnumDevices(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D2, IDirect3D3, iface), |
| lpEnumDevicesCallback, |
| lpUserArg); |
| } |
| |
| HRESULT WINAPI |
| Thunk_IDirect3DImpl_1_EnumDevices(LPDIRECT3D iface, |
| LPD3DENUMDEVICESCALLBACK lpEnumDevicesCallback, |
| LPVOID lpUserArg) |
| { |
| TRACE("(%p)->(%p,%p) thunking to IDirect3D3 interface.\n", iface, lpEnumDevicesCallback, lpUserArg); |
| return IDirect3D3_EnumDevices(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D, IDirect3D3, iface), |
| lpEnumDevicesCallback, |
| lpUserArg); |
| } |
| |
| HRESULT WINAPI |
| Thunk_IDirect3DImpl_2_CreateLight(LPDIRECT3D2 iface, |
| LPDIRECT3DLIGHT* lplpDirect3DLight, |
| IUnknown* pUnkOuter) |
| { |
| TRACE("(%p)->(%p,%p) thunking to IDirect3D3 interface.\n", iface, lplpDirect3DLight, pUnkOuter); |
| return IDirect3D3_CreateLight(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D2, IDirect3D3, iface), |
| lplpDirect3DLight, |
| pUnkOuter); |
| } |
| |
| HRESULT WINAPI |
| Thunk_IDirect3DImpl_1_CreateLight(LPDIRECT3D iface, |
| LPDIRECT3DLIGHT* lplpDirect3DLight, |
| IUnknown* pUnkOuter) |
| { |
| TRACE("(%p)->(%p,%p) thunking to IDirect3D3 interface.\n", iface, lplpDirect3DLight, pUnkOuter); |
| return IDirect3D3_CreateLight(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D, IDirect3D3, iface), |
| lplpDirect3DLight, |
| pUnkOuter); |
| } |
| |
| HRESULT WINAPI |
| Thunk_IDirect3DImpl_1_CreateMaterial(LPDIRECT3D iface, |
| LPDIRECT3DMATERIAL* lplpDirect3DMaterial, |
| IUnknown* pUnkOuter) |
| { |
| HRESULT ret; |
| LPDIRECT3DMATERIAL3 ret_val; |
| |
| TRACE("(%p)->(%p,%p) thunking to IDirect3D3 interface.\n", iface, lplpDirect3DMaterial, pUnkOuter); |
| ret = IDirect3D3_CreateMaterial(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D, IDirect3D3, iface), |
| &ret_val, |
| pUnkOuter); |
| |
| *lplpDirect3DMaterial = COM_INTERFACE_CAST(IDirect3DMaterialImpl, IDirect3DMaterial3, IDirect3DMaterial, ret_val); |
| |
| TRACE(" returning interface %p.\n", *lplpDirect3DMaterial); |
| |
| return ret; |
| } |
| |
| HRESULT WINAPI |
| Thunk_IDirect3DImpl_1_CreateViewport(LPDIRECT3D iface, |
| LPDIRECT3DVIEWPORT* lplpD3DViewport, |
| IUnknown* pUnkOuter) |
| { |
| TRACE("(%p)->(%p,%p) thunking to IDirect3D3 interface.\n", iface, lplpD3DViewport, pUnkOuter); |
| return IDirect3D3_CreateViewport(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D, IDirect3D3, iface), |
| (LPDIRECT3DVIEWPORT3 *) lplpD3DViewport /* No need to cast here */, |
| pUnkOuter); |
| } |
| |
| HRESULT WINAPI |
| Thunk_IDirect3DImpl_2_CreateMaterial(LPDIRECT3D2 iface, |
| LPDIRECT3DMATERIAL2* lplpDirect3DMaterial2, |
| IUnknown* pUnkOuter) |
| { |
| HRESULT ret; |
| LPDIRECT3DMATERIAL3 ret_val; |
| |
| TRACE("(%p)->(%p,%p) thunking to IDirect3D3 interface.\n", iface, lplpDirect3DMaterial2, pUnkOuter); |
| ret = IDirect3D3_CreateMaterial(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D2, IDirect3D3, iface), |
| &ret_val, |
| pUnkOuter); |
| |
| *lplpDirect3DMaterial2 = COM_INTERFACE_CAST(IDirect3DMaterialImpl, IDirect3DMaterial3, IDirect3DMaterial2, ret_val); |
| |
| TRACE(" returning interface %p.\n", *lplpDirect3DMaterial2); |
| |
| return ret; |
| } |
| |
| HRESULT WINAPI |
| Thunk_IDirect3DImpl_2_CreateViewport(LPDIRECT3D2 iface, |
| LPDIRECT3DVIEWPORT* lplpD3DViewport2, |
| IUnknown* pUnkOuter) |
| { |
| TRACE("(%p)->(%p,%p) thunking to IDirect3D3 interface.\n", iface, lplpD3DViewport2, pUnkOuter); |
| return IDirect3D3_CreateViewport(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D2, IDirect3D3, iface), |
| (LPDIRECT3DVIEWPORT3 *) lplpD3DViewport2 /* No need to cast here */, |
| pUnkOuter); |
| } |
| |
| |
| HRESULT WINAPI |
| Thunk_IDirect3DImpl_3_CreateVertexBuffer(LPDIRECT3D3 iface, |
| LPD3DVERTEXBUFFERDESC lpD3DVertBufDesc, |
| LPDIRECT3DVERTEXBUFFER* lplpD3DVertBuf, |
| DWORD dwFlags, |
| LPUNKNOWN lpUnk) |
| { |
| HRESULT ret; |
| LPDIRECT3DVERTEXBUFFER7 ret_val; |
| |
| TRACE("(%p)->(%p,%p,%08lx,%p) thunking to IDirect3D7 interface.\n", iface, lpD3DVertBufDesc, lplpD3DVertBuf, dwFlags, lpUnk); |
| |
| /* dwFlags is not used in the D3D7 interface, use the vertex buffer description instead */ |
| if (dwFlags & D3DDP_DONOTCLIP) lpD3DVertBufDesc->dwCaps |= D3DVBCAPS_DONOTCLIP; |
| |
| ret = IDirect3D7_CreateVertexBuffer(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D3, IDirect3D7, iface), |
| lpD3DVertBufDesc, |
| &ret_val, |
| dwFlags); |
| |
| *lplpD3DVertBuf = COM_INTERFACE_CAST(IDirect3DVertexBufferImpl, IDirect3DVertexBuffer7, IDirect3DVertexBuffer, ret_val); |
| |
| TRACE(" returning interface %p.\n", *lplpD3DVertBuf); |
| |
| return ret; |
| } |
| |
| HRESULT WINAPI |
| Thunk_IDirect3DImpl_1_FindDevice(LPDIRECT3D iface, |
| LPD3DFINDDEVICESEARCH lpD3DDFS, |
| LPD3DFINDDEVICERESULT lplpD3DDevice) |
| { |
| TRACE("(%p)->(%p,%p) thunking to IDirect3D3 interface.\n", iface, lpD3DDFS, lplpD3DDevice); |
| return IDirect3D3_FindDevice(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D, IDirect3D3, iface), |
| lpD3DDFS, |
| lplpD3DDevice); |
| } |
| |
| HRESULT WINAPI |
| Thunk_IDirect3DImpl_2_FindDevice(LPDIRECT3D2 iface, |
| LPD3DFINDDEVICESEARCH lpD3DDFS, |
| LPD3DFINDDEVICERESULT lpD3DFDR) |
| { |
| TRACE("(%p)->(%p,%p) thunking to IDirect3D3 interface.\n", iface, lpD3DDFS, lpD3DFDR); |
| return IDirect3D3_FindDevice(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D2, IDirect3D3, iface), |
| lpD3DDFS, |
| lpD3DFDR); |
| } |