From 7fd38368b41737b1c38c939002388a09a006312a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Hentschel?= Date: Tue, 27 Dec 2011 23:16:10 +0100 Subject: [PATCH] d3drm: Add IDirect3DRM2 interface. --- dlls/d3drm/d3drm.c | 464 ++++++++++++++++++++++++++++++++++++- dlls/d3drm/d3drm_main.c | 2 +- dlls/d3drm/d3drm_private.h | 2 +- include/d3drm.h | 2 +- 4 files changed, 457 insertions(+), 13 deletions(-) diff --git a/dlls/d3drm/d3drm.c b/dlls/d3drm/d3drm.c index 138832b325a..596bc146fb8 100644 --- a/dlls/d3drm/d3drm.c +++ b/dlls/d3drm/d3drm.c @@ -31,21 +31,28 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3drm); typedef struct { IDirect3DRM IDirect3DRM_iface; + IDirect3DRM2 IDirect3DRM2_iface; LONG ref; } IDirect3DRMImpl; static const struct IDirect3DRMVtbl Direct3DRM_Vtbl; +static const struct IDirect3DRM2Vtbl Direct3DRM2_Vtbl; static inline IDirect3DRMImpl *impl_from_IDirect3DRM(IDirect3DRM *iface) { return CONTAINING_RECORD(iface, IDirect3DRMImpl, IDirect3DRM_iface); } -HRESULT Direct3DRM_create(LPDIRECT3DRM* ppDirect3DRM) +static inline IDirect3DRMImpl *impl_from_IDirect3DRM2(IDirect3DRM2 *iface) +{ + return CONTAINING_RECORD(iface, IDirect3DRMImpl, IDirect3DRM2_iface); +} + +HRESULT Direct3DRM_create(IUnknown** ppObj) { IDirect3DRMImpl* object; - TRACE("(%p)\n", ppDirect3DRM); + TRACE("(%p)\n", ppObj); object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirect3DRMImpl)); if (!object) @@ -55,9 +62,10 @@ HRESULT Direct3DRM_create(LPDIRECT3DRM* ppDirect3DRM) } object->IDirect3DRM_iface.lpVtbl = &Direct3DRM_Vtbl; + object->IDirect3DRM2_iface.lpVtbl = &Direct3DRM2_Vtbl; object->ref = 1; - *ppDirect3DRM = (IDirect3DRM*)object; + *ppObj = (IUnknown*)&object->IDirect3DRM_iface; return S_OK; } @@ -69,16 +77,25 @@ static HRESULT WINAPI IDirect3DRMImpl_QueryInterface(IDirect3DRM* iface, REFIID TRACE("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ppvObject); - if (IsEqualGUID(riid, &IID_IUnknown) || - IsEqualGUID(riid, &IID_IDirect3DRM)) + *ppvObject = NULL; + + if(IsEqualGUID(riid, &IID_IUnknown) || + IsEqualGUID(riid, &IID_IDirect3DRM)) { - IUnknown_AddRef(iface); - *ppvObject = This; - return S_OK; + *ppvObject = &This->IDirect3DRM_iface; + } + else if(IsEqualGUID(riid, &IID_IDirect3DRM2)) + { + *ppvObject = &This->IDirect3DRM2_iface; + } + else + { + FIXME("interface %s not implemented\n", debugstr_guid(riid)); + return E_NOINTERFACE; } - ERR("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppvObject); - return E_NOINTERFACE; + IDirect3DRM_AddRef(iface); + return S_OK; } static ULONG WINAPI IDirect3DRMImpl_AddRef(IDirect3DRM* iface) @@ -430,3 +447,430 @@ static const struct IDirect3DRMVtbl Direct3DRM_Vtbl = IDirect3DRMImpl_Load, IDirect3DRMImpl_Tick }; + + +/*** IUnknown methods ***/ +static HRESULT WINAPI IDirect3DRM2Impl_QueryInterface(IDirect3DRM2* iface, REFIID riid, + void** ppvObject) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface); + return IDirect3DRM_QueryInterface(&This->IDirect3DRM_iface, riid, ppvObject); +} + +static ULONG WINAPI IDirect3DRM2Impl_AddRef(IDirect3DRM2* iface) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface); + + TRACE("(%p/%p)\n", iface, This); + + return InterlockedIncrement(&This->ref); +} + +static ULONG WINAPI IDirect3DRM2Impl_Release(IDirect3DRM2* iface) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface); + ULONG ref = InterlockedDecrement(&This->ref); + + TRACE("(%p/%p)\n", iface, This); + + if (!ref) + HeapFree(GetProcessHeap(), 0, This); + + return ref; +} + +/*** IDirect3DRM2 methods ***/ +static HRESULT WINAPI IDirect3DRM2Impl_CreateObject(IDirect3DRM2* iface, REFCLSID rclsid, + LPUNKNOWN pUnkOuter, REFIID riid, + LPVOID *ppvObj) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface); + + FIXME("(%p/%p)->(%s,%p,%s,%p): stub\n", iface, This, debugstr_guid(rclsid), pUnkOuter, + debugstr_guid(riid), ppvObj); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM2Impl_CreateFrame(IDirect3DRM2* iface, + LPDIRECT3DRMFRAME pFrameParent, + LPDIRECT3DRMFRAME2 * ppFrame) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface); + + FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, pFrameParent, ppFrame); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM2Impl_CreateMesh(IDirect3DRM2* iface, LPDIRECT3DRMMESH * ppMesh) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface); + + FIXME("(%p/%p)->(%p): stub\n", iface, This, ppMesh); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM2Impl_CreateMeshBuilder(IDirect3DRM2* iface, + LPDIRECT3DRMMESHBUILDER2 * ppMeshBuilder) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface); + + TRACE("(%p/%p)->(%p)\n", iface, This, ppMeshBuilder); + + return Direct3DRMMeshBuilder_create((IUnknown**)ppMeshBuilder); +} + +static HRESULT WINAPI IDirect3DRM2Impl_CreateFace(IDirect3DRM2* iface, LPDIRECT3DRMFACE * ppFace) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface); + + FIXME("(%p/%p)->(%p): stub\n", iface, This, ppFace); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM2Impl_CreateAnimation(IDirect3DRM2* iface, + LPDIRECT3DRMANIMATION * ppAnimation) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface); + + FIXME("(%p/%p)->(%p): stub\n", iface, This, ppAnimation); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM2Impl_CreateAnimationSet(IDirect3DRM2* iface, + LPDIRECT3DRMANIMATIONSET * ppAnimationSet) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface); + + FIXME("(%p/%p)->(%p): stub\n", iface, This, ppAnimationSet); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM2Impl_CreateTexture(IDirect3DRM2* iface, LPD3DRMIMAGE pImage, + LPDIRECT3DRMTEXTURE2 * ppTexture) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface); + + FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, pImage, ppTexture); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM2Impl_CreateLight(IDirect3DRM2* iface, D3DRMLIGHTTYPE type, + D3DCOLOR color, LPDIRECT3DRMLIGHT * ppLight) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface); + + FIXME("(%p/%p)->(%d,%d,%p): stub\n", iface, This, type, color, ppLight); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM2Impl_CreateLightRGB(IDirect3DRM2* iface, D3DRMLIGHTTYPE type, + D3DVALUE red, D3DVALUE green, D3DVALUE blue, + LPDIRECT3DRMLIGHT * ppLight) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface); + + FIXME("(%p/%p)->(%d,%f,%f,%f,%p): stub\n", iface, This, type, red, green, blue, ppLight); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM2Impl_Material(IDirect3DRM2* iface, D3DVALUE m, + LPDIRECT3DRMMATERIAL * ppMaterial) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface); + + FIXME("(%p/%p)->(%f,%p): stub\n", iface, This, m, ppMaterial); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM2Impl_CreateDevice(IDirect3DRM2* iface, DWORD width, DWORD height, + LPDIRECT3DRMDEVICE2 * ppDevice) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface); + + FIXME("(%p/%p)->(%d,%d,%p): stub\n", iface, This, width, height, ppDevice); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM2Impl_CreateDeviceFromSurface(IDirect3DRM2* iface, LPGUID pGUID, + LPDIRECTDRAW pDD, + LPDIRECTDRAWSURFACE pDDSBack, + LPDIRECT3DRMDEVICE2 * ppDevice) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface); + + FIXME("(%p/%p)->(%s,%p,%p,%p): stub\n", iface, This, debugstr_guid(pGUID), pDD, pDDSBack, ppDevice); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM2Impl_CreateDeviceFromD3D(IDirect3DRM2* iface, LPDIRECT3D2 pD3D, + LPDIRECT3DDEVICE2 pD3DDev, + LPDIRECT3DRMDEVICE2 * ppDevice) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface); + + FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, pD3D, pD3DDev, ppDevice); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM2Impl_CreateDeviceFromClipper(IDirect3DRM2* iface, + LPDIRECTDRAWCLIPPER pDDClipper, + LPGUID pGUID, int width, int height, + LPDIRECT3DRMDEVICE2 * ppDevice) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface); + + FIXME("(%p/%p)->(%p,%s,%d,%d,%p): stub\n", iface, This, pDDClipper, debugstr_guid(pGUID), width, + height, ppDevice); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM2Impl_CreateTextureFromSurface(IDirect3DRM2* iface, + LPDIRECTDRAWSURFACE pDDS, + LPDIRECT3DRMTEXTURE2 * ppTexture) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface); + + FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, pDDS, ppTexture); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM2Impl_CreateShadow(IDirect3DRM2* iface, LPDIRECT3DRMVISUAL pVisual, + LPDIRECT3DRMLIGHT pLight, + D3DVALUE px, D3DVALUE py, D3DVALUE pz, + D3DVALUE nx, D3DVALUE ny, D3DVALUE nz, + LPDIRECT3DRMVISUAL * ppVisual) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface); + + FIXME("(%p/%p)->(%p,%p,%f,%f,%f,%f,%f,%f,%p): stub\n", iface, This, pVisual, pLight, px, py, pz, + nx, ny, nz, ppVisual); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM2Impl_CreateViewport(IDirect3DRM2* iface, + LPDIRECT3DRMDEVICE pDevice, + LPDIRECT3DRMFRAME pFrame, + DWORD xpos, DWORD ypos, + DWORD width, DWORD height, + LPDIRECT3DRMVIEWPORT * ppViewport) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface); + + FIXME("(%p/%p)->(%p,%p,%d,%d,%d,%d,%p): stub\n", iface, This, pDevice, pFrame, xpos, ypos, + width, height, ppViewport); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM2Impl_CreateWrap(IDirect3DRM2* iface, D3DRMWRAPTYPE type, + LPDIRECT3DRMFRAME pFrame, + D3DVALUE ox, D3DVALUE oy, D3DVALUE oz, + D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, + D3DVALUE ux, D3DVALUE uy, D3DVALUE uz, + D3DVALUE ou, D3DVALUE ov, D3DVALUE su, + D3DVALUE sv, LPDIRECT3DRMWRAP * ppWrap) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface); + + FIXME("(%p/%p)->(%d,%p,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%p): stub\n", iface, This, type, + pFrame, ox, oy, oz, dx, dy, dz, ux, uy, uz, ou, ov, su, sv, ppWrap); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM2Impl_CreateUserVisual(IDirect3DRM2* iface, + D3DRMUSERVISUALCALLBACK cb, LPVOID pArg, + LPDIRECT3DRMUSERVISUAL * ppUserVisual) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface); + + FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, cb, pArg, ppUserVisual); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM2Impl_LoadTexture(IDirect3DRM2* iface, const char * filename, + LPDIRECT3DRMTEXTURE2 * ppTexture) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface); + + FIXME("(%p/%p)->(%s,%p): stub\n", iface, This, filename, ppTexture); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM2Impl_LoadTextureFromResource(IDirect3DRM2* iface, HMODULE hModule, + LPCSTR strName, LPCSTR strType, + LPDIRECT3DRMTEXTURE2 * ppTexture) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface); + + FIXME("(%p/%p)->(%p,%p,%p,%p): stub\n", iface, This, hModule, strName, strType, ppTexture); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM2Impl_SetSearchPath(IDirect3DRM2* iface, LPCSTR path) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface); + + FIXME("(%p/%p)->(%s): stub\n", iface, This, path); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM2Impl_AddSearchPath(IDirect3DRM2* iface, LPCSTR path) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface); + + FIXME("(%p/%p)->(%s): stub\n", iface, This, path); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM2Impl_GetSearchPath(IDirect3DRM2* iface, DWORD *size_return, + LPSTR path_return) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface); + + FIXME("(%p/%p)->(%p,%s): stub\n", iface, This, size_return, path_return); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM2Impl_SetDefaultTextureColors(IDirect3DRM2* iface, DWORD nb_colors) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface); + + FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_colors); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM2Impl_SetDefaultTextureShades(IDirect3DRM2* iface, DWORD nb_shades) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface); + + FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_shades); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM2Impl_GetDevices(IDirect3DRM2* iface, + LPDIRECT3DRMDEVICEARRAY * ppDeviceArray) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface); + + FIXME("(%p/%p)->(%p): stub\n", iface, This, ppDeviceArray); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM2Impl_GetNamedObject(IDirect3DRM2* iface, const char * pName, + LPDIRECT3DRMOBJECT * ppObject) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface); + + FIXME("(%p/%p)->(%s,%p): stub\n", iface, This, pName, ppObject); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM2Impl_EnumerateObjects(IDirect3DRM2* iface, D3DRMOBJECTCALLBACK cb, + LPVOID pArg) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface); + + FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, cb, pArg); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM2Impl_Load(IDirect3DRM2* iface, LPVOID pObjSource, LPVOID pObjID, + LPIID * ppGUIDs, DWORD nb_GUIDs, + D3DRMLOADOPTIONS LOFlags, D3DRMLOADCALLBACK LoadProc, + LPVOID pArgLP, D3DRMLOADTEXTURECALLBACK LoadTextureProc, + LPVOID pArgLTP, LPDIRECT3DRMFRAME pParentFrame) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface); + + FIXME("(%p/%p)->(%p,%p,%p,%d,%d,%p,%p,%p,%p,%p): stub\n", iface, This, pObjSource, pObjID, + ppGUIDs, nb_GUIDs, LOFlags, LoadProc, pArgLP, LoadTextureProc, pArgLTP, pParentFrame); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM2Impl_Tick(IDirect3DRM2* iface, D3DVALUE tick) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface); + + FIXME("(%p/%p)->(%f): stub\n", iface, This, tick); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM2Impl_CreateProgressiveMesh(IDirect3DRM2* iface, + LPDIRECT3DRMPROGRESSIVEMESH * ppMesh) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface); + + FIXME("(%p/%p)->(%p): stub\n", iface, This, ppMesh); + + return E_NOTIMPL; +} + +static const struct IDirect3DRM2Vtbl Direct3DRM2_Vtbl = +{ + IDirect3DRM2Impl_QueryInterface, + IDirect3DRM2Impl_AddRef, + IDirect3DRM2Impl_Release, + IDirect3DRM2Impl_CreateObject, + IDirect3DRM2Impl_CreateFrame, + IDirect3DRM2Impl_CreateMesh, + IDirect3DRM2Impl_CreateMeshBuilder, + IDirect3DRM2Impl_CreateFace, + IDirect3DRM2Impl_CreateAnimation, + IDirect3DRM2Impl_CreateAnimationSet, + IDirect3DRM2Impl_CreateTexture, + IDirect3DRM2Impl_CreateLight, + IDirect3DRM2Impl_CreateLightRGB, + IDirect3DRM2Impl_Material, + IDirect3DRM2Impl_CreateDevice, + IDirect3DRM2Impl_CreateDeviceFromSurface, + IDirect3DRM2Impl_CreateDeviceFromD3D, + IDirect3DRM2Impl_CreateDeviceFromClipper, + IDirect3DRM2Impl_CreateTextureFromSurface, + IDirect3DRM2Impl_CreateShadow, + IDirect3DRM2Impl_CreateViewport, + IDirect3DRM2Impl_CreateWrap, + IDirect3DRM2Impl_CreateUserVisual, + IDirect3DRM2Impl_LoadTexture, + IDirect3DRM2Impl_LoadTextureFromResource, + IDirect3DRM2Impl_SetSearchPath, + IDirect3DRM2Impl_AddSearchPath, + IDirect3DRM2Impl_GetSearchPath, + IDirect3DRM2Impl_SetDefaultTextureColors, + IDirect3DRM2Impl_SetDefaultTextureShades, + IDirect3DRM2Impl_GetDevices, + IDirect3DRM2Impl_GetNamedObject, + IDirect3DRM2Impl_EnumerateObjects, + IDirect3DRM2Impl_Load, + IDirect3DRM2Impl_Tick, + IDirect3DRM2Impl_CreateProgressiveMesh +}; diff --git a/dlls/d3drm/d3drm_main.c b/dlls/d3drm/d3drm_main.c index 38a6a6cee2d..2adc188c969 100644 --- a/dlls/d3drm/d3drm_main.c +++ b/dlls/d3drm/d3drm_main.c @@ -50,5 +50,5 @@ HRESULT WINAPI Direct3DRMCreate(LPDIRECT3DRM* ppDirect3DRM) { TRACE("(%p)\n", ppDirect3DRM); - return Direct3DRM_create(ppDirect3DRM); + return Direct3DRM_create((IUnknown**)ppDirect3DRM); } diff --git a/dlls/d3drm/d3drm_private.h b/dlls/d3drm/d3drm_private.h index dd2347ba8c3..0be7c53ba90 100644 --- a/dlls/d3drm/d3drm_private.h +++ b/dlls/d3drm/d3drm_private.h @@ -26,7 +26,7 @@ #include "d3drm.h" -HRESULT Direct3DRM_create(LPDIRECT3DRM* ppDirect3DRM) DECLSPEC_HIDDEN; +HRESULT Direct3DRM_create(IUnknown** ppObj) DECLSPEC_HIDDEN; HRESULT Direct3DRMMeshBuilder_create(IUnknown** ppObj) DECLSPEC_HIDDEN; #endif /* __D3DRM_PRIVATE_INCLUDED__ */ diff --git a/include/d3drm.h b/include/d3drm.h index 4b8f0e7a116..f1540c501eb 100644 --- a/include/d3drm.h +++ b/include/d3drm.h @@ -230,7 +230,7 @@ DECLARE_INTERFACE_(IDirect3DRM2,IUnknown) STDMETHOD(Load)(THIS_ LPVOID, LPVOID, LPIID *, DWORD, D3DRMLOADOPTIONS, D3DRMLOADCALLBACK, LPVOID, D3DRMLOADTEXTURECALLBACK, LPVOID, LPDIRECT3DRMFRAME) PURE; STDMETHOD(Tick)(THIS_ D3DVALUE) PURE; - STDMETHOD(CreateProgressiveMesh)(THIS_ LPDIRECT3DRMPROGRESSIVEMESH) PURE; + STDMETHOD(CreateProgressiveMesh)(THIS_ LPDIRECT3DRMPROGRESSIVEMESH *) PURE; }; #undef INTERFACE