advapi32: Return a fake handle from EventRegister.
[wine/multimedia.git] / dlls / d3drm / d3drm.c
blob401cccdddfd7670d2a679368a49368ac0ac11ebf
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,
207 D3DCOLOR color, LPDIRECT3DRMLIGHT* Light)
209 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
211 TRACE("(%p/%p)->(%d,%d,%p)\n", iface, This, type, color, Light);
213 return IDirect3DRM3_CreateLight(&This->IDirect3DRM3_iface, type, color, Light);
216 static HRESULT WINAPI IDirect3DRMImpl_CreateLightRGB(IDirect3DRM* iface, D3DRMLIGHTTYPE type,
217 D3DVALUE red, D3DVALUE green, D3DVALUE blue,
218 LPDIRECT3DRMLIGHT* Light)
220 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
222 TRACE("(%p/%p)->(%d,%f,%f,%f,%p)\n", iface, This, type, red, green, blue, Light);
224 return IDirect3DRM3_CreateLightRGB(&This->IDirect3DRM3_iface, type, red, green, blue, Light);
227 static HRESULT WINAPI IDirect3DRMImpl_Material(IDirect3DRM* iface, D3DVALUE m, LPDIRECT3DRMMATERIAL * ppMaterial)
229 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
231 FIXME("(%p/%p)->(%f,%p): stub\n", iface, This, m, ppMaterial);
233 return E_NOTIMPL;
236 static HRESULT WINAPI IDirect3DRMImpl_CreateDevice(IDirect3DRM* iface, DWORD width, DWORD height, LPDIRECT3DRMDEVICE * ppDevice)
238 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
240 FIXME("(%p/%p)->(%u,%u,%p): partial stub\n", iface, This, width, height, ppDevice);
242 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice, (IUnknown**)ppDevice);
245 static HRESULT WINAPI IDirect3DRMImpl_CreateDeviceFromSurface(IDirect3DRM* iface, LPGUID pGUID, LPDIRECTDRAW pDD, LPDIRECTDRAWSURFACE pDDSBack, LPDIRECT3DRMDEVICE * ppDevice)
247 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
249 FIXME("(%p/%p)->(%s,%p,%p,%p): partial stub\n", iface, This, debugstr_guid(pGUID), pDD,
250 pDDSBack, ppDevice);
252 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice, (IUnknown**)ppDevice);
255 static HRESULT WINAPI IDirect3DRMImpl_CreateDeviceFromD3D(IDirect3DRM* iface, LPDIRECT3D pD3D, LPDIRECT3DDEVICE pD3DDev, LPDIRECT3DRMDEVICE * ppDevice)
257 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
259 FIXME("(%p/%p)->(%p,%p,%p): partial stub\n", iface, This, pD3D, pD3DDev, ppDevice);
261 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice, (IUnknown**)ppDevice);
264 static HRESULT WINAPI IDirect3DRMImpl_CreateDeviceFromClipper(IDirect3DRM* iface, LPDIRECTDRAWCLIPPER pDDClipper, LPGUID pGUID, int width, int height, LPDIRECT3DRMDEVICE * ppDevice)
266 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
268 FIXME("(%p/%p)->(%p,%s,%d,%d,%p): partial stub\n", iface, This, pDDClipper,
269 debugstr_guid(pGUID), width, height, ppDevice);
271 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice, (IUnknown**)ppDevice);
274 static HRESULT WINAPI IDirect3DRMImpl_CreateTextureFromSurface(IDirect3DRM* iface, LPDIRECTDRAWSURFACE pDDS, LPDIRECT3DRMTEXTURE * ppTexture)
276 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
278 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, pDDS, ppTexture);
280 return E_NOTIMPL;
283 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)
285 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
287 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);
289 return E_NOTIMPL;
292 static HRESULT WINAPI IDirect3DRMImpl_CreateViewport(IDirect3DRM* iface, LPDIRECT3DRMDEVICE pDevice, LPDIRECT3DRMFRAME pFrame, DWORD xpos, DWORD ypos, DWORD width, DWORD height, LPDIRECT3DRMVIEWPORT * ppViewport)
294 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
296 FIXME("(%p/%p)->(%p,%p,%d,%d,%d,%d,%p): partial stub\n", iface, This, pDevice, pFrame,
297 xpos, ypos, width, height, ppViewport);
299 return Direct3DRMViewport_create(&IID_IDirect3DRMViewport, (IUnknown**)ppViewport);
302 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)
304 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
306 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);
308 return E_NOTIMPL;
311 static HRESULT WINAPI IDirect3DRMImpl_CreateUserVisual(IDirect3DRM* iface, D3DRMUSERVISUALCALLBACK cb, LPVOID pArg, LPDIRECT3DRMUSERVISUAL * ppUserVisual)
313 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
315 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, cb, pArg, ppUserVisual);
317 return E_NOTIMPL;
320 static HRESULT WINAPI IDirect3DRMImpl_LoadTexture(IDirect3DRM* iface, const char * filename, LPDIRECT3DRMTEXTURE * ppTexture)
322 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
324 FIXME("(%p/%p)->(%s,%p): stub\n", iface, This, filename, ppTexture);
326 return E_NOTIMPL;
329 static HRESULT WINAPI IDirect3DRMImpl_LoadTextureFromResource(IDirect3DRM* iface, HRSRC rs, LPDIRECT3DRMTEXTURE * ppTexture)
331 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
333 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, rs, ppTexture);
335 return E_NOTIMPL;
338 static HRESULT WINAPI IDirect3DRMImpl_SetSearchPath(IDirect3DRM* iface, LPCSTR path)
340 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
342 FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
344 return E_NOTIMPL;
347 static HRESULT WINAPI IDirect3DRMImpl_AddSearchPath(IDirect3DRM* iface, LPCSTR path)
349 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
351 FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
353 return E_NOTIMPL;
356 static HRESULT WINAPI IDirect3DRMImpl_GetSearchPath(IDirect3DRM* iface, DWORD *size_return, LPSTR path_return)
358 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
360 FIXME("(%p/%p)->(%p,%s): stub\n", iface, This, size_return, path_return);
362 return E_NOTIMPL;
365 static HRESULT WINAPI IDirect3DRMImpl_SetDefaultTextureColors(IDirect3DRM* iface, DWORD nb_colors)
367 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
369 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_colors);
371 return E_NOTIMPL;
374 static HRESULT WINAPI IDirect3DRMImpl_SetDefaultTextureShades(IDirect3DRM* iface, DWORD nb_shades)
376 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
378 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_shades);
380 return E_NOTIMPL;
383 static HRESULT WINAPI IDirect3DRMImpl_GetDevices(IDirect3DRM* iface, LPDIRECT3DRMDEVICEARRAY * ppDeviceArray)
385 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
387 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppDeviceArray);
389 return E_NOTIMPL;
392 static HRESULT WINAPI IDirect3DRMImpl_GetNamedObject(IDirect3DRM* iface, const char * pName, LPDIRECT3DRMOBJECT * ppObject)
394 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
396 FIXME("(%p/%p)->(%s,%p): stub\n", iface, This, pName, ppObject);
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_Material,
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,
511 LPDIRECT3DRMFRAME pFrameParent,
512 LPDIRECT3DRMFRAME2 * ppFrame)
514 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
516 TRACE("(%p/%p)->(%p,%p)\n", iface, This, pFrameParent, ppFrame);
518 if (pFrameParent)
519 FIXME("(%p/%p): Parent frame not yet supported\n", iface, This);
521 return Direct3DRMFrame_create(&IID_IDirect3DRMFrame2, (IUnknown**)ppFrame);
524 static HRESULT WINAPI IDirect3DRM2Impl_CreateMesh(IDirect3DRM2* iface, LPDIRECT3DRMMESH * ppMesh)
526 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
528 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppMesh);
530 return E_NOTIMPL;
533 static HRESULT WINAPI IDirect3DRM2Impl_CreateMeshBuilder(IDirect3DRM2* iface,
534 LPDIRECT3DRMMESHBUILDER2 * ppMeshBuilder)
536 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
538 TRACE("(%p/%p)->(%p)\n", iface, This, ppMeshBuilder);
540 return Direct3DRMMeshBuilder_create(&IID_IDirect3DRMMeshBuilder2, (IUnknown**)ppMeshBuilder);
543 static HRESULT WINAPI IDirect3DRM2Impl_CreateFace(IDirect3DRM2* iface, LPDIRECT3DRMFACE * ppFace)
545 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
547 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppFace);
549 return E_NOTIMPL;
552 static HRESULT WINAPI IDirect3DRM2Impl_CreateAnimation(IDirect3DRM2* iface,
553 LPDIRECT3DRMANIMATION * ppAnimation)
555 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
557 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppAnimation);
559 return E_NOTIMPL;
562 static HRESULT WINAPI IDirect3DRM2Impl_CreateAnimationSet(IDirect3DRM2* iface,
563 LPDIRECT3DRMANIMATIONSET * ppAnimationSet)
565 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
567 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppAnimationSet);
569 return E_NOTIMPL;
572 static HRESULT WINAPI IDirect3DRM2Impl_CreateTexture(IDirect3DRM2* iface, LPD3DRMIMAGE pImage,
573 LPDIRECT3DRMTEXTURE2 * ppTexture)
575 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
577 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, pImage, ppTexture);
579 return E_NOTIMPL;
582 static HRESULT WINAPI IDirect3DRM2Impl_CreateLight(IDirect3DRM2* iface, D3DRMLIGHTTYPE type,
583 D3DCOLOR color, LPDIRECT3DRMLIGHT* Light)
585 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
587 TRACE("(%p/%p)->(%d,%d,%p)\n", iface, This, type, color, Light);
589 return IDirect3DRM3_CreateLight(&This->IDirect3DRM3_iface, type, color, Light);
592 static HRESULT WINAPI IDirect3DRM2Impl_CreateLightRGB(IDirect3DRM2* iface, D3DRMLIGHTTYPE type,
593 D3DVALUE red, D3DVALUE green, D3DVALUE blue,
594 LPDIRECT3DRMLIGHT* Light)
596 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
598 TRACE("(%p/%p)->(%d,%f,%f,%f,%p)\n", iface, This, type, red, green, blue, Light);
600 return IDirect3DRM3_CreateLightRGB(&This->IDirect3DRM3_iface, type, red, green, blue, Light);
603 static HRESULT WINAPI IDirect3DRM2Impl_Material(IDirect3DRM2* iface, D3DVALUE m,
604 LPDIRECT3DRMMATERIAL * ppMaterial)
606 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
608 FIXME("(%p/%p)->(%f,%p): stub\n", iface, This, m, ppMaterial);
610 return E_NOTIMPL;
613 static HRESULT WINAPI IDirect3DRM2Impl_CreateDevice(IDirect3DRM2* iface, DWORD width, DWORD height,
614 LPDIRECT3DRMDEVICE2 * ppDevice)
616 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
618 FIXME("(%p/%p)->(%u,%u,%p): partial stub\n", iface, This, width, height, ppDevice);
620 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice2, (IUnknown**)ppDevice);
623 static HRESULT WINAPI IDirect3DRM2Impl_CreateDeviceFromSurface(IDirect3DRM2* iface, LPGUID pGUID,
624 LPDIRECTDRAW pDD,
625 LPDIRECTDRAWSURFACE pDDSBack,
626 LPDIRECT3DRMDEVICE2 * ppDevice)
628 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
630 FIXME("(%p/%p)->(%s,%p,%p,%p): partial stub\n", iface, This, debugstr_guid(pGUID),
631 pDD, pDDSBack, ppDevice);
633 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice2, (IUnknown**)ppDevice);
636 static HRESULT WINAPI IDirect3DRM2Impl_CreateDeviceFromD3D(IDirect3DRM2* iface, LPDIRECT3D2 pD3D,
637 LPDIRECT3DDEVICE2 pD3DDev,
638 LPDIRECT3DRMDEVICE2 * ppDevice)
640 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
642 FIXME("(%p/%p)->(%p,%p,%p): partial stub\n", iface, This, pD3D, pD3DDev, ppDevice);
644 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice2, (IUnknown**)ppDevice);
647 static HRESULT WINAPI IDirect3DRM2Impl_CreateDeviceFromClipper(IDirect3DRM2* iface,
648 LPDIRECTDRAWCLIPPER pDDClipper,
649 LPGUID pGUID, int width, int height,
650 LPDIRECT3DRMDEVICE2 * ppDevice)
652 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
654 FIXME("(%p/%p)->(%p,%s,%d,%d,%p): partial stub\n", iface, This, pDDClipper,
655 debugstr_guid(pGUID), width, height, ppDevice);
657 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice2, (IUnknown**)ppDevice);
660 static HRESULT WINAPI IDirect3DRM2Impl_CreateTextureFromSurface(IDirect3DRM2* iface,
661 LPDIRECTDRAWSURFACE pDDS,
662 LPDIRECT3DRMTEXTURE2 * ppTexture)
664 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
666 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, pDDS, ppTexture);
668 return E_NOTIMPL;
671 static HRESULT WINAPI IDirect3DRM2Impl_CreateShadow(IDirect3DRM2* iface, LPDIRECT3DRMVISUAL pVisual,
672 LPDIRECT3DRMLIGHT pLight,
673 D3DVALUE px, D3DVALUE py, D3DVALUE pz,
674 D3DVALUE nx, D3DVALUE ny, D3DVALUE nz,
675 LPDIRECT3DRMVISUAL * ppVisual)
677 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
679 FIXME("(%p/%p)->(%p,%p,%f,%f,%f,%f,%f,%f,%p): stub\n", iface, This, pVisual, pLight, px, py, pz,
680 nx, ny, nz, ppVisual);
682 return E_NOTIMPL;
685 static HRESULT WINAPI IDirect3DRM2Impl_CreateViewport(IDirect3DRM2* iface,
686 LPDIRECT3DRMDEVICE pDevice,
687 LPDIRECT3DRMFRAME pFrame,
688 DWORD xpos, DWORD ypos,
689 DWORD width, DWORD height,
690 LPDIRECT3DRMVIEWPORT * ppViewport)
692 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
694 FIXME("(%p/%p)->(%p,%p,%d,%d,%d,%d,%p): partial stub\n", iface, This, pDevice, pFrame,
695 xpos, ypos, width, height, ppViewport);
697 return Direct3DRMViewport_create(&IID_IDirect3DRMViewport, (IUnknown**)ppViewport);
700 static HRESULT WINAPI IDirect3DRM2Impl_CreateWrap(IDirect3DRM2* iface, D3DRMWRAPTYPE type,
701 LPDIRECT3DRMFRAME pFrame,
702 D3DVALUE ox, D3DVALUE oy, D3DVALUE oz,
703 D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
704 D3DVALUE ux, D3DVALUE uy, D3DVALUE uz,
705 D3DVALUE ou, D3DVALUE ov, D3DVALUE su,
706 D3DVALUE sv, LPDIRECT3DRMWRAP * ppWrap)
708 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
710 FIXME("(%p/%p)->(%d,%p,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%p): stub\n", iface, This, type,
711 pFrame, ox, oy, oz, dx, dy, dz, ux, uy, uz, ou, ov, su, sv, ppWrap);
713 return E_NOTIMPL;
716 static HRESULT WINAPI IDirect3DRM2Impl_CreateUserVisual(IDirect3DRM2* iface,
717 D3DRMUSERVISUALCALLBACK cb, LPVOID pArg,
718 LPDIRECT3DRMUSERVISUAL * ppUserVisual)
720 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
722 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, cb, pArg, ppUserVisual);
724 return E_NOTIMPL;
727 static HRESULT WINAPI IDirect3DRM2Impl_LoadTexture(IDirect3DRM2* iface, const char * filename,
728 LPDIRECT3DRMTEXTURE2 * ppTexture)
730 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
732 FIXME("(%p/%p)->(%s,%p): stub\n", iface, This, filename, ppTexture);
734 return E_NOTIMPL;
737 static HRESULT WINAPI IDirect3DRM2Impl_LoadTextureFromResource(IDirect3DRM2* iface, HMODULE hModule,
738 LPCSTR strName, LPCSTR strType,
739 LPDIRECT3DRMTEXTURE2 * ppTexture)
741 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
743 FIXME("(%p/%p)->(%p,%p,%p,%p): stub\n", iface, This, hModule, strName, strType, ppTexture);
745 return E_NOTIMPL;
748 static HRESULT WINAPI IDirect3DRM2Impl_SetSearchPath(IDirect3DRM2* iface, LPCSTR path)
750 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
752 FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
754 return E_NOTIMPL;
757 static HRESULT WINAPI IDirect3DRM2Impl_AddSearchPath(IDirect3DRM2* iface, LPCSTR path)
759 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
761 FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
763 return E_NOTIMPL;
766 static HRESULT WINAPI IDirect3DRM2Impl_GetSearchPath(IDirect3DRM2* iface, DWORD *size_return,
767 LPSTR path_return)
769 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
771 FIXME("(%p/%p)->(%p,%s): stub\n", iface, This, size_return, path_return);
773 return E_NOTIMPL;
776 static HRESULT WINAPI IDirect3DRM2Impl_SetDefaultTextureColors(IDirect3DRM2* iface, DWORD nb_colors)
778 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
780 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_colors);
782 return E_NOTIMPL;
785 static HRESULT WINAPI IDirect3DRM2Impl_SetDefaultTextureShades(IDirect3DRM2* iface, DWORD nb_shades)
787 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
789 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_shades);
791 return E_NOTIMPL;
794 static HRESULT WINAPI IDirect3DRM2Impl_GetDevices(IDirect3DRM2* iface,
795 LPDIRECT3DRMDEVICEARRAY * ppDeviceArray)
797 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
799 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppDeviceArray);
801 return E_NOTIMPL;
804 static HRESULT WINAPI IDirect3DRM2Impl_GetNamedObject(IDirect3DRM2* iface, const char * pName,
805 LPDIRECT3DRMOBJECT * ppObject)
807 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
809 FIXME("(%p/%p)->(%s,%p): stub\n", iface, This, pName, ppObject);
811 return E_NOTIMPL;
814 static HRESULT WINAPI IDirect3DRM2Impl_EnumerateObjects(IDirect3DRM2* iface, D3DRMOBJECTCALLBACK cb,
815 LPVOID pArg)
817 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
819 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, cb, pArg);
821 return E_NOTIMPL;
824 static HRESULT WINAPI IDirect3DRM2Impl_Load(IDirect3DRM2* iface, LPVOID pObjSource, LPVOID pObjID,
825 LPIID * ppGUIDs, DWORD nb_GUIDs,
826 D3DRMLOADOPTIONS LOFlags, D3DRMLOADCALLBACK LoadProc,
827 LPVOID pArgLP, D3DRMLOADTEXTURECALLBACK LoadTextureProc,
828 LPVOID pArgLTP, LPDIRECT3DRMFRAME pParentFrame)
830 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
831 LPDIRECT3DRMFRAME3 pParentFrame3 = NULL;
832 HRESULT hr = D3DRM_OK;
834 TRACE("(%p/%p)->(%p,%p,%p,%d,%d,%p,%p,%p,%p,%p)\n", iface, This, pObjSource, pObjID,
835 ppGUIDs, nb_GUIDs, LOFlags, LoadProc, pArgLP, LoadTextureProc, pArgLTP, pParentFrame);
837 if (pParentFrame)
838 hr = IDirect3DRMFrame_QueryInterface(pParentFrame, &IID_IDirect3DRMFrame3, (void**)&pParentFrame3);
839 if (SUCCEEDED(hr))
840 hr = IDirect3DRM3_Load(&This->IDirect3DRM3_iface, pObjSource, pObjID, ppGUIDs, nb_GUIDs, LOFlags, LoadProc, pArgLP, LoadTextureProc, pArgLTP, pParentFrame3);
841 if (pParentFrame3)
842 IDirect3DRMFrame3_Release(pParentFrame3);
844 return hr;
847 static HRESULT WINAPI IDirect3DRM2Impl_Tick(IDirect3DRM2* iface, D3DVALUE tick)
849 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
851 FIXME("(%p/%p)->(%f): stub\n", iface, This, tick);
853 return E_NOTIMPL;
856 static HRESULT WINAPI IDirect3DRM2Impl_CreateProgressiveMesh(IDirect3DRM2* iface,
857 LPDIRECT3DRMPROGRESSIVEMESH * ppMesh)
859 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
861 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppMesh);
863 return E_NOTIMPL;
866 static const struct IDirect3DRM2Vtbl Direct3DRM2_Vtbl =
868 IDirect3DRM2Impl_QueryInterface,
869 IDirect3DRM2Impl_AddRef,
870 IDirect3DRM2Impl_Release,
871 IDirect3DRM2Impl_CreateObject,
872 IDirect3DRM2Impl_CreateFrame,
873 IDirect3DRM2Impl_CreateMesh,
874 IDirect3DRM2Impl_CreateMeshBuilder,
875 IDirect3DRM2Impl_CreateFace,
876 IDirect3DRM2Impl_CreateAnimation,
877 IDirect3DRM2Impl_CreateAnimationSet,
878 IDirect3DRM2Impl_CreateTexture,
879 IDirect3DRM2Impl_CreateLight,
880 IDirect3DRM2Impl_CreateLightRGB,
881 IDirect3DRM2Impl_Material,
882 IDirect3DRM2Impl_CreateDevice,
883 IDirect3DRM2Impl_CreateDeviceFromSurface,
884 IDirect3DRM2Impl_CreateDeviceFromD3D,
885 IDirect3DRM2Impl_CreateDeviceFromClipper,
886 IDirect3DRM2Impl_CreateTextureFromSurface,
887 IDirect3DRM2Impl_CreateShadow,
888 IDirect3DRM2Impl_CreateViewport,
889 IDirect3DRM2Impl_CreateWrap,
890 IDirect3DRM2Impl_CreateUserVisual,
891 IDirect3DRM2Impl_LoadTexture,
892 IDirect3DRM2Impl_LoadTextureFromResource,
893 IDirect3DRM2Impl_SetSearchPath,
894 IDirect3DRM2Impl_AddSearchPath,
895 IDirect3DRM2Impl_GetSearchPath,
896 IDirect3DRM2Impl_SetDefaultTextureColors,
897 IDirect3DRM2Impl_SetDefaultTextureShades,
898 IDirect3DRM2Impl_GetDevices,
899 IDirect3DRM2Impl_GetNamedObject,
900 IDirect3DRM2Impl_EnumerateObjects,
901 IDirect3DRM2Impl_Load,
902 IDirect3DRM2Impl_Tick,
903 IDirect3DRM2Impl_CreateProgressiveMesh
907 /*** IUnknown methods ***/
908 static HRESULT WINAPI IDirect3DRM3Impl_QueryInterface(IDirect3DRM3* iface, REFIID riid,
909 void** ppvObject)
911 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
912 return IDirect3DRM_QueryInterface(&This->IDirect3DRM_iface, riid, ppvObject);
915 static ULONG WINAPI IDirect3DRM3Impl_AddRef(IDirect3DRM3* iface)
917 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
918 return IDirect3DRM_AddRef(&This->IDirect3DRM_iface);
921 static ULONG WINAPI IDirect3DRM3Impl_Release(IDirect3DRM3* iface)
923 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
924 return IDirect3DRM_Release(&This->IDirect3DRM_iface);
927 /*** IDirect3DRM3 methods ***/
928 static HRESULT WINAPI IDirect3DRM3Impl_CreateObject(IDirect3DRM3* iface, REFCLSID rclsid,
929 LPUNKNOWN unkwn, REFIID riid, LPVOID* object)
931 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
933 FIXME("(%p/%p)->(%s,%p,%s,%p): stub\n", iface, This, debugstr_guid(rclsid), unkwn,
934 debugstr_guid(riid), object);
936 return E_NOTIMPL;
939 static HRESULT WINAPI IDirect3DRM3Impl_CreateFrame(IDirect3DRM3* iface,
940 LPDIRECT3DRMFRAME3 FrameParent,
941 LPDIRECT3DRMFRAME3* Frame)
943 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
945 TRACE("(%p/%p)->(%p,%p)\n", iface, This, FrameParent, Frame);
947 if (FrameParent)
948 FIXME("(%p/%p): Parent frame not yet supported\n", iface, This);
950 return Direct3DRMFrame_create(&IID_IDirect3DRMFrame3, (IUnknown**)Frame);
953 static HRESULT WINAPI IDirect3DRM3Impl_CreateMesh(IDirect3DRM3* iface, LPDIRECT3DRMMESH* Mesh)
955 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
957 FIXME("(%p/%p)->(%p): stub\n", iface, This, Mesh);
959 return E_NOTIMPL;
962 static HRESULT WINAPI IDirect3DRM3Impl_CreateMeshBuilder(IDirect3DRM3* iface,
963 LPDIRECT3DRMMESHBUILDER3* ppMeshBuilder)
965 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
967 TRACE("(%p/%p)->(%p)\n", iface, This, ppMeshBuilder);
969 return Direct3DRMMeshBuilder_create(&IID_IDirect3DRMMeshBuilder3, (IUnknown**)ppMeshBuilder);
972 static HRESULT WINAPI IDirect3DRM3Impl_CreateFace(IDirect3DRM3* iface, LPDIRECT3DRMFACE2* Face)
974 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
976 FIXME("(%p/%p)->(%p): stub\n", iface, This, Face);
978 return E_NOTIMPL;
981 static HRESULT WINAPI IDirect3DRM3Impl_CreateAnimation(IDirect3DRM3* iface,
982 LPDIRECT3DRMANIMATION2* Animation)
984 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
986 FIXME("(%p/%p)->(%p): stub\n", iface, This, Animation);
988 return E_NOTIMPL;
991 static HRESULT WINAPI IDirect3DRM3Impl_CreateAnimationSet(IDirect3DRM3* iface,
992 LPDIRECT3DRMANIMATIONSET2* AnimationSet)
994 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
996 FIXME("(%p/%p)->(%p): stub\n", iface, This, AnimationSet);
998 return E_NOTIMPL;
1001 static HRESULT WINAPI IDirect3DRM3Impl_CreateTexture(IDirect3DRM3* iface, LPD3DRMIMAGE Image,
1002 LPDIRECT3DRMTEXTURE3* Texture)
1004 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1006 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, Image, Texture);
1008 return E_NOTIMPL;
1011 static HRESULT WINAPI IDirect3DRM3Impl_CreateLight(IDirect3DRM3* iface, D3DRMLIGHTTYPE type,
1012 D3DCOLOR color, LPDIRECT3DRMLIGHT* Light)
1014 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1015 HRESULT ret;
1017 FIXME("(%p/%p)->(%d,%d,%p): partial stub\n", iface, This, type, color, Light);
1019 ret = Direct3DRMLight_create((IUnknown**)Light);
1021 if (SUCCEEDED(ret))
1023 IDirect3DRMLight_SetType(*Light, type);
1024 IDirect3DRMLight_SetColor(*Light, color);
1027 return ret;
1030 static HRESULT WINAPI IDirect3DRM3Impl_CreateLightRGB(IDirect3DRM3* iface, D3DRMLIGHTTYPE type,
1031 D3DVALUE red, D3DVALUE green, D3DVALUE blue,
1032 LPDIRECT3DRMLIGHT* Light)
1034 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1035 HRESULT ret;
1037 FIXME("(%p/%p)->(%d,%f,%f,%f,%p): partial stub\n", iface, This, type, red, green, blue, Light);
1039 ret = Direct3DRMLight_create((IUnknown**)Light);
1041 if (SUCCEEDED(ret))
1043 IDirect3DRMLight_SetType(*Light, type);
1044 IDirect3DRMLight_SetColorRGB(*Light, red, green, blue);
1047 return ret;
1050 static HRESULT WINAPI IDirect3DRM3Impl_Material(IDirect3DRM3* iface, D3DVALUE m,
1051 LPDIRECT3DRMMATERIAL2* Material)
1053 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1055 FIXME("(%p/%p)->(%f,%p): stub\n", iface, This, m, Material);
1057 return E_NOTIMPL;
1060 static HRESULT WINAPI IDirect3DRM3Impl_CreateDevice(IDirect3DRM3* iface, DWORD width, DWORD height,
1061 LPDIRECT3DRMDEVICE3* device)
1063 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1065 FIXME("(%p/%p)->(%d,%d,%p): partial stub\n", iface, This, width, height, device);
1067 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice3, (IUnknown**)device);
1070 static HRESULT WINAPI IDirect3DRM3Impl_CreateDeviceFromSurface(IDirect3DRM3* iface, LPGUID pGUID,
1071 LPDIRECTDRAW dd,
1072 LPDIRECTDRAWSURFACE back,
1073 LPDIRECT3DRMDEVICE3* device)
1075 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1077 FIXME("(%p/%p)->(%s,%p,%p,%p): partial stub\n", iface, This, debugstr_guid(pGUID), dd, back, device);
1079 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice3, (IUnknown**)device);
1082 static HRESULT WINAPI IDirect3DRM3Impl_CreateDeviceFromD3D(IDirect3DRM3* iface, LPDIRECT3D2 d3d,
1083 LPDIRECT3DDEVICE2 d3ddev,
1084 LPDIRECT3DRMDEVICE3* device)
1086 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1088 FIXME("(%p/%p)->(%p,%p,%p): partial stub\n", iface, This, d3d, d3ddev, device);
1090 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice3, (IUnknown**)device);
1093 static HRESULT WINAPI IDirect3DRM3Impl_CreateDeviceFromClipper(IDirect3DRM3* iface,
1094 LPDIRECTDRAWCLIPPER clipper,
1095 LPGUID GUID, int width, int height,
1096 LPDIRECT3DRMDEVICE3* device)
1098 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1100 FIXME("(%p/%p)->(%p,%s,%d,%d,%p): partial stub\n", iface, This, clipper, debugstr_guid(GUID),
1101 width, height, device);
1103 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice3, (IUnknown**)device);
1106 static HRESULT WINAPI IDirect3DRM3Impl_CreateShadow(IDirect3DRM3* iface, LPUNKNOWN Visual1,
1107 LPDIRECT3DRMLIGHT Light, D3DVALUE px,
1108 D3DVALUE py, D3DVALUE pz, D3DVALUE nx,
1109 D3DVALUE ny, D3DVALUE nz,
1110 LPDIRECT3DRMSHADOW2* Visual2)
1112 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1114 FIXME("(%p/%p)->(%p,%p,%f,%f,%f,%f,%f,%f,%p): stub\n", iface, This, Visual1, Light, px, py, pz,
1115 nx, ny, nz, Visual2);
1117 return E_NOTIMPL;
1120 static HRESULT WINAPI IDirect3DRM3Impl_CreateTextureFromSurface(IDirect3DRM3* iface,
1121 LPDIRECTDRAWSURFACE surface,
1122 LPDIRECT3DRMTEXTURE3* texture)
1124 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1126 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, surface, texture);
1128 return E_NOTIMPL;
1131 static HRESULT WINAPI IDirect3DRM3Impl_CreateViewport(IDirect3DRM3* iface,
1132 LPDIRECT3DRMDEVICE3 Device,
1133 LPDIRECT3DRMFRAME3 frame, DWORD xpos,
1134 DWORD ypos, DWORD width, DWORD height,
1135 LPDIRECT3DRMVIEWPORT2* viewport)
1137 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1139 FIXME("(%p/%p)->(%p,%p,%d,%d,%d,%d,%p): stub\n", iface, This, Device, frame, xpos, ypos, width,
1140 height, viewport);
1142 return Direct3DRMViewport_create(&IID_IDirect3DRMViewport2, (IUnknown**)viewport);
1145 static HRESULT WINAPI IDirect3DRM3Impl_CreateWrap(IDirect3DRM3* iface, D3DRMWRAPTYPE type,
1146 LPDIRECT3DRMFRAME3 frame,
1147 D3DVALUE ox, D3DVALUE oy, D3DVALUE oz,
1148 D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
1149 D3DVALUE ux, D3DVALUE uy, D3DVALUE uz,
1150 D3DVALUE ou, D3DVALUE ov, D3DVALUE su,
1151 D3DVALUE sv, LPDIRECT3DRMWRAP* wrap)
1153 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1155 FIXME("(%p/%p)->(%d,%p,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%p): stub\n", iface, This, type,
1156 frame, ox, oy, oz, dx, dy, dz, ux, uy, uz, ou, ov, su, sv, wrap);
1158 return E_NOTIMPL;
1161 static HRESULT WINAPI IDirect3DRM3Impl_CreateUserVisual(IDirect3DRM3* iface,
1162 D3DRMUSERVISUALCALLBACK cb, LPVOID arg,
1163 LPDIRECT3DRMUSERVISUAL* UserVisual)
1165 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1167 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, cb, arg, UserVisual);
1169 return E_NOTIMPL;
1172 static HRESULT WINAPI IDirect3DRM3Impl_LoadTexture(IDirect3DRM3* iface, const char* filename,
1173 LPDIRECT3DRMTEXTURE3* Texture)
1175 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1177 FIXME("(%p/%p)->(%s,%p): stub\n", iface, This, filename, Texture);
1179 return E_NOTIMPL;
1182 static HRESULT WINAPI IDirect3DRM3Impl_LoadTextureFromResource(IDirect3DRM3* iface, HMODULE mod,
1183 LPCSTR strName, LPCSTR strType,
1184 LPDIRECT3DRMTEXTURE3 * ppTexture)
1186 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1188 FIXME("(%p/%p)->(%p,%p,%p,%p): stub\n", iface, This, mod, strName, strType, ppTexture);
1190 return E_NOTIMPL;
1193 static HRESULT WINAPI IDirect3DRM3Impl_SetSearchPath(IDirect3DRM3* iface, LPCSTR path)
1195 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1197 FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
1199 return E_NOTIMPL;
1202 static HRESULT WINAPI IDirect3DRM3Impl_AddSearchPath(IDirect3DRM3* iface, LPCSTR path)
1204 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1206 FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
1208 return E_NOTIMPL;
1211 static HRESULT WINAPI IDirect3DRM3Impl_GetSearchPath(IDirect3DRM3* iface, DWORD* size_return,
1212 LPSTR path_return)
1214 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1216 FIXME("(%p/%p)->(%p,%s): stub\n", iface, This, size_return, path_return);
1218 return E_NOTIMPL;
1221 static HRESULT WINAPI IDirect3DRM3Impl_SetDefaultTextureColors(IDirect3DRM3* iface, DWORD nb_colors)
1223 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1225 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_colors);
1227 return E_NOTIMPL;
1230 static HRESULT WINAPI IDirect3DRM3Impl_SetDefaultTextureShades(IDirect3DRM3* iface, DWORD nb_shades)
1232 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1234 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_shades);
1236 return E_NOTIMPL;
1239 static HRESULT WINAPI IDirect3DRM3Impl_GetDevices(IDirect3DRM3* iface,
1240 LPDIRECT3DRMDEVICEARRAY* DeviceArray)
1242 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1244 FIXME("(%p/%p)->(%p): stub\n", iface, This, DeviceArray);
1246 return E_NOTIMPL;
1249 static HRESULT WINAPI IDirect3DRM3Impl_GetNamedObject(IDirect3DRM3* iface, const char* Name,
1250 LPDIRECT3DRMOBJECT* Object)
1252 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1254 FIXME("(%p/%p)->(%s,%p): stub\n", iface, This, Name, Object);
1256 return E_NOTIMPL;
1259 static HRESULT WINAPI IDirect3DRM3Impl_EnumerateObjects(IDirect3DRM3* iface, D3DRMOBJECTCALLBACK cb,
1260 LPVOID arg)
1262 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1264 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, cb, arg);
1266 return E_NOTIMPL;
1269 static HRESULT WINAPI IDirect3DRM3Impl_Load(IDirect3DRM3* iface, LPVOID ObjSource, LPVOID ObjID,
1270 LPIID* GUIDs, DWORD nb_GUIDs, D3DRMLOADOPTIONS LOFlags,
1271 D3DRMLOADCALLBACK LoadProc, LPVOID ArgLP,
1272 D3DRMLOADTEXTURECALLBACK LoadTextureProc, LPVOID ArgLTP,
1273 LPDIRECT3DRMFRAME3 ParentFrame)
1275 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1276 DXFILELOADOPTIONS load_options;
1277 LPDIRECTXFILE pDXFile = NULL;
1278 LPDIRECTXFILEENUMOBJECT pEnumObject = NULL;
1279 LPDIRECTXFILEDATA pData = NULL;
1280 HRESULT hr;
1281 const GUID* pGuid;
1282 DWORD size;
1283 Header* pHeader;
1284 HRESULT ret = D3DRMERR_BADOBJECT;
1285 DWORD i;
1287 FIXME("(%p/%p)->(%p,%p,%p,%d,%d,%p,%p,%p,%p,%p): partial implementation\n", iface, This, ObjSource, ObjID, GUIDs,
1288 nb_GUIDs, LOFlags, LoadProc, ArgLP, LoadTextureProc, ArgLTP, ParentFrame);
1290 TRACE("Looking for GUIDs:\n");
1291 for (i = 0; i < nb_GUIDs; i++)
1292 TRACE("- %s (%s)\n", debugstr_guid(GUIDs[i]), get_IID_string(GUIDs[i]));
1294 if (LOFlags == D3DRMLOAD_FROMMEMORY)
1296 load_options = DXFILELOAD_FROMMEMORY;
1298 else if (LOFlags == D3DRMLOAD_FROMFILE)
1300 load_options = DXFILELOAD_FROMFILE;
1301 TRACE("Loading from file %s\n", debugstr_a(ObjSource));
1303 else
1305 FIXME("Load options %d not supported yet\n", LOFlags);
1306 return E_NOTIMPL;
1309 hr = DirectXFileCreate(&pDXFile);
1310 if (hr != DXFILE_OK)
1311 goto end;
1313 hr = IDirectXFile_RegisterTemplates(pDXFile, templates, strlen(templates));
1314 if (hr != DXFILE_OK)
1315 goto end;
1317 hr = IDirectXFile_CreateEnumObject(pDXFile, ObjSource, load_options, &pEnumObject);
1318 if (hr != DXFILE_OK)
1319 goto end;
1321 hr = IDirectXFileEnumObject_GetNextDataObject(pEnumObject, &pData);
1322 if (hr != DXFILE_OK)
1323 goto end;
1325 hr = IDirectXFileData_GetType(pData, &pGuid);
1326 if (hr != DXFILE_OK)
1327 goto end;
1329 TRACE("Found object type whose GUID = %s\n", debugstr_guid(pGuid));
1331 if (!IsEqualGUID(pGuid, &TID_DXFILEHeader))
1333 ret = D3DRMERR_BADFILE;
1334 goto end;
1337 hr = IDirectXFileData_GetData(pData, NULL, &size, (void**)&pHeader);
1338 if ((hr != DXFILE_OK) || (size != sizeof(Header)))
1339 goto end;
1341 TRACE("Version is %d %d %d\n", pHeader->major, pHeader->minor, pHeader->flags);
1343 /* Version must be 1.0.x */
1344 if ((pHeader->major != 1) || (pHeader->minor != 0))
1346 ret = D3DRMERR_BADFILE;
1347 goto end;
1350 IDirectXFileData_Release(pData);
1351 pData = NULL;
1353 while (1)
1355 hr = IDirectXFileEnumObject_GetNextDataObject(pEnumObject, &pData);
1356 if (hr == DXFILEERR_NOMOREOBJECTS)
1358 TRACE("No more object\n");
1359 break;
1361 else if (hr != DXFILE_OK)
1363 ret = D3DRMERR_NOTFOUND;
1364 goto end;
1367 hr = IDirectXFileData_GetType(pData, &pGuid);
1368 if (hr != DXFILE_OK)
1369 goto end;
1371 TRACE("Found object type whose GUID = %s\n", debugstr_guid(pGuid));
1373 if (IsEqualGUID(pGuid, &TID_D3DRMMesh))
1375 BOOL requested = FALSE;
1376 HRESULT hr;
1378 TRACE("Found TID_D3DRMMesh\n");
1380 for (i = 0; i < nb_GUIDs; i++)
1381 if (IsEqualGUID(GUIDs[i], &IID_IDirect3DRMMeshBuilder) ||
1382 IsEqualGUID(GUIDs[i], &IID_IDirect3DRMMeshBuilder2) ||
1383 IsEqualGUID(GUIDs[i], &IID_IDirect3DRMMeshBuilder3))
1385 requested = TRUE;
1386 break;
1389 if (requested)
1391 LPDIRECT3DRMMESHBUILDER3 meshbuilder;
1393 FIXME("Load mesh data and notify application\n");
1395 hr = IDirect3DRM3_CreateMeshBuilder(iface, &meshbuilder);
1396 if (SUCCEEDED(hr))
1398 LPDIRECT3DRMOBJECT object = NULL;
1400 hr = IDirect3DRMMeshBuilder3_QueryInterface(meshbuilder, GUIDs[i], (void**)&object);
1401 if (SUCCEEDED(hr))
1403 hr = load_mesh_data(meshbuilder, pData);
1404 if (SUCCEEDED(hr))
1405 LoadProc(object, GUIDs[i], ArgLP);
1406 IDirect3DRMObject_Release(object);
1408 IDirect3DRMMeshBuilder3_Release(meshbuilder);
1411 if (FAILED(hr))
1412 ERR("Cannot process mesh\n");
1415 else if (IsEqualGUID(pGuid, &TID_D3DRMFrame))
1417 BOOL requested = FALSE;
1418 HRESULT hr;
1420 TRACE("Found TID_D3DRMFrame\n");
1422 for (i = 0; i < nb_GUIDs; i++)
1423 if (IsEqualGUID(GUIDs[i], &IID_IDirect3DRMFrame) ||
1424 IsEqualGUID(GUIDs[i], &IID_IDirect3DRMFrame2) ||
1425 IsEqualGUID(GUIDs[i], &IID_IDirect3DRMFrame3))
1427 requested = TRUE;
1428 break;
1431 if (requested)
1433 LPDIRECT3DRMFRAME3 frame;
1435 FIXME("Fake frame data and notify application\n");
1437 hr = IDirect3DRM3_CreateFrame(iface, NULL, &frame);
1438 if (SUCCEEDED(hr))
1440 LPDIRECT3DRMOBJECT object;
1442 hr = IDirect3DRMFrame3_QueryInterface(frame, GUIDs[i], (void**)&object);
1443 if (SUCCEEDED(hr))
1445 LoadProc(object, GUIDs[i], ArgLP);
1446 IDirect3DRMObject_Release(object);
1448 IDirect3DRMFrame3_Release(frame);
1451 if (FAILED(hr))
1452 ERR("Cannot process frame\n");
1456 else if (IsEqualGUID(pGuid, &TID_D3DRMMaterial))
1458 BOOL requested = FALSE;
1460 TRACE("Found TID_D3DRMMaterial\n");
1462 for (i = 0; i < nb_GUIDs; i++)
1463 if (IsEqualGUID(GUIDs[i], &IID_IDirect3DRMMaterial) ||
1464 IsEqualGUID(GUIDs[i], &IID_IDirect3DRMMaterial2))
1465 requested = TRUE;
1467 if (requested)
1469 FIXME("Processing material not supported yet\n");
1472 else
1474 FIXME("Found unknown TID %s\n", debugstr_guid(pGuid));
1476 IDirectXFileData_Release(pData);
1477 pData = NULL;
1480 ret = D3DRM_OK;
1482 end:
1483 if (pData)
1484 IDirectXFileData_Release(pData);
1485 if (pEnumObject)
1486 IDirectXFileEnumObject_Release(pEnumObject);
1487 if (pDXFile)
1488 IDirectXFile_Release(pDXFile);
1490 return ret;
1493 static HRESULT WINAPI IDirect3DRM3Impl_Tick(IDirect3DRM3* iface, D3DVALUE tick)
1495 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1497 FIXME("(%p/%p)->(%f): stub\n", iface, This, tick);
1499 return E_NOTIMPL;
1502 static HRESULT WINAPI IDirect3DRM3Impl_CreateProgressiveMesh(IDirect3DRM3* iface,
1503 LPDIRECT3DRMPROGRESSIVEMESH Mesh)
1505 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1507 FIXME("(%p/%p)->(%p): stub\n", iface, This, Mesh);
1509 return E_NOTIMPL;
1512 static HRESULT WINAPI IDirect3DRM3Impl_RegisterClient(IDirect3DRM3* iface, REFGUID rguid,
1513 LPDWORD id)
1515 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1517 FIXME("(%p/%p)->(%s, %p): stub\n", iface, This, debugstr_guid(rguid), id);
1519 return E_NOTIMPL;
1522 static HRESULT WINAPI IDirect3DRM3Impl_UnregisterClient(IDirect3DRM3* iface, REFGUID rguid)
1524 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1526 FIXME("(%p/%p)->(%s): stub\n", iface, This, debugstr_guid(rguid));
1528 return E_NOTIMPL;
1531 static HRESULT WINAPI IDirect3DRM3Impl_CreateClippedVisual(IDirect3DRM3* iface,
1532 LPDIRECT3DRMVISUAL vis,
1533 LPDIRECT3DRMCLIPPEDVISUAL* clippedvis)
1535 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1537 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, vis, clippedvis);
1539 return E_NOTIMPL;
1542 static HRESULT WINAPI IDirect3DRM3Impl_SetOptions(IDirect3DRM3* iface, DWORD opt)
1544 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1546 FIXME("(%p/%p)->(%d): stub\n", iface, This, opt);
1548 return E_NOTIMPL;
1551 static HRESULT WINAPI IDirect3DRM3Impl_GetOptions(IDirect3DRM3* iface, LPDWORD opt)
1553 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1555 FIXME("(%p/%p)->(%p): stub\n", iface, This, opt);
1557 return E_NOTIMPL;
1560 static const struct IDirect3DRM3Vtbl Direct3DRM3_Vtbl =
1562 IDirect3DRM3Impl_QueryInterface,
1563 IDirect3DRM3Impl_AddRef,
1564 IDirect3DRM3Impl_Release,
1565 IDirect3DRM3Impl_CreateObject,
1566 IDirect3DRM3Impl_CreateFrame,
1567 IDirect3DRM3Impl_CreateMesh,
1568 IDirect3DRM3Impl_CreateMeshBuilder,
1569 IDirect3DRM3Impl_CreateFace,
1570 IDirect3DRM3Impl_CreateAnimation,
1571 IDirect3DRM3Impl_CreateAnimationSet,
1572 IDirect3DRM3Impl_CreateTexture,
1573 IDirect3DRM3Impl_CreateLight,
1574 IDirect3DRM3Impl_CreateLightRGB,
1575 IDirect3DRM3Impl_Material,
1576 IDirect3DRM3Impl_CreateDevice,
1577 IDirect3DRM3Impl_CreateDeviceFromSurface,
1578 IDirect3DRM3Impl_CreateDeviceFromD3D,
1579 IDirect3DRM3Impl_CreateDeviceFromClipper,
1580 IDirect3DRM3Impl_CreateTextureFromSurface,
1581 IDirect3DRM3Impl_CreateShadow,
1582 IDirect3DRM3Impl_CreateViewport,
1583 IDirect3DRM3Impl_CreateWrap,
1584 IDirect3DRM3Impl_CreateUserVisual,
1585 IDirect3DRM3Impl_LoadTexture,
1586 IDirect3DRM3Impl_LoadTextureFromResource,
1587 IDirect3DRM3Impl_SetSearchPath,
1588 IDirect3DRM3Impl_AddSearchPath,
1589 IDirect3DRM3Impl_GetSearchPath,
1590 IDirect3DRM3Impl_SetDefaultTextureColors,
1591 IDirect3DRM3Impl_SetDefaultTextureShades,
1592 IDirect3DRM3Impl_GetDevices,
1593 IDirect3DRM3Impl_GetNamedObject,
1594 IDirect3DRM3Impl_EnumerateObjects,
1595 IDirect3DRM3Impl_Load,
1596 IDirect3DRM3Impl_Tick,
1597 IDirect3DRM3Impl_CreateProgressiveMesh,
1598 IDirect3DRM3Impl_RegisterClient,
1599 IDirect3DRM3Impl_UnregisterClient,
1600 IDirect3DRM3Impl_CreateClippedVisual,
1601 IDirect3DRM3Impl_SetOptions,
1602 IDirect3DRM3Impl_GetOptions
1605 HRESULT Direct3DRM_create(IUnknown** ppObj)
1607 IDirect3DRMImpl* object;
1609 TRACE("(%p)\n", ppObj);
1611 object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirect3DRMImpl));
1612 if (!object)
1614 ERR("Out of memory\n");
1615 return E_OUTOFMEMORY;
1618 object->IDirect3DRM_iface.lpVtbl = &Direct3DRM_Vtbl;
1619 object->IDirect3DRM2_iface.lpVtbl = &Direct3DRM2_Vtbl;
1620 object->IDirect3DRM3_iface.lpVtbl = &Direct3DRM3_Vtbl;
1621 object->ref = 1;
1623 *ppObj = (IUnknown*)&object->IDirect3DRM_iface;
1625 return S_OK;