d3drm: Avoid LPDIRECT3DRMDEVICE3.
[wine/multimedia.git] / dlls / d3drm / d3drm.c
blob94628b1f2b7a396dd029541af3e4ba4a1f33c3fa
1 /*
2 * Implementation of IDirect3DRM Interface
4 * Copyright 2010, 2012 Christian Costa
5 * Copyright 2011 André Hentschel
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
22 #include "wine/debug.h"
24 #define COBJMACROS
26 #include "winbase.h"
27 #include "wingdi.h"
28 #include "dxfile.h"
29 #include "rmxfguid.h"
31 #include "d3drm_private.h"
33 WINE_DEFAULT_DEBUG_CHANNEL(d3drm);
35 static const char* get_IID_string(const GUID* guid)
37 if (IsEqualGUID(guid, &IID_IDirect3DRMFrame))
38 return "IID_IDirect3DRMFrame";
39 else if (IsEqualGUID(guid, &IID_IDirect3DRMFrame2))
40 return "IID_IDirect3DRMFrame2";
41 else if (IsEqualGUID(guid, &IID_IDirect3DRMFrame3))
42 return "IID_IDirect3DRMFrame3";
43 else if (IsEqualGUID(guid, &IID_IDirect3DRMMeshBuilder))
44 return "IID_IDirect3DRMMeshBuilder";
45 else if (IsEqualGUID(guid, &IID_IDirect3DRMMeshBuilder2))
46 return "IID_IDirect3DRMMeshBuilder2";
47 else if (IsEqualGUID(guid, &IID_IDirect3DRMMeshBuilder3))
48 return "IID_IDirect3DRMMeshBuilder3";
50 return "?";
53 typedef struct {
54 IDirect3DRM IDirect3DRM_iface;
55 IDirect3DRM2 IDirect3DRM2_iface;
56 IDirect3DRM3 IDirect3DRM3_iface;
57 LONG ref;
58 } IDirect3DRMImpl;
60 static inline IDirect3DRMImpl *impl_from_IDirect3DRM(IDirect3DRM *iface)
62 return CONTAINING_RECORD(iface, IDirect3DRMImpl, IDirect3DRM_iface);
65 static inline IDirect3DRMImpl *impl_from_IDirect3DRM2(IDirect3DRM2 *iface)
67 return CONTAINING_RECORD(iface, IDirect3DRMImpl, IDirect3DRM2_iface);
70 static inline IDirect3DRMImpl *impl_from_IDirect3DRM3(IDirect3DRM3 *iface)
72 return CONTAINING_RECORD(iface, IDirect3DRMImpl, IDirect3DRM3_iface);
75 /*** IUnknown methods ***/
76 static HRESULT WINAPI IDirect3DRMImpl_QueryInterface(IDirect3DRM* iface, REFIID riid, void** ppvObject)
78 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
80 TRACE("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ppvObject);
82 *ppvObject = NULL;
84 if(IsEqualGUID(riid, &IID_IUnknown) ||
85 IsEqualGUID(riid, &IID_IDirect3DRM))
87 *ppvObject = &This->IDirect3DRM_iface;
89 else if(IsEqualGUID(riid, &IID_IDirect3DRM2))
91 *ppvObject = &This->IDirect3DRM2_iface;
93 else if(IsEqualGUID(riid, &IID_IDirect3DRM3))
95 *ppvObject = &This->IDirect3DRM3_iface;
97 else
99 FIXME("interface %s not implemented\n", debugstr_guid(riid));
100 return E_NOINTERFACE;
103 IDirect3DRM_AddRef(iface);
104 return S_OK;
107 static ULONG WINAPI IDirect3DRMImpl_AddRef(IDirect3DRM* iface)
109 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
110 ULONG ref = InterlockedIncrement(&This->ref);
112 TRACE("(%p/%p)->(): new ref = %d\n", iface, This, ref);
114 return ref;
117 static ULONG WINAPI IDirect3DRMImpl_Release(IDirect3DRM* iface)
119 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
120 ULONG ref = InterlockedDecrement(&This->ref);
122 TRACE("(%p/%p)->(): new ref = %d\n", iface, This, ref);
124 if (!ref)
125 HeapFree(GetProcessHeap(), 0, This);
127 return ref;
130 /*** IDirect3DRM methods ***/
131 static HRESULT WINAPI IDirect3DRMImpl_CreateObject(IDirect3DRM* iface, REFCLSID rclsid, LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppvObj)
133 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
135 FIXME("(%p/%p)->(%s,%p,%s,%p): stub\n", iface, This, debugstr_guid(rclsid), pUnkOuter, debugstr_guid(riid), ppvObj);
137 return E_NOTIMPL;
140 static HRESULT WINAPI IDirect3DRMImpl_CreateFrame(IDirect3DRM* iface, LPDIRECT3DRMFRAME parent_frame, LPDIRECT3DRMFRAME * frame)
142 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
144 TRACE("(%p/%p)->(%p,%p)\n", iface, This, parent_frame, frame);
146 return Direct3DRMFrame_create(&IID_IDirect3DRMFrame, (IUnknown*)parent_frame, (IUnknown**)frame);
149 static HRESULT WINAPI IDirect3DRMImpl_CreateMesh(IDirect3DRM* iface, LPDIRECT3DRMMESH * ppMesh)
151 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
153 TRACE("(%p/%p)->(%p)\n", iface, This, ppMesh);
155 return IDirect3DRM3_CreateMesh(&This->IDirect3DRM3_iface, ppMesh);
158 static HRESULT WINAPI IDirect3DRMImpl_CreateMeshBuilder(IDirect3DRM* iface, LPDIRECT3DRMMESHBUILDER * ppMeshBuilder)
160 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
162 TRACE("(%p/%p)->(%p)\n", iface, This, ppMeshBuilder);
164 return Direct3DRMMeshBuilder_create(&IID_IDirect3DRMMeshBuilder, (IUnknown**)ppMeshBuilder);
167 static HRESULT WINAPI IDirect3DRMImpl_CreateFace(IDirect3DRM* iface, LPDIRECT3DRMFACE * ppFace)
169 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
171 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppFace);
173 return E_NOTIMPL;
176 static HRESULT WINAPI IDirect3DRMImpl_CreateAnimation(IDirect3DRM* iface, LPDIRECT3DRMANIMATION * ppAnimation)
178 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
180 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppAnimation);
182 return E_NOTIMPL;
185 static HRESULT WINAPI IDirect3DRMImpl_CreateAnimationSet(IDirect3DRM* iface, LPDIRECT3DRMANIMATIONSET * ppAnimationSet)
187 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
189 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppAnimationSet);
191 return E_NOTIMPL;
194 static HRESULT WINAPI IDirect3DRMImpl_CreateTexture(IDirect3DRM *iface,
195 D3DRMIMAGE *image, IDirect3DRMTexture **texture)
197 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
199 FIXME("(%p/%p)->(%p,%p): partial stub\n", iface, This, image, texture);
201 return Direct3DRMTexture_create(&IID_IDirect3DRMTexture, (IUnknown **)texture);
204 static HRESULT WINAPI IDirect3DRMImpl_CreateLight(IDirect3DRM* iface, D3DRMLIGHTTYPE type,
205 D3DCOLOR color, LPDIRECT3DRMLIGHT* Light)
207 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
209 TRACE("(%p/%p)->(%d,%d,%p)\n", iface, This, type, color, Light);
211 return IDirect3DRM3_CreateLight(&This->IDirect3DRM3_iface, type, color, Light);
214 static HRESULT WINAPI IDirect3DRMImpl_CreateLightRGB(IDirect3DRM* iface, D3DRMLIGHTTYPE type,
215 D3DVALUE red, D3DVALUE green, D3DVALUE blue,
216 LPDIRECT3DRMLIGHT* Light)
218 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
220 TRACE("(%p/%p)->(%d,%f,%f,%f,%p)\n", iface, This, type, red, green, blue, Light);
222 return IDirect3DRM3_CreateLightRGB(&This->IDirect3DRM3_iface, type, red, green, blue, Light);
225 static HRESULT WINAPI IDirect3DRMImpl_CreateMaterial(IDirect3DRM* iface, D3DVALUE power, LPDIRECT3DRMMATERIAL * material)
227 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
229 TRACE("(%p/%p)->(%f,%p)\n", iface, This, power, material);
231 return IDirect3DRM3_CreateMaterial(&This->IDirect3DRM3_iface, power, (LPDIRECT3DRMMATERIAL2*)material);
234 static HRESULT WINAPI IDirect3DRMImpl_CreateDevice(IDirect3DRM *iface,
235 DWORD width, DWORD height, IDirect3DRMDevice **device)
237 FIXME("iface %p, width %u, height %u, device %p partial stub!\n", iface, width, height, device);
239 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice, (IUnknown **)device);
242 static HRESULT WINAPI IDirect3DRMImpl_CreateDeviceFromSurface(IDirect3DRM *iface, GUID *pGUID,
243 IDirectDraw *pDD, IDirectDrawSurface *pDDSBack, IDirect3DRMDevice **ppDevice)
245 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
247 FIXME("(%p/%p)->(%s,%p,%p,%p): partial stub\n", iface, This, debugstr_guid(pGUID), pDD,
248 pDDSBack, ppDevice);
250 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice, (IUnknown**)ppDevice);
253 static HRESULT WINAPI IDirect3DRMImpl_CreateDeviceFromD3D(IDirect3DRM *iface,
254 IDirect3D *pD3D, IDirect3DDevice *pD3DDev, IDirect3DRMDevice **ppDevice)
256 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
258 FIXME("(%p/%p)->(%p,%p,%p): partial stub\n", iface, This, pD3D, pD3DDev, ppDevice);
260 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice, (IUnknown**)ppDevice);
263 static HRESULT WINAPI IDirect3DRMImpl_CreateDeviceFromClipper(IDirect3DRM *iface,
264 IDirectDrawClipper *pDDClipper, GUID *pGUID, int width, int height,
265 IDirect3DRMDevice **ppDevice)
267 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
269 FIXME("(%p/%p)->(%p,%s,%d,%d,%p): partial stub\n", iface, This, pDDClipper,
270 debugstr_guid(pGUID), width, height, ppDevice);
272 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice, (IUnknown**)ppDevice);
275 static HRESULT WINAPI IDirect3DRMImpl_CreateTextureFromSurface(IDirect3DRM *iface,
276 IDirectDrawSurface *pDDS, IDirect3DRMTexture **ppTexture)
278 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
280 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, pDDS, ppTexture);
282 return E_NOTIMPL;
285 static HRESULT WINAPI IDirect3DRMImpl_CreateShadow(IDirect3DRM* iface, LPDIRECT3DRMVISUAL pVisual, LPDIRECT3DRMLIGHT pLight, D3DVALUE px, D3DVALUE py, D3DVALUE pz, D3DVALUE nx, D3DVALUE ny, D3DVALUE nz, LPDIRECT3DRMVISUAL * ppVisual)
287 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
289 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);
291 return E_NOTIMPL;
294 static HRESULT WINAPI IDirect3DRMImpl_CreateViewport(IDirect3DRM *iface, IDirect3DRMDevice *device,
295 IDirect3DRMFrame *camera, DWORD x, DWORD y, DWORD width, DWORD height, IDirect3DRMViewport **viewport)
297 FIXME("iface %p, device %p, camera %p, x %u, y %u, width %u, height %u, viewport %p partial stub!\n",
298 iface, device, camera, x, y, width, height, viewport);
300 return Direct3DRMViewport_create(&IID_IDirect3DRMViewport, (IUnknown **)viewport);
303 static HRESULT WINAPI IDirect3DRMImpl_CreateWrap(IDirect3DRM* 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)
305 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
307 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);
309 return E_NOTIMPL;
312 static HRESULT WINAPI IDirect3DRMImpl_CreateUserVisual(IDirect3DRM* iface, D3DRMUSERVISUALCALLBACK cb, LPVOID pArg, LPDIRECT3DRMUSERVISUAL * ppUserVisual)
314 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
316 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, cb, pArg, ppUserVisual);
318 return E_NOTIMPL;
321 static HRESULT WINAPI IDirect3DRMImpl_LoadTexture(IDirect3DRM* iface, const char * filename, LPDIRECT3DRMTEXTURE * ppTexture)
323 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
325 FIXME("(%p/%p)->(%s,%p): stub\n", iface, This, filename, ppTexture);
327 return E_NOTIMPL;
330 static HRESULT WINAPI IDirect3DRMImpl_LoadTextureFromResource(IDirect3DRM* iface, HRSRC rs, LPDIRECT3DRMTEXTURE * ppTexture)
332 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
334 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, rs, ppTexture);
336 return E_NOTIMPL;
339 static HRESULT WINAPI IDirect3DRMImpl_SetSearchPath(IDirect3DRM* iface, LPCSTR path)
341 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
343 FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
345 return E_NOTIMPL;
348 static HRESULT WINAPI IDirect3DRMImpl_AddSearchPath(IDirect3DRM* iface, LPCSTR path)
350 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
352 FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
354 return E_NOTIMPL;
357 static HRESULT WINAPI IDirect3DRMImpl_GetSearchPath(IDirect3DRM* iface, DWORD *size_return, LPSTR path_return)
359 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
361 FIXME("(%p/%p)->(%p,%s): stub\n", iface, This, size_return, path_return);
363 return E_NOTIMPL;
366 static HRESULT WINAPI IDirect3DRMImpl_SetDefaultTextureColors(IDirect3DRM* iface, DWORD nb_colors)
368 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
370 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_colors);
372 return E_NOTIMPL;
375 static HRESULT WINAPI IDirect3DRMImpl_SetDefaultTextureShades(IDirect3DRM* iface, DWORD nb_shades)
377 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
379 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_shades);
381 return E_NOTIMPL;
384 static HRESULT WINAPI IDirect3DRMImpl_GetDevices(IDirect3DRM* iface, LPDIRECT3DRMDEVICEARRAY * ppDeviceArray)
386 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
388 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppDeviceArray);
390 return E_NOTIMPL;
393 static HRESULT WINAPI IDirect3DRMImpl_GetNamedObject(IDirect3DRM *iface,
394 const char *name, IDirect3DRMObject **object)
396 FIXME("iface %p, name %s, object %p stub!\n", iface, debugstr_a(name), object);
398 return E_NOTIMPL;
401 static HRESULT WINAPI IDirect3DRMImpl_EnumerateObjects(IDirect3DRM* iface, D3DRMOBJECTCALLBACK cb, LPVOID pArg)
403 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
405 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, cb, pArg);
407 return E_NOTIMPL;
410 static HRESULT WINAPI IDirect3DRMImpl_Load(IDirect3DRM* iface, LPVOID pObjSource, LPVOID pObjID, LPIID * ppGUIDs, DWORD nb_GUIDs, D3DRMLOADOPTIONS LOFlags, D3DRMLOADCALLBACK LoadProc, LPVOID pArgLP, D3DRMLOADTEXTURECALLBACK LoadTextureProc, LPVOID pArgLTP, LPDIRECT3DRMFRAME pParentFrame)
412 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
413 LPDIRECT3DRMFRAME3 pParentFrame3 = NULL;
414 HRESULT hr = D3DRM_OK;
416 TRACE("(%p/%p)->(%p,%p,%p,%d,%d,%p,%p,%p,%p,%p)\n", iface, This, pObjSource, pObjID, ppGUIDs, nb_GUIDs, LOFlags, LoadProc, pArgLP, LoadTextureProc, pArgLTP, pParentFrame);
418 if (pParentFrame)
419 hr = IDirect3DRMFrame_QueryInterface(pParentFrame, &IID_IDirect3DRMFrame3, (void**)&pParentFrame3);
420 if (SUCCEEDED(hr))
421 hr = IDirect3DRM3_Load(&This->IDirect3DRM3_iface, pObjSource, pObjID, ppGUIDs, nb_GUIDs, LOFlags, LoadProc, pArgLP, LoadTextureProc, pArgLTP, pParentFrame3);
422 if (pParentFrame3)
423 IDirect3DRMFrame3_Release(pParentFrame3);
425 return hr;
428 static HRESULT WINAPI IDirect3DRMImpl_Tick(IDirect3DRM* iface, D3DVALUE tick)
430 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
432 FIXME("(%p/%p)->(%f): stub\n", iface, This, tick);
434 return E_NOTIMPL;
437 static const struct IDirect3DRMVtbl Direct3DRM_Vtbl =
439 IDirect3DRMImpl_QueryInterface,
440 IDirect3DRMImpl_AddRef,
441 IDirect3DRMImpl_Release,
442 IDirect3DRMImpl_CreateObject,
443 IDirect3DRMImpl_CreateFrame,
444 IDirect3DRMImpl_CreateMesh,
445 IDirect3DRMImpl_CreateMeshBuilder,
446 IDirect3DRMImpl_CreateFace,
447 IDirect3DRMImpl_CreateAnimation,
448 IDirect3DRMImpl_CreateAnimationSet,
449 IDirect3DRMImpl_CreateTexture,
450 IDirect3DRMImpl_CreateLight,
451 IDirect3DRMImpl_CreateLightRGB,
452 IDirect3DRMImpl_CreateMaterial,
453 IDirect3DRMImpl_CreateDevice,
454 IDirect3DRMImpl_CreateDeviceFromSurface,
455 IDirect3DRMImpl_CreateDeviceFromD3D,
456 IDirect3DRMImpl_CreateDeviceFromClipper,
457 IDirect3DRMImpl_CreateTextureFromSurface,
458 IDirect3DRMImpl_CreateShadow,
459 IDirect3DRMImpl_CreateViewport,
460 IDirect3DRMImpl_CreateWrap,
461 IDirect3DRMImpl_CreateUserVisual,
462 IDirect3DRMImpl_LoadTexture,
463 IDirect3DRMImpl_LoadTextureFromResource,
464 IDirect3DRMImpl_SetSearchPath,
465 IDirect3DRMImpl_AddSearchPath,
466 IDirect3DRMImpl_GetSearchPath,
467 IDirect3DRMImpl_SetDefaultTextureColors,
468 IDirect3DRMImpl_SetDefaultTextureShades,
469 IDirect3DRMImpl_GetDevices,
470 IDirect3DRMImpl_GetNamedObject,
471 IDirect3DRMImpl_EnumerateObjects,
472 IDirect3DRMImpl_Load,
473 IDirect3DRMImpl_Tick
477 /*** IUnknown methods ***/
478 static HRESULT WINAPI IDirect3DRM2Impl_QueryInterface(IDirect3DRM2* iface, REFIID riid,
479 void** ppvObject)
481 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
482 return IDirect3DRM_QueryInterface(&This->IDirect3DRM_iface, riid, ppvObject);
485 static ULONG WINAPI IDirect3DRM2Impl_AddRef(IDirect3DRM2* iface)
487 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
488 return IDirect3DRM_AddRef(&This->IDirect3DRM_iface);
491 static ULONG WINAPI IDirect3DRM2Impl_Release(IDirect3DRM2* iface)
493 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
494 return IDirect3DRM_Release(&This->IDirect3DRM_iface);
497 /*** IDirect3DRM2 methods ***/
498 static HRESULT WINAPI IDirect3DRM2Impl_CreateObject(IDirect3DRM2* iface, REFCLSID rclsid,
499 LPUNKNOWN pUnkOuter, REFIID riid,
500 LPVOID *ppvObj)
502 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
504 FIXME("(%p/%p)->(%s,%p,%s,%p): stub\n", iface, This, debugstr_guid(rclsid), pUnkOuter,
505 debugstr_guid(riid), ppvObj);
507 return E_NOTIMPL;
510 static HRESULT WINAPI IDirect3DRM2Impl_CreateFrame(IDirect3DRM2* iface, LPDIRECT3DRMFRAME parent_frame,
511 LPDIRECT3DRMFRAME2 * frame)
513 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
515 TRACE("(%p/%p)->(%p,%p)\n", iface, This, parent_frame, frame);
517 return Direct3DRMFrame_create(&IID_IDirect3DRMFrame2, (IUnknown*)parent_frame, (IUnknown**)frame);
520 static HRESULT WINAPI IDirect3DRM2Impl_CreateMesh(IDirect3DRM2* iface, LPDIRECT3DRMMESH * ppMesh)
522 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
524 TRACE("(%p/%p)->(%p)\n", iface, This, ppMesh);
526 return IDirect3DRM3_CreateMesh(&This->IDirect3DRM3_iface, ppMesh);
529 static HRESULT WINAPI IDirect3DRM2Impl_CreateMeshBuilder(IDirect3DRM2* iface,
530 LPDIRECT3DRMMESHBUILDER2 * ppMeshBuilder)
532 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
534 TRACE("(%p/%p)->(%p)\n", iface, This, ppMeshBuilder);
536 return Direct3DRMMeshBuilder_create(&IID_IDirect3DRMMeshBuilder2, (IUnknown**)ppMeshBuilder);
539 static HRESULT WINAPI IDirect3DRM2Impl_CreateFace(IDirect3DRM2* iface, LPDIRECT3DRMFACE * ppFace)
541 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
543 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppFace);
545 return E_NOTIMPL;
548 static HRESULT WINAPI IDirect3DRM2Impl_CreateAnimation(IDirect3DRM2* iface,
549 LPDIRECT3DRMANIMATION * ppAnimation)
551 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
553 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppAnimation);
555 return E_NOTIMPL;
558 static HRESULT WINAPI IDirect3DRM2Impl_CreateAnimationSet(IDirect3DRM2* iface,
559 LPDIRECT3DRMANIMATIONSET * ppAnimationSet)
561 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
563 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppAnimationSet);
565 return E_NOTIMPL;
568 static HRESULT WINAPI IDirect3DRM2Impl_CreateTexture(IDirect3DRM2 *iface,
569 D3DRMIMAGE *image, IDirect3DRMTexture2 **texture)
571 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
573 FIXME("(%p/%p)->(%p,%p): partial stub\n", iface, This, image, texture);
575 return Direct3DRMTexture_create(&IID_IDirect3DRMTexture2, (IUnknown **)texture);
578 static HRESULT WINAPI IDirect3DRM2Impl_CreateLight(IDirect3DRM2* iface, D3DRMLIGHTTYPE type,
579 D3DCOLOR color, LPDIRECT3DRMLIGHT* Light)
581 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
583 TRACE("(%p/%p)->(%d,%d,%p)\n", iface, This, type, color, Light);
585 return IDirect3DRM3_CreateLight(&This->IDirect3DRM3_iface, type, color, Light);
588 static HRESULT WINAPI IDirect3DRM2Impl_CreateLightRGB(IDirect3DRM2* iface, D3DRMLIGHTTYPE type,
589 D3DVALUE red, D3DVALUE green, D3DVALUE blue,
590 LPDIRECT3DRMLIGHT* Light)
592 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
594 TRACE("(%p/%p)->(%d,%f,%f,%f,%p)\n", iface, This, type, red, green, blue, Light);
596 return IDirect3DRM3_CreateLightRGB(&This->IDirect3DRM3_iface, type, red, green, blue, Light);
599 static HRESULT WINAPI IDirect3DRM2Impl_CreateMaterial(IDirect3DRM2* iface, D3DVALUE power,
600 LPDIRECT3DRMMATERIAL * material)
602 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
604 TRACE("(%p/%p)->(%f,%p)\n", iface, This, power, material);
606 return IDirect3DRM3_CreateMaterial(&This->IDirect3DRM3_iface, power, (LPDIRECT3DRMMATERIAL2*)material);
609 static HRESULT WINAPI IDirect3DRM2Impl_CreateDevice(IDirect3DRM2 *iface,
610 DWORD width, DWORD height, IDirect3DRMDevice2 **device)
612 FIXME("iface %p, width %u, height %u, device %p.\n", iface, width, height, device);
614 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice2, (IUnknown **)device);
617 static HRESULT WINAPI IDirect3DRM2Impl_CreateDeviceFromSurface(IDirect3DRM2 *iface, GUID *pGUID,
618 IDirectDraw *pDD, IDirectDrawSurface *pDDSBack, IDirect3DRMDevice2 **ppDevice)
620 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
622 FIXME("(%p/%p)->(%s,%p,%p,%p): partial stub\n", iface, This, debugstr_guid(pGUID),
623 pDD, pDDSBack, ppDevice);
625 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice2, (IUnknown**)ppDevice);
628 static HRESULT WINAPI IDirect3DRM2Impl_CreateDeviceFromD3D(IDirect3DRM2 *iface,
629 IDirect3D2 *pD3D, IDirect3DDevice2 *pD3DDev, IDirect3DRMDevice2 **ppDevice)
631 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
633 FIXME("(%p/%p)->(%p,%p,%p): partial stub\n", iface, This, pD3D, pD3DDev, ppDevice);
635 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice2, (IUnknown**)ppDevice);
638 static HRESULT WINAPI IDirect3DRM2Impl_CreateDeviceFromClipper(IDirect3DRM2 *iface,
639 IDirectDrawClipper *pDDClipper, GUID *pGUID, int width, int height,
640 IDirect3DRMDevice2 **ppDevice)
642 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
644 FIXME("(%p/%p)->(%p,%s,%d,%d,%p): partial stub\n", iface, This, pDDClipper,
645 debugstr_guid(pGUID), width, height, ppDevice);
647 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice2, (IUnknown**)ppDevice);
650 static HRESULT WINAPI IDirect3DRM2Impl_CreateTextureFromSurface(IDirect3DRM2 *iface,
651 IDirectDrawSurface *pDDS, IDirect3DRMTexture2 **ppTexture)
653 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
655 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, pDDS, ppTexture);
657 return E_NOTIMPL;
660 static HRESULT WINAPI IDirect3DRM2Impl_CreateShadow(IDirect3DRM2* iface, LPDIRECT3DRMVISUAL pVisual,
661 LPDIRECT3DRMLIGHT pLight,
662 D3DVALUE px, D3DVALUE py, D3DVALUE pz,
663 D3DVALUE nx, D3DVALUE ny, D3DVALUE nz,
664 LPDIRECT3DRMVISUAL * ppVisual)
666 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
668 FIXME("(%p/%p)->(%p,%p,%f,%f,%f,%f,%f,%f,%p): stub\n", iface, This, pVisual, pLight, px, py, pz,
669 nx, ny, nz, ppVisual);
671 return E_NOTIMPL;
674 static HRESULT WINAPI IDirect3DRM2Impl_CreateViewport(IDirect3DRM2 *iface, IDirect3DRMDevice *device,
675 IDirect3DRMFrame *camera, DWORD x, DWORD y, DWORD width, DWORD height, IDirect3DRMViewport **viewport)
677 FIXME("iface %p, device %p, camera %p, x %u, y %u, width %u, height %u, viewport %p partial stub!\n",
678 iface, device, camera, x, y, width, height, viewport);
680 return Direct3DRMViewport_create(&IID_IDirect3DRMViewport, (IUnknown **)viewport);
683 static HRESULT WINAPI IDirect3DRM2Impl_CreateWrap(IDirect3DRM2* iface, D3DRMWRAPTYPE type,
684 LPDIRECT3DRMFRAME pFrame,
685 D3DVALUE ox, D3DVALUE oy, D3DVALUE oz,
686 D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
687 D3DVALUE ux, D3DVALUE uy, D3DVALUE uz,
688 D3DVALUE ou, D3DVALUE ov, D3DVALUE su,
689 D3DVALUE sv, LPDIRECT3DRMWRAP * ppWrap)
691 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
693 FIXME("(%p/%p)->(%d,%p,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%p): stub\n", iface, This, type,
694 pFrame, ox, oy, oz, dx, dy, dz, ux, uy, uz, ou, ov, su, sv, ppWrap);
696 return E_NOTIMPL;
699 static HRESULT WINAPI IDirect3DRM2Impl_CreateUserVisual(IDirect3DRM2* iface,
700 D3DRMUSERVISUALCALLBACK cb, LPVOID pArg,
701 LPDIRECT3DRMUSERVISUAL * ppUserVisual)
703 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
705 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, cb, pArg, ppUserVisual);
707 return E_NOTIMPL;
710 static HRESULT WINAPI IDirect3DRM2Impl_LoadTexture(IDirect3DRM2* iface, const char * filename,
711 LPDIRECT3DRMTEXTURE2 * ppTexture)
713 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
715 FIXME("(%p/%p)->(%s,%p): stub\n", iface, This, filename, ppTexture);
717 return E_NOTIMPL;
720 static HRESULT WINAPI IDirect3DRM2Impl_LoadTextureFromResource(IDirect3DRM2* iface, HMODULE hModule,
721 LPCSTR strName, LPCSTR strType,
722 LPDIRECT3DRMTEXTURE2 * ppTexture)
724 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
726 FIXME("(%p/%p)->(%p,%p,%p,%p): stub\n", iface, This, hModule, strName, strType, ppTexture);
728 return E_NOTIMPL;
731 static HRESULT WINAPI IDirect3DRM2Impl_SetSearchPath(IDirect3DRM2* iface, LPCSTR path)
733 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
735 FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
737 return E_NOTIMPL;
740 static HRESULT WINAPI IDirect3DRM2Impl_AddSearchPath(IDirect3DRM2* iface, LPCSTR path)
742 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
744 FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
746 return E_NOTIMPL;
749 static HRESULT WINAPI IDirect3DRM2Impl_GetSearchPath(IDirect3DRM2* iface, DWORD *size_return,
750 LPSTR path_return)
752 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
754 FIXME("(%p/%p)->(%p,%s): stub\n", iface, This, size_return, path_return);
756 return E_NOTIMPL;
759 static HRESULT WINAPI IDirect3DRM2Impl_SetDefaultTextureColors(IDirect3DRM2* iface, DWORD nb_colors)
761 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
763 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_colors);
765 return E_NOTIMPL;
768 static HRESULT WINAPI IDirect3DRM2Impl_SetDefaultTextureShades(IDirect3DRM2* iface, DWORD nb_shades)
770 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
772 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_shades);
774 return E_NOTIMPL;
777 static HRESULT WINAPI IDirect3DRM2Impl_GetDevices(IDirect3DRM2* iface,
778 LPDIRECT3DRMDEVICEARRAY * ppDeviceArray)
780 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
782 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppDeviceArray);
784 return E_NOTIMPL;
787 static HRESULT WINAPI IDirect3DRM2Impl_GetNamedObject(IDirect3DRM2 *iface,
788 const char *name, IDirect3DRMObject **object)
790 FIXME("iface %p, name %s, object %p stub!\n", iface, debugstr_a(name), object);
792 return E_NOTIMPL;
795 static HRESULT WINAPI IDirect3DRM2Impl_EnumerateObjects(IDirect3DRM2* iface, D3DRMOBJECTCALLBACK cb,
796 LPVOID pArg)
798 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
800 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, cb, pArg);
802 return E_NOTIMPL;
805 static HRESULT WINAPI IDirect3DRM2Impl_Load(IDirect3DRM2* iface, LPVOID pObjSource, LPVOID pObjID,
806 LPIID * ppGUIDs, DWORD nb_GUIDs,
807 D3DRMLOADOPTIONS LOFlags, D3DRMLOADCALLBACK LoadProc,
808 LPVOID pArgLP, D3DRMLOADTEXTURECALLBACK LoadTextureProc,
809 LPVOID pArgLTP, LPDIRECT3DRMFRAME pParentFrame)
811 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
812 LPDIRECT3DRMFRAME3 pParentFrame3 = NULL;
813 HRESULT hr = D3DRM_OK;
815 TRACE("(%p/%p)->(%p,%p,%p,%d,%d,%p,%p,%p,%p,%p)\n", iface, This, pObjSource, pObjID,
816 ppGUIDs, nb_GUIDs, LOFlags, LoadProc, pArgLP, LoadTextureProc, pArgLTP, pParentFrame);
818 if (pParentFrame)
819 hr = IDirect3DRMFrame_QueryInterface(pParentFrame, &IID_IDirect3DRMFrame3, (void**)&pParentFrame3);
820 if (SUCCEEDED(hr))
821 hr = IDirect3DRM3_Load(&This->IDirect3DRM3_iface, pObjSource, pObjID, ppGUIDs, nb_GUIDs, LOFlags, LoadProc, pArgLP, LoadTextureProc, pArgLTP, pParentFrame3);
822 if (pParentFrame3)
823 IDirect3DRMFrame3_Release(pParentFrame3);
825 return hr;
828 static HRESULT WINAPI IDirect3DRM2Impl_Tick(IDirect3DRM2* iface, D3DVALUE tick)
830 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
832 FIXME("(%p/%p)->(%f): stub\n", iface, This, tick);
834 return E_NOTIMPL;
837 static HRESULT WINAPI IDirect3DRM2Impl_CreateProgressiveMesh(IDirect3DRM2* iface,
838 LPDIRECT3DRMPROGRESSIVEMESH * ppMesh)
840 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
842 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppMesh);
844 return E_NOTIMPL;
847 static const struct IDirect3DRM2Vtbl Direct3DRM2_Vtbl =
849 IDirect3DRM2Impl_QueryInterface,
850 IDirect3DRM2Impl_AddRef,
851 IDirect3DRM2Impl_Release,
852 IDirect3DRM2Impl_CreateObject,
853 IDirect3DRM2Impl_CreateFrame,
854 IDirect3DRM2Impl_CreateMesh,
855 IDirect3DRM2Impl_CreateMeshBuilder,
856 IDirect3DRM2Impl_CreateFace,
857 IDirect3DRM2Impl_CreateAnimation,
858 IDirect3DRM2Impl_CreateAnimationSet,
859 IDirect3DRM2Impl_CreateTexture,
860 IDirect3DRM2Impl_CreateLight,
861 IDirect3DRM2Impl_CreateLightRGB,
862 IDirect3DRM2Impl_CreateMaterial,
863 IDirect3DRM2Impl_CreateDevice,
864 IDirect3DRM2Impl_CreateDeviceFromSurface,
865 IDirect3DRM2Impl_CreateDeviceFromD3D,
866 IDirect3DRM2Impl_CreateDeviceFromClipper,
867 IDirect3DRM2Impl_CreateTextureFromSurface,
868 IDirect3DRM2Impl_CreateShadow,
869 IDirect3DRM2Impl_CreateViewport,
870 IDirect3DRM2Impl_CreateWrap,
871 IDirect3DRM2Impl_CreateUserVisual,
872 IDirect3DRM2Impl_LoadTexture,
873 IDirect3DRM2Impl_LoadTextureFromResource,
874 IDirect3DRM2Impl_SetSearchPath,
875 IDirect3DRM2Impl_AddSearchPath,
876 IDirect3DRM2Impl_GetSearchPath,
877 IDirect3DRM2Impl_SetDefaultTextureColors,
878 IDirect3DRM2Impl_SetDefaultTextureShades,
879 IDirect3DRM2Impl_GetDevices,
880 IDirect3DRM2Impl_GetNamedObject,
881 IDirect3DRM2Impl_EnumerateObjects,
882 IDirect3DRM2Impl_Load,
883 IDirect3DRM2Impl_Tick,
884 IDirect3DRM2Impl_CreateProgressiveMesh
888 /*** IUnknown methods ***/
889 static HRESULT WINAPI IDirect3DRM3Impl_QueryInterface(IDirect3DRM3* iface, REFIID riid,
890 void** ppvObject)
892 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
893 return IDirect3DRM_QueryInterface(&This->IDirect3DRM_iface, riid, ppvObject);
896 static ULONG WINAPI IDirect3DRM3Impl_AddRef(IDirect3DRM3* iface)
898 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
899 return IDirect3DRM_AddRef(&This->IDirect3DRM_iface);
902 static ULONG WINAPI IDirect3DRM3Impl_Release(IDirect3DRM3* iface)
904 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
905 return IDirect3DRM_Release(&This->IDirect3DRM_iface);
908 /*** IDirect3DRM3 methods ***/
909 static HRESULT WINAPI IDirect3DRM3Impl_CreateObject(IDirect3DRM3* iface, REFCLSID rclsid,
910 LPUNKNOWN unkwn, REFIID riid, LPVOID* object)
912 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
914 FIXME("(%p/%p)->(%s,%p,%s,%p): stub\n", iface, This, debugstr_guid(rclsid), unkwn,
915 debugstr_guid(riid), object);
917 return E_NOTIMPL;
920 static HRESULT WINAPI IDirect3DRM3Impl_CreateFrame(IDirect3DRM3* iface, LPDIRECT3DRMFRAME3 parent_frame,
921 LPDIRECT3DRMFRAME3* frame)
923 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
925 TRACE("(%p/%p)->(%p,%p)\n", iface, This, parent_frame, frame);
927 return Direct3DRMFrame_create(&IID_IDirect3DRMFrame3, (IUnknown*)parent_frame, (IUnknown**)frame);
930 static HRESULT WINAPI IDirect3DRM3Impl_CreateMesh(IDirect3DRM3* iface, LPDIRECT3DRMMESH* Mesh)
932 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
934 TRACE("(%p/%p)->(%p)\n", iface, This, Mesh);
936 return Direct3DRMMesh_create(Mesh);
939 static HRESULT WINAPI IDirect3DRM3Impl_CreateMeshBuilder(IDirect3DRM3* iface,
940 LPDIRECT3DRMMESHBUILDER3* ppMeshBuilder)
942 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
944 TRACE("(%p/%p)->(%p)\n", iface, This, ppMeshBuilder);
946 return Direct3DRMMeshBuilder_create(&IID_IDirect3DRMMeshBuilder3, (IUnknown**)ppMeshBuilder);
949 static HRESULT WINAPI IDirect3DRM3Impl_CreateFace(IDirect3DRM3* iface, LPDIRECT3DRMFACE2* Face)
951 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
953 FIXME("(%p/%p)->(%p): stub\n", iface, This, Face);
955 return E_NOTIMPL;
958 static HRESULT WINAPI IDirect3DRM3Impl_CreateAnimation(IDirect3DRM3* iface,
959 LPDIRECT3DRMANIMATION2* Animation)
961 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
963 FIXME("(%p/%p)->(%p): stub\n", iface, This, Animation);
965 return E_NOTIMPL;
968 static HRESULT WINAPI IDirect3DRM3Impl_CreateAnimationSet(IDirect3DRM3* iface,
969 LPDIRECT3DRMANIMATIONSET2* AnimationSet)
971 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
973 FIXME("(%p/%p)->(%p): stub\n", iface, This, AnimationSet);
975 return E_NOTIMPL;
978 static HRESULT WINAPI IDirect3DRM3Impl_CreateTexture(IDirect3DRM3 *iface,
979 D3DRMIMAGE *image, IDirect3DRMTexture3 **texture)
981 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
983 FIXME("(%p/%p)->(%p,%p): partial stub\n", iface, This, image, texture);
985 return Direct3DRMTexture_create(&IID_IDirect3DRMTexture3, (IUnknown **)texture);
988 static HRESULT WINAPI IDirect3DRM3Impl_CreateLight(IDirect3DRM3* iface, D3DRMLIGHTTYPE type,
989 D3DCOLOR color, LPDIRECT3DRMLIGHT* Light)
991 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
992 HRESULT ret;
994 FIXME("(%p/%p)->(%d,%d,%p): partial stub\n", iface, This, type, color, Light);
996 ret = Direct3DRMLight_create((IUnknown**)Light);
998 if (SUCCEEDED(ret))
1000 IDirect3DRMLight_SetType(*Light, type);
1001 IDirect3DRMLight_SetColor(*Light, color);
1004 return ret;
1007 static HRESULT WINAPI IDirect3DRM3Impl_CreateLightRGB(IDirect3DRM3* iface, D3DRMLIGHTTYPE type,
1008 D3DVALUE red, D3DVALUE green, D3DVALUE blue,
1009 LPDIRECT3DRMLIGHT* Light)
1011 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1012 HRESULT ret;
1014 FIXME("(%p/%p)->(%d,%f,%f,%f,%p): partial stub\n", iface, This, type, red, green, blue, Light);
1016 ret = Direct3DRMLight_create((IUnknown**)Light);
1018 if (SUCCEEDED(ret))
1020 IDirect3DRMLight_SetType(*Light, type);
1021 IDirect3DRMLight_SetColorRGB(*Light, red, green, blue);
1024 return ret;
1027 static HRESULT WINAPI IDirect3DRM3Impl_CreateMaterial(IDirect3DRM3* iface, D3DVALUE power,
1028 LPDIRECT3DRMMATERIAL2* material)
1030 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1031 HRESULT ret;
1033 TRACE("(%p/%p)->(%f,%p)\n", iface, This, power, material);
1035 ret = Direct3DRMMaterial_create(material);
1037 if (SUCCEEDED(ret))
1038 IDirect3DRMMaterial2_SetPower(*material, power);
1040 return ret;
1043 static HRESULT WINAPI IDirect3DRM3Impl_CreateDevice(IDirect3DRM3 *iface,
1044 DWORD width, DWORD height, IDirect3DRMDevice3 **device)
1046 FIXME("iface %p, width %u, height %u, device %p partial stub!\n", iface, width, height, device);
1048 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice3, (IUnknown **)device);
1051 static HRESULT WINAPI IDirect3DRM3Impl_CreateDeviceFromSurface(IDirect3DRM3 *iface, GUID *pGUID,
1052 IDirectDraw *dd, IDirectDrawSurface *back, IDirect3DRMDevice3 **device)
1054 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1056 FIXME("(%p/%p)->(%s,%p,%p,%p): partial stub\n", iface, This, debugstr_guid(pGUID), dd, back, device);
1058 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice3, (IUnknown**)device);
1061 static HRESULT WINAPI IDirect3DRM3Impl_CreateDeviceFromD3D(IDirect3DRM3 *iface,
1062 IDirect3D2 *d3d, IDirect3DDevice2 *d3ddev, IDirect3DRMDevice3 **device)
1064 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1066 FIXME("(%p/%p)->(%p,%p,%p): partial stub\n", iface, This, d3d, d3ddev, device);
1068 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice3, (IUnknown**)device);
1071 static HRESULT WINAPI IDirect3DRM3Impl_CreateDeviceFromClipper(IDirect3DRM3 *iface,
1072 IDirectDrawClipper *clipper, GUID *guid, int width, int height,
1073 IDirect3DRMDevice3 **device)
1075 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1077 FIXME("(%p/%p)->(%p,%s,%d,%d,%p): partial stub\n", iface, This, clipper, debugstr_guid(guid),
1078 width, height, device);
1080 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice3, (IUnknown**)device);
1083 static HRESULT WINAPI IDirect3DRM3Impl_CreateShadow(IDirect3DRM3* iface, LPUNKNOWN Visual1,
1084 LPDIRECT3DRMLIGHT Light, D3DVALUE px,
1085 D3DVALUE py, D3DVALUE pz, D3DVALUE nx,
1086 D3DVALUE ny, D3DVALUE nz,
1087 LPDIRECT3DRMSHADOW2* Visual2)
1089 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1091 FIXME("(%p/%p)->(%p,%p,%f,%f,%f,%f,%f,%f,%p): stub\n", iface, This, Visual1, Light, px, py, pz,
1092 nx, ny, nz, Visual2);
1094 return E_NOTIMPL;
1097 static HRESULT WINAPI IDirect3DRM3Impl_CreateTextureFromSurface(IDirect3DRM3 *iface,
1098 IDirectDrawSurface *surface, IDirect3DRMTexture3 **texture)
1100 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1102 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, surface, texture);
1104 return E_NOTIMPL;
1107 static HRESULT WINAPI IDirect3DRM3Impl_CreateViewport(IDirect3DRM3 *iface, IDirect3DRMDevice3 *device,
1108 IDirect3DRMFrame3 *camera, DWORD x, DWORD y, DWORD width, DWORD height, IDirect3DRMViewport2 **viewport)
1110 FIXME("iface %p, device %p, camera %p, x %u, y %u, width %u, height %u, viewport %p partial stub!\n",
1111 iface, device, camera, x, y, width, height, viewport);
1113 return Direct3DRMViewport_create(&IID_IDirect3DRMViewport2, (IUnknown **)viewport);
1116 static HRESULT WINAPI IDirect3DRM3Impl_CreateWrap(IDirect3DRM3* iface, D3DRMWRAPTYPE type,
1117 LPDIRECT3DRMFRAME3 frame,
1118 D3DVALUE ox, D3DVALUE oy, D3DVALUE oz,
1119 D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
1120 D3DVALUE ux, D3DVALUE uy, D3DVALUE uz,
1121 D3DVALUE ou, D3DVALUE ov, D3DVALUE su,
1122 D3DVALUE sv, LPDIRECT3DRMWRAP* wrap)
1124 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1126 FIXME("(%p/%p)->(%d,%p,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%p): stub\n", iface, This, type,
1127 frame, ox, oy, oz, dx, dy, dz, ux, uy, uz, ou, ov, su, sv, wrap);
1129 return E_NOTIMPL;
1132 static HRESULT WINAPI IDirect3DRM3Impl_CreateUserVisual(IDirect3DRM3* iface,
1133 D3DRMUSERVISUALCALLBACK cb, LPVOID arg,
1134 LPDIRECT3DRMUSERVISUAL* UserVisual)
1136 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1138 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, cb, arg, UserVisual);
1140 return E_NOTIMPL;
1143 static HRESULT WINAPI IDirect3DRM3Impl_LoadTexture(IDirect3DRM3* iface, const char* filename,
1144 LPDIRECT3DRMTEXTURE3* Texture)
1146 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1148 FIXME("(%p/%p)->(%s,%p): stub\n", iface, This, filename, Texture);
1150 return E_NOTIMPL;
1153 static HRESULT WINAPI IDirect3DRM3Impl_LoadTextureFromResource(IDirect3DRM3* iface, HMODULE mod,
1154 LPCSTR strName, LPCSTR strType,
1155 LPDIRECT3DRMTEXTURE3 * ppTexture)
1157 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1159 FIXME("(%p/%p)->(%p,%p,%p,%p): stub\n", iface, This, mod, strName, strType, ppTexture);
1161 return E_NOTIMPL;
1164 static HRESULT WINAPI IDirect3DRM3Impl_SetSearchPath(IDirect3DRM3* iface, LPCSTR path)
1166 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1168 FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
1170 return E_NOTIMPL;
1173 static HRESULT WINAPI IDirect3DRM3Impl_AddSearchPath(IDirect3DRM3* iface, LPCSTR path)
1175 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1177 FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
1179 return E_NOTIMPL;
1182 static HRESULT WINAPI IDirect3DRM3Impl_GetSearchPath(IDirect3DRM3* iface, DWORD* size_return,
1183 LPSTR path_return)
1185 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1187 FIXME("(%p/%p)->(%p,%s): stub\n", iface, This, size_return, path_return);
1189 return E_NOTIMPL;
1192 static HRESULT WINAPI IDirect3DRM3Impl_SetDefaultTextureColors(IDirect3DRM3* iface, DWORD nb_colors)
1194 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1196 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_colors);
1198 return E_NOTIMPL;
1201 static HRESULT WINAPI IDirect3DRM3Impl_SetDefaultTextureShades(IDirect3DRM3* iface, DWORD nb_shades)
1203 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1205 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_shades);
1207 return E_NOTIMPL;
1210 static HRESULT WINAPI IDirect3DRM3Impl_GetDevices(IDirect3DRM3* iface,
1211 LPDIRECT3DRMDEVICEARRAY* DeviceArray)
1213 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1215 FIXME("(%p/%p)->(%p): stub\n", iface, This, DeviceArray);
1217 return E_NOTIMPL;
1220 static HRESULT WINAPI IDirect3DRM3Impl_GetNamedObject(IDirect3DRM3 *iface,
1221 const char *name, IDirect3DRMObject **object)
1223 FIXME("iface %p, name %s, object %p stub!\n", iface, debugstr_a(name), object);
1225 return E_NOTIMPL;
1228 static HRESULT WINAPI IDirect3DRM3Impl_EnumerateObjects(IDirect3DRM3* iface, D3DRMOBJECTCALLBACK cb,
1229 LPVOID arg)
1231 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1233 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, cb, arg);
1235 return E_NOTIMPL;
1238 static HRESULT load_data(IDirect3DRM3 *iface, IDirectXFileData *data_object, IID **GUIDs, DWORD nb_GUIDs, D3DRMLOADCALLBACK LoadProc,
1239 void *ArgLP, D3DRMLOADTEXTURECALLBACK LoadTextureProc, void *ArgLTP, IDirect3DRMFrame3 *parent_frame)
1241 HRESULT ret = D3DRMERR_BADOBJECT;
1242 HRESULT hr;
1243 const GUID* guid;
1244 DWORD i;
1245 BOOL requested = FALSE;
1247 hr = IDirectXFileData_GetType(data_object, &guid);
1248 if (hr != DXFILE_OK)
1249 goto end;
1251 TRACE("Found object type whose GUID = %s\n", debugstr_guid(guid));
1253 /* Load object only if it is top level and requested or if it is part of another object */
1255 if (IsEqualGUID(guid, &TID_D3DRMMesh))
1257 TRACE("Found TID_D3DRMMesh\n");
1259 for (i = 0; i < nb_GUIDs; i++)
1260 if (IsEqualGUID(GUIDs[i], &IID_IDirect3DRMMeshBuilder) ||
1261 IsEqualGUID(GUIDs[i], &IID_IDirect3DRMMeshBuilder2) ||
1262 IsEqualGUID(GUIDs[i], &IID_IDirect3DRMMeshBuilder3))
1264 requested = TRUE;
1265 break;
1268 if (requested || parent_frame)
1270 IDirect3DRMMeshBuilder3 *meshbuilder;
1272 TRACE("Load mesh data\n");
1274 hr = IDirect3DRM3_CreateMeshBuilder(iface, &meshbuilder);
1275 if (SUCCEEDED(hr))
1277 hr = load_mesh_data(meshbuilder, data_object, LoadTextureProc, ArgLTP);
1278 if (SUCCEEDED(hr))
1280 /* Only top level objects are notified */
1281 if (!parent_frame)
1283 IDirect3DRMObject *object;
1285 hr = IDirect3DRMMeshBuilder3_QueryInterface(meshbuilder, GUIDs[i], (void**)&object);
1286 if (SUCCEEDED(hr))
1288 LoadProc(object, GUIDs[i], ArgLP);
1289 IDirect3DRMObject_Release(object);
1292 else
1294 IDirect3DRMFrame3_AddVisual(parent_frame, (IUnknown*)meshbuilder);
1297 IDirect3DRMMeshBuilder3_Release(meshbuilder);
1300 if (FAILED(hr))
1301 ERR("Cannot process mesh\n");
1304 else if (IsEqualGUID(guid, &TID_D3DRMFrame))
1306 TRACE("Found TID_D3DRMFrame\n");
1308 for (i = 0; i < nb_GUIDs; i++)
1309 if (IsEqualGUID(GUIDs[i], &IID_IDirect3DRMFrame) ||
1310 IsEqualGUID(GUIDs[i], &IID_IDirect3DRMFrame2) ||
1311 IsEqualGUID(GUIDs[i], &IID_IDirect3DRMFrame3))
1313 requested = TRUE;
1314 break;
1317 if (requested || parent_frame)
1319 IDirect3DRMFrame3 *frame;
1321 TRACE("Load frame data\n");
1323 hr = IDirect3DRM3_CreateFrame(iface, parent_frame, &frame);
1324 if (SUCCEEDED(hr))
1326 IDirectXFileObject *child;
1328 while (SUCCEEDED(hr = IDirectXFileData_GetNextObject(data_object, &child)))
1330 IDirectXFileData *data;
1331 IDirectXFileDataReference *reference;
1332 IDirectXFileBinary *binary;
1334 hr = IDirectXFileObject_QueryInterface(child, &IID_IDirectXFileBinary, (void **)&binary);
1335 if (SUCCEEDED(hr))
1337 FIXME("Binary Object not supported yet\n");
1338 IDirectXFileBinary_Release(binary);
1339 continue;
1342 hr = IDirectXFileObject_QueryInterface(child, &IID_IDirectXFileData, (void **)&data);
1343 if (SUCCEEDED(hr))
1345 TRACE("Found Data Object\n");
1346 hr = load_data(iface, data, GUIDs, nb_GUIDs, LoadProc, ArgLP, LoadTextureProc, ArgLTP, frame);
1347 IDirectXFileData_Release(data);
1348 continue;
1350 hr = IDirectXFileObject_QueryInterface(child, &IID_IDirectXFileDataReference, (void **)&reference);
1351 if (SUCCEEDED(hr))
1353 TRACE("Found Data Object Reference\n");
1354 IDirectXFileDataReference_Resolve(reference, &data);
1355 hr = load_data(iface, data, GUIDs, nb_GUIDs, LoadProc, ArgLP, LoadTextureProc, ArgLTP, frame);
1356 IDirectXFileData_Release(data);
1357 IDirectXFileDataReference_Release(reference);
1358 continue;
1362 if (hr != DXFILEERR_NOMOREOBJECTS)
1364 IDirect3DRMFrame3_Release(frame);
1365 goto end;
1367 hr = S_OK;
1369 /* Only top level objects are notified */
1370 if (!parent_frame)
1372 IDirect3DRMObject *object;
1374 hr = IDirect3DRMFrame3_QueryInterface(frame, GUIDs[i], (void**)&object);
1375 if (SUCCEEDED(hr))
1377 LoadProc(object, GUIDs[i], ArgLP);
1378 IDirect3DRMObject_Release(object);
1381 IDirect3DRMFrame3_Release(frame);
1384 if (FAILED(hr))
1385 ERR("Cannot process frame\n");
1388 else if (IsEqualGUID(guid, &TID_D3DRMMaterial))
1390 TRACE("Found TID_D3DRMMaterial\n");
1392 /* Cannot be requested so nothing to do */
1394 else if (IsEqualGUID(guid, &TID_D3DRMFrameTransformMatrix))
1396 TRACE("Found TID_D3DRMFrameTransformMatrix\n");
1398 /* Cannot be requested */
1399 if (parent_frame)
1401 D3DRMMATRIX4D matrix;
1402 DWORD size;
1404 TRACE("Load Frame Transform Matrix data\n");
1406 size = sizeof(matrix);
1407 hr = IDirectXFileData_GetData(data_object, NULL, &size, (void**)matrix);
1408 if ((hr != DXFILE_OK) || (size != sizeof(matrix)))
1409 goto end;
1411 hr = IDirect3DRMFrame3_AddTransform(parent_frame, D3DRMCOMBINE_REPLACE, matrix);
1412 if (FAILED(hr))
1413 goto end;
1416 else
1418 FIXME("Found unknown TID %s\n", debugstr_guid(guid));
1421 ret = D3DRM_OK;
1423 end:
1425 return ret;
1428 static HRESULT WINAPI IDirect3DRM3Impl_Load(IDirect3DRM3* iface, LPVOID ObjSource, LPVOID ObjID,
1429 LPIID* GUIDs, DWORD nb_GUIDs, D3DRMLOADOPTIONS LOFlags,
1430 D3DRMLOADCALLBACK LoadProc, LPVOID ArgLP,
1431 D3DRMLOADTEXTURECALLBACK LoadTextureProc, LPVOID ArgLTP,
1432 LPDIRECT3DRMFRAME3 ParentFrame)
1434 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1435 DXFILELOADOPTIONS load_options;
1436 LPDIRECTXFILE pDXFile = NULL;
1437 LPDIRECTXFILEENUMOBJECT pEnumObject = NULL;
1438 LPDIRECTXFILEDATA pData = NULL;
1439 HRESULT hr;
1440 const GUID* pGuid;
1441 DWORD size;
1442 Header* pHeader;
1443 HRESULT ret = D3DRMERR_BADOBJECT;
1444 DWORD i;
1446 TRACE("(%p/%p)->(%p,%p,%p,%d,%d,%p,%p,%p,%p,%p)\n", iface, This, ObjSource, ObjID, GUIDs,
1447 nb_GUIDs, LOFlags, LoadProc, ArgLP, LoadTextureProc, ArgLTP, ParentFrame);
1449 TRACE("Looking for GUIDs:\n");
1450 for (i = 0; i < nb_GUIDs; i++)
1451 TRACE("- %s (%s)\n", debugstr_guid(GUIDs[i]), get_IID_string(GUIDs[i]));
1453 if (LOFlags == D3DRMLOAD_FROMMEMORY)
1455 load_options = DXFILELOAD_FROMMEMORY;
1457 else if (LOFlags == D3DRMLOAD_FROMFILE)
1459 load_options = DXFILELOAD_FROMFILE;
1460 TRACE("Loading from file %s\n", debugstr_a(ObjSource));
1462 else
1464 FIXME("Load options %d not supported yet\n", LOFlags);
1465 return E_NOTIMPL;
1468 hr = DirectXFileCreate(&pDXFile);
1469 if (hr != DXFILE_OK)
1470 goto end;
1472 hr = IDirectXFile_RegisterTemplates(pDXFile, templates, strlen(templates));
1473 if (hr != DXFILE_OK)
1474 goto end;
1476 hr = IDirectXFile_CreateEnumObject(pDXFile, ObjSource, load_options, &pEnumObject);
1477 if (hr != DXFILE_OK)
1478 goto end;
1480 hr = IDirectXFileEnumObject_GetNextDataObject(pEnumObject, &pData);
1481 if (hr != DXFILE_OK)
1482 goto end;
1484 hr = IDirectXFileData_GetType(pData, &pGuid);
1485 if (hr != DXFILE_OK)
1486 goto end;
1488 TRACE("Found object type whose GUID = %s\n", debugstr_guid(pGuid));
1490 if (!IsEqualGUID(pGuid, &TID_DXFILEHeader))
1492 ret = D3DRMERR_BADFILE;
1493 goto end;
1496 hr = IDirectXFileData_GetData(pData, NULL, &size, (void**)&pHeader);
1497 if ((hr != DXFILE_OK) || (size != sizeof(Header)))
1498 goto end;
1500 TRACE("Version is %d %d %d\n", pHeader->major, pHeader->minor, pHeader->flags);
1502 /* Version must be 1.0.x */
1503 if ((pHeader->major != 1) || (pHeader->minor != 0))
1505 ret = D3DRMERR_BADFILE;
1506 goto end;
1509 IDirectXFileData_Release(pData);
1510 pData = NULL;
1512 while (1)
1514 hr = IDirectXFileEnumObject_GetNextDataObject(pEnumObject, &pData);
1515 if (hr == DXFILEERR_NOMOREOBJECTS)
1517 TRACE("No more object\n");
1518 break;
1520 else if (hr != DXFILE_OK)
1522 ret = D3DRMERR_BADFILE;
1523 goto end;
1526 ret = load_data(iface, pData, GUIDs, nb_GUIDs, LoadProc, ArgLP, LoadTextureProc, ArgLTP, ParentFrame);
1527 if (ret != D3DRM_OK)
1528 goto end;
1530 IDirectXFileData_Release(pData);
1531 pData = NULL;
1534 ret = D3DRM_OK;
1536 end:
1537 if (pData)
1538 IDirectXFileData_Release(pData);
1539 if (pEnumObject)
1540 IDirectXFileEnumObject_Release(pEnumObject);
1541 if (pDXFile)
1542 IDirectXFile_Release(pDXFile);
1544 return ret;
1547 static HRESULT WINAPI IDirect3DRM3Impl_Tick(IDirect3DRM3* iface, D3DVALUE tick)
1549 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1551 FIXME("(%p/%p)->(%f): stub\n", iface, This, tick);
1553 return E_NOTIMPL;
1556 static HRESULT WINAPI IDirect3DRM3Impl_CreateProgressiveMesh(IDirect3DRM3* iface,
1557 LPDIRECT3DRMPROGRESSIVEMESH Mesh)
1559 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1561 FIXME("(%p/%p)->(%p): stub\n", iface, This, Mesh);
1563 return E_NOTIMPL;
1566 static HRESULT WINAPI IDirect3DRM3Impl_RegisterClient(IDirect3DRM3* iface, REFGUID rguid,
1567 LPDWORD id)
1569 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1571 FIXME("(%p/%p)->(%s, %p): stub\n", iface, This, debugstr_guid(rguid), id);
1573 return E_NOTIMPL;
1576 static HRESULT WINAPI IDirect3DRM3Impl_UnregisterClient(IDirect3DRM3* iface, REFGUID rguid)
1578 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1580 FIXME("(%p/%p)->(%s): stub\n", iface, This, debugstr_guid(rguid));
1582 return E_NOTIMPL;
1585 static HRESULT WINAPI IDirect3DRM3Impl_CreateClippedVisual(IDirect3DRM3* iface,
1586 LPDIRECT3DRMVISUAL vis,
1587 LPDIRECT3DRMCLIPPEDVISUAL* clippedvis)
1589 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1591 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, vis, clippedvis);
1593 return E_NOTIMPL;
1596 static HRESULT WINAPI IDirect3DRM3Impl_SetOptions(IDirect3DRM3* iface, DWORD opt)
1598 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1600 FIXME("(%p/%p)->(%d): stub\n", iface, This, opt);
1602 return E_NOTIMPL;
1605 static HRESULT WINAPI IDirect3DRM3Impl_GetOptions(IDirect3DRM3* iface, LPDWORD opt)
1607 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1609 FIXME("(%p/%p)->(%p): stub\n", iface, This, opt);
1611 return E_NOTIMPL;
1614 static const struct IDirect3DRM3Vtbl Direct3DRM3_Vtbl =
1616 IDirect3DRM3Impl_QueryInterface,
1617 IDirect3DRM3Impl_AddRef,
1618 IDirect3DRM3Impl_Release,
1619 IDirect3DRM3Impl_CreateObject,
1620 IDirect3DRM3Impl_CreateFrame,
1621 IDirect3DRM3Impl_CreateMesh,
1622 IDirect3DRM3Impl_CreateMeshBuilder,
1623 IDirect3DRM3Impl_CreateFace,
1624 IDirect3DRM3Impl_CreateAnimation,
1625 IDirect3DRM3Impl_CreateAnimationSet,
1626 IDirect3DRM3Impl_CreateTexture,
1627 IDirect3DRM3Impl_CreateLight,
1628 IDirect3DRM3Impl_CreateLightRGB,
1629 IDirect3DRM3Impl_CreateMaterial,
1630 IDirect3DRM3Impl_CreateDevice,
1631 IDirect3DRM3Impl_CreateDeviceFromSurface,
1632 IDirect3DRM3Impl_CreateDeviceFromD3D,
1633 IDirect3DRM3Impl_CreateDeviceFromClipper,
1634 IDirect3DRM3Impl_CreateTextureFromSurface,
1635 IDirect3DRM3Impl_CreateShadow,
1636 IDirect3DRM3Impl_CreateViewport,
1637 IDirect3DRM3Impl_CreateWrap,
1638 IDirect3DRM3Impl_CreateUserVisual,
1639 IDirect3DRM3Impl_LoadTexture,
1640 IDirect3DRM3Impl_LoadTextureFromResource,
1641 IDirect3DRM3Impl_SetSearchPath,
1642 IDirect3DRM3Impl_AddSearchPath,
1643 IDirect3DRM3Impl_GetSearchPath,
1644 IDirect3DRM3Impl_SetDefaultTextureColors,
1645 IDirect3DRM3Impl_SetDefaultTextureShades,
1646 IDirect3DRM3Impl_GetDevices,
1647 IDirect3DRM3Impl_GetNamedObject,
1648 IDirect3DRM3Impl_EnumerateObjects,
1649 IDirect3DRM3Impl_Load,
1650 IDirect3DRM3Impl_Tick,
1651 IDirect3DRM3Impl_CreateProgressiveMesh,
1652 IDirect3DRM3Impl_RegisterClient,
1653 IDirect3DRM3Impl_UnregisterClient,
1654 IDirect3DRM3Impl_CreateClippedVisual,
1655 IDirect3DRM3Impl_SetOptions,
1656 IDirect3DRM3Impl_GetOptions
1659 HRESULT WINAPI Direct3DRMCreate(IDirect3DRM **d3drm)
1661 IDirect3DRMImpl *object;
1663 TRACE("d3drm %p.\n", d3drm);
1665 if (!(object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object))))
1666 return E_OUTOFMEMORY;
1668 object->IDirect3DRM_iface.lpVtbl = &Direct3DRM_Vtbl;
1669 object->IDirect3DRM2_iface.lpVtbl = &Direct3DRM2_Vtbl;
1670 object->IDirect3DRM3_iface.lpVtbl = &Direct3DRM3_Vtbl;
1671 object->ref = 1;
1673 *d3drm = &object->IDirect3DRM_iface;
1675 return S_OK;