d3drm: Avoid LPDIRECT3DRMTEXTURE3.
[wine/multimedia.git] / dlls / d3drm / d3drm.c
blob60b8edad944bd69f37b8dacd3d4a706d1a2b8c02
1 /*
2 * Implementation of IDirect3DRM Interface
4 * Copyright 2010, 2012 Christian Costa
5 * Copyright 2011 André Hentschel
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
22 #include "wine/debug.h"
24 #define COBJMACROS
26 #include "winbase.h"
27 #include "wingdi.h"
28 #include "dxfile.h"
29 #include "rmxfguid.h"
31 #include "d3drm_private.h"
33 WINE_DEFAULT_DEBUG_CHANNEL(d3drm);
35 static const char* get_IID_string(const GUID* guid)
37 if (IsEqualGUID(guid, &IID_IDirect3DRMFrame))
38 return "IID_IDirect3DRMFrame";
39 else if (IsEqualGUID(guid, &IID_IDirect3DRMFrame2))
40 return "IID_IDirect3DRMFrame2";
41 else if (IsEqualGUID(guid, &IID_IDirect3DRMFrame3))
42 return "IID_IDirect3DRMFrame3";
43 else if (IsEqualGUID(guid, &IID_IDirect3DRMMeshBuilder))
44 return "IID_IDirect3DRMMeshBuilder";
45 else if (IsEqualGUID(guid, &IID_IDirect3DRMMeshBuilder2))
46 return "IID_IDirect3DRMMeshBuilder2";
47 else if (IsEqualGUID(guid, &IID_IDirect3DRMMeshBuilder3))
48 return "IID_IDirect3DRMMeshBuilder3";
50 return "?";
53 typedef struct {
54 IDirect3DRM IDirect3DRM_iface;
55 IDirect3DRM2 IDirect3DRM2_iface;
56 IDirect3DRM3 IDirect3DRM3_iface;
57 LONG ref;
58 } IDirect3DRMImpl;
60 static inline IDirect3DRMImpl *impl_from_IDirect3DRM(IDirect3DRM *iface)
62 return CONTAINING_RECORD(iface, IDirect3DRMImpl, IDirect3DRM_iface);
65 static inline IDirect3DRMImpl *impl_from_IDirect3DRM2(IDirect3DRM2 *iface)
67 return CONTAINING_RECORD(iface, IDirect3DRMImpl, IDirect3DRM2_iface);
70 static inline IDirect3DRMImpl *impl_from_IDirect3DRM3(IDirect3DRM3 *iface)
72 return CONTAINING_RECORD(iface, IDirect3DRMImpl, IDirect3DRM3_iface);
75 /*** IUnknown methods ***/
76 static HRESULT WINAPI IDirect3DRMImpl_QueryInterface(IDirect3DRM* iface, REFIID riid, void** ppvObject)
78 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
80 TRACE("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ppvObject);
82 *ppvObject = NULL;
84 if(IsEqualGUID(riid, &IID_IUnknown) ||
85 IsEqualGUID(riid, &IID_IDirect3DRM))
87 *ppvObject = &This->IDirect3DRM_iface;
89 else if(IsEqualGUID(riid, &IID_IDirect3DRM2))
91 *ppvObject = &This->IDirect3DRM2_iface;
93 else if(IsEqualGUID(riid, &IID_IDirect3DRM3))
95 *ppvObject = &This->IDirect3DRM3_iface;
97 else
99 FIXME("interface %s not implemented\n", debugstr_guid(riid));
100 return E_NOINTERFACE;
103 IDirect3DRM_AddRef(iface);
104 return S_OK;
107 static ULONG WINAPI IDirect3DRMImpl_AddRef(IDirect3DRM* iface)
109 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
110 ULONG ref = InterlockedIncrement(&This->ref);
112 TRACE("(%p/%p)->(): new ref = %d\n", iface, This, ref);
114 return ref;
117 static ULONG WINAPI IDirect3DRMImpl_Release(IDirect3DRM* iface)
119 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
120 ULONG ref = InterlockedDecrement(&This->ref);
122 TRACE("(%p/%p)->(): new ref = %d\n", iface, This, ref);
124 if (!ref)
125 HeapFree(GetProcessHeap(), 0, This);
127 return ref;
130 /*** IDirect3DRM methods ***/
131 static HRESULT WINAPI IDirect3DRMImpl_CreateObject(IDirect3DRM* iface, REFCLSID rclsid, LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppvObj)
133 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
135 FIXME("(%p/%p)->(%s,%p,%s,%p): stub\n", iface, This, debugstr_guid(rclsid), pUnkOuter, debugstr_guid(riid), ppvObj);
137 return E_NOTIMPL;
140 static HRESULT WINAPI IDirect3DRMImpl_CreateFrame(IDirect3DRM *iface,
141 IDirect3DRMFrame *parent_frame, IDirect3DRMFrame **frame)
143 TRACE("iface %p, parent_frame %p, frame %p.\n", iface, parent_frame, frame);
145 return Direct3DRMFrame_create(&IID_IDirect3DRMFrame, (IUnknown *)parent_frame, (IUnknown **)frame);
148 static HRESULT WINAPI IDirect3DRMImpl_CreateMesh(IDirect3DRM *iface, IDirect3DRMMesh **mesh)
150 IDirect3DRMImpl *d3drm = impl_from_IDirect3DRM(iface);
152 TRACE("iface %p, mesh %p.\n", iface, mesh);
154 return IDirect3DRM3_CreateMesh(&d3drm->IDirect3DRM3_iface, mesh);
157 static HRESULT WINAPI IDirect3DRMImpl_CreateMeshBuilder(IDirect3DRM *iface, IDirect3DRMMeshBuilder **mesh_builder)
159 TRACE("iface %p, mesh_builder %p.\n", iface, mesh_builder);
161 return Direct3DRMMeshBuilder_create(&IID_IDirect3DRMMeshBuilder, (IUnknown **)mesh_builder);
164 static HRESULT WINAPI IDirect3DRMImpl_CreateFace(IDirect3DRM* iface, IDirect3DRMFace **face)
166 TRACE("iface %p, face %p.\n", iface, face);
168 return Direct3DRMFace_create(&IID_IDirect3DRMFace, (IUnknown **)face);
171 static HRESULT WINAPI IDirect3DRMImpl_CreateAnimation(IDirect3DRM* iface, LPDIRECT3DRMANIMATION * ppAnimation)
173 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
175 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppAnimation);
177 return E_NOTIMPL;
180 static HRESULT WINAPI IDirect3DRMImpl_CreateAnimationSet(IDirect3DRM* iface, LPDIRECT3DRMANIMATIONSET * ppAnimationSet)
182 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
184 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppAnimationSet);
186 return E_NOTIMPL;
189 static HRESULT WINAPI IDirect3DRMImpl_CreateTexture(IDirect3DRM *iface,
190 D3DRMIMAGE *image, IDirect3DRMTexture **texture)
192 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
194 FIXME("(%p/%p)->(%p,%p): partial stub\n", iface, This, image, texture);
196 return Direct3DRMTexture_create(&IID_IDirect3DRMTexture, (IUnknown **)texture);
199 static HRESULT WINAPI IDirect3DRMImpl_CreateLight(IDirect3DRM *iface,
200 D3DRMLIGHTTYPE type, D3DCOLOR color, IDirect3DRMLight **light)
202 IDirect3DRMImpl *d3drm = impl_from_IDirect3DRM(iface);
204 TRACE("iface %p, type %#x, color 0x%08x, light %p.\n", iface, type, color, light);
206 return IDirect3DRM3_CreateLight(&d3drm->IDirect3DRM3_iface, type, color, light);
209 static HRESULT WINAPI IDirect3DRMImpl_CreateLightRGB(IDirect3DRM *iface, D3DRMLIGHTTYPE type,
210 D3DVALUE red, D3DVALUE green, D3DVALUE blue, IDirect3DRMLight **light)
212 IDirect3DRMImpl *d3drm = impl_from_IDirect3DRM(iface);
214 TRACE("iface %p, type %#x, red %.8e, green %.8e, blue %.8e, light %p.\n",
215 iface, type, red, green, blue, light);
217 return IDirect3DRM3_CreateLightRGB(&d3drm->IDirect3DRM3_iface, type, red, green, blue, light);
220 static HRESULT WINAPI IDirect3DRMImpl_CreateMaterial(IDirect3DRM* iface, D3DVALUE power, LPDIRECT3DRMMATERIAL * material)
222 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
224 TRACE("(%p/%p)->(%f,%p)\n", iface, This, power, material);
226 return IDirect3DRM3_CreateMaterial(&This->IDirect3DRM3_iface, power, (LPDIRECT3DRMMATERIAL2*)material);
229 static HRESULT WINAPI IDirect3DRMImpl_CreateDevice(IDirect3DRM *iface,
230 DWORD width, DWORD height, IDirect3DRMDevice **device)
232 FIXME("iface %p, width %u, height %u, device %p partial stub!\n", iface, width, height, device);
234 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice, (IUnknown **)device);
237 static HRESULT WINAPI IDirect3DRMImpl_CreateDeviceFromSurface(IDirect3DRM *iface, GUID *pGUID,
238 IDirectDraw *pDD, IDirectDrawSurface *pDDSBack, IDirect3DRMDevice **ppDevice)
240 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
242 FIXME("(%p/%p)->(%s,%p,%p,%p): partial stub\n", iface, This, debugstr_guid(pGUID), pDD,
243 pDDSBack, ppDevice);
245 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice, (IUnknown**)ppDevice);
248 static HRESULT WINAPI IDirect3DRMImpl_CreateDeviceFromD3D(IDirect3DRM *iface,
249 IDirect3D *pD3D, IDirect3DDevice *pD3DDev, IDirect3DRMDevice **ppDevice)
251 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
253 FIXME("(%p/%p)->(%p,%p,%p): partial stub\n", iface, This, pD3D, pD3DDev, ppDevice);
255 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice, (IUnknown**)ppDevice);
258 static HRESULT WINAPI IDirect3DRMImpl_CreateDeviceFromClipper(IDirect3DRM *iface,
259 IDirectDrawClipper *pDDClipper, GUID *pGUID, int width, int height,
260 IDirect3DRMDevice **ppDevice)
262 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
264 FIXME("(%p/%p)->(%p,%s,%d,%d,%p): partial stub\n", iface, This, pDDClipper,
265 debugstr_guid(pGUID), width, height, ppDevice);
267 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice, (IUnknown**)ppDevice);
270 static HRESULT WINAPI IDirect3DRMImpl_CreateTextureFromSurface(IDirect3DRM *iface,
271 IDirectDrawSurface *pDDS, IDirect3DRMTexture **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, IDirect3DRMVisual *visual,
281 IDirect3DRMLight *light, D3DVALUE px, D3DVALUE py, D3DVALUE pz, D3DVALUE nx, D3DVALUE ny, D3DVALUE nz,
282 IDirect3DRMVisual **shadow)
284 FIXME("iface %p, visual %p, light %p, px %.8e, py %.8e, pz %.8e, nx %.8e, ny %.8e, nz %.8e, shadow %p stub!\n",
285 iface, visual, light, px, py, pz, nx, ny, nz, shadow);
287 return E_NOTIMPL;
290 static HRESULT WINAPI IDirect3DRMImpl_CreateViewport(IDirect3DRM *iface, IDirect3DRMDevice *device,
291 IDirect3DRMFrame *camera, DWORD x, DWORD y, DWORD width, DWORD height, IDirect3DRMViewport **viewport)
293 FIXME("iface %p, device %p, camera %p, x %u, y %u, width %u, height %u, viewport %p partial stub!\n",
294 iface, device, camera, x, y, width, height, viewport);
296 return Direct3DRMViewport_create(&IID_IDirect3DRMViewport, (IUnknown **)viewport);
299 static HRESULT WINAPI IDirect3DRMImpl_CreateWrap(IDirect3DRM *iface, D3DRMWRAPTYPE type, IDirect3DRMFrame *frame,
300 D3DVALUE ox, D3DVALUE oy, D3DVALUE oz, D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
301 D3DVALUE ux, D3DVALUE uy, D3DVALUE uz, D3DVALUE ou, D3DVALUE ov, D3DVALUE su, D3DVALUE sv,
302 IDirect3DRMWrap **wrap)
304 FIXME("iface %p, type %#x, frame %p, ox %.8e, oy %.8e, oz %.8e, dx %.8e, dy %.8e, dz %.8e, "
305 "ux %.8e, uy %.8e, uz %.8e, ou %.8e, ov %.8e, su %.8e, sv %.8e, wrap %p stub!\n",
306 iface, type, frame, ox, oy, oz, dx, dy, dz, ux, uy, uz, ou, ov, su, sv, wrap);
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,
321 const char *filename, IDirect3DRMTexture **texture)
323 FIXME("iface %p, filename %s, texture %p stub!\n", iface, debugstr_a(filename), texture);
325 return Direct3DRMTexture_create(&IID_IDirect3DRMTexture, (IUnknown **)texture);
328 static HRESULT WINAPI IDirect3DRMImpl_LoadTextureFromResource(IDirect3DRM *iface,
329 HRSRC resource, IDirect3DRMTexture **texture)
331 FIXME("iface %p, resource %p, texture %p stub!\n", iface, resource, texture);
333 return Direct3DRMTexture_create(&IID_IDirect3DRMTexture, (IUnknown **)texture);
336 static HRESULT WINAPI IDirect3DRMImpl_SetSearchPath(IDirect3DRM* iface, LPCSTR path)
338 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
340 FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
342 return E_NOTIMPL;
345 static HRESULT WINAPI IDirect3DRMImpl_AddSearchPath(IDirect3DRM* iface, LPCSTR path)
347 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
349 FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
351 return E_NOTIMPL;
354 static HRESULT WINAPI IDirect3DRMImpl_GetSearchPath(IDirect3DRM* iface, DWORD *size_return, LPSTR path_return)
356 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
358 FIXME("(%p/%p)->(%p,%s): stub\n", iface, This, size_return, path_return);
360 return E_NOTIMPL;
363 static HRESULT WINAPI IDirect3DRMImpl_SetDefaultTextureColors(IDirect3DRM* iface, DWORD nb_colors)
365 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
367 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_colors);
369 return E_NOTIMPL;
372 static HRESULT WINAPI IDirect3DRMImpl_SetDefaultTextureShades(IDirect3DRM* iface, DWORD nb_shades)
374 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
376 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_shades);
378 return E_NOTIMPL;
381 static HRESULT WINAPI IDirect3DRMImpl_GetDevices(IDirect3DRM* iface, LPDIRECT3DRMDEVICEARRAY * ppDeviceArray)
383 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
385 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppDeviceArray);
387 return E_NOTIMPL;
390 static HRESULT WINAPI IDirect3DRMImpl_GetNamedObject(IDirect3DRM *iface,
391 const char *name, IDirect3DRMObject **object)
393 FIXME("iface %p, name %s, object %p stub!\n", iface, debugstr_a(name), object);
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, void *source, void *object_id, IID **iids,
408 DWORD iid_count, D3DRMLOADOPTIONS flags, D3DRMLOADCALLBACK load_cb, void *load_ctx,
409 D3DRMLOADTEXTURECALLBACK load_tex_cb, void *load_tex_ctx, IDirect3DRMFrame *parent_frame)
411 IDirect3DRMImpl *d3drm = impl_from_IDirect3DRM(iface);
412 IDirect3DRMFrame3 *parent_frame3 = NULL;
413 HRESULT hr = D3DRM_OK;
415 TRACE("iface %p, source %p, object_id %p, iids %p, iid_count %u, flags %#x, "
416 "load_cb %p, load_ctx %p, load_tex_cb %p, load_tex_ctx %p, parent_frame %p.\n",
417 iface, source, object_id, iids, iid_count, flags,
418 load_cb, load_ctx, load_tex_cb, load_tex_ctx, parent_frame);
420 if (parent_frame)
421 hr = IDirect3DRMFrame_QueryInterface(parent_frame, &IID_IDirect3DRMFrame3, (void **)&parent_frame3);
422 if (SUCCEEDED(hr))
423 hr = IDirect3DRM3_Load(&d3drm->IDirect3DRM3_iface, source, object_id, iids, iid_count,
424 flags, load_cb, load_ctx, load_tex_cb, load_tex_ctx, parent_frame3);
425 if (parent_frame3)
426 IDirect3DRMFrame3_Release(parent_frame3);
428 return hr;
431 static HRESULT WINAPI IDirect3DRMImpl_Tick(IDirect3DRM* iface, D3DVALUE tick)
433 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
435 FIXME("(%p/%p)->(%f): stub\n", iface, This, tick);
437 return E_NOTIMPL;
440 static const struct IDirect3DRMVtbl Direct3DRM_Vtbl =
442 IDirect3DRMImpl_QueryInterface,
443 IDirect3DRMImpl_AddRef,
444 IDirect3DRMImpl_Release,
445 IDirect3DRMImpl_CreateObject,
446 IDirect3DRMImpl_CreateFrame,
447 IDirect3DRMImpl_CreateMesh,
448 IDirect3DRMImpl_CreateMeshBuilder,
449 IDirect3DRMImpl_CreateFace,
450 IDirect3DRMImpl_CreateAnimation,
451 IDirect3DRMImpl_CreateAnimationSet,
452 IDirect3DRMImpl_CreateTexture,
453 IDirect3DRMImpl_CreateLight,
454 IDirect3DRMImpl_CreateLightRGB,
455 IDirect3DRMImpl_CreateMaterial,
456 IDirect3DRMImpl_CreateDevice,
457 IDirect3DRMImpl_CreateDeviceFromSurface,
458 IDirect3DRMImpl_CreateDeviceFromD3D,
459 IDirect3DRMImpl_CreateDeviceFromClipper,
460 IDirect3DRMImpl_CreateTextureFromSurface,
461 IDirect3DRMImpl_CreateShadow,
462 IDirect3DRMImpl_CreateViewport,
463 IDirect3DRMImpl_CreateWrap,
464 IDirect3DRMImpl_CreateUserVisual,
465 IDirect3DRMImpl_LoadTexture,
466 IDirect3DRMImpl_LoadTextureFromResource,
467 IDirect3DRMImpl_SetSearchPath,
468 IDirect3DRMImpl_AddSearchPath,
469 IDirect3DRMImpl_GetSearchPath,
470 IDirect3DRMImpl_SetDefaultTextureColors,
471 IDirect3DRMImpl_SetDefaultTextureShades,
472 IDirect3DRMImpl_GetDevices,
473 IDirect3DRMImpl_GetNamedObject,
474 IDirect3DRMImpl_EnumerateObjects,
475 IDirect3DRMImpl_Load,
476 IDirect3DRMImpl_Tick
480 /*** IUnknown methods ***/
481 static HRESULT WINAPI IDirect3DRM2Impl_QueryInterface(IDirect3DRM2* iface, REFIID riid,
482 void** ppvObject)
484 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
485 return IDirect3DRM_QueryInterface(&This->IDirect3DRM_iface, riid, ppvObject);
488 static ULONG WINAPI IDirect3DRM2Impl_AddRef(IDirect3DRM2* iface)
490 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
491 return IDirect3DRM_AddRef(&This->IDirect3DRM_iface);
494 static ULONG WINAPI IDirect3DRM2Impl_Release(IDirect3DRM2* iface)
496 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
497 return IDirect3DRM_Release(&This->IDirect3DRM_iface);
500 /*** IDirect3DRM2 methods ***/
501 static HRESULT WINAPI IDirect3DRM2Impl_CreateObject(IDirect3DRM2* iface, REFCLSID rclsid,
502 LPUNKNOWN pUnkOuter, REFIID riid,
503 LPVOID *ppvObj)
505 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
507 FIXME("(%p/%p)->(%s,%p,%s,%p): stub\n", iface, This, debugstr_guid(rclsid), pUnkOuter,
508 debugstr_guid(riid), ppvObj);
510 return E_NOTIMPL;
513 static HRESULT WINAPI IDirect3DRM2Impl_CreateFrame(IDirect3DRM2 *iface,
514 IDirect3DRMFrame *parent_frame, IDirect3DRMFrame2 **frame)
516 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
518 TRACE("(%p/%p)->(%p,%p)\n", iface, This, parent_frame, frame);
520 return Direct3DRMFrame_create(&IID_IDirect3DRMFrame2, (IUnknown*)parent_frame, (IUnknown**)frame);
523 static HRESULT WINAPI IDirect3DRM2Impl_CreateMesh(IDirect3DRM2 *iface, IDirect3DRMMesh **mesh)
525 IDirect3DRMImpl *d3drm = impl_from_IDirect3DRM2(iface);
527 TRACE("iface %p, mesh %p.\n", iface, mesh);
529 return IDirect3DRM3_CreateMesh(&d3drm->IDirect3DRM3_iface, mesh);
532 static HRESULT WINAPI IDirect3DRM2Impl_CreateMeshBuilder(IDirect3DRM2 *iface, IDirect3DRMMeshBuilder2 **mesh_builder)
534 TRACE("iface %p, mesh_builder %p.\n", iface, mesh_builder);
536 return Direct3DRMMeshBuilder_create(&IID_IDirect3DRMMeshBuilder2, (IUnknown **)mesh_builder);
539 static HRESULT WINAPI IDirect3DRM2Impl_CreateFace(IDirect3DRM2 *iface, IDirect3DRMFace **face)
541 TRACE("iface %p, face %p.\n", iface, face);
543 return Direct3DRMFace_create(&IID_IDirect3DRMFace, (IUnknown **)face);
546 static HRESULT WINAPI IDirect3DRM2Impl_CreateAnimation(IDirect3DRM2* iface,
547 LPDIRECT3DRMANIMATION * ppAnimation)
549 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
551 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppAnimation);
553 return E_NOTIMPL;
556 static HRESULT WINAPI IDirect3DRM2Impl_CreateAnimationSet(IDirect3DRM2* iface,
557 LPDIRECT3DRMANIMATIONSET * ppAnimationSet)
559 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
561 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppAnimationSet);
563 return E_NOTIMPL;
566 static HRESULT WINAPI IDirect3DRM2Impl_CreateTexture(IDirect3DRM2 *iface,
567 D3DRMIMAGE *image, IDirect3DRMTexture2 **texture)
569 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
571 FIXME("(%p/%p)->(%p,%p): partial stub\n", iface, This, image, texture);
573 return Direct3DRMTexture_create(&IID_IDirect3DRMTexture2, (IUnknown **)texture);
576 static HRESULT WINAPI IDirect3DRM2Impl_CreateLight(IDirect3DRM2 *iface,
577 D3DRMLIGHTTYPE type, D3DCOLOR color, IDirect3DRMLight **light)
579 IDirect3DRMImpl *d3drm = impl_from_IDirect3DRM2(iface);
581 TRACE("iface %p, type %#x, color 0x%08x, light %p.\n", iface, type, color, light);
583 return IDirect3DRM3_CreateLight(&d3drm->IDirect3DRM3_iface, type, color, light);
586 static HRESULT WINAPI IDirect3DRM2Impl_CreateLightRGB(IDirect3DRM2 *iface, D3DRMLIGHTTYPE type,
587 D3DVALUE red, D3DVALUE green, D3DVALUE blue, IDirect3DRMLight **light)
589 IDirect3DRMImpl *d3drm = impl_from_IDirect3DRM2(iface);
591 TRACE("iface %p, type %#x, red %.8e, green %.8e, blue %.8e, light %p.\n",
592 iface, type, red, green, blue, light);
594 return IDirect3DRM3_CreateLightRGB(&d3drm->IDirect3DRM3_iface, type, red, green, blue, light);
597 static HRESULT WINAPI IDirect3DRM2Impl_CreateMaterial(IDirect3DRM2* iface, D3DVALUE power,
598 LPDIRECT3DRMMATERIAL * material)
600 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
602 TRACE("(%p/%p)->(%f,%p)\n", iface, This, power, material);
604 return IDirect3DRM3_CreateMaterial(&This->IDirect3DRM3_iface, power, (LPDIRECT3DRMMATERIAL2*)material);
607 static HRESULT WINAPI IDirect3DRM2Impl_CreateDevice(IDirect3DRM2 *iface,
608 DWORD width, DWORD height, IDirect3DRMDevice2 **device)
610 FIXME("iface %p, width %u, height %u, device %p.\n", iface, width, height, device);
612 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice2, (IUnknown **)device);
615 static HRESULT WINAPI IDirect3DRM2Impl_CreateDeviceFromSurface(IDirect3DRM2 *iface, GUID *pGUID,
616 IDirectDraw *pDD, IDirectDrawSurface *pDDSBack, IDirect3DRMDevice2 **ppDevice)
618 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
620 FIXME("(%p/%p)->(%s,%p,%p,%p): partial stub\n", iface, This, debugstr_guid(pGUID),
621 pDD, pDDSBack, ppDevice);
623 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice2, (IUnknown**)ppDevice);
626 static HRESULT WINAPI IDirect3DRM2Impl_CreateDeviceFromD3D(IDirect3DRM2 *iface,
627 IDirect3D2 *pD3D, IDirect3DDevice2 *pD3DDev, IDirect3DRMDevice2 **ppDevice)
629 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
631 FIXME("(%p/%p)->(%p,%p,%p): partial stub\n", iface, This, pD3D, pD3DDev, ppDevice);
633 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice2, (IUnknown**)ppDevice);
636 static HRESULT WINAPI IDirect3DRM2Impl_CreateDeviceFromClipper(IDirect3DRM2 *iface,
637 IDirectDrawClipper *pDDClipper, GUID *pGUID, int width, int height,
638 IDirect3DRMDevice2 **ppDevice)
640 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
642 FIXME("(%p/%p)->(%p,%s,%d,%d,%p): partial stub\n", iface, This, pDDClipper,
643 debugstr_guid(pGUID), width, height, ppDevice);
645 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice2, (IUnknown**)ppDevice);
648 static HRESULT WINAPI IDirect3DRM2Impl_CreateTextureFromSurface(IDirect3DRM2 *iface,
649 IDirectDrawSurface *pDDS, IDirect3DRMTexture2 **ppTexture)
651 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
653 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, pDDS, ppTexture);
655 return E_NOTIMPL;
658 static HRESULT WINAPI IDirect3DRM2Impl_CreateShadow(IDirect3DRM2 *iface, IDirect3DRMVisual *visual,
659 IDirect3DRMLight *light, D3DVALUE px, D3DVALUE py, D3DVALUE pz, D3DVALUE nx, D3DVALUE ny, D3DVALUE nz,
660 IDirect3DRMVisual **shadow)
662 FIXME("iface %p, visual %p, light %p, px %.8e, py %.8e, pz %.8e, nx %.8e, ny %.8e, nz %.8e, shadow %p stub!\n",
663 iface, visual, light, px, py, pz, nx, ny, nz, shadow);
665 return E_NOTIMPL;
668 static HRESULT WINAPI IDirect3DRM2Impl_CreateViewport(IDirect3DRM2 *iface, IDirect3DRMDevice *device,
669 IDirect3DRMFrame *camera, DWORD x, DWORD y, DWORD width, DWORD height, IDirect3DRMViewport **viewport)
671 FIXME("iface %p, device %p, camera %p, x %u, y %u, width %u, height %u, viewport %p partial stub!\n",
672 iface, device, camera, x, y, width, height, viewport);
674 return Direct3DRMViewport_create(&IID_IDirect3DRMViewport, (IUnknown **)viewport);
677 static HRESULT WINAPI IDirect3DRM2Impl_CreateWrap(IDirect3DRM2 *iface, D3DRMWRAPTYPE type, IDirect3DRMFrame *frame,
678 D3DVALUE ox, D3DVALUE oy, D3DVALUE oz, D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
679 D3DVALUE ux, D3DVALUE uy, D3DVALUE uz, D3DVALUE ou, D3DVALUE ov, D3DVALUE su, D3DVALUE sv,
680 IDirect3DRMWrap **wrap)
682 FIXME("iface %p, type %#x, frame %p, ox %.8e, oy %.8e, oz %.8e, dx %.8e, dy %.8e, dz %.8e, "
683 "ux %.8e, uy %.8e, uz %.8e, ou %.8e, ov %.8e, su %.8e, sv %.8e, wrap %p stub!\n",
684 iface, type, frame, ox, oy, oz, dx, dy, dz, ux, uy, uz, ou, ov, su, sv, wrap);
686 return E_NOTIMPL;
689 static HRESULT WINAPI IDirect3DRM2Impl_CreateUserVisual(IDirect3DRM2* iface,
690 D3DRMUSERVISUALCALLBACK cb, LPVOID pArg,
691 LPDIRECT3DRMUSERVISUAL * ppUserVisual)
693 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
695 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, cb, pArg, ppUserVisual);
697 return E_NOTIMPL;
700 static HRESULT WINAPI IDirect3DRM2Impl_LoadTexture(IDirect3DRM2 *iface,
701 const char *filename, IDirect3DRMTexture2 **texture)
703 FIXME("iface %p, filename %s, texture %p stub!\n", iface, debugstr_a(filename), texture);
705 return Direct3DRMTexture_create(&IID_IDirect3DRMTexture2, (IUnknown **)texture);
708 static HRESULT WINAPI IDirect3DRM2Impl_LoadTextureFromResource(IDirect3DRM2 *iface, HMODULE module,
709 const char *resource_name, const char *resource_type, IDirect3DRMTexture2 **texture)
711 FIXME("iface %p, resource_name %s, resource_type %s, texture %p stub!\n",
712 iface, debugstr_a(resource_name), debugstr_a(resource_type), texture);
714 return Direct3DRMTexture_create(&IID_IDirect3DRMTexture2, (IUnknown **)texture);
717 static HRESULT WINAPI IDirect3DRM2Impl_SetSearchPath(IDirect3DRM2* iface, LPCSTR path)
719 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
721 FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
723 return E_NOTIMPL;
726 static HRESULT WINAPI IDirect3DRM2Impl_AddSearchPath(IDirect3DRM2* iface, LPCSTR path)
728 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
730 FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
732 return E_NOTIMPL;
735 static HRESULT WINAPI IDirect3DRM2Impl_GetSearchPath(IDirect3DRM2* iface, DWORD *size_return,
736 LPSTR path_return)
738 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
740 FIXME("(%p/%p)->(%p,%s): stub\n", iface, This, size_return, path_return);
742 return E_NOTIMPL;
745 static HRESULT WINAPI IDirect3DRM2Impl_SetDefaultTextureColors(IDirect3DRM2* iface, DWORD nb_colors)
747 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
749 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_colors);
751 return E_NOTIMPL;
754 static HRESULT WINAPI IDirect3DRM2Impl_SetDefaultTextureShades(IDirect3DRM2* iface, DWORD nb_shades)
756 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
758 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_shades);
760 return E_NOTIMPL;
763 static HRESULT WINAPI IDirect3DRM2Impl_GetDevices(IDirect3DRM2* iface,
764 LPDIRECT3DRMDEVICEARRAY * ppDeviceArray)
766 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
768 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppDeviceArray);
770 return E_NOTIMPL;
773 static HRESULT WINAPI IDirect3DRM2Impl_GetNamedObject(IDirect3DRM2 *iface,
774 const char *name, IDirect3DRMObject **object)
776 FIXME("iface %p, name %s, object %p stub!\n", iface, debugstr_a(name), object);
778 return E_NOTIMPL;
781 static HRESULT WINAPI IDirect3DRM2Impl_EnumerateObjects(IDirect3DRM2* iface, D3DRMOBJECTCALLBACK cb,
782 LPVOID pArg)
784 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
786 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, cb, pArg);
788 return E_NOTIMPL;
791 static HRESULT WINAPI IDirect3DRM2Impl_Load(IDirect3DRM2 *iface, void *source, void *object_id, IID **iids,
792 DWORD iid_count, D3DRMLOADOPTIONS flags, D3DRMLOADCALLBACK load_cb, void *load_ctx,
793 D3DRMLOADTEXTURECALLBACK load_tex_cb, void *load_tex_ctx, IDirect3DRMFrame *parent_frame)
795 IDirect3DRMImpl *d3drm = impl_from_IDirect3DRM2(iface);
796 IDirect3DRMFrame3 *parent_frame3 = NULL;
797 HRESULT hr = D3DRM_OK;
799 TRACE("iface %p, source %p, object_id %p, iids %p, iid_count %u, flags %#x, "
800 "load_cb %p, load_ctx %p, load_tex_cb %p, load_tex_ctx %p, parent_frame %p.\n",
801 iface, source, object_id, iids, iid_count, flags,
802 load_cb, load_ctx, load_tex_cb, load_tex_ctx, parent_frame);
804 if (parent_frame)
805 hr = IDirect3DRMFrame_QueryInterface(parent_frame, &IID_IDirect3DRMFrame3, (void **)&parent_frame3);
806 if (SUCCEEDED(hr))
807 hr = IDirect3DRM3_Load(&d3drm->IDirect3DRM3_iface, source, object_id, iids, iid_count,
808 flags, load_cb, load_ctx, load_tex_cb, load_tex_ctx, parent_frame3);
809 if (parent_frame3)
810 IDirect3DRMFrame3_Release(parent_frame3);
812 return hr;
815 static HRESULT WINAPI IDirect3DRM2Impl_Tick(IDirect3DRM2* iface, D3DVALUE tick)
817 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
819 FIXME("(%p/%p)->(%f): stub\n", iface, This, tick);
821 return E_NOTIMPL;
824 static HRESULT WINAPI IDirect3DRM2Impl_CreateProgressiveMesh(IDirect3DRM2* iface,
825 LPDIRECT3DRMPROGRESSIVEMESH * ppMesh)
827 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
829 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppMesh);
831 return E_NOTIMPL;
834 static const struct IDirect3DRM2Vtbl Direct3DRM2_Vtbl =
836 IDirect3DRM2Impl_QueryInterface,
837 IDirect3DRM2Impl_AddRef,
838 IDirect3DRM2Impl_Release,
839 IDirect3DRM2Impl_CreateObject,
840 IDirect3DRM2Impl_CreateFrame,
841 IDirect3DRM2Impl_CreateMesh,
842 IDirect3DRM2Impl_CreateMeshBuilder,
843 IDirect3DRM2Impl_CreateFace,
844 IDirect3DRM2Impl_CreateAnimation,
845 IDirect3DRM2Impl_CreateAnimationSet,
846 IDirect3DRM2Impl_CreateTexture,
847 IDirect3DRM2Impl_CreateLight,
848 IDirect3DRM2Impl_CreateLightRGB,
849 IDirect3DRM2Impl_CreateMaterial,
850 IDirect3DRM2Impl_CreateDevice,
851 IDirect3DRM2Impl_CreateDeviceFromSurface,
852 IDirect3DRM2Impl_CreateDeviceFromD3D,
853 IDirect3DRM2Impl_CreateDeviceFromClipper,
854 IDirect3DRM2Impl_CreateTextureFromSurface,
855 IDirect3DRM2Impl_CreateShadow,
856 IDirect3DRM2Impl_CreateViewport,
857 IDirect3DRM2Impl_CreateWrap,
858 IDirect3DRM2Impl_CreateUserVisual,
859 IDirect3DRM2Impl_LoadTexture,
860 IDirect3DRM2Impl_LoadTextureFromResource,
861 IDirect3DRM2Impl_SetSearchPath,
862 IDirect3DRM2Impl_AddSearchPath,
863 IDirect3DRM2Impl_GetSearchPath,
864 IDirect3DRM2Impl_SetDefaultTextureColors,
865 IDirect3DRM2Impl_SetDefaultTextureShades,
866 IDirect3DRM2Impl_GetDevices,
867 IDirect3DRM2Impl_GetNamedObject,
868 IDirect3DRM2Impl_EnumerateObjects,
869 IDirect3DRM2Impl_Load,
870 IDirect3DRM2Impl_Tick,
871 IDirect3DRM2Impl_CreateProgressiveMesh
875 /*** IUnknown methods ***/
876 static HRESULT WINAPI IDirect3DRM3Impl_QueryInterface(IDirect3DRM3* iface, REFIID riid,
877 void** ppvObject)
879 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
880 return IDirect3DRM_QueryInterface(&This->IDirect3DRM_iface, riid, ppvObject);
883 static ULONG WINAPI IDirect3DRM3Impl_AddRef(IDirect3DRM3* iface)
885 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
886 return IDirect3DRM_AddRef(&This->IDirect3DRM_iface);
889 static ULONG WINAPI IDirect3DRM3Impl_Release(IDirect3DRM3* iface)
891 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
892 return IDirect3DRM_Release(&This->IDirect3DRM_iface);
895 /*** IDirect3DRM3 methods ***/
896 static HRESULT WINAPI IDirect3DRM3Impl_CreateObject(IDirect3DRM3* iface, REFCLSID rclsid,
897 LPUNKNOWN unkwn, REFIID riid, LPVOID* object)
899 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
901 FIXME("(%p/%p)->(%s,%p,%s,%p): stub\n", iface, This, debugstr_guid(rclsid), unkwn,
902 debugstr_guid(riid), object);
904 return E_NOTIMPL;
907 static HRESULT WINAPI IDirect3DRM3Impl_CreateFrame(IDirect3DRM3 *iface,
908 IDirect3DRMFrame3 *parent, IDirect3DRMFrame3 **frame)
910 TRACE("iface %p, parent %p, frame %p.\n", iface, parent, frame);
912 return Direct3DRMFrame_create(&IID_IDirect3DRMFrame3, (IUnknown *)parent, (IUnknown **)frame);
915 static HRESULT WINAPI IDirect3DRM3Impl_CreateMesh(IDirect3DRM3 *iface, IDirect3DRMMesh **mesh)
917 TRACE("iface %p, mesh %p.\n", iface, mesh);
919 return Direct3DRMMesh_create(mesh);
922 static HRESULT WINAPI IDirect3DRM3Impl_CreateMeshBuilder(IDirect3DRM3 *iface, IDirect3DRMMeshBuilder3 **mesh_builder)
924 TRACE("iface %p, mesh_builder %p.\n", iface, mesh_builder);
926 return Direct3DRMMeshBuilder_create(&IID_IDirect3DRMMeshBuilder3, (IUnknown **)mesh_builder);
929 static HRESULT WINAPI IDirect3DRM3Impl_CreateFace(IDirect3DRM3 *iface, IDirect3DRMFace2 **face)
931 TRACE("iface %p, face %p.\n", iface, face);
933 return Direct3DRMFace_create(&IID_IDirect3DRMFace2, (IUnknown **)face);
936 static HRESULT WINAPI IDirect3DRM3Impl_CreateAnimation(IDirect3DRM3* iface,
937 LPDIRECT3DRMANIMATION2* Animation)
939 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
941 FIXME("(%p/%p)->(%p): stub\n", iface, This, Animation);
943 return E_NOTIMPL;
946 static HRESULT WINAPI IDirect3DRM3Impl_CreateAnimationSet(IDirect3DRM3* iface,
947 LPDIRECT3DRMANIMATIONSET2* AnimationSet)
949 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
951 FIXME("(%p/%p)->(%p): stub\n", iface, This, AnimationSet);
953 return E_NOTIMPL;
956 static HRESULT WINAPI IDirect3DRM3Impl_CreateTexture(IDirect3DRM3 *iface,
957 D3DRMIMAGE *image, IDirect3DRMTexture3 **texture)
959 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
961 FIXME("(%p/%p)->(%p,%p): partial stub\n", iface, This, image, texture);
963 return Direct3DRMTexture_create(&IID_IDirect3DRMTexture3, (IUnknown **)texture);
966 static HRESULT WINAPI IDirect3DRM3Impl_CreateLight(IDirect3DRM3 *iface,
967 D3DRMLIGHTTYPE type, D3DCOLOR color, IDirect3DRMLight **light)
969 HRESULT hr;
971 FIXME("iface %p, type %#x, color 0x%08x, light %p partial stub!\n", iface, type, color, light);
973 if (SUCCEEDED(hr = Direct3DRMLight_create((IUnknown **)light)))
975 IDirect3DRMLight_SetType(*light, type);
976 IDirect3DRMLight_SetColor(*light, color);
979 return hr;
982 static HRESULT WINAPI IDirect3DRM3Impl_CreateLightRGB(IDirect3DRM3 *iface, D3DRMLIGHTTYPE type,
983 D3DVALUE red, D3DVALUE green, D3DVALUE blue, IDirect3DRMLight **light)
985 HRESULT hr;
987 FIXME("iface %p, type %#x, red %.8e, green %.8e, blue %.8e, light %p partial stub!\n",
988 iface, type, red, green, blue, light);
990 if (SUCCEEDED(hr = Direct3DRMLight_create((IUnknown **)light)))
992 IDirect3DRMLight_SetType(*light, type);
993 IDirect3DRMLight_SetColorRGB(*light, red, green, blue);
996 return hr;
999 static HRESULT WINAPI IDirect3DRM3Impl_CreateMaterial(IDirect3DRM3* iface, D3DVALUE power,
1000 LPDIRECT3DRMMATERIAL2* material)
1002 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1003 HRESULT ret;
1005 TRACE("(%p/%p)->(%f,%p)\n", iface, This, power, material);
1007 ret = Direct3DRMMaterial_create(material);
1009 if (SUCCEEDED(ret))
1010 IDirect3DRMMaterial2_SetPower(*material, power);
1012 return ret;
1015 static HRESULT WINAPI IDirect3DRM3Impl_CreateDevice(IDirect3DRM3 *iface,
1016 DWORD width, DWORD height, IDirect3DRMDevice3 **device)
1018 FIXME("iface %p, width %u, height %u, device %p partial stub!\n", iface, width, height, device);
1020 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice3, (IUnknown **)device);
1023 static HRESULT WINAPI IDirect3DRM3Impl_CreateDeviceFromSurface(IDirect3DRM3 *iface, GUID *pGUID,
1024 IDirectDraw *dd, IDirectDrawSurface *back, IDirect3DRMDevice3 **device)
1026 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1028 FIXME("(%p/%p)->(%s,%p,%p,%p): partial stub\n", iface, This, debugstr_guid(pGUID), dd, back, device);
1030 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice3, (IUnknown**)device);
1033 static HRESULT WINAPI IDirect3DRM3Impl_CreateDeviceFromD3D(IDirect3DRM3 *iface,
1034 IDirect3D2 *d3d, IDirect3DDevice2 *d3ddev, IDirect3DRMDevice3 **device)
1036 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1038 FIXME("(%p/%p)->(%p,%p,%p): partial stub\n", iface, This, d3d, d3ddev, device);
1040 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice3, (IUnknown**)device);
1043 static HRESULT WINAPI IDirect3DRM3Impl_CreateDeviceFromClipper(IDirect3DRM3 *iface,
1044 IDirectDrawClipper *clipper, GUID *guid, int width, int height,
1045 IDirect3DRMDevice3 **device)
1047 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1049 FIXME("(%p/%p)->(%p,%s,%d,%d,%p): partial stub\n", iface, This, clipper, debugstr_guid(guid),
1050 width, height, device);
1052 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice3, (IUnknown**)device);
1055 static HRESULT WINAPI IDirect3DRM3Impl_CreateShadow(IDirect3DRM3 *iface, IUnknown *object, IDirect3DRMLight *light,
1056 D3DVALUE px, D3DVALUE py, D3DVALUE pz, D3DVALUE nx, D3DVALUE ny, D3DVALUE nz, IDirect3DRMShadow2 **shadow)
1058 FIXME("iface %p, object %p, light %p, px %.8e, py %.8e, pz %.8e, nx %.8e, ny %.8e, nz %.8e, shadow %p stub!\n",
1059 iface, object, light, px, py, pz, nx, ny, nz, shadow);
1061 return E_NOTIMPL;
1064 static HRESULT WINAPI IDirect3DRM3Impl_CreateTextureFromSurface(IDirect3DRM3 *iface,
1065 IDirectDrawSurface *surface, IDirect3DRMTexture3 **texture)
1067 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1069 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, surface, texture);
1071 return E_NOTIMPL;
1074 static HRESULT WINAPI IDirect3DRM3Impl_CreateViewport(IDirect3DRM3 *iface, IDirect3DRMDevice3 *device,
1075 IDirect3DRMFrame3 *camera, DWORD x, DWORD y, DWORD width, DWORD height, IDirect3DRMViewport2 **viewport)
1077 FIXME("iface %p, device %p, camera %p, x %u, y %u, width %u, height %u, viewport %p partial stub!\n",
1078 iface, device, camera, x, y, width, height, viewport);
1080 return Direct3DRMViewport_create(&IID_IDirect3DRMViewport2, (IUnknown **)viewport);
1083 static HRESULT WINAPI IDirect3DRM3Impl_CreateWrap(IDirect3DRM3 *iface, D3DRMWRAPTYPE type, IDirect3DRMFrame3 *frame,
1084 D3DVALUE ox, D3DVALUE oy, D3DVALUE oz, D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
1085 D3DVALUE ux, D3DVALUE uy, D3DVALUE uz, D3DVALUE ou, D3DVALUE ov, D3DVALUE su, D3DVALUE sv,
1086 IDirect3DRMWrap **wrap)
1088 FIXME("iface %p, type %#x, frame %p, ox %.8e, oy %.8e, oz %.8e, dx %.8e, dy %.8e, dz %.8e, "
1089 "ux %.8e, uy %.8e, uz %.8e, ou %.8e, ov %.8e, su %.8e, sv %.8e, wrap %p stub!\n",
1090 iface, type, frame, ox, oy, oz, dx, dy, dz, ux, uy, uz, ou, ov, su, sv, wrap);
1092 return E_NOTIMPL;
1095 static HRESULT WINAPI IDirect3DRM3Impl_CreateUserVisual(IDirect3DRM3* iface,
1096 D3DRMUSERVISUALCALLBACK cb, LPVOID arg,
1097 LPDIRECT3DRMUSERVISUAL* UserVisual)
1099 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1101 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, cb, arg, UserVisual);
1103 return E_NOTIMPL;
1106 static HRESULT WINAPI IDirect3DRM3Impl_LoadTexture(IDirect3DRM3 *iface,
1107 const char *filename, IDirect3DRMTexture3 **texture)
1109 FIXME("iface %p, filename %s, texture %p stub!\n", iface, debugstr_a(filename), texture);
1111 return Direct3DRMTexture_create(&IID_IDirect3DRMTexture3, (IUnknown **)texture);
1114 static HRESULT WINAPI IDirect3DRM3Impl_LoadTextureFromResource(IDirect3DRM3 *iface, HMODULE module,
1115 const char *resource_name, const char *resource_type, IDirect3DRMTexture3 **texture)
1117 FIXME("iface %p, module %p, resource_name %s, resource_type %s, texture %p stub!\n",
1118 iface, module, debugstr_a(resource_name), debugstr_a(resource_type), texture);
1120 return Direct3DRMTexture_create(&IID_IDirect3DRMTexture3, (IUnknown **)texture);
1123 static HRESULT WINAPI IDirect3DRM3Impl_SetSearchPath(IDirect3DRM3* iface, LPCSTR path)
1125 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1127 FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
1129 return E_NOTIMPL;
1132 static HRESULT WINAPI IDirect3DRM3Impl_AddSearchPath(IDirect3DRM3* iface, LPCSTR path)
1134 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1136 FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
1138 return E_NOTIMPL;
1141 static HRESULT WINAPI IDirect3DRM3Impl_GetSearchPath(IDirect3DRM3* iface, DWORD* size_return,
1142 LPSTR path_return)
1144 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1146 FIXME("(%p/%p)->(%p,%s): stub\n", iface, This, size_return, path_return);
1148 return E_NOTIMPL;
1151 static HRESULT WINAPI IDirect3DRM3Impl_SetDefaultTextureColors(IDirect3DRM3* iface, DWORD nb_colors)
1153 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1155 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_colors);
1157 return E_NOTIMPL;
1160 static HRESULT WINAPI IDirect3DRM3Impl_SetDefaultTextureShades(IDirect3DRM3* iface, DWORD nb_shades)
1162 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1164 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_shades);
1166 return E_NOTIMPL;
1169 static HRESULT WINAPI IDirect3DRM3Impl_GetDevices(IDirect3DRM3* iface,
1170 LPDIRECT3DRMDEVICEARRAY* DeviceArray)
1172 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1174 FIXME("(%p/%p)->(%p): stub\n", iface, This, DeviceArray);
1176 return E_NOTIMPL;
1179 static HRESULT WINAPI IDirect3DRM3Impl_GetNamedObject(IDirect3DRM3 *iface,
1180 const char *name, IDirect3DRMObject **object)
1182 FIXME("iface %p, name %s, object %p stub!\n", iface, debugstr_a(name), object);
1184 return E_NOTIMPL;
1187 static HRESULT WINAPI IDirect3DRM3Impl_EnumerateObjects(IDirect3DRM3* iface, D3DRMOBJECTCALLBACK cb,
1188 LPVOID arg)
1190 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1192 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, cb, arg);
1194 return E_NOTIMPL;
1197 static HRESULT load_data(IDirect3DRM3 *iface, IDirectXFileData *data_object, IID **GUIDs, DWORD nb_GUIDs, D3DRMLOADCALLBACK LoadProc,
1198 void *ArgLP, D3DRMLOADTEXTURECALLBACK LoadTextureProc, void *ArgLTP, IDirect3DRMFrame3 *parent_frame)
1200 HRESULT ret = D3DRMERR_BADOBJECT;
1201 HRESULT hr;
1202 const GUID* guid;
1203 DWORD i;
1204 BOOL requested = FALSE;
1206 hr = IDirectXFileData_GetType(data_object, &guid);
1207 if (hr != DXFILE_OK)
1208 goto end;
1210 TRACE("Found object type whose GUID = %s\n", debugstr_guid(guid));
1212 /* Load object only if it is top level and requested or if it is part of another object */
1214 if (IsEqualGUID(guid, &TID_D3DRMMesh))
1216 TRACE("Found TID_D3DRMMesh\n");
1218 for (i = 0; i < nb_GUIDs; i++)
1219 if (IsEqualGUID(GUIDs[i], &IID_IDirect3DRMMeshBuilder) ||
1220 IsEqualGUID(GUIDs[i], &IID_IDirect3DRMMeshBuilder2) ||
1221 IsEqualGUID(GUIDs[i], &IID_IDirect3DRMMeshBuilder3))
1223 requested = TRUE;
1224 break;
1227 if (requested || parent_frame)
1229 IDirect3DRMMeshBuilder3 *meshbuilder;
1231 TRACE("Load mesh data\n");
1233 hr = IDirect3DRM3_CreateMeshBuilder(iface, &meshbuilder);
1234 if (SUCCEEDED(hr))
1236 hr = load_mesh_data(meshbuilder, data_object, LoadTextureProc, ArgLTP);
1237 if (SUCCEEDED(hr))
1239 /* Only top level objects are notified */
1240 if (!parent_frame)
1242 IDirect3DRMObject *object;
1244 hr = IDirect3DRMMeshBuilder3_QueryInterface(meshbuilder, GUIDs[i], (void**)&object);
1245 if (SUCCEEDED(hr))
1247 LoadProc(object, GUIDs[i], ArgLP);
1248 IDirect3DRMObject_Release(object);
1251 else
1253 IDirect3DRMFrame3_AddVisual(parent_frame, (IUnknown*)meshbuilder);
1256 IDirect3DRMMeshBuilder3_Release(meshbuilder);
1259 if (FAILED(hr))
1260 ERR("Cannot process mesh\n");
1263 else if (IsEqualGUID(guid, &TID_D3DRMFrame))
1265 TRACE("Found TID_D3DRMFrame\n");
1267 for (i = 0; i < nb_GUIDs; i++)
1268 if (IsEqualGUID(GUIDs[i], &IID_IDirect3DRMFrame) ||
1269 IsEqualGUID(GUIDs[i], &IID_IDirect3DRMFrame2) ||
1270 IsEqualGUID(GUIDs[i], &IID_IDirect3DRMFrame3))
1272 requested = TRUE;
1273 break;
1276 if (requested || parent_frame)
1278 IDirect3DRMFrame3 *frame;
1280 TRACE("Load frame data\n");
1282 hr = IDirect3DRM3_CreateFrame(iface, parent_frame, &frame);
1283 if (SUCCEEDED(hr))
1285 IDirectXFileObject *child;
1287 while (SUCCEEDED(hr = IDirectXFileData_GetNextObject(data_object, &child)))
1289 IDirectXFileData *data;
1290 IDirectXFileDataReference *reference;
1291 IDirectXFileBinary *binary;
1293 hr = IDirectXFileObject_QueryInterface(child, &IID_IDirectXFileBinary, (void **)&binary);
1294 if (SUCCEEDED(hr))
1296 FIXME("Binary Object not supported yet\n");
1297 IDirectXFileBinary_Release(binary);
1298 continue;
1301 hr = IDirectXFileObject_QueryInterface(child, &IID_IDirectXFileData, (void **)&data);
1302 if (SUCCEEDED(hr))
1304 TRACE("Found Data Object\n");
1305 hr = load_data(iface, data, GUIDs, nb_GUIDs, LoadProc, ArgLP, LoadTextureProc, ArgLTP, frame);
1306 IDirectXFileData_Release(data);
1307 continue;
1309 hr = IDirectXFileObject_QueryInterface(child, &IID_IDirectXFileDataReference, (void **)&reference);
1310 if (SUCCEEDED(hr))
1312 TRACE("Found Data Object Reference\n");
1313 IDirectXFileDataReference_Resolve(reference, &data);
1314 hr = load_data(iface, data, GUIDs, nb_GUIDs, LoadProc, ArgLP, LoadTextureProc, ArgLTP, frame);
1315 IDirectXFileData_Release(data);
1316 IDirectXFileDataReference_Release(reference);
1317 continue;
1321 if (hr != DXFILEERR_NOMOREOBJECTS)
1323 IDirect3DRMFrame3_Release(frame);
1324 goto end;
1326 hr = S_OK;
1328 /* Only top level objects are notified */
1329 if (!parent_frame)
1331 IDirect3DRMObject *object;
1333 hr = IDirect3DRMFrame3_QueryInterface(frame, GUIDs[i], (void**)&object);
1334 if (SUCCEEDED(hr))
1336 LoadProc(object, GUIDs[i], ArgLP);
1337 IDirect3DRMObject_Release(object);
1340 IDirect3DRMFrame3_Release(frame);
1343 if (FAILED(hr))
1344 ERR("Cannot process frame\n");
1347 else if (IsEqualGUID(guid, &TID_D3DRMMaterial))
1349 TRACE("Found TID_D3DRMMaterial\n");
1351 /* Cannot be requested so nothing to do */
1353 else if (IsEqualGUID(guid, &TID_D3DRMFrameTransformMatrix))
1355 TRACE("Found TID_D3DRMFrameTransformMatrix\n");
1357 /* Cannot be requested */
1358 if (parent_frame)
1360 D3DRMMATRIX4D matrix;
1361 DWORD size;
1363 TRACE("Load Frame Transform Matrix data\n");
1365 size = sizeof(matrix);
1366 hr = IDirectXFileData_GetData(data_object, NULL, &size, (void**)matrix);
1367 if ((hr != DXFILE_OK) || (size != sizeof(matrix)))
1368 goto end;
1370 hr = IDirect3DRMFrame3_AddTransform(parent_frame, D3DRMCOMBINE_REPLACE, matrix);
1371 if (FAILED(hr))
1372 goto end;
1375 else
1377 FIXME("Found unknown TID %s\n", debugstr_guid(guid));
1380 ret = D3DRM_OK;
1382 end:
1384 return ret;
1387 static HRESULT WINAPI IDirect3DRM3Impl_Load(IDirect3DRM3 *iface, void *source, void *object_id, IID **iids,
1388 DWORD iid_count, D3DRMLOADOPTIONS flags, D3DRMLOADCALLBACK load_cb, void *load_ctx,
1389 D3DRMLOADTEXTURECALLBACK load_tex_cb, void *load_tex_ctx, IDirect3DRMFrame3 *parent_frame)
1391 DXFILELOADOPTIONS load_options;
1392 LPDIRECTXFILE pDXFile = NULL;
1393 LPDIRECTXFILEENUMOBJECT pEnumObject = NULL;
1394 LPDIRECTXFILEDATA pData = NULL;
1395 HRESULT hr;
1396 const GUID* pGuid;
1397 DWORD size;
1398 Header* pHeader;
1399 HRESULT ret = D3DRMERR_BADOBJECT;
1400 DWORD i;
1402 TRACE("iface %p, source %p, object_id %p, iids %p, iid_count %u, flags %#x, "
1403 "load_cb %p, load_ctx %p, load_tex_cb %p, load_tex_ctx %p, parent_frame %p.\n",
1404 iface, source, object_id, iids, iid_count, flags,
1405 load_cb, load_ctx, load_tex_cb, load_tex_ctx, parent_frame);
1407 TRACE("Looking for GUIDs:\n");
1408 for (i = 0; i < iid_count; ++i)
1409 TRACE("- %s (%s)\n", debugstr_guid(iids[i]), get_IID_string(iids[i]));
1411 if (flags == D3DRMLOAD_FROMMEMORY)
1413 load_options = DXFILELOAD_FROMMEMORY;
1415 else if (flags == D3DRMLOAD_FROMFILE)
1417 load_options = DXFILELOAD_FROMFILE;
1418 TRACE("Loading from file %s\n", debugstr_a(source));
1420 else
1422 FIXME("Load options %#x not supported yet.\n", flags);
1423 return E_NOTIMPL;
1426 hr = DirectXFileCreate(&pDXFile);
1427 if (hr != DXFILE_OK)
1428 goto end;
1430 hr = IDirectXFile_RegisterTemplates(pDXFile, templates, strlen(templates));
1431 if (hr != DXFILE_OK)
1432 goto end;
1434 hr = IDirectXFile_CreateEnumObject(pDXFile, source, load_options, &pEnumObject);
1435 if (hr != DXFILE_OK)
1436 goto end;
1438 hr = IDirectXFileEnumObject_GetNextDataObject(pEnumObject, &pData);
1439 if (hr != DXFILE_OK)
1440 goto end;
1442 hr = IDirectXFileData_GetType(pData, &pGuid);
1443 if (hr != DXFILE_OK)
1444 goto end;
1446 TRACE("Found object type whose GUID = %s\n", debugstr_guid(pGuid));
1448 if (!IsEqualGUID(pGuid, &TID_DXFILEHeader))
1450 ret = D3DRMERR_BADFILE;
1451 goto end;
1454 hr = IDirectXFileData_GetData(pData, NULL, &size, (void**)&pHeader);
1455 if ((hr != DXFILE_OK) || (size != sizeof(Header)))
1456 goto end;
1458 TRACE("Version is %d %d %d\n", pHeader->major, pHeader->minor, pHeader->flags);
1460 /* Version must be 1.0.x */
1461 if ((pHeader->major != 1) || (pHeader->minor != 0))
1463 ret = D3DRMERR_BADFILE;
1464 goto end;
1467 IDirectXFileData_Release(pData);
1468 pData = NULL;
1470 while (1)
1472 hr = IDirectXFileEnumObject_GetNextDataObject(pEnumObject, &pData);
1473 if (hr == DXFILEERR_NOMOREOBJECTS)
1475 TRACE("No more object\n");
1476 break;
1478 else if (hr != DXFILE_OK)
1480 ret = D3DRMERR_BADFILE;
1481 goto end;
1484 ret = load_data(iface, pData, iids, iid_count, load_cb, load_ctx, load_tex_cb, load_tex_ctx, parent_frame);
1485 if (ret != D3DRM_OK)
1486 goto end;
1488 IDirectXFileData_Release(pData);
1489 pData = NULL;
1492 ret = D3DRM_OK;
1494 end:
1495 if (pData)
1496 IDirectXFileData_Release(pData);
1497 if (pEnumObject)
1498 IDirectXFileEnumObject_Release(pEnumObject);
1499 if (pDXFile)
1500 IDirectXFile_Release(pDXFile);
1502 return ret;
1505 static HRESULT WINAPI IDirect3DRM3Impl_Tick(IDirect3DRM3* iface, D3DVALUE tick)
1507 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1509 FIXME("(%p/%p)->(%f): stub\n", iface, This, tick);
1511 return E_NOTIMPL;
1514 static HRESULT WINAPI IDirect3DRM3Impl_CreateProgressiveMesh(IDirect3DRM3* iface,
1515 LPDIRECT3DRMPROGRESSIVEMESH Mesh)
1517 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1519 FIXME("(%p/%p)->(%p): stub\n", iface, This, Mesh);
1521 return E_NOTIMPL;
1524 static HRESULT WINAPI IDirect3DRM3Impl_RegisterClient(IDirect3DRM3* iface, REFGUID rguid,
1525 LPDWORD id)
1527 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1529 FIXME("(%p/%p)->(%s, %p): stub\n", iface, This, debugstr_guid(rguid), id);
1531 return E_NOTIMPL;
1534 static HRESULT WINAPI IDirect3DRM3Impl_UnregisterClient(IDirect3DRM3* iface, REFGUID rguid)
1536 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1538 FIXME("(%p/%p)->(%s): stub\n", iface, This, debugstr_guid(rguid));
1540 return E_NOTIMPL;
1543 static HRESULT WINAPI IDirect3DRM3Impl_CreateClippedVisual(IDirect3DRM3 *iface,
1544 IDirect3DRMVisual *visual, IDirect3DRMClippedVisual **clipped_visual)
1546 FIXME("iface %p, visual %p, clipped_visual %p stub!\n", iface, visual, clipped_visual);
1548 return E_NOTIMPL;
1551 static HRESULT WINAPI IDirect3DRM3Impl_SetOptions(IDirect3DRM3* iface, DWORD opt)
1553 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1555 FIXME("(%p/%p)->(%d): stub\n", iface, This, opt);
1557 return E_NOTIMPL;
1560 static HRESULT WINAPI IDirect3DRM3Impl_GetOptions(IDirect3DRM3* iface, LPDWORD opt)
1562 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1564 FIXME("(%p/%p)->(%p): stub\n", iface, This, opt);
1566 return E_NOTIMPL;
1569 static const struct IDirect3DRM3Vtbl Direct3DRM3_Vtbl =
1571 IDirect3DRM3Impl_QueryInterface,
1572 IDirect3DRM3Impl_AddRef,
1573 IDirect3DRM3Impl_Release,
1574 IDirect3DRM3Impl_CreateObject,
1575 IDirect3DRM3Impl_CreateFrame,
1576 IDirect3DRM3Impl_CreateMesh,
1577 IDirect3DRM3Impl_CreateMeshBuilder,
1578 IDirect3DRM3Impl_CreateFace,
1579 IDirect3DRM3Impl_CreateAnimation,
1580 IDirect3DRM3Impl_CreateAnimationSet,
1581 IDirect3DRM3Impl_CreateTexture,
1582 IDirect3DRM3Impl_CreateLight,
1583 IDirect3DRM3Impl_CreateLightRGB,
1584 IDirect3DRM3Impl_CreateMaterial,
1585 IDirect3DRM3Impl_CreateDevice,
1586 IDirect3DRM3Impl_CreateDeviceFromSurface,
1587 IDirect3DRM3Impl_CreateDeviceFromD3D,
1588 IDirect3DRM3Impl_CreateDeviceFromClipper,
1589 IDirect3DRM3Impl_CreateTextureFromSurface,
1590 IDirect3DRM3Impl_CreateShadow,
1591 IDirect3DRM3Impl_CreateViewport,
1592 IDirect3DRM3Impl_CreateWrap,
1593 IDirect3DRM3Impl_CreateUserVisual,
1594 IDirect3DRM3Impl_LoadTexture,
1595 IDirect3DRM3Impl_LoadTextureFromResource,
1596 IDirect3DRM3Impl_SetSearchPath,
1597 IDirect3DRM3Impl_AddSearchPath,
1598 IDirect3DRM3Impl_GetSearchPath,
1599 IDirect3DRM3Impl_SetDefaultTextureColors,
1600 IDirect3DRM3Impl_SetDefaultTextureShades,
1601 IDirect3DRM3Impl_GetDevices,
1602 IDirect3DRM3Impl_GetNamedObject,
1603 IDirect3DRM3Impl_EnumerateObjects,
1604 IDirect3DRM3Impl_Load,
1605 IDirect3DRM3Impl_Tick,
1606 IDirect3DRM3Impl_CreateProgressiveMesh,
1607 IDirect3DRM3Impl_RegisterClient,
1608 IDirect3DRM3Impl_UnregisterClient,
1609 IDirect3DRM3Impl_CreateClippedVisual,
1610 IDirect3DRM3Impl_SetOptions,
1611 IDirect3DRM3Impl_GetOptions
1614 HRESULT WINAPI Direct3DRMCreate(IDirect3DRM **d3drm)
1616 IDirect3DRMImpl *object;
1618 TRACE("d3drm %p.\n", d3drm);
1620 if (!(object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object))))
1621 return E_OUTOFMEMORY;
1623 object->IDirect3DRM_iface.lpVtbl = &Direct3DRM_Vtbl;
1624 object->IDirect3DRM2_iface.lpVtbl = &Direct3DRM2_Vtbl;
1625 object->IDirect3DRM3_iface.lpVtbl = &Direct3DRM3_Vtbl;
1626 object->ref = 1;
1628 *d3drm = &object->IDirect3DRM_iface;
1630 return S_OK;