d3drm: Add support for frame with fake data in IDirect3DRMX:Load methods + tests.
[wine/multimedia.git] / dlls / d3drm / d3drm.c
blobc067c27d856b0cafb315360f9f3f9b007871f95c
1 /*
2 * Implementation of IDirect3DRM Interface
4 * Copyright 2010 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 pFrameParent, LPDIRECT3DRMFRAME * ppFrame)
142 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
144 TRACE("(%p/%p)->(%p,%p)\n", iface, This, pFrameParent, ppFrame);
146 if (pFrameParent)
147 FIXME("(%p/%p): Parent frame not yet supported\n", iface, This);
149 return Direct3DRMFrame_create(&IID_IDirect3DRMFrame, (IUnknown**)ppFrame);
152 static HRESULT WINAPI IDirect3DRMImpl_CreateMesh(IDirect3DRM* iface, LPDIRECT3DRMMESH * ppMesh)
154 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
156 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppMesh);
158 return E_NOTIMPL;
161 static HRESULT WINAPI IDirect3DRMImpl_CreateMeshBuilder(IDirect3DRM* iface, LPDIRECT3DRMMESHBUILDER * ppMeshBuilder)
163 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
165 TRACE("(%p/%p)->(%p)\n", iface, This, ppMeshBuilder);
167 return Direct3DRMMeshBuilder_create(&IID_IDirect3DRMMeshBuilder, (IUnknown**)ppMeshBuilder);
170 static HRESULT WINAPI IDirect3DRMImpl_CreateFace(IDirect3DRM* iface, LPDIRECT3DRMFACE * ppFace)
172 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
174 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppFace);
176 return E_NOTIMPL;
179 static HRESULT WINAPI IDirect3DRMImpl_CreateAnimation(IDirect3DRM* iface, LPDIRECT3DRMANIMATION * ppAnimation)
181 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
183 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppAnimation);
185 return E_NOTIMPL;
188 static HRESULT WINAPI IDirect3DRMImpl_CreateAnimationSet(IDirect3DRM* iface, LPDIRECT3DRMANIMATIONSET * ppAnimationSet)
190 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
192 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppAnimationSet);
194 return E_NOTIMPL;
197 static HRESULT WINAPI IDirect3DRMImpl_CreateTexture(IDirect3DRM* iface, LPD3DRMIMAGE pImage, LPDIRECT3DRMTEXTURE * ppTexture)
199 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
201 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, pImage, ppTexture);
203 return E_NOTIMPL;
206 static HRESULT WINAPI IDirect3DRMImpl_CreateLight(IDirect3DRM* iface, D3DRMLIGHTTYPE type, D3DCOLOR color, LPDIRECT3DRMLIGHT * ppLight)
208 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
210 FIXME("(%p/%p)->(%d,%d,%p): stub\n", iface, This, type, color, ppLight);
212 return E_NOTIMPL;
215 static HRESULT WINAPI IDirect3DRMImpl_CreateLightRGB(IDirect3DRM* iface, D3DRMLIGHTTYPE type, D3DVALUE red, D3DVALUE green, D3DVALUE blue, LPDIRECT3DRMLIGHT * ppLight)
217 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
219 FIXME("(%p/%p)->(%d,%f,%f,%f,%p): stub\n", iface, This, type, red, green, blue, ppLight);
221 return E_NOTIMPL;
224 static HRESULT WINAPI IDirect3DRMImpl_Material(IDirect3DRM* iface, D3DVALUE m, LPDIRECT3DRMMATERIAL * ppMaterial)
226 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
228 FIXME("(%p/%p)->(%f,%p): stub\n", iface, This, m, ppMaterial);
230 return E_NOTIMPL;
233 static HRESULT WINAPI IDirect3DRMImpl_CreateDevice(IDirect3DRM* iface, DWORD width, DWORD height, LPDIRECT3DRMDEVICE * ppDevice)
235 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
237 FIXME("(%p/%p)->(%u,%u,%p): partial stub\n", iface, This, width, height, ppDevice);
239 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice, (IUnknown**)ppDevice);
242 static HRESULT WINAPI IDirect3DRMImpl_CreateDeviceFromSurface(IDirect3DRM* iface, LPGUID pGUID, LPDIRECTDRAW pDD, LPDIRECTDRAWSURFACE pDDSBack, LPDIRECT3DRMDEVICE * ppDevice)
244 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
246 FIXME("(%p/%p)->(%s,%p,%p,%p): partial stub\n", iface, This, debugstr_guid(pGUID), pDD,
247 pDDSBack, ppDevice);
249 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice, (IUnknown**)ppDevice);
252 static HRESULT WINAPI IDirect3DRMImpl_CreateDeviceFromD3D(IDirect3DRM* iface, LPDIRECT3D pD3D, LPDIRECT3DDEVICE pD3DDev, LPDIRECT3DRMDEVICE * ppDevice)
254 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
256 FIXME("(%p/%p)->(%p,%p,%p): partial stub\n", iface, This, pD3D, pD3DDev, ppDevice);
258 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice, (IUnknown**)ppDevice);
261 static HRESULT WINAPI IDirect3DRMImpl_CreateDeviceFromClipper(IDirect3DRM* iface, LPDIRECTDRAWCLIPPER pDDClipper, LPGUID pGUID, int width, int height, LPDIRECT3DRMDEVICE * ppDevice)
263 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
265 FIXME("(%p/%p)->(%p,%s,%d,%d,%p): partial stub\n", iface, This, pDDClipper,
266 debugstr_guid(pGUID), width, height, ppDevice);
268 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice, (IUnknown**)ppDevice);
271 static HRESULT WINAPI IDirect3DRMImpl_CreateTextureFromSurface(IDirect3DRM* iface, LPDIRECTDRAWSURFACE pDDS, LPDIRECT3DRMTEXTURE * ppTexture)
273 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
275 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, pDDS, ppTexture);
277 return E_NOTIMPL;
280 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)
282 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
284 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);
286 return E_NOTIMPL;
289 static HRESULT WINAPI IDirect3DRMImpl_CreateViewport(IDirect3DRM* iface, LPDIRECT3DRMDEVICE pDevice, LPDIRECT3DRMFRAME pFrame, DWORD xpos, DWORD ypos, DWORD width, DWORD height, LPDIRECT3DRMVIEWPORT * ppViewport)
291 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
293 FIXME("(%p/%p)->(%p,%p,%d,%d,%d,%d,%p): partial stub\n", iface, This, pDevice, pFrame,
294 xpos, ypos, width, height, ppViewport);
296 return Direct3DRMViewport_create(&IID_IDirect3DRMViewport, (IUnknown**)ppViewport);
299 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)
301 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
303 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);
305 return E_NOTIMPL;
308 static HRESULT WINAPI IDirect3DRMImpl_CreateUserVisual(IDirect3DRM* iface, D3DRMUSERVISUALCALLBACK cb, LPVOID pArg, LPDIRECT3DRMUSERVISUAL * ppUserVisual)
310 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
312 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, cb, pArg, ppUserVisual);
314 return E_NOTIMPL;
317 static HRESULT WINAPI IDirect3DRMImpl_LoadTexture(IDirect3DRM* iface, const char * filename, LPDIRECT3DRMTEXTURE * ppTexture)
319 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
321 FIXME("(%p/%p)->(%s,%p): stub\n", iface, This, filename, ppTexture);
323 return E_NOTIMPL;
326 static HRESULT WINAPI IDirect3DRMImpl_LoadTextureFromResource(IDirect3DRM* iface, HRSRC rs, LPDIRECT3DRMTEXTURE * ppTexture)
328 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
330 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, rs, ppTexture);
332 return E_NOTIMPL;
335 static HRESULT WINAPI IDirect3DRMImpl_SetSearchPath(IDirect3DRM* iface, LPCSTR path)
337 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
339 FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
341 return E_NOTIMPL;
344 static HRESULT WINAPI IDirect3DRMImpl_AddSearchPath(IDirect3DRM* iface, LPCSTR path)
346 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
348 FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
350 return E_NOTIMPL;
353 static HRESULT WINAPI IDirect3DRMImpl_GetSearchPath(IDirect3DRM* iface, DWORD *size_return, LPSTR path_return)
355 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
357 FIXME("(%p/%p)->(%p,%s): stub\n", iface, This, size_return, path_return);
359 return E_NOTIMPL;
362 static HRESULT WINAPI IDirect3DRMImpl_SetDefaultTextureColors(IDirect3DRM* iface, DWORD nb_colors)
364 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
366 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_colors);
368 return E_NOTIMPL;
371 static HRESULT WINAPI IDirect3DRMImpl_SetDefaultTextureShades(IDirect3DRM* iface, DWORD nb_shades)
373 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
375 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_shades);
377 return E_NOTIMPL;
380 static HRESULT WINAPI IDirect3DRMImpl_GetDevices(IDirect3DRM* iface, LPDIRECT3DRMDEVICEARRAY * ppDeviceArray)
382 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
384 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppDeviceArray);
386 return E_NOTIMPL;
389 static HRESULT WINAPI IDirect3DRMImpl_GetNamedObject(IDirect3DRM* iface, const char * pName, LPDIRECT3DRMOBJECT * ppObject)
391 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
393 FIXME("(%p/%p)->(%s,%p): stub\n", iface, This, pName, ppObject);
395 return E_NOTIMPL;
398 static HRESULT WINAPI IDirect3DRMImpl_EnumerateObjects(IDirect3DRM* iface, D3DRMOBJECTCALLBACK cb, LPVOID pArg)
400 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
402 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, cb, pArg);
404 return E_NOTIMPL;
407 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)
409 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
410 LPDIRECT3DRMFRAME3 pParentFrame3 = NULL;
411 HRESULT hr = D3DRM_OK;
413 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);
415 if (pParentFrame)
416 hr = IDirect3DRMFrame_QueryInterface(pParentFrame, &IID_IDirect3DRMFrame3, (void**)&pParentFrame3);
417 if (SUCCEEDED(hr))
418 hr = IDirect3DRM3_Load(&This->IDirect3DRM3_iface, pObjSource, pObjID, ppGUIDs, nb_GUIDs, LOFlags, LoadProc, pArgLP, LoadTextureProc, pArgLTP, pParentFrame3);
419 if (pParentFrame3)
420 IDirect3DRMFrame3_Release(pParentFrame3);
422 return hr;
425 static HRESULT WINAPI IDirect3DRMImpl_Tick(IDirect3DRM* iface, D3DVALUE tick)
427 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
429 FIXME("(%p/%p)->(%f): stub\n", iface, This, tick);
431 return E_NOTIMPL;
434 static const struct IDirect3DRMVtbl Direct3DRM_Vtbl =
436 IDirect3DRMImpl_QueryInterface,
437 IDirect3DRMImpl_AddRef,
438 IDirect3DRMImpl_Release,
439 IDirect3DRMImpl_CreateObject,
440 IDirect3DRMImpl_CreateFrame,
441 IDirect3DRMImpl_CreateMesh,
442 IDirect3DRMImpl_CreateMeshBuilder,
443 IDirect3DRMImpl_CreateFace,
444 IDirect3DRMImpl_CreateAnimation,
445 IDirect3DRMImpl_CreateAnimationSet,
446 IDirect3DRMImpl_CreateTexture,
447 IDirect3DRMImpl_CreateLight,
448 IDirect3DRMImpl_CreateLightRGB,
449 IDirect3DRMImpl_Material,
450 IDirect3DRMImpl_CreateDevice,
451 IDirect3DRMImpl_CreateDeviceFromSurface,
452 IDirect3DRMImpl_CreateDeviceFromD3D,
453 IDirect3DRMImpl_CreateDeviceFromClipper,
454 IDirect3DRMImpl_CreateTextureFromSurface,
455 IDirect3DRMImpl_CreateShadow,
456 IDirect3DRMImpl_CreateViewport,
457 IDirect3DRMImpl_CreateWrap,
458 IDirect3DRMImpl_CreateUserVisual,
459 IDirect3DRMImpl_LoadTexture,
460 IDirect3DRMImpl_LoadTextureFromResource,
461 IDirect3DRMImpl_SetSearchPath,
462 IDirect3DRMImpl_AddSearchPath,
463 IDirect3DRMImpl_GetSearchPath,
464 IDirect3DRMImpl_SetDefaultTextureColors,
465 IDirect3DRMImpl_SetDefaultTextureShades,
466 IDirect3DRMImpl_GetDevices,
467 IDirect3DRMImpl_GetNamedObject,
468 IDirect3DRMImpl_EnumerateObjects,
469 IDirect3DRMImpl_Load,
470 IDirect3DRMImpl_Tick
474 /*** IUnknown methods ***/
475 static HRESULT WINAPI IDirect3DRM2Impl_QueryInterface(IDirect3DRM2* iface, REFIID riid,
476 void** ppvObject)
478 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
479 return IDirect3DRM_QueryInterface(&This->IDirect3DRM_iface, riid, ppvObject);
482 static ULONG WINAPI IDirect3DRM2Impl_AddRef(IDirect3DRM2* iface)
484 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
485 return IDirect3DRM_AddRef(&This->IDirect3DRM_iface);
488 static ULONG WINAPI IDirect3DRM2Impl_Release(IDirect3DRM2* iface)
490 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
491 return IDirect3DRM_Release(&This->IDirect3DRM_iface);
494 /*** IDirect3DRM2 methods ***/
495 static HRESULT WINAPI IDirect3DRM2Impl_CreateObject(IDirect3DRM2* iface, REFCLSID rclsid,
496 LPUNKNOWN pUnkOuter, REFIID riid,
497 LPVOID *ppvObj)
499 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
501 FIXME("(%p/%p)->(%s,%p,%s,%p): stub\n", iface, This, debugstr_guid(rclsid), pUnkOuter,
502 debugstr_guid(riid), ppvObj);
504 return E_NOTIMPL;
507 static HRESULT WINAPI IDirect3DRM2Impl_CreateFrame(IDirect3DRM2* iface,
508 LPDIRECT3DRMFRAME pFrameParent,
509 LPDIRECT3DRMFRAME2 * ppFrame)
511 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
513 TRACE("(%p/%p)->(%p,%p)\n", iface, This, pFrameParent, ppFrame);
515 if (pFrameParent)
516 FIXME("(%p/%p): Parent frame not yet supported\n", iface, This);
518 return Direct3DRMFrame_create(&IID_IDirect3DRMFrame2, (IUnknown**)ppFrame);
521 static HRESULT WINAPI IDirect3DRM2Impl_CreateMesh(IDirect3DRM2* iface, LPDIRECT3DRMMESH * ppMesh)
523 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
525 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppMesh);
527 return E_NOTIMPL;
530 static HRESULT WINAPI IDirect3DRM2Impl_CreateMeshBuilder(IDirect3DRM2* iface,
531 LPDIRECT3DRMMESHBUILDER2 * ppMeshBuilder)
533 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
535 TRACE("(%p/%p)->(%p)\n", iface, This, ppMeshBuilder);
537 return Direct3DRMMeshBuilder_create(&IID_IDirect3DRMMeshBuilder2, (IUnknown**)ppMeshBuilder);
540 static HRESULT WINAPI IDirect3DRM2Impl_CreateFace(IDirect3DRM2* iface, LPDIRECT3DRMFACE * ppFace)
542 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
544 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppFace);
546 return E_NOTIMPL;
549 static HRESULT WINAPI IDirect3DRM2Impl_CreateAnimation(IDirect3DRM2* iface,
550 LPDIRECT3DRMANIMATION * ppAnimation)
552 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
554 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppAnimation);
556 return E_NOTIMPL;
559 static HRESULT WINAPI IDirect3DRM2Impl_CreateAnimationSet(IDirect3DRM2* iface,
560 LPDIRECT3DRMANIMATIONSET * ppAnimationSet)
562 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
564 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppAnimationSet);
566 return E_NOTIMPL;
569 static HRESULT WINAPI IDirect3DRM2Impl_CreateTexture(IDirect3DRM2* iface, LPD3DRMIMAGE pImage,
570 LPDIRECT3DRMTEXTURE2 * ppTexture)
572 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
574 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, pImage, ppTexture);
576 return E_NOTIMPL;
579 static HRESULT WINAPI IDirect3DRM2Impl_CreateLight(IDirect3DRM2* iface, D3DRMLIGHTTYPE type,
580 D3DCOLOR color, LPDIRECT3DRMLIGHT * ppLight)
582 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
584 FIXME("(%p/%p)->(%d,%d,%p): stub\n", iface, This, type, color, ppLight);
586 return E_NOTIMPL;
589 static HRESULT WINAPI IDirect3DRM2Impl_CreateLightRGB(IDirect3DRM2* iface, D3DRMLIGHTTYPE type,
590 D3DVALUE red, D3DVALUE green, D3DVALUE blue,
591 LPDIRECT3DRMLIGHT * ppLight)
593 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
595 FIXME("(%p/%p)->(%d,%f,%f,%f,%p): stub\n", iface, This, type, red, green, blue, ppLight);
597 return E_NOTIMPL;
600 static HRESULT WINAPI IDirect3DRM2Impl_Material(IDirect3DRM2* iface, D3DVALUE m,
601 LPDIRECT3DRMMATERIAL * ppMaterial)
603 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
605 FIXME("(%p/%p)->(%f,%p): stub\n", iface, This, m, ppMaterial);
607 return E_NOTIMPL;
610 static HRESULT WINAPI IDirect3DRM2Impl_CreateDevice(IDirect3DRM2* iface, DWORD width, DWORD height,
611 LPDIRECT3DRMDEVICE2 * ppDevice)
613 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
615 FIXME("(%p/%p)->(%u,%u,%p): partial stub\n", iface, This, width, height, ppDevice);
617 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice2, (IUnknown**)ppDevice);
620 static HRESULT WINAPI IDirect3DRM2Impl_CreateDeviceFromSurface(IDirect3DRM2* iface, LPGUID pGUID,
621 LPDIRECTDRAW pDD,
622 LPDIRECTDRAWSURFACE pDDSBack,
623 LPDIRECT3DRMDEVICE2 * ppDevice)
625 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
627 FIXME("(%p/%p)->(%s,%p,%p,%p): partial stub\n", iface, This, debugstr_guid(pGUID),
628 pDD, pDDSBack, ppDevice);
630 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice2, (IUnknown**)ppDevice);
633 static HRESULT WINAPI IDirect3DRM2Impl_CreateDeviceFromD3D(IDirect3DRM2* iface, LPDIRECT3D2 pD3D,
634 LPDIRECT3DDEVICE2 pD3DDev,
635 LPDIRECT3DRMDEVICE2 * ppDevice)
637 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
639 FIXME("(%p/%p)->(%p,%p,%p): partial stub\n", iface, This, pD3D, pD3DDev, ppDevice);
641 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice2, (IUnknown**)ppDevice);
644 static HRESULT WINAPI IDirect3DRM2Impl_CreateDeviceFromClipper(IDirect3DRM2* iface,
645 LPDIRECTDRAWCLIPPER pDDClipper,
646 LPGUID pGUID, int width, int height,
647 LPDIRECT3DRMDEVICE2 * ppDevice)
649 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
651 FIXME("(%p/%p)->(%p,%s,%d,%d,%p): partial stub\n", iface, This, pDDClipper,
652 debugstr_guid(pGUID), width, height, ppDevice);
654 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice2, (IUnknown**)ppDevice);
657 static HRESULT WINAPI IDirect3DRM2Impl_CreateTextureFromSurface(IDirect3DRM2* iface,
658 LPDIRECTDRAWSURFACE pDDS,
659 LPDIRECT3DRMTEXTURE2 * ppTexture)
661 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
663 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, pDDS, ppTexture);
665 return E_NOTIMPL;
668 static HRESULT WINAPI IDirect3DRM2Impl_CreateShadow(IDirect3DRM2* iface, LPDIRECT3DRMVISUAL pVisual,
669 LPDIRECT3DRMLIGHT pLight,
670 D3DVALUE px, D3DVALUE py, D3DVALUE pz,
671 D3DVALUE nx, D3DVALUE ny, D3DVALUE nz,
672 LPDIRECT3DRMVISUAL * ppVisual)
674 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
676 FIXME("(%p/%p)->(%p,%p,%f,%f,%f,%f,%f,%f,%p): stub\n", iface, This, pVisual, pLight, px, py, pz,
677 nx, ny, nz, ppVisual);
679 return E_NOTIMPL;
682 static HRESULT WINAPI IDirect3DRM2Impl_CreateViewport(IDirect3DRM2* iface,
683 LPDIRECT3DRMDEVICE pDevice,
684 LPDIRECT3DRMFRAME pFrame,
685 DWORD xpos, DWORD ypos,
686 DWORD width, DWORD height,
687 LPDIRECT3DRMVIEWPORT * ppViewport)
689 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
691 FIXME("(%p/%p)->(%p,%p,%d,%d,%d,%d,%p): partial stub\n", iface, This, pDevice, pFrame,
692 xpos, ypos, width, height, ppViewport);
694 return Direct3DRMViewport_create(&IID_IDirect3DRMViewport, (IUnknown**)ppViewport);
697 static HRESULT WINAPI IDirect3DRM2Impl_CreateWrap(IDirect3DRM2* iface, D3DRMWRAPTYPE type,
698 LPDIRECT3DRMFRAME pFrame,
699 D3DVALUE ox, D3DVALUE oy, D3DVALUE oz,
700 D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
701 D3DVALUE ux, D3DVALUE uy, D3DVALUE uz,
702 D3DVALUE ou, D3DVALUE ov, D3DVALUE su,
703 D3DVALUE sv, LPDIRECT3DRMWRAP * ppWrap)
705 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
707 FIXME("(%p/%p)->(%d,%p,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%p): stub\n", iface, This, type,
708 pFrame, ox, oy, oz, dx, dy, dz, ux, uy, uz, ou, ov, su, sv, ppWrap);
710 return E_NOTIMPL;
713 static HRESULT WINAPI IDirect3DRM2Impl_CreateUserVisual(IDirect3DRM2* iface,
714 D3DRMUSERVISUALCALLBACK cb, LPVOID pArg,
715 LPDIRECT3DRMUSERVISUAL * ppUserVisual)
717 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
719 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, cb, pArg, ppUserVisual);
721 return E_NOTIMPL;
724 static HRESULT WINAPI IDirect3DRM2Impl_LoadTexture(IDirect3DRM2* iface, const char * filename,
725 LPDIRECT3DRMTEXTURE2 * ppTexture)
727 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
729 FIXME("(%p/%p)->(%s,%p): stub\n", iface, This, filename, ppTexture);
731 return E_NOTIMPL;
734 static HRESULT WINAPI IDirect3DRM2Impl_LoadTextureFromResource(IDirect3DRM2* iface, HMODULE hModule,
735 LPCSTR strName, LPCSTR strType,
736 LPDIRECT3DRMTEXTURE2 * ppTexture)
738 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
740 FIXME("(%p/%p)->(%p,%p,%p,%p): stub\n", iface, This, hModule, strName, strType, ppTexture);
742 return E_NOTIMPL;
745 static HRESULT WINAPI IDirect3DRM2Impl_SetSearchPath(IDirect3DRM2* iface, LPCSTR path)
747 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
749 FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
751 return E_NOTIMPL;
754 static HRESULT WINAPI IDirect3DRM2Impl_AddSearchPath(IDirect3DRM2* iface, LPCSTR path)
756 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
758 FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
760 return E_NOTIMPL;
763 static HRESULT WINAPI IDirect3DRM2Impl_GetSearchPath(IDirect3DRM2* iface, DWORD *size_return,
764 LPSTR path_return)
766 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
768 FIXME("(%p/%p)->(%p,%s): stub\n", iface, This, size_return, path_return);
770 return E_NOTIMPL;
773 static HRESULT WINAPI IDirect3DRM2Impl_SetDefaultTextureColors(IDirect3DRM2* iface, DWORD nb_colors)
775 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
777 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_colors);
779 return E_NOTIMPL;
782 static HRESULT WINAPI IDirect3DRM2Impl_SetDefaultTextureShades(IDirect3DRM2* iface, DWORD nb_shades)
784 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
786 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_shades);
788 return E_NOTIMPL;
791 static HRESULT WINAPI IDirect3DRM2Impl_GetDevices(IDirect3DRM2* iface,
792 LPDIRECT3DRMDEVICEARRAY * ppDeviceArray)
794 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
796 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppDeviceArray);
798 return E_NOTIMPL;
801 static HRESULT WINAPI IDirect3DRM2Impl_GetNamedObject(IDirect3DRM2* iface, const char * pName,
802 LPDIRECT3DRMOBJECT * ppObject)
804 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
806 FIXME("(%p/%p)->(%s,%p): stub\n", iface, This, pName, ppObject);
808 return E_NOTIMPL;
811 static HRESULT WINAPI IDirect3DRM2Impl_EnumerateObjects(IDirect3DRM2* iface, D3DRMOBJECTCALLBACK cb,
812 LPVOID pArg)
814 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
816 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, cb, pArg);
818 return E_NOTIMPL;
821 static HRESULT WINAPI IDirect3DRM2Impl_Load(IDirect3DRM2* iface, LPVOID pObjSource, LPVOID pObjID,
822 LPIID * ppGUIDs, DWORD nb_GUIDs,
823 D3DRMLOADOPTIONS LOFlags, D3DRMLOADCALLBACK LoadProc,
824 LPVOID pArgLP, D3DRMLOADTEXTURECALLBACK LoadTextureProc,
825 LPVOID pArgLTP, LPDIRECT3DRMFRAME pParentFrame)
827 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
828 LPDIRECT3DRMFRAME3 pParentFrame3 = NULL;
829 HRESULT hr = D3DRM_OK;
831 TRACE("(%p/%p)->(%p,%p,%p,%d,%d,%p,%p,%p,%p,%p)\n", iface, This, pObjSource, pObjID,
832 ppGUIDs, nb_GUIDs, LOFlags, LoadProc, pArgLP, LoadTextureProc, pArgLTP, pParentFrame);
834 if (pParentFrame)
835 hr = IDirect3DRMFrame_QueryInterface(pParentFrame, &IID_IDirect3DRMFrame3, (void**)&pParentFrame3);
836 if (SUCCEEDED(hr))
837 hr = IDirect3DRM3_Load(&This->IDirect3DRM3_iface, pObjSource, pObjID, ppGUIDs, nb_GUIDs, LOFlags, LoadProc, pArgLP, LoadTextureProc, pArgLTP, pParentFrame3);
838 if (pParentFrame3)
839 IDirect3DRMFrame3_Release(pParentFrame3);
841 return hr;
844 static HRESULT WINAPI IDirect3DRM2Impl_Tick(IDirect3DRM2* iface, D3DVALUE tick)
846 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
848 FIXME("(%p/%p)->(%f): stub\n", iface, This, tick);
850 return E_NOTIMPL;
853 static HRESULT WINAPI IDirect3DRM2Impl_CreateProgressiveMesh(IDirect3DRM2* iface,
854 LPDIRECT3DRMPROGRESSIVEMESH * ppMesh)
856 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
858 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppMesh);
860 return E_NOTIMPL;
863 static const struct IDirect3DRM2Vtbl Direct3DRM2_Vtbl =
865 IDirect3DRM2Impl_QueryInterface,
866 IDirect3DRM2Impl_AddRef,
867 IDirect3DRM2Impl_Release,
868 IDirect3DRM2Impl_CreateObject,
869 IDirect3DRM2Impl_CreateFrame,
870 IDirect3DRM2Impl_CreateMesh,
871 IDirect3DRM2Impl_CreateMeshBuilder,
872 IDirect3DRM2Impl_CreateFace,
873 IDirect3DRM2Impl_CreateAnimation,
874 IDirect3DRM2Impl_CreateAnimationSet,
875 IDirect3DRM2Impl_CreateTexture,
876 IDirect3DRM2Impl_CreateLight,
877 IDirect3DRM2Impl_CreateLightRGB,
878 IDirect3DRM2Impl_Material,
879 IDirect3DRM2Impl_CreateDevice,
880 IDirect3DRM2Impl_CreateDeviceFromSurface,
881 IDirect3DRM2Impl_CreateDeviceFromD3D,
882 IDirect3DRM2Impl_CreateDeviceFromClipper,
883 IDirect3DRM2Impl_CreateTextureFromSurface,
884 IDirect3DRM2Impl_CreateShadow,
885 IDirect3DRM2Impl_CreateViewport,
886 IDirect3DRM2Impl_CreateWrap,
887 IDirect3DRM2Impl_CreateUserVisual,
888 IDirect3DRM2Impl_LoadTexture,
889 IDirect3DRM2Impl_LoadTextureFromResource,
890 IDirect3DRM2Impl_SetSearchPath,
891 IDirect3DRM2Impl_AddSearchPath,
892 IDirect3DRM2Impl_GetSearchPath,
893 IDirect3DRM2Impl_SetDefaultTextureColors,
894 IDirect3DRM2Impl_SetDefaultTextureShades,
895 IDirect3DRM2Impl_GetDevices,
896 IDirect3DRM2Impl_GetNamedObject,
897 IDirect3DRM2Impl_EnumerateObjects,
898 IDirect3DRM2Impl_Load,
899 IDirect3DRM2Impl_Tick,
900 IDirect3DRM2Impl_CreateProgressiveMesh
904 /*** IUnknown methods ***/
905 static HRESULT WINAPI IDirect3DRM3Impl_QueryInterface(IDirect3DRM3* iface, REFIID riid,
906 void** ppvObject)
908 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
909 return IDirect3DRM_QueryInterface(&This->IDirect3DRM_iface, riid, ppvObject);
912 static ULONG WINAPI IDirect3DRM3Impl_AddRef(IDirect3DRM3* iface)
914 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
915 return IDirect3DRM_AddRef(&This->IDirect3DRM_iface);
918 static ULONG WINAPI IDirect3DRM3Impl_Release(IDirect3DRM3* iface)
920 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
921 return IDirect3DRM_Release(&This->IDirect3DRM_iface);
924 /*** IDirect3DRM3 methods ***/
925 static HRESULT WINAPI IDirect3DRM3Impl_CreateObject(IDirect3DRM3* iface, REFCLSID rclsid,
926 LPUNKNOWN unkwn, REFIID riid, LPVOID* object)
928 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
930 FIXME("(%p/%p)->(%s,%p,%s,%p): stub\n", iface, This, debugstr_guid(rclsid), unkwn,
931 debugstr_guid(riid), object);
933 return E_NOTIMPL;
936 static HRESULT WINAPI IDirect3DRM3Impl_CreateFrame(IDirect3DRM3* iface,
937 LPDIRECT3DRMFRAME3 FrameParent,
938 LPDIRECT3DRMFRAME3* Frame)
940 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
942 TRACE("(%p/%p)->(%p,%p)\n", iface, This, FrameParent, Frame);
944 if (FrameParent)
945 FIXME("(%p/%p): Parent frame not yet supported\n", iface, This);
947 return Direct3DRMFrame_create(&IID_IDirect3DRMFrame3, (IUnknown**)Frame);
950 static HRESULT WINAPI IDirect3DRM3Impl_CreateMesh(IDirect3DRM3* iface, LPDIRECT3DRMMESH* Mesh)
952 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
954 FIXME("(%p/%p)->(%p): stub\n", iface, This, Mesh);
956 return E_NOTIMPL;
959 static HRESULT WINAPI IDirect3DRM3Impl_CreateMeshBuilder(IDirect3DRM3* iface,
960 LPDIRECT3DRMMESHBUILDER3* ppMeshBuilder)
962 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
964 TRACE("(%p/%p)->(%p)\n", iface, This, ppMeshBuilder);
966 return Direct3DRMMeshBuilder_create(&IID_IDirect3DRMMeshBuilder3, (IUnknown**)ppMeshBuilder);
969 static HRESULT WINAPI IDirect3DRM3Impl_CreateFace(IDirect3DRM3* iface, LPDIRECT3DRMFACE2* Face)
971 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
973 FIXME("(%p/%p)->(%p): stub\n", iface, This, Face);
975 return E_NOTIMPL;
978 static HRESULT WINAPI IDirect3DRM3Impl_CreateAnimation(IDirect3DRM3* iface,
979 LPDIRECT3DRMANIMATION2* Animation)
981 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
983 FIXME("(%p/%p)->(%p): stub\n", iface, This, Animation);
985 return E_NOTIMPL;
988 static HRESULT WINAPI IDirect3DRM3Impl_CreateAnimationSet(IDirect3DRM3* iface,
989 LPDIRECT3DRMANIMATIONSET2* AnimationSet)
991 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
993 FIXME("(%p/%p)->(%p): stub\n", iface, This, AnimationSet);
995 return E_NOTIMPL;
998 static HRESULT WINAPI IDirect3DRM3Impl_CreateTexture(IDirect3DRM3* iface, LPD3DRMIMAGE Image,
999 LPDIRECT3DRMTEXTURE3* Texture)
1001 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1003 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, Image, Texture);
1005 return E_NOTIMPL;
1008 static HRESULT WINAPI IDirect3DRM3Impl_CreateLight(IDirect3DRM3* iface, D3DRMLIGHTTYPE type,
1009 D3DCOLOR color, LPDIRECT3DRMLIGHT* Light)
1011 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1013 FIXME("(%p/%p)->(%d,%d,%p): stub\n", iface, This, type, color, Light);
1015 return E_NOTIMPL;
1018 static HRESULT WINAPI IDirect3DRM3Impl_CreateLightRGB(IDirect3DRM3* iface, D3DRMLIGHTTYPE type,
1019 D3DVALUE red, D3DVALUE green, D3DVALUE blue,
1020 LPDIRECT3DRMLIGHT* Light)
1022 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1024 FIXME("(%p/%p)->(%d,%f,%f,%f,%p): stub\n", iface, This, type, red, green, blue, Light);
1026 return E_NOTIMPL;
1029 static HRESULT WINAPI IDirect3DRM3Impl_Material(IDirect3DRM3* iface, D3DVALUE m,
1030 LPDIRECT3DRMMATERIAL2* Material)
1032 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1034 FIXME("(%p/%p)->(%f,%p): stub\n", iface, This, m, Material);
1036 return E_NOTIMPL;
1039 static HRESULT WINAPI IDirect3DRM3Impl_CreateDevice(IDirect3DRM3* iface, DWORD width, DWORD height,
1040 LPDIRECT3DRMDEVICE3* device)
1042 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1044 FIXME("(%p/%p)->(%d,%d,%p): partial stub\n", iface, This, width, height, device);
1046 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice3, (IUnknown**)device);
1049 static HRESULT WINAPI IDirect3DRM3Impl_CreateDeviceFromSurface(IDirect3DRM3* iface, LPGUID pGUID,
1050 LPDIRECTDRAW dd,
1051 LPDIRECTDRAWSURFACE back,
1052 LPDIRECT3DRMDEVICE3* 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, LPDIRECT3D2 d3d,
1062 LPDIRECT3DDEVICE2 d3ddev,
1063 LPDIRECT3DRMDEVICE3* device)
1065 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1067 FIXME("(%p/%p)->(%p,%p,%p): partial stub\n", iface, This, d3d, d3ddev, device);
1069 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice3, (IUnknown**)device);
1072 static HRESULT WINAPI IDirect3DRM3Impl_CreateDeviceFromClipper(IDirect3DRM3* iface,
1073 LPDIRECTDRAWCLIPPER clipper,
1074 LPGUID GUID, int width, int height,
1075 LPDIRECT3DRMDEVICE3* device)
1077 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1079 FIXME("(%p/%p)->(%p,%s,%d,%d,%p): partial stub\n", iface, This, clipper, debugstr_guid(GUID),
1080 width, height, device);
1082 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice3, (IUnknown**)device);
1085 static HRESULT WINAPI IDirect3DRM3Impl_CreateShadow(IDirect3DRM3* iface, LPUNKNOWN Visual1,
1086 LPDIRECT3DRMLIGHT Light, D3DVALUE px,
1087 D3DVALUE py, D3DVALUE pz, D3DVALUE nx,
1088 D3DVALUE ny, D3DVALUE nz,
1089 LPDIRECT3DRMSHADOW2* Visual2)
1091 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1093 FIXME("(%p/%p)->(%p,%p,%f,%f,%f,%f,%f,%f,%p): stub\n", iface, This, Visual1, Light, px, py, pz,
1094 nx, ny, nz, Visual2);
1096 return E_NOTIMPL;
1099 static HRESULT WINAPI IDirect3DRM3Impl_CreateTextureFromSurface(IDirect3DRM3* iface,
1100 LPDIRECTDRAWSURFACE surface,
1101 LPDIRECT3DRMTEXTURE3* texture)
1103 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1105 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, surface, texture);
1107 return E_NOTIMPL;
1110 static HRESULT WINAPI IDirect3DRM3Impl_CreateViewport(IDirect3DRM3* iface,
1111 LPDIRECT3DRMDEVICE3 Device,
1112 LPDIRECT3DRMFRAME3 frame, DWORD xpos,
1113 DWORD ypos, DWORD width, DWORD height,
1114 LPDIRECT3DRMVIEWPORT2* viewport)
1116 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1118 FIXME("(%p/%p)->(%p,%p,%d,%d,%d,%d,%p): stub\n", iface, This, Device, frame, xpos, ypos, width,
1119 height, viewport);
1121 return Direct3DRMViewport_create(&IID_IDirect3DRMViewport2, (IUnknown**)viewport);
1124 static HRESULT WINAPI IDirect3DRM3Impl_CreateWrap(IDirect3DRM3* iface, D3DRMWRAPTYPE type,
1125 LPDIRECT3DRMFRAME3 frame,
1126 D3DVALUE ox, D3DVALUE oy, D3DVALUE oz,
1127 D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
1128 D3DVALUE ux, D3DVALUE uy, D3DVALUE uz,
1129 D3DVALUE ou, D3DVALUE ov, D3DVALUE su,
1130 D3DVALUE sv, LPDIRECT3DRMWRAP* wrap)
1132 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1134 FIXME("(%p/%p)->(%d,%p,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%p): stub\n", iface, This, type,
1135 frame, ox, oy, oz, dx, dy, dz, ux, uy, uz, ou, ov, su, sv, wrap);
1137 return E_NOTIMPL;
1140 static HRESULT WINAPI IDirect3DRM3Impl_CreateUserVisual(IDirect3DRM3* iface,
1141 D3DRMUSERVISUALCALLBACK cb, LPVOID arg,
1142 LPDIRECT3DRMUSERVISUAL* UserVisual)
1144 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1146 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, cb, arg, UserVisual);
1148 return E_NOTIMPL;
1151 static HRESULT WINAPI IDirect3DRM3Impl_LoadTexture(IDirect3DRM3* iface, const char* filename,
1152 LPDIRECT3DRMTEXTURE3* Texture)
1154 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1156 FIXME("(%p/%p)->(%s,%p): stub\n", iface, This, filename, Texture);
1158 return E_NOTIMPL;
1161 static HRESULT WINAPI IDirect3DRM3Impl_LoadTextureFromResource(IDirect3DRM3* iface, HMODULE mod,
1162 LPCSTR strName, LPCSTR strType,
1163 LPDIRECT3DRMTEXTURE3 * ppTexture)
1165 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1167 FIXME("(%p/%p)->(%p,%p,%p,%p): stub\n", iface, This, mod, strName, strType, ppTexture);
1169 return E_NOTIMPL;
1172 static HRESULT WINAPI IDirect3DRM3Impl_SetSearchPath(IDirect3DRM3* iface, LPCSTR path)
1174 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1176 FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
1178 return E_NOTIMPL;
1181 static HRESULT WINAPI IDirect3DRM3Impl_AddSearchPath(IDirect3DRM3* iface, LPCSTR path)
1183 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1185 FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
1187 return E_NOTIMPL;
1190 static HRESULT WINAPI IDirect3DRM3Impl_GetSearchPath(IDirect3DRM3* iface, DWORD* size_return,
1191 LPSTR path_return)
1193 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1195 FIXME("(%p/%p)->(%p,%s): stub\n", iface, This, size_return, path_return);
1197 return E_NOTIMPL;
1200 static HRESULT WINAPI IDirect3DRM3Impl_SetDefaultTextureColors(IDirect3DRM3* iface, DWORD nb_colors)
1202 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1204 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_colors);
1206 return E_NOTIMPL;
1209 static HRESULT WINAPI IDirect3DRM3Impl_SetDefaultTextureShades(IDirect3DRM3* iface, DWORD nb_shades)
1211 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1213 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_shades);
1215 return E_NOTIMPL;
1218 static HRESULT WINAPI IDirect3DRM3Impl_GetDevices(IDirect3DRM3* iface,
1219 LPDIRECT3DRMDEVICEARRAY* DeviceArray)
1221 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1223 FIXME("(%p/%p)->(%p): stub\n", iface, This, DeviceArray);
1225 return E_NOTIMPL;
1228 static HRESULT WINAPI IDirect3DRM3Impl_GetNamedObject(IDirect3DRM3* iface, const char* Name,
1229 LPDIRECT3DRMOBJECT* Object)
1231 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1233 FIXME("(%p/%p)->(%s,%p): stub\n", iface, This, Name, Object);
1235 return E_NOTIMPL;
1238 static HRESULT WINAPI IDirect3DRM3Impl_EnumerateObjects(IDirect3DRM3* iface, D3DRMOBJECTCALLBACK cb,
1239 LPVOID arg)
1241 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1243 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, cb, arg);
1245 return E_NOTIMPL;
1248 static HRESULT WINAPI IDirect3DRM3Impl_Load(IDirect3DRM3* iface, LPVOID ObjSource, LPVOID ObjID,
1249 LPIID* GUIDs, DWORD nb_GUIDs, D3DRMLOADOPTIONS LOFlags,
1250 D3DRMLOADCALLBACK LoadProc, LPVOID ArgLP,
1251 D3DRMLOADTEXTURECALLBACK LoadTextureProc, LPVOID ArgLTP,
1252 LPDIRECT3DRMFRAME3 ParentFrame)
1254 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1255 DXFILELOADOPTIONS load_options;
1256 LPDIRECTXFILE pDXFile = NULL;
1257 LPDIRECTXFILEENUMOBJECT pEnumObject = NULL;
1258 LPDIRECTXFILEDATA pData = NULL;
1259 HRESULT hr;
1260 const GUID* pGuid;
1261 DWORD size;
1262 Header* pHeader;
1263 HRESULT ret = D3DRMERR_BADOBJECT;
1264 DWORD i;
1266 FIXME("(%p/%p)->(%p,%p,%p,%d,%d,%p,%p,%p,%p,%p): partial implementation\n", iface, This, ObjSource, ObjID, GUIDs,
1267 nb_GUIDs, LOFlags, LoadProc, ArgLP, LoadTextureProc, ArgLTP, ParentFrame);
1269 TRACE("Looking for GUIDs:\n");
1270 for (i = 0; i < nb_GUIDs; i++)
1271 TRACE("- %s (%s)\n", debugstr_guid(GUIDs[i]), get_IID_string(GUIDs[i]));
1273 if (LOFlags == D3DRMLOAD_FROMMEMORY)
1275 load_options = DXFILELOAD_FROMMEMORY;
1277 else if (LOFlags == D3DRMLOAD_FROMFILE)
1279 load_options = DXFILELOAD_FROMFILE;
1281 else
1283 FIXME("Load options %d not supported yet\n", LOFlags);
1284 return E_NOTIMPL;
1287 hr = DirectXFileCreate(&pDXFile);
1288 if (hr != DXFILE_OK)
1289 goto end;
1291 hr = IDirectXFile_RegisterTemplates(pDXFile, templates, strlen(templates));
1292 if (hr != DXFILE_OK)
1293 goto end;
1295 hr = IDirectXFile_CreateEnumObject(pDXFile, ObjSource, load_options, &pEnumObject);
1296 if (hr != DXFILE_OK)
1297 goto end;
1299 hr = IDirectXFileEnumObject_GetNextDataObject(pEnumObject, &pData);
1300 if (hr != DXFILE_OK)
1301 goto end;
1303 hr = IDirectXFileData_GetType(pData, &pGuid);
1304 if (hr != DXFILE_OK)
1305 goto end;
1307 TRACE("Found object type whose GUID = %s\n", debugstr_guid(pGuid));
1309 if (!IsEqualGUID(pGuid, &TID_DXFILEHeader))
1311 ret = D3DRMERR_BADFILE;
1312 goto end;
1315 hr = IDirectXFileData_GetData(pData, NULL, &size, (void**)&pHeader);
1316 if ((hr != DXFILE_OK) || (size != sizeof(Header)))
1317 goto end;
1319 TRACE("Version is %d %d %d\n", pHeader->major, pHeader->minor, pHeader->flags);
1321 /* Version must be 1.0.x */
1322 if ((pHeader->major != 1) || (pHeader->minor != 0))
1324 ret = D3DRMERR_BADFILE;
1325 goto end;
1328 IDirectXFileData_Release(pData);
1329 pData = NULL;
1331 while (1)
1333 hr = IDirectXFileEnumObject_GetNextDataObject(pEnumObject, &pData);
1334 if (hr == DXFILEERR_NOMOREOBJECTS)
1336 TRACE("No more object\n");
1337 break;
1339 else if (hr != DXFILE_OK)
1341 ret = D3DRMERR_NOTFOUND;
1342 goto end;
1345 hr = IDirectXFileData_GetType(pData, &pGuid);
1346 if (hr != DXFILE_OK)
1347 goto end;
1349 TRACE("Found object type whose GUID = %s\n", debugstr_guid(pGuid));
1351 if (IsEqualGUID(pGuid, &TID_D3DRMMesh))
1353 BOOL requested = FALSE;
1354 HRESULT hr;
1355 LPDIRECT3DRMMESHBUILDER3 pMeshBuilder;
1357 TRACE("Found TID_D3DRMMesh\n");
1359 for (i = 0; i < nb_GUIDs; i++)
1360 if (IsEqualGUID(GUIDs[i], &IID_IDirect3DRMMeshBuilder) ||
1361 IsEqualGUID(GUIDs[i], &IID_IDirect3DRMMeshBuilder2) ||
1362 IsEqualGUID(GUIDs[i], &IID_IDirect3DRMMeshBuilder3))
1363 requested = TRUE;
1365 if (requested)
1367 FIXME("Load mesh data and notify application\n");
1369 hr = IDirect3DRM3_CreateMeshBuilder(iface, &pMeshBuilder);
1370 if (SUCCEEDED(hr))
1372 LPDIRECT3DRMMESHBUILDER3 pMeshBuilder3;
1374 hr = IDirect3DRMMeshBuilder3_QueryInterface(pMeshBuilder, &IID_IDirect3DRMMeshBuilder3, (void**)&pMeshBuilder3);
1375 if (SUCCEEDED(hr))
1377 hr = load_mesh_data(pMeshBuilder3, pData);
1378 IDirect3DRMMeshBuilder3_Release(pMeshBuilder3);
1380 if (SUCCEEDED(hr))
1381 LoadProc((LPDIRECT3DRMOBJECT)pMeshBuilder3, &IID_IDirect3DRMMeshBuilder, ArgLP);
1382 IDirect3DRMMeshBuilder_Release(pMeshBuilder3);
1385 if (FAILED(hr))
1386 ERR("Cannot process mesh\n");
1389 else if (IsEqualGUID(pGuid, &TID_D3DRMFrame))
1391 BOOL requested = FALSE;
1392 HRESULT hr;
1393 LPDIRECT3DRMFRAME3 frame;
1395 TRACE("Found TID_D3DRMFrame\n");
1397 for (i = 0; i < nb_GUIDs; i++)
1398 if (IsEqualGUID(GUIDs[i], &IID_IDirect3DRMFrame) ||
1399 IsEqualGUID(GUIDs[i], &IID_IDirect3DRMFrame2) ||
1400 IsEqualGUID(GUIDs[i], &IID_IDirect3DRMFrame3))
1401 requested = TRUE;
1403 if (requested)
1405 FIXME("Fake frame data and notify application\n");
1407 hr = IDirect3DRM3_CreateFrame(iface, NULL, &frame);
1408 if (SUCCEEDED(hr))
1410 LoadProc((LPDIRECT3DRMOBJECT)frame, &IID_IDirect3DRMFrame, ArgLP);
1411 IDirect3DRMFrame3_Release(frame);
1414 if (FAILED(hr))
1415 ERR("Cannot process mesh\n");
1419 else if (IsEqualGUID(pGuid, &TID_D3DRMMaterial))
1421 BOOL requested = FALSE;
1423 TRACE("Found TID_D3DRMMaterial\n");
1425 for (i = 0; i < nb_GUIDs; i++)
1426 if (IsEqualGUID(GUIDs[i], &IID_IDirect3DRMMaterial) ||
1427 IsEqualGUID(GUIDs[i], &IID_IDirect3DRMMaterial2))
1428 requested = TRUE;
1430 if (requested)
1432 FIXME("Processing material not supported yet\n");
1435 else
1437 FIXME("Found unknown TID %s\n", debugstr_guid(pGuid));
1439 IDirectXFileData_Release(pData);
1440 pData = NULL;
1443 ret = D3DRM_OK;
1445 end:
1446 if (pData)
1447 IDirectXFileData_Release(pData);
1448 if (pEnumObject)
1449 IDirectXFileEnumObject_Release(pEnumObject);
1450 if (pDXFile)
1451 IDirectXFile_Release(pDXFile);
1453 return ret;
1455 return E_NOTIMPL;
1458 static HRESULT WINAPI IDirect3DRM3Impl_Tick(IDirect3DRM3* iface, D3DVALUE tick)
1460 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1462 FIXME("(%p/%p)->(%f): stub\n", iface, This, tick);
1464 return E_NOTIMPL;
1467 static HRESULT WINAPI IDirect3DRM3Impl_CreateProgressiveMesh(IDirect3DRM3* iface,
1468 LPDIRECT3DRMPROGRESSIVEMESH Mesh)
1470 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1472 FIXME("(%p/%p)->(%p): stub\n", iface, This, Mesh);
1474 return E_NOTIMPL;
1477 static HRESULT WINAPI IDirect3DRM3Impl_RegisterClient(IDirect3DRM3* iface, REFGUID rguid,
1478 LPDWORD id)
1480 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1482 FIXME("(%p/%p)->(%s, %p): stub\n", iface, This, debugstr_guid(rguid), id);
1484 return E_NOTIMPL;
1487 static HRESULT WINAPI IDirect3DRM3Impl_UnregisterClient(IDirect3DRM3* iface, REFGUID rguid)
1489 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1491 FIXME("(%p/%p)->(%s): stub\n", iface, This, debugstr_guid(rguid));
1493 return E_NOTIMPL;
1496 static HRESULT WINAPI IDirect3DRM3Impl_CreateClippedVisual(IDirect3DRM3* iface,
1497 LPDIRECT3DRMVISUAL vis,
1498 LPDIRECT3DRMCLIPPEDVISUAL* clippedvis)
1500 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1502 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, vis, clippedvis);
1504 return E_NOTIMPL;
1507 static HRESULT WINAPI IDirect3DRM3Impl_SetOptions(IDirect3DRM3* iface, DWORD opt)
1509 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1511 FIXME("(%p/%p)->(%d): stub\n", iface, This, opt);
1513 return E_NOTIMPL;
1516 static HRESULT WINAPI IDirect3DRM3Impl_GetOptions(IDirect3DRM3* iface, LPDWORD opt)
1518 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1520 FIXME("(%p/%p)->(%p): stub\n", iface, This, opt);
1522 return E_NOTIMPL;
1525 static const struct IDirect3DRM3Vtbl Direct3DRM3_Vtbl =
1527 IDirect3DRM3Impl_QueryInterface,
1528 IDirect3DRM3Impl_AddRef,
1529 IDirect3DRM3Impl_Release,
1530 IDirect3DRM3Impl_CreateObject,
1531 IDirect3DRM3Impl_CreateFrame,
1532 IDirect3DRM3Impl_CreateMesh,
1533 IDirect3DRM3Impl_CreateMeshBuilder,
1534 IDirect3DRM3Impl_CreateFace,
1535 IDirect3DRM3Impl_CreateAnimation,
1536 IDirect3DRM3Impl_CreateAnimationSet,
1537 IDirect3DRM3Impl_CreateTexture,
1538 IDirect3DRM3Impl_CreateLight,
1539 IDirect3DRM3Impl_CreateLightRGB,
1540 IDirect3DRM3Impl_Material,
1541 IDirect3DRM3Impl_CreateDevice,
1542 IDirect3DRM3Impl_CreateDeviceFromSurface,
1543 IDirect3DRM3Impl_CreateDeviceFromD3D,
1544 IDirect3DRM3Impl_CreateDeviceFromClipper,
1545 IDirect3DRM3Impl_CreateTextureFromSurface,
1546 IDirect3DRM3Impl_CreateShadow,
1547 IDirect3DRM3Impl_CreateViewport,
1548 IDirect3DRM3Impl_CreateWrap,
1549 IDirect3DRM3Impl_CreateUserVisual,
1550 IDirect3DRM3Impl_LoadTexture,
1551 IDirect3DRM3Impl_LoadTextureFromResource,
1552 IDirect3DRM3Impl_SetSearchPath,
1553 IDirect3DRM3Impl_AddSearchPath,
1554 IDirect3DRM3Impl_GetSearchPath,
1555 IDirect3DRM3Impl_SetDefaultTextureColors,
1556 IDirect3DRM3Impl_SetDefaultTextureShades,
1557 IDirect3DRM3Impl_GetDevices,
1558 IDirect3DRM3Impl_GetNamedObject,
1559 IDirect3DRM3Impl_EnumerateObjects,
1560 IDirect3DRM3Impl_Load,
1561 IDirect3DRM3Impl_Tick,
1562 IDirect3DRM3Impl_CreateProgressiveMesh,
1563 IDirect3DRM3Impl_RegisterClient,
1564 IDirect3DRM3Impl_UnregisterClient,
1565 IDirect3DRM3Impl_CreateClippedVisual,
1566 IDirect3DRM3Impl_SetOptions,
1567 IDirect3DRM3Impl_GetOptions
1570 HRESULT Direct3DRM_create(IUnknown** ppObj)
1572 IDirect3DRMImpl* object;
1574 TRACE("(%p)\n", ppObj);
1576 object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirect3DRMImpl));
1577 if (!object)
1579 ERR("Out of memory\n");
1580 return E_OUTOFMEMORY;
1583 object->IDirect3DRM_iface.lpVtbl = &Direct3DRM_Vtbl;
1584 object->IDirect3DRM2_iface.lpVtbl = &Direct3DRM2_Vtbl;
1585 object->IDirect3DRM3_iface.lpVtbl = &Direct3DRM3_Vtbl;
1586 object->ref = 1;
1588 *ppObj = (IUnknown*)&object->IDirect3DRM_iface;
1590 return S_OK;