506 lines
18 KiB
C
506 lines
18 KiB
C
/*
|
|
* 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);
|
|
}
|