d3drm: Avoid LPDIRECT3DRMANIMATIONSET.
[wine/multimedia.git] / dlls / d3drm / d3drm.c
blobde6945b7e8eedc1e055c93fac4af2153b137c615
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, IDirect3DRMAnimation **animation)
173 FIXME("iface %p, animation %p stub!\n", iface, animation);
175 return E_NOTIMPL;
178 static HRESULT WINAPI IDirect3DRMImpl_CreateAnimationSet(IDirect3DRM *iface, IDirect3DRMAnimationSet **set)
180 FIXME("iface %p, set %p stub!\n", iface, set);
182 return E_NOTIMPL;
185 static HRESULT WINAPI IDirect3DRMImpl_CreateTexture(IDirect3DRM *iface,
186 D3DRMIMAGE *image, IDirect3DRMTexture **texture)
188 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
190 FIXME("(%p/%p)->(%p,%p): partial stub\n", iface, This, image, texture);
192 return Direct3DRMTexture_create(&IID_IDirect3DRMTexture, (IUnknown **)texture);
195 static HRESULT WINAPI IDirect3DRMImpl_CreateLight(IDirect3DRM *iface,
196 D3DRMLIGHTTYPE type, D3DCOLOR color, IDirect3DRMLight **light)
198 IDirect3DRMImpl *d3drm = impl_from_IDirect3DRM(iface);
200 TRACE("iface %p, type %#x, color 0x%08x, light %p.\n", iface, type, color, light);
202 return IDirect3DRM3_CreateLight(&d3drm->IDirect3DRM3_iface, type, color, light);
205 static HRESULT WINAPI IDirect3DRMImpl_CreateLightRGB(IDirect3DRM *iface, D3DRMLIGHTTYPE type,
206 D3DVALUE red, D3DVALUE green, D3DVALUE blue, IDirect3DRMLight **light)
208 IDirect3DRMImpl *d3drm = impl_from_IDirect3DRM(iface);
210 TRACE("iface %p, type %#x, red %.8e, green %.8e, blue %.8e, light %p.\n",
211 iface, type, red, green, blue, light);
213 return IDirect3DRM3_CreateLightRGB(&d3drm->IDirect3DRM3_iface, type, red, green, blue, light);
216 static HRESULT WINAPI IDirect3DRMImpl_CreateMaterial(IDirect3DRM *iface,
217 D3DVALUE power, IDirect3DRMMaterial **material)
219 IDirect3DRMImpl *d3drm = impl_from_IDirect3DRM(iface);
221 TRACE("iface %p, power %.8e, material %p.\n", iface, power, material);
223 return IDirect3DRM3_CreateMaterial(&d3drm->IDirect3DRM3_iface, power, (IDirect3DRMMaterial2 **)material);
226 static HRESULT WINAPI IDirect3DRMImpl_CreateDevice(IDirect3DRM *iface,
227 DWORD width, DWORD height, IDirect3DRMDevice **device)
229 FIXME("iface %p, width %u, height %u, device %p partial stub!\n", iface, width, height, device);
231 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice, (IUnknown **)device);
234 static HRESULT WINAPI IDirect3DRMImpl_CreateDeviceFromSurface(IDirect3DRM *iface, GUID *pGUID,
235 IDirectDraw *pDD, IDirectDrawSurface *pDDSBack, IDirect3DRMDevice **ppDevice)
237 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
239 FIXME("(%p/%p)->(%s,%p,%p,%p): partial stub\n", iface, This, debugstr_guid(pGUID), pDD,
240 pDDSBack, ppDevice);
242 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice, (IUnknown**)ppDevice);
245 static HRESULT WINAPI IDirect3DRMImpl_CreateDeviceFromD3D(IDirect3DRM *iface,
246 IDirect3D *pD3D, IDirect3DDevice *pD3DDev, IDirect3DRMDevice **ppDevice)
248 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
250 FIXME("(%p/%p)->(%p,%p,%p): partial stub\n", iface, This, pD3D, pD3DDev, ppDevice);
252 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice, (IUnknown**)ppDevice);
255 static HRESULT WINAPI IDirect3DRMImpl_CreateDeviceFromClipper(IDirect3DRM *iface,
256 IDirectDrawClipper *pDDClipper, GUID *pGUID, int width, int height,
257 IDirect3DRMDevice **ppDevice)
259 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
261 FIXME("(%p/%p)->(%p,%s,%d,%d,%p): partial stub\n", iface, This, pDDClipper,
262 debugstr_guid(pGUID), width, height, ppDevice);
264 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice, (IUnknown**)ppDevice);
267 static HRESULT WINAPI IDirect3DRMImpl_CreateTextureFromSurface(IDirect3DRM *iface,
268 IDirectDrawSurface *pDDS, IDirect3DRMTexture **ppTexture)
270 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
272 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, pDDS, ppTexture);
274 return E_NOTIMPL;
277 static HRESULT WINAPI IDirect3DRMImpl_CreateShadow(IDirect3DRM *iface, IDirect3DRMVisual *visual,
278 IDirect3DRMLight *light, D3DVALUE px, D3DVALUE py, D3DVALUE pz, D3DVALUE nx, D3DVALUE ny, D3DVALUE nz,
279 IDirect3DRMVisual **shadow)
281 FIXME("iface %p, visual %p, light %p, px %.8e, py %.8e, pz %.8e, nx %.8e, ny %.8e, nz %.8e, shadow %p stub!\n",
282 iface, visual, light, px, py, pz, nx, ny, nz, shadow);
284 return E_NOTIMPL;
287 static HRESULT WINAPI IDirect3DRMImpl_CreateViewport(IDirect3DRM *iface, IDirect3DRMDevice *device,
288 IDirect3DRMFrame *camera, DWORD x, DWORD y, DWORD width, DWORD height, IDirect3DRMViewport **viewport)
290 FIXME("iface %p, device %p, camera %p, x %u, y %u, width %u, height %u, viewport %p partial stub!\n",
291 iface, device, camera, x, y, width, height, viewport);
293 return Direct3DRMViewport_create(&IID_IDirect3DRMViewport, (IUnknown **)viewport);
296 static HRESULT WINAPI IDirect3DRMImpl_CreateWrap(IDirect3DRM *iface, D3DRMWRAPTYPE type, IDirect3DRMFrame *frame,
297 D3DVALUE ox, D3DVALUE oy, D3DVALUE oz, D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
298 D3DVALUE ux, D3DVALUE uy, D3DVALUE uz, D3DVALUE ou, D3DVALUE ov, D3DVALUE su, D3DVALUE sv,
299 IDirect3DRMWrap **wrap)
301 FIXME("iface %p, type %#x, frame %p, ox %.8e, oy %.8e, oz %.8e, dx %.8e, dy %.8e, dz %.8e, "
302 "ux %.8e, uy %.8e, uz %.8e, ou %.8e, ov %.8e, su %.8e, sv %.8e, wrap %p stub!\n",
303 iface, type, frame, ox, oy, oz, dx, dy, dz, ux, uy, uz, ou, ov, su, sv, wrap);
305 return E_NOTIMPL;
308 static HRESULT WINAPI IDirect3DRMImpl_CreateUserVisual(IDirect3DRM* iface, D3DRMUSERVISUALCALLBACK cb, LPVOID pArg, LPDIRECT3DRMUSERVISUAL * ppUserVisual)
310 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
312 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, cb, pArg, ppUserVisual);
314 return E_NOTIMPL;
317 static HRESULT WINAPI IDirect3DRMImpl_LoadTexture(IDirect3DRM *iface,
318 const char *filename, IDirect3DRMTexture **texture)
320 FIXME("iface %p, filename %s, texture %p stub!\n", iface, debugstr_a(filename), texture);
322 return Direct3DRMTexture_create(&IID_IDirect3DRMTexture, (IUnknown **)texture);
325 static HRESULT WINAPI IDirect3DRMImpl_LoadTextureFromResource(IDirect3DRM *iface,
326 HRSRC resource, IDirect3DRMTexture **texture)
328 FIXME("iface %p, resource %p, texture %p stub!\n", iface, resource, texture);
330 return Direct3DRMTexture_create(&IID_IDirect3DRMTexture, (IUnknown **)texture);
333 static HRESULT WINAPI IDirect3DRMImpl_SetSearchPath(IDirect3DRM* iface, LPCSTR path)
335 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
337 FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
339 return E_NOTIMPL;
342 static HRESULT WINAPI IDirect3DRMImpl_AddSearchPath(IDirect3DRM* iface, LPCSTR path)
344 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
346 FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
348 return E_NOTIMPL;
351 static HRESULT WINAPI IDirect3DRMImpl_GetSearchPath(IDirect3DRM* iface, DWORD *size_return, LPSTR path_return)
353 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
355 FIXME("(%p/%p)->(%p,%s): stub\n", iface, This, size_return, path_return);
357 return E_NOTIMPL;
360 static HRESULT WINAPI IDirect3DRMImpl_SetDefaultTextureColors(IDirect3DRM* iface, DWORD nb_colors)
362 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
364 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_colors);
366 return E_NOTIMPL;
369 static HRESULT WINAPI IDirect3DRMImpl_SetDefaultTextureShades(IDirect3DRM* iface, DWORD nb_shades)
371 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
373 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_shades);
375 return E_NOTIMPL;
378 static HRESULT WINAPI IDirect3DRMImpl_GetDevices(IDirect3DRM* iface, LPDIRECT3DRMDEVICEARRAY * ppDeviceArray)
380 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
382 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppDeviceArray);
384 return E_NOTIMPL;
387 static HRESULT WINAPI IDirect3DRMImpl_GetNamedObject(IDirect3DRM *iface,
388 const char *name, IDirect3DRMObject **object)
390 FIXME("iface %p, name %s, object %p stub!\n", iface, debugstr_a(name), object);
392 return E_NOTIMPL;
395 static HRESULT WINAPI IDirect3DRMImpl_EnumerateObjects(IDirect3DRM* iface, D3DRMOBJECTCALLBACK cb, LPVOID pArg)
397 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
399 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, cb, pArg);
401 return E_NOTIMPL;
404 static HRESULT WINAPI IDirect3DRMImpl_Load(IDirect3DRM *iface, void *source, void *object_id, IID **iids,
405 DWORD iid_count, D3DRMLOADOPTIONS flags, D3DRMLOADCALLBACK load_cb, void *load_ctx,
406 D3DRMLOADTEXTURECALLBACK load_tex_cb, void *load_tex_ctx, IDirect3DRMFrame *parent_frame)
408 IDirect3DRMImpl *d3drm = impl_from_IDirect3DRM(iface);
409 IDirect3DRMFrame3 *parent_frame3 = NULL;
410 HRESULT hr = D3DRM_OK;
412 TRACE("iface %p, source %p, object_id %p, iids %p, iid_count %u, flags %#x, "
413 "load_cb %p, load_ctx %p, load_tex_cb %p, load_tex_ctx %p, parent_frame %p.\n",
414 iface, source, object_id, iids, iid_count, flags,
415 load_cb, load_ctx, load_tex_cb, load_tex_ctx, parent_frame);
417 if (parent_frame)
418 hr = IDirect3DRMFrame_QueryInterface(parent_frame, &IID_IDirect3DRMFrame3, (void **)&parent_frame3);
419 if (SUCCEEDED(hr))
420 hr = IDirect3DRM3_Load(&d3drm->IDirect3DRM3_iface, source, object_id, iids, iid_count,
421 flags, load_cb, load_ctx, load_tex_cb, load_tex_ctx, parent_frame3);
422 if (parent_frame3)
423 IDirect3DRMFrame3_Release(parent_frame3);
425 return hr;
428 static HRESULT WINAPI IDirect3DRMImpl_Tick(IDirect3DRM* iface, D3DVALUE tick)
430 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
432 FIXME("(%p/%p)->(%f): stub\n", iface, This, tick);
434 return E_NOTIMPL;
437 static const struct IDirect3DRMVtbl Direct3DRM_Vtbl =
439 IDirect3DRMImpl_QueryInterface,
440 IDirect3DRMImpl_AddRef,
441 IDirect3DRMImpl_Release,
442 IDirect3DRMImpl_CreateObject,
443 IDirect3DRMImpl_CreateFrame,
444 IDirect3DRMImpl_CreateMesh,
445 IDirect3DRMImpl_CreateMeshBuilder,
446 IDirect3DRMImpl_CreateFace,
447 IDirect3DRMImpl_CreateAnimation,
448 IDirect3DRMImpl_CreateAnimationSet,
449 IDirect3DRMImpl_CreateTexture,
450 IDirect3DRMImpl_CreateLight,
451 IDirect3DRMImpl_CreateLightRGB,
452 IDirect3DRMImpl_CreateMaterial,
453 IDirect3DRMImpl_CreateDevice,
454 IDirect3DRMImpl_CreateDeviceFromSurface,
455 IDirect3DRMImpl_CreateDeviceFromD3D,
456 IDirect3DRMImpl_CreateDeviceFromClipper,
457 IDirect3DRMImpl_CreateTextureFromSurface,
458 IDirect3DRMImpl_CreateShadow,
459 IDirect3DRMImpl_CreateViewport,
460 IDirect3DRMImpl_CreateWrap,
461 IDirect3DRMImpl_CreateUserVisual,
462 IDirect3DRMImpl_LoadTexture,
463 IDirect3DRMImpl_LoadTextureFromResource,
464 IDirect3DRMImpl_SetSearchPath,
465 IDirect3DRMImpl_AddSearchPath,
466 IDirect3DRMImpl_GetSearchPath,
467 IDirect3DRMImpl_SetDefaultTextureColors,
468 IDirect3DRMImpl_SetDefaultTextureShades,
469 IDirect3DRMImpl_GetDevices,
470 IDirect3DRMImpl_GetNamedObject,
471 IDirect3DRMImpl_EnumerateObjects,
472 IDirect3DRMImpl_Load,
473 IDirect3DRMImpl_Tick
477 /*** IUnknown methods ***/
478 static HRESULT WINAPI IDirect3DRM2Impl_QueryInterface(IDirect3DRM2* iface, REFIID riid,
479 void** ppvObject)
481 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
482 return IDirect3DRM_QueryInterface(&This->IDirect3DRM_iface, riid, ppvObject);
485 static ULONG WINAPI IDirect3DRM2Impl_AddRef(IDirect3DRM2* iface)
487 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
488 return IDirect3DRM_AddRef(&This->IDirect3DRM_iface);
491 static ULONG WINAPI IDirect3DRM2Impl_Release(IDirect3DRM2* iface)
493 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
494 return IDirect3DRM_Release(&This->IDirect3DRM_iface);
497 /*** IDirect3DRM2 methods ***/
498 static HRESULT WINAPI IDirect3DRM2Impl_CreateObject(IDirect3DRM2* iface, REFCLSID rclsid,
499 LPUNKNOWN pUnkOuter, REFIID riid,
500 LPVOID *ppvObj)
502 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
504 FIXME("(%p/%p)->(%s,%p,%s,%p): stub\n", iface, This, debugstr_guid(rclsid), pUnkOuter,
505 debugstr_guid(riid), ppvObj);
507 return E_NOTIMPL;
510 static HRESULT WINAPI IDirect3DRM2Impl_CreateFrame(IDirect3DRM2 *iface,
511 IDirect3DRMFrame *parent_frame, IDirect3DRMFrame2 **frame)
513 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
515 TRACE("(%p/%p)->(%p,%p)\n", iface, This, parent_frame, frame);
517 return Direct3DRMFrame_create(&IID_IDirect3DRMFrame2, (IUnknown*)parent_frame, (IUnknown**)frame);
520 static HRESULT WINAPI IDirect3DRM2Impl_CreateMesh(IDirect3DRM2 *iface, IDirect3DRMMesh **mesh)
522 IDirect3DRMImpl *d3drm = impl_from_IDirect3DRM2(iface);
524 TRACE("iface %p, mesh %p.\n", iface, mesh);
526 return IDirect3DRM3_CreateMesh(&d3drm->IDirect3DRM3_iface, mesh);
529 static HRESULT WINAPI IDirect3DRM2Impl_CreateMeshBuilder(IDirect3DRM2 *iface, IDirect3DRMMeshBuilder2 **mesh_builder)
531 TRACE("iface %p, mesh_builder %p.\n", iface, mesh_builder);
533 return Direct3DRMMeshBuilder_create(&IID_IDirect3DRMMeshBuilder2, (IUnknown **)mesh_builder);
536 static HRESULT WINAPI IDirect3DRM2Impl_CreateFace(IDirect3DRM2 *iface, IDirect3DRMFace **face)
538 TRACE("iface %p, face %p.\n", iface, face);
540 return Direct3DRMFace_create(&IID_IDirect3DRMFace, (IUnknown **)face);
543 static HRESULT WINAPI IDirect3DRM2Impl_CreateAnimation(IDirect3DRM2 *iface, IDirect3DRMAnimation **animation)
545 FIXME("iface %p, animation %p stub!\n", iface, animation);
547 return E_NOTIMPL;
550 static HRESULT WINAPI IDirect3DRM2Impl_CreateAnimationSet(IDirect3DRM2 *iface, IDirect3DRMAnimationSet **set)
552 FIXME("iface %p, set %p stub!\n", iface, set);
554 return E_NOTIMPL;
557 static HRESULT WINAPI IDirect3DRM2Impl_CreateTexture(IDirect3DRM2 *iface,
558 D3DRMIMAGE *image, IDirect3DRMTexture2 **texture)
560 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
562 FIXME("(%p/%p)->(%p,%p): partial stub\n", iface, This, image, texture);
564 return Direct3DRMTexture_create(&IID_IDirect3DRMTexture2, (IUnknown **)texture);
567 static HRESULT WINAPI IDirect3DRM2Impl_CreateLight(IDirect3DRM2 *iface,
568 D3DRMLIGHTTYPE type, D3DCOLOR color, IDirect3DRMLight **light)
570 IDirect3DRMImpl *d3drm = impl_from_IDirect3DRM2(iface);
572 TRACE("iface %p, type %#x, color 0x%08x, light %p.\n", iface, type, color, light);
574 return IDirect3DRM3_CreateLight(&d3drm->IDirect3DRM3_iface, type, color, light);
577 static HRESULT WINAPI IDirect3DRM2Impl_CreateLightRGB(IDirect3DRM2 *iface, D3DRMLIGHTTYPE type,
578 D3DVALUE red, D3DVALUE green, D3DVALUE blue, IDirect3DRMLight **light)
580 IDirect3DRMImpl *d3drm = impl_from_IDirect3DRM2(iface);
582 TRACE("iface %p, type %#x, red %.8e, green %.8e, blue %.8e, light %p.\n",
583 iface, type, red, green, blue, light);
585 return IDirect3DRM3_CreateLightRGB(&d3drm->IDirect3DRM3_iface, type, red, green, blue, light);
588 static HRESULT WINAPI IDirect3DRM2Impl_CreateMaterial(IDirect3DRM2 *iface,
589 D3DVALUE power, IDirect3DRMMaterial **material)
591 IDirect3DRMImpl *d3drm = impl_from_IDirect3DRM2(iface);
593 TRACE("iface %p, power %.8e, material %p.\n", iface, power, material);
595 return IDirect3DRM3_CreateMaterial(&d3drm->IDirect3DRM3_iface, power, (IDirect3DRMMaterial2 **)material);
598 static HRESULT WINAPI IDirect3DRM2Impl_CreateDevice(IDirect3DRM2 *iface,
599 DWORD width, DWORD height, IDirect3DRMDevice2 **device)
601 FIXME("iface %p, width %u, height %u, device %p.\n", iface, width, height, device);
603 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice2, (IUnknown **)device);
606 static HRESULT WINAPI IDirect3DRM2Impl_CreateDeviceFromSurface(IDirect3DRM2 *iface, GUID *pGUID,
607 IDirectDraw *pDD, IDirectDrawSurface *pDDSBack, IDirect3DRMDevice2 **ppDevice)
609 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
611 FIXME("(%p/%p)->(%s,%p,%p,%p): partial stub\n", iface, This, debugstr_guid(pGUID),
612 pDD, pDDSBack, ppDevice);
614 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice2, (IUnknown**)ppDevice);
617 static HRESULT WINAPI IDirect3DRM2Impl_CreateDeviceFromD3D(IDirect3DRM2 *iface,
618 IDirect3D2 *pD3D, IDirect3DDevice2 *pD3DDev, IDirect3DRMDevice2 **ppDevice)
620 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
622 FIXME("(%p/%p)->(%p,%p,%p): partial stub\n", iface, This, pD3D, pD3DDev, ppDevice);
624 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice2, (IUnknown**)ppDevice);
627 static HRESULT WINAPI IDirect3DRM2Impl_CreateDeviceFromClipper(IDirect3DRM2 *iface,
628 IDirectDrawClipper *pDDClipper, GUID *pGUID, int width, int height,
629 IDirect3DRMDevice2 **ppDevice)
631 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
633 FIXME("(%p/%p)->(%p,%s,%d,%d,%p): partial stub\n", iface, This, pDDClipper,
634 debugstr_guid(pGUID), width, height, ppDevice);
636 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice2, (IUnknown**)ppDevice);
639 static HRESULT WINAPI IDirect3DRM2Impl_CreateTextureFromSurface(IDirect3DRM2 *iface,
640 IDirectDrawSurface *pDDS, IDirect3DRMTexture2 **ppTexture)
642 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
644 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, pDDS, ppTexture);
646 return E_NOTIMPL;
649 static HRESULT WINAPI IDirect3DRM2Impl_CreateShadow(IDirect3DRM2 *iface, IDirect3DRMVisual *visual,
650 IDirect3DRMLight *light, D3DVALUE px, D3DVALUE py, D3DVALUE pz, D3DVALUE nx, D3DVALUE ny, D3DVALUE nz,
651 IDirect3DRMVisual **shadow)
653 FIXME("iface %p, visual %p, light %p, px %.8e, py %.8e, pz %.8e, nx %.8e, ny %.8e, nz %.8e, shadow %p stub!\n",
654 iface, visual, light, px, py, pz, nx, ny, nz, shadow);
656 return E_NOTIMPL;
659 static HRESULT WINAPI IDirect3DRM2Impl_CreateViewport(IDirect3DRM2 *iface, IDirect3DRMDevice *device,
660 IDirect3DRMFrame *camera, DWORD x, DWORD y, DWORD width, DWORD height, IDirect3DRMViewport **viewport)
662 FIXME("iface %p, device %p, camera %p, x %u, y %u, width %u, height %u, viewport %p partial stub!\n",
663 iface, device, camera, x, y, width, height, viewport);
665 return Direct3DRMViewport_create(&IID_IDirect3DRMViewport, (IUnknown **)viewport);
668 static HRESULT WINAPI IDirect3DRM2Impl_CreateWrap(IDirect3DRM2 *iface, D3DRMWRAPTYPE type, IDirect3DRMFrame *frame,
669 D3DVALUE ox, D3DVALUE oy, D3DVALUE oz, D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
670 D3DVALUE ux, D3DVALUE uy, D3DVALUE uz, D3DVALUE ou, D3DVALUE ov, D3DVALUE su, D3DVALUE sv,
671 IDirect3DRMWrap **wrap)
673 FIXME("iface %p, type %#x, frame %p, ox %.8e, oy %.8e, oz %.8e, dx %.8e, dy %.8e, dz %.8e, "
674 "ux %.8e, uy %.8e, uz %.8e, ou %.8e, ov %.8e, su %.8e, sv %.8e, wrap %p stub!\n",
675 iface, type, frame, ox, oy, oz, dx, dy, dz, ux, uy, uz, ou, ov, su, sv, wrap);
677 return E_NOTIMPL;
680 static HRESULT WINAPI IDirect3DRM2Impl_CreateUserVisual(IDirect3DRM2* iface,
681 D3DRMUSERVISUALCALLBACK cb, LPVOID pArg,
682 LPDIRECT3DRMUSERVISUAL * ppUserVisual)
684 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
686 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, cb, pArg, ppUserVisual);
688 return E_NOTIMPL;
691 static HRESULT WINAPI IDirect3DRM2Impl_LoadTexture(IDirect3DRM2 *iface,
692 const char *filename, IDirect3DRMTexture2 **texture)
694 FIXME("iface %p, filename %s, texture %p stub!\n", iface, debugstr_a(filename), texture);
696 return Direct3DRMTexture_create(&IID_IDirect3DRMTexture2, (IUnknown **)texture);
699 static HRESULT WINAPI IDirect3DRM2Impl_LoadTextureFromResource(IDirect3DRM2 *iface, HMODULE module,
700 const char *resource_name, const char *resource_type, IDirect3DRMTexture2 **texture)
702 FIXME("iface %p, resource_name %s, resource_type %s, texture %p stub!\n",
703 iface, debugstr_a(resource_name), debugstr_a(resource_type), texture);
705 return Direct3DRMTexture_create(&IID_IDirect3DRMTexture2, (IUnknown **)texture);
708 static HRESULT WINAPI IDirect3DRM2Impl_SetSearchPath(IDirect3DRM2* iface, LPCSTR path)
710 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
712 FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
714 return E_NOTIMPL;
717 static HRESULT WINAPI IDirect3DRM2Impl_AddSearchPath(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_GetSearchPath(IDirect3DRM2* iface, DWORD *size_return,
727 LPSTR path_return)
729 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
731 FIXME("(%p/%p)->(%p,%s): stub\n", iface, This, size_return, path_return);
733 return E_NOTIMPL;
736 static HRESULT WINAPI IDirect3DRM2Impl_SetDefaultTextureColors(IDirect3DRM2* iface, DWORD nb_colors)
738 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
740 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_colors);
742 return E_NOTIMPL;
745 static HRESULT WINAPI IDirect3DRM2Impl_SetDefaultTextureShades(IDirect3DRM2* iface, DWORD nb_shades)
747 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
749 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_shades);
751 return E_NOTIMPL;
754 static HRESULT WINAPI IDirect3DRM2Impl_GetDevices(IDirect3DRM2* iface,
755 LPDIRECT3DRMDEVICEARRAY * ppDeviceArray)
757 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
759 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppDeviceArray);
761 return E_NOTIMPL;
764 static HRESULT WINAPI IDirect3DRM2Impl_GetNamedObject(IDirect3DRM2 *iface,
765 const char *name, IDirect3DRMObject **object)
767 FIXME("iface %p, name %s, object %p stub!\n", iface, debugstr_a(name), object);
769 return E_NOTIMPL;
772 static HRESULT WINAPI IDirect3DRM2Impl_EnumerateObjects(IDirect3DRM2* iface, D3DRMOBJECTCALLBACK cb,
773 LPVOID pArg)
775 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
777 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, cb, pArg);
779 return E_NOTIMPL;
782 static HRESULT WINAPI IDirect3DRM2Impl_Load(IDirect3DRM2 *iface, void *source, void *object_id, IID **iids,
783 DWORD iid_count, D3DRMLOADOPTIONS flags, D3DRMLOADCALLBACK load_cb, void *load_ctx,
784 D3DRMLOADTEXTURECALLBACK load_tex_cb, void *load_tex_ctx, IDirect3DRMFrame *parent_frame)
786 IDirect3DRMImpl *d3drm = impl_from_IDirect3DRM2(iface);
787 IDirect3DRMFrame3 *parent_frame3 = NULL;
788 HRESULT hr = D3DRM_OK;
790 TRACE("iface %p, source %p, object_id %p, iids %p, iid_count %u, flags %#x, "
791 "load_cb %p, load_ctx %p, load_tex_cb %p, load_tex_ctx %p, parent_frame %p.\n",
792 iface, source, object_id, iids, iid_count, flags,
793 load_cb, load_ctx, load_tex_cb, load_tex_ctx, parent_frame);
795 if (parent_frame)
796 hr = IDirect3DRMFrame_QueryInterface(parent_frame, &IID_IDirect3DRMFrame3, (void **)&parent_frame3);
797 if (SUCCEEDED(hr))
798 hr = IDirect3DRM3_Load(&d3drm->IDirect3DRM3_iface, source, object_id, iids, iid_count,
799 flags, load_cb, load_ctx, load_tex_cb, load_tex_ctx, parent_frame3);
800 if (parent_frame3)
801 IDirect3DRMFrame3_Release(parent_frame3);
803 return hr;
806 static HRESULT WINAPI IDirect3DRM2Impl_Tick(IDirect3DRM2* iface, D3DVALUE tick)
808 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
810 FIXME("(%p/%p)->(%f): stub\n", iface, This, tick);
812 return E_NOTIMPL;
815 static HRESULT WINAPI IDirect3DRM2Impl_CreateProgressiveMesh(IDirect3DRM2* iface,
816 LPDIRECT3DRMPROGRESSIVEMESH * ppMesh)
818 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
820 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppMesh);
822 return E_NOTIMPL;
825 static const struct IDirect3DRM2Vtbl Direct3DRM2_Vtbl =
827 IDirect3DRM2Impl_QueryInterface,
828 IDirect3DRM2Impl_AddRef,
829 IDirect3DRM2Impl_Release,
830 IDirect3DRM2Impl_CreateObject,
831 IDirect3DRM2Impl_CreateFrame,
832 IDirect3DRM2Impl_CreateMesh,
833 IDirect3DRM2Impl_CreateMeshBuilder,
834 IDirect3DRM2Impl_CreateFace,
835 IDirect3DRM2Impl_CreateAnimation,
836 IDirect3DRM2Impl_CreateAnimationSet,
837 IDirect3DRM2Impl_CreateTexture,
838 IDirect3DRM2Impl_CreateLight,
839 IDirect3DRM2Impl_CreateLightRGB,
840 IDirect3DRM2Impl_CreateMaterial,
841 IDirect3DRM2Impl_CreateDevice,
842 IDirect3DRM2Impl_CreateDeviceFromSurface,
843 IDirect3DRM2Impl_CreateDeviceFromD3D,
844 IDirect3DRM2Impl_CreateDeviceFromClipper,
845 IDirect3DRM2Impl_CreateTextureFromSurface,
846 IDirect3DRM2Impl_CreateShadow,
847 IDirect3DRM2Impl_CreateViewport,
848 IDirect3DRM2Impl_CreateWrap,
849 IDirect3DRM2Impl_CreateUserVisual,
850 IDirect3DRM2Impl_LoadTexture,
851 IDirect3DRM2Impl_LoadTextureFromResource,
852 IDirect3DRM2Impl_SetSearchPath,
853 IDirect3DRM2Impl_AddSearchPath,
854 IDirect3DRM2Impl_GetSearchPath,
855 IDirect3DRM2Impl_SetDefaultTextureColors,
856 IDirect3DRM2Impl_SetDefaultTextureShades,
857 IDirect3DRM2Impl_GetDevices,
858 IDirect3DRM2Impl_GetNamedObject,
859 IDirect3DRM2Impl_EnumerateObjects,
860 IDirect3DRM2Impl_Load,
861 IDirect3DRM2Impl_Tick,
862 IDirect3DRM2Impl_CreateProgressiveMesh
866 /*** IUnknown methods ***/
867 static HRESULT WINAPI IDirect3DRM3Impl_QueryInterface(IDirect3DRM3* iface, REFIID riid,
868 void** ppvObject)
870 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
871 return IDirect3DRM_QueryInterface(&This->IDirect3DRM_iface, riid, ppvObject);
874 static ULONG WINAPI IDirect3DRM3Impl_AddRef(IDirect3DRM3* iface)
876 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
877 return IDirect3DRM_AddRef(&This->IDirect3DRM_iface);
880 static ULONG WINAPI IDirect3DRM3Impl_Release(IDirect3DRM3* iface)
882 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
883 return IDirect3DRM_Release(&This->IDirect3DRM_iface);
886 /*** IDirect3DRM3 methods ***/
887 static HRESULT WINAPI IDirect3DRM3Impl_CreateObject(IDirect3DRM3* iface, REFCLSID rclsid,
888 LPUNKNOWN unkwn, REFIID riid, LPVOID* object)
890 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
892 FIXME("(%p/%p)->(%s,%p,%s,%p): stub\n", iface, This, debugstr_guid(rclsid), unkwn,
893 debugstr_guid(riid), object);
895 return E_NOTIMPL;
898 static HRESULT WINAPI IDirect3DRM3Impl_CreateFrame(IDirect3DRM3 *iface,
899 IDirect3DRMFrame3 *parent, IDirect3DRMFrame3 **frame)
901 TRACE("iface %p, parent %p, frame %p.\n", iface, parent, frame);
903 return Direct3DRMFrame_create(&IID_IDirect3DRMFrame3, (IUnknown *)parent, (IUnknown **)frame);
906 static HRESULT WINAPI IDirect3DRM3Impl_CreateMesh(IDirect3DRM3 *iface, IDirect3DRMMesh **mesh)
908 TRACE("iface %p, mesh %p.\n", iface, mesh);
910 return Direct3DRMMesh_create(mesh);
913 static HRESULT WINAPI IDirect3DRM3Impl_CreateMeshBuilder(IDirect3DRM3 *iface, IDirect3DRMMeshBuilder3 **mesh_builder)
915 TRACE("iface %p, mesh_builder %p.\n", iface, mesh_builder);
917 return Direct3DRMMeshBuilder_create(&IID_IDirect3DRMMeshBuilder3, (IUnknown **)mesh_builder);
920 static HRESULT WINAPI IDirect3DRM3Impl_CreateFace(IDirect3DRM3 *iface, IDirect3DRMFace2 **face)
922 TRACE("iface %p, face %p.\n", iface, face);
924 return Direct3DRMFace_create(&IID_IDirect3DRMFace2, (IUnknown **)face);
927 static HRESULT WINAPI IDirect3DRM3Impl_CreateAnimation(IDirect3DRM3 *iface, IDirect3DRMAnimation2 **animation)
929 FIXME("iface %p, animation %p stub!\n", iface, animation);
931 return E_NOTIMPL;
934 static HRESULT WINAPI IDirect3DRM3Impl_CreateAnimationSet(IDirect3DRM3* iface,
935 LPDIRECT3DRMANIMATIONSET2* AnimationSet)
937 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
939 FIXME("(%p/%p)->(%p): stub\n", iface, This, AnimationSet);
941 return E_NOTIMPL;
944 static HRESULT WINAPI IDirect3DRM3Impl_CreateTexture(IDirect3DRM3 *iface,
945 D3DRMIMAGE *image, IDirect3DRMTexture3 **texture)
947 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
949 FIXME("(%p/%p)->(%p,%p): partial stub\n", iface, This, image, texture);
951 return Direct3DRMTexture_create(&IID_IDirect3DRMTexture3, (IUnknown **)texture);
954 static HRESULT WINAPI IDirect3DRM3Impl_CreateLight(IDirect3DRM3 *iface,
955 D3DRMLIGHTTYPE type, D3DCOLOR color, IDirect3DRMLight **light)
957 HRESULT hr;
959 FIXME("iface %p, type %#x, color 0x%08x, light %p partial stub!\n", iface, type, color, light);
961 if (SUCCEEDED(hr = Direct3DRMLight_create((IUnknown **)light)))
963 IDirect3DRMLight_SetType(*light, type);
964 IDirect3DRMLight_SetColor(*light, color);
967 return hr;
970 static HRESULT WINAPI IDirect3DRM3Impl_CreateLightRGB(IDirect3DRM3 *iface, D3DRMLIGHTTYPE type,
971 D3DVALUE red, D3DVALUE green, D3DVALUE blue, IDirect3DRMLight **light)
973 HRESULT hr;
975 FIXME("iface %p, type %#x, red %.8e, green %.8e, blue %.8e, light %p partial stub!\n",
976 iface, type, red, green, blue, light);
978 if (SUCCEEDED(hr = Direct3DRMLight_create((IUnknown **)light)))
980 IDirect3DRMLight_SetType(*light, type);
981 IDirect3DRMLight_SetColorRGB(*light, red, green, blue);
984 return hr;
987 static HRESULT WINAPI IDirect3DRM3Impl_CreateMaterial(IDirect3DRM3 *iface,
988 D3DVALUE power, IDirect3DRMMaterial2 **material)
990 HRESULT hr;
992 TRACE("iface %p, power %.8e, material %p.\n", iface, power, material);
994 if (SUCCEEDED(hr = Direct3DRMMaterial_create(material)))
995 IDirect3DRMMaterial2_SetPower(*material, power);
997 return hr;
1000 static HRESULT WINAPI IDirect3DRM3Impl_CreateDevice(IDirect3DRM3 *iface,
1001 DWORD width, DWORD height, IDirect3DRMDevice3 **device)
1003 FIXME("iface %p, width %u, height %u, device %p partial stub!\n", iface, width, height, device);
1005 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice3, (IUnknown **)device);
1008 static HRESULT WINAPI IDirect3DRM3Impl_CreateDeviceFromSurface(IDirect3DRM3 *iface, GUID *pGUID,
1009 IDirectDraw *dd, IDirectDrawSurface *back, IDirect3DRMDevice3 **device)
1011 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1013 FIXME("(%p/%p)->(%s,%p,%p,%p): partial stub\n", iface, This, debugstr_guid(pGUID), dd, back, device);
1015 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice3, (IUnknown**)device);
1018 static HRESULT WINAPI IDirect3DRM3Impl_CreateDeviceFromD3D(IDirect3DRM3 *iface,
1019 IDirect3D2 *d3d, IDirect3DDevice2 *d3ddev, IDirect3DRMDevice3 **device)
1021 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1023 FIXME("(%p/%p)->(%p,%p,%p): partial stub\n", iface, This, d3d, d3ddev, device);
1025 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice3, (IUnknown**)device);
1028 static HRESULT WINAPI IDirect3DRM3Impl_CreateDeviceFromClipper(IDirect3DRM3 *iface,
1029 IDirectDrawClipper *clipper, GUID *guid, int width, int height,
1030 IDirect3DRMDevice3 **device)
1032 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1034 FIXME("(%p/%p)->(%p,%s,%d,%d,%p): partial stub\n", iface, This, clipper, debugstr_guid(guid),
1035 width, height, device);
1037 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice3, (IUnknown**)device);
1040 static HRESULT WINAPI IDirect3DRM3Impl_CreateShadow(IDirect3DRM3 *iface, IUnknown *object, IDirect3DRMLight *light,
1041 D3DVALUE px, D3DVALUE py, D3DVALUE pz, D3DVALUE nx, D3DVALUE ny, D3DVALUE nz, IDirect3DRMShadow2 **shadow)
1043 FIXME("iface %p, object %p, light %p, px %.8e, py %.8e, pz %.8e, nx %.8e, ny %.8e, nz %.8e, shadow %p stub!\n",
1044 iface, object, light, px, py, pz, nx, ny, nz, shadow);
1046 return E_NOTIMPL;
1049 static HRESULT WINAPI IDirect3DRM3Impl_CreateTextureFromSurface(IDirect3DRM3 *iface,
1050 IDirectDrawSurface *surface, IDirect3DRMTexture3 **texture)
1052 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1054 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, surface, texture);
1056 return E_NOTIMPL;
1059 static HRESULT WINAPI IDirect3DRM3Impl_CreateViewport(IDirect3DRM3 *iface, IDirect3DRMDevice3 *device,
1060 IDirect3DRMFrame3 *camera, DWORD x, DWORD y, DWORD width, DWORD height, IDirect3DRMViewport2 **viewport)
1062 FIXME("iface %p, device %p, camera %p, x %u, y %u, width %u, height %u, viewport %p partial stub!\n",
1063 iface, device, camera, x, y, width, height, viewport);
1065 return Direct3DRMViewport_create(&IID_IDirect3DRMViewport2, (IUnknown **)viewport);
1068 static HRESULT WINAPI IDirect3DRM3Impl_CreateWrap(IDirect3DRM3 *iface, D3DRMWRAPTYPE type, IDirect3DRMFrame3 *frame,
1069 D3DVALUE ox, D3DVALUE oy, D3DVALUE oz, D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
1070 D3DVALUE ux, D3DVALUE uy, D3DVALUE uz, D3DVALUE ou, D3DVALUE ov, D3DVALUE su, D3DVALUE sv,
1071 IDirect3DRMWrap **wrap)
1073 FIXME("iface %p, type %#x, frame %p, ox %.8e, oy %.8e, oz %.8e, dx %.8e, dy %.8e, dz %.8e, "
1074 "ux %.8e, uy %.8e, uz %.8e, ou %.8e, ov %.8e, su %.8e, sv %.8e, wrap %p stub!\n",
1075 iface, type, frame, ox, oy, oz, dx, dy, dz, ux, uy, uz, ou, ov, su, sv, wrap);
1077 return E_NOTIMPL;
1080 static HRESULT WINAPI IDirect3DRM3Impl_CreateUserVisual(IDirect3DRM3* iface,
1081 D3DRMUSERVISUALCALLBACK cb, LPVOID arg,
1082 LPDIRECT3DRMUSERVISUAL* UserVisual)
1084 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1086 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, cb, arg, UserVisual);
1088 return E_NOTIMPL;
1091 static HRESULT WINAPI IDirect3DRM3Impl_LoadTexture(IDirect3DRM3 *iface,
1092 const char *filename, IDirect3DRMTexture3 **texture)
1094 FIXME("iface %p, filename %s, texture %p stub!\n", iface, debugstr_a(filename), texture);
1096 return Direct3DRMTexture_create(&IID_IDirect3DRMTexture3, (IUnknown **)texture);
1099 static HRESULT WINAPI IDirect3DRM3Impl_LoadTextureFromResource(IDirect3DRM3 *iface, HMODULE module,
1100 const char *resource_name, const char *resource_type, IDirect3DRMTexture3 **texture)
1102 FIXME("iface %p, module %p, resource_name %s, resource_type %s, texture %p stub!\n",
1103 iface, module, debugstr_a(resource_name), debugstr_a(resource_type), texture);
1105 return Direct3DRMTexture_create(&IID_IDirect3DRMTexture3, (IUnknown **)texture);
1108 static HRESULT WINAPI IDirect3DRM3Impl_SetSearchPath(IDirect3DRM3* iface, LPCSTR path)
1110 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1112 FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
1114 return E_NOTIMPL;
1117 static HRESULT WINAPI IDirect3DRM3Impl_AddSearchPath(IDirect3DRM3* iface, LPCSTR path)
1119 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1121 FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
1123 return E_NOTIMPL;
1126 static HRESULT WINAPI IDirect3DRM3Impl_GetSearchPath(IDirect3DRM3* iface, DWORD* size_return,
1127 LPSTR path_return)
1129 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1131 FIXME("(%p/%p)->(%p,%s): stub\n", iface, This, size_return, path_return);
1133 return E_NOTIMPL;
1136 static HRESULT WINAPI IDirect3DRM3Impl_SetDefaultTextureColors(IDirect3DRM3* iface, DWORD nb_colors)
1138 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1140 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_colors);
1142 return E_NOTIMPL;
1145 static HRESULT WINAPI IDirect3DRM3Impl_SetDefaultTextureShades(IDirect3DRM3* iface, DWORD nb_shades)
1147 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1149 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_shades);
1151 return E_NOTIMPL;
1154 static HRESULT WINAPI IDirect3DRM3Impl_GetDevices(IDirect3DRM3* iface,
1155 LPDIRECT3DRMDEVICEARRAY* DeviceArray)
1157 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1159 FIXME("(%p/%p)->(%p): stub\n", iface, This, DeviceArray);
1161 return E_NOTIMPL;
1164 static HRESULT WINAPI IDirect3DRM3Impl_GetNamedObject(IDirect3DRM3 *iface,
1165 const char *name, IDirect3DRMObject **object)
1167 FIXME("iface %p, name %s, object %p stub!\n", iface, debugstr_a(name), object);
1169 return E_NOTIMPL;
1172 static HRESULT WINAPI IDirect3DRM3Impl_EnumerateObjects(IDirect3DRM3* iface, D3DRMOBJECTCALLBACK cb,
1173 LPVOID arg)
1175 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1177 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, cb, arg);
1179 return E_NOTIMPL;
1182 static HRESULT load_data(IDirect3DRM3 *iface, IDirectXFileData *data_object, IID **GUIDs, DWORD nb_GUIDs, D3DRMLOADCALLBACK LoadProc,
1183 void *ArgLP, D3DRMLOADTEXTURECALLBACK LoadTextureProc, void *ArgLTP, IDirect3DRMFrame3 *parent_frame)
1185 HRESULT ret = D3DRMERR_BADOBJECT;
1186 HRESULT hr;
1187 const GUID* guid;
1188 DWORD i;
1189 BOOL requested = FALSE;
1191 hr = IDirectXFileData_GetType(data_object, &guid);
1192 if (hr != DXFILE_OK)
1193 goto end;
1195 TRACE("Found object type whose GUID = %s\n", debugstr_guid(guid));
1197 /* Load object only if it is top level and requested or if it is part of another object */
1199 if (IsEqualGUID(guid, &TID_D3DRMMesh))
1201 TRACE("Found TID_D3DRMMesh\n");
1203 for (i = 0; i < nb_GUIDs; i++)
1204 if (IsEqualGUID(GUIDs[i], &IID_IDirect3DRMMeshBuilder) ||
1205 IsEqualGUID(GUIDs[i], &IID_IDirect3DRMMeshBuilder2) ||
1206 IsEqualGUID(GUIDs[i], &IID_IDirect3DRMMeshBuilder3))
1208 requested = TRUE;
1209 break;
1212 if (requested || parent_frame)
1214 IDirect3DRMMeshBuilder3 *meshbuilder;
1216 TRACE("Load mesh data\n");
1218 hr = IDirect3DRM3_CreateMeshBuilder(iface, &meshbuilder);
1219 if (SUCCEEDED(hr))
1221 hr = load_mesh_data(meshbuilder, data_object, LoadTextureProc, ArgLTP);
1222 if (SUCCEEDED(hr))
1224 /* Only top level objects are notified */
1225 if (!parent_frame)
1227 IDirect3DRMObject *object;
1229 hr = IDirect3DRMMeshBuilder3_QueryInterface(meshbuilder, GUIDs[i], (void**)&object);
1230 if (SUCCEEDED(hr))
1232 LoadProc(object, GUIDs[i], ArgLP);
1233 IDirect3DRMObject_Release(object);
1236 else
1238 IDirect3DRMFrame3_AddVisual(parent_frame, (IUnknown*)meshbuilder);
1241 IDirect3DRMMeshBuilder3_Release(meshbuilder);
1244 if (FAILED(hr))
1245 ERR("Cannot process mesh\n");
1248 else if (IsEqualGUID(guid, &TID_D3DRMFrame))
1250 TRACE("Found TID_D3DRMFrame\n");
1252 for (i = 0; i < nb_GUIDs; i++)
1253 if (IsEqualGUID(GUIDs[i], &IID_IDirect3DRMFrame) ||
1254 IsEqualGUID(GUIDs[i], &IID_IDirect3DRMFrame2) ||
1255 IsEqualGUID(GUIDs[i], &IID_IDirect3DRMFrame3))
1257 requested = TRUE;
1258 break;
1261 if (requested || parent_frame)
1263 IDirect3DRMFrame3 *frame;
1265 TRACE("Load frame data\n");
1267 hr = IDirect3DRM3_CreateFrame(iface, parent_frame, &frame);
1268 if (SUCCEEDED(hr))
1270 IDirectXFileObject *child;
1272 while (SUCCEEDED(hr = IDirectXFileData_GetNextObject(data_object, &child)))
1274 IDirectXFileData *data;
1275 IDirectXFileDataReference *reference;
1276 IDirectXFileBinary *binary;
1278 hr = IDirectXFileObject_QueryInterface(child, &IID_IDirectXFileBinary, (void **)&binary);
1279 if (SUCCEEDED(hr))
1281 FIXME("Binary Object not supported yet\n");
1282 IDirectXFileBinary_Release(binary);
1283 continue;
1286 hr = IDirectXFileObject_QueryInterface(child, &IID_IDirectXFileData, (void **)&data);
1287 if (SUCCEEDED(hr))
1289 TRACE("Found Data Object\n");
1290 hr = load_data(iface, data, GUIDs, nb_GUIDs, LoadProc, ArgLP, LoadTextureProc, ArgLTP, frame);
1291 IDirectXFileData_Release(data);
1292 continue;
1294 hr = IDirectXFileObject_QueryInterface(child, &IID_IDirectXFileDataReference, (void **)&reference);
1295 if (SUCCEEDED(hr))
1297 TRACE("Found Data Object Reference\n");
1298 IDirectXFileDataReference_Resolve(reference, &data);
1299 hr = load_data(iface, data, GUIDs, nb_GUIDs, LoadProc, ArgLP, LoadTextureProc, ArgLTP, frame);
1300 IDirectXFileData_Release(data);
1301 IDirectXFileDataReference_Release(reference);
1302 continue;
1306 if (hr != DXFILEERR_NOMOREOBJECTS)
1308 IDirect3DRMFrame3_Release(frame);
1309 goto end;
1311 hr = S_OK;
1313 /* Only top level objects are notified */
1314 if (!parent_frame)
1316 IDirect3DRMObject *object;
1318 hr = IDirect3DRMFrame3_QueryInterface(frame, GUIDs[i], (void**)&object);
1319 if (SUCCEEDED(hr))
1321 LoadProc(object, GUIDs[i], ArgLP);
1322 IDirect3DRMObject_Release(object);
1325 IDirect3DRMFrame3_Release(frame);
1328 if (FAILED(hr))
1329 ERR("Cannot process frame\n");
1332 else if (IsEqualGUID(guid, &TID_D3DRMMaterial))
1334 TRACE("Found TID_D3DRMMaterial\n");
1336 /* Cannot be requested so nothing to do */
1338 else if (IsEqualGUID(guid, &TID_D3DRMFrameTransformMatrix))
1340 TRACE("Found TID_D3DRMFrameTransformMatrix\n");
1342 /* Cannot be requested */
1343 if (parent_frame)
1345 D3DRMMATRIX4D matrix;
1346 DWORD size;
1348 TRACE("Load Frame Transform Matrix data\n");
1350 size = sizeof(matrix);
1351 hr = IDirectXFileData_GetData(data_object, NULL, &size, (void**)matrix);
1352 if ((hr != DXFILE_OK) || (size != sizeof(matrix)))
1353 goto end;
1355 hr = IDirect3DRMFrame3_AddTransform(parent_frame, D3DRMCOMBINE_REPLACE, matrix);
1356 if (FAILED(hr))
1357 goto end;
1360 else
1362 FIXME("Found unknown TID %s\n", debugstr_guid(guid));
1365 ret = D3DRM_OK;
1367 end:
1369 return ret;
1372 static HRESULT WINAPI IDirect3DRM3Impl_Load(IDirect3DRM3 *iface, void *source, void *object_id, IID **iids,
1373 DWORD iid_count, D3DRMLOADOPTIONS flags, D3DRMLOADCALLBACK load_cb, void *load_ctx,
1374 D3DRMLOADTEXTURECALLBACK load_tex_cb, void *load_tex_ctx, IDirect3DRMFrame3 *parent_frame)
1376 DXFILELOADOPTIONS load_options;
1377 LPDIRECTXFILE pDXFile = NULL;
1378 LPDIRECTXFILEENUMOBJECT pEnumObject = NULL;
1379 LPDIRECTXFILEDATA pData = NULL;
1380 HRESULT hr;
1381 const GUID* pGuid;
1382 DWORD size;
1383 Header* pHeader;
1384 HRESULT ret = D3DRMERR_BADOBJECT;
1385 DWORD i;
1387 TRACE("iface %p, source %p, object_id %p, iids %p, iid_count %u, flags %#x, "
1388 "load_cb %p, load_ctx %p, load_tex_cb %p, load_tex_ctx %p, parent_frame %p.\n",
1389 iface, source, object_id, iids, iid_count, flags,
1390 load_cb, load_ctx, load_tex_cb, load_tex_ctx, parent_frame);
1392 TRACE("Looking for GUIDs:\n");
1393 for (i = 0; i < iid_count; ++i)
1394 TRACE("- %s (%s)\n", debugstr_guid(iids[i]), get_IID_string(iids[i]));
1396 if (flags == D3DRMLOAD_FROMMEMORY)
1398 load_options = DXFILELOAD_FROMMEMORY;
1400 else if (flags == D3DRMLOAD_FROMFILE)
1402 load_options = DXFILELOAD_FROMFILE;
1403 TRACE("Loading from file %s\n", debugstr_a(source));
1405 else
1407 FIXME("Load options %#x not supported yet.\n", flags);
1408 return E_NOTIMPL;
1411 hr = DirectXFileCreate(&pDXFile);
1412 if (hr != DXFILE_OK)
1413 goto end;
1415 hr = IDirectXFile_RegisterTemplates(pDXFile, templates, strlen(templates));
1416 if (hr != DXFILE_OK)
1417 goto end;
1419 hr = IDirectXFile_CreateEnumObject(pDXFile, source, load_options, &pEnumObject);
1420 if (hr != DXFILE_OK)
1421 goto end;
1423 hr = IDirectXFileEnumObject_GetNextDataObject(pEnumObject, &pData);
1424 if (hr != DXFILE_OK)
1425 goto end;
1427 hr = IDirectXFileData_GetType(pData, &pGuid);
1428 if (hr != DXFILE_OK)
1429 goto end;
1431 TRACE("Found object type whose GUID = %s\n", debugstr_guid(pGuid));
1433 if (!IsEqualGUID(pGuid, &TID_DXFILEHeader))
1435 ret = D3DRMERR_BADFILE;
1436 goto end;
1439 hr = IDirectXFileData_GetData(pData, NULL, &size, (void**)&pHeader);
1440 if ((hr != DXFILE_OK) || (size != sizeof(Header)))
1441 goto end;
1443 TRACE("Version is %d %d %d\n", pHeader->major, pHeader->minor, pHeader->flags);
1445 /* Version must be 1.0.x */
1446 if ((pHeader->major != 1) || (pHeader->minor != 0))
1448 ret = D3DRMERR_BADFILE;
1449 goto end;
1452 IDirectXFileData_Release(pData);
1453 pData = NULL;
1455 while (1)
1457 hr = IDirectXFileEnumObject_GetNextDataObject(pEnumObject, &pData);
1458 if (hr == DXFILEERR_NOMOREOBJECTS)
1460 TRACE("No more object\n");
1461 break;
1463 else if (hr != DXFILE_OK)
1465 ret = D3DRMERR_BADFILE;
1466 goto end;
1469 ret = load_data(iface, pData, iids, iid_count, load_cb, load_ctx, load_tex_cb, load_tex_ctx, parent_frame);
1470 if (ret != D3DRM_OK)
1471 goto end;
1473 IDirectXFileData_Release(pData);
1474 pData = NULL;
1477 ret = D3DRM_OK;
1479 end:
1480 if (pData)
1481 IDirectXFileData_Release(pData);
1482 if (pEnumObject)
1483 IDirectXFileEnumObject_Release(pEnumObject);
1484 if (pDXFile)
1485 IDirectXFile_Release(pDXFile);
1487 return ret;
1490 static HRESULT WINAPI IDirect3DRM3Impl_Tick(IDirect3DRM3* iface, D3DVALUE tick)
1492 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1494 FIXME("(%p/%p)->(%f): stub\n", iface, This, tick);
1496 return E_NOTIMPL;
1499 static HRESULT WINAPI IDirect3DRM3Impl_CreateProgressiveMesh(IDirect3DRM3* iface,
1500 LPDIRECT3DRMPROGRESSIVEMESH Mesh)
1502 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1504 FIXME("(%p/%p)->(%p): stub\n", iface, This, Mesh);
1506 return E_NOTIMPL;
1509 static HRESULT WINAPI IDirect3DRM3Impl_RegisterClient(IDirect3DRM3* iface, REFGUID rguid,
1510 LPDWORD id)
1512 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1514 FIXME("(%p/%p)->(%s, %p): stub\n", iface, This, debugstr_guid(rguid), id);
1516 return E_NOTIMPL;
1519 static HRESULT WINAPI IDirect3DRM3Impl_UnregisterClient(IDirect3DRM3* iface, REFGUID rguid)
1521 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1523 FIXME("(%p/%p)->(%s): stub\n", iface, This, debugstr_guid(rguid));
1525 return E_NOTIMPL;
1528 static HRESULT WINAPI IDirect3DRM3Impl_CreateClippedVisual(IDirect3DRM3 *iface,
1529 IDirect3DRMVisual *visual, IDirect3DRMClippedVisual **clipped_visual)
1531 FIXME("iface %p, visual %p, clipped_visual %p stub!\n", iface, visual, clipped_visual);
1533 return E_NOTIMPL;
1536 static HRESULT WINAPI IDirect3DRM3Impl_SetOptions(IDirect3DRM3* iface, DWORD opt)
1538 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1540 FIXME("(%p/%p)->(%d): stub\n", iface, This, opt);
1542 return E_NOTIMPL;
1545 static HRESULT WINAPI IDirect3DRM3Impl_GetOptions(IDirect3DRM3* iface, LPDWORD opt)
1547 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1549 FIXME("(%p/%p)->(%p): stub\n", iface, This, opt);
1551 return E_NOTIMPL;
1554 static const struct IDirect3DRM3Vtbl Direct3DRM3_Vtbl =
1556 IDirect3DRM3Impl_QueryInterface,
1557 IDirect3DRM3Impl_AddRef,
1558 IDirect3DRM3Impl_Release,
1559 IDirect3DRM3Impl_CreateObject,
1560 IDirect3DRM3Impl_CreateFrame,
1561 IDirect3DRM3Impl_CreateMesh,
1562 IDirect3DRM3Impl_CreateMeshBuilder,
1563 IDirect3DRM3Impl_CreateFace,
1564 IDirect3DRM3Impl_CreateAnimation,
1565 IDirect3DRM3Impl_CreateAnimationSet,
1566 IDirect3DRM3Impl_CreateTexture,
1567 IDirect3DRM3Impl_CreateLight,
1568 IDirect3DRM3Impl_CreateLightRGB,
1569 IDirect3DRM3Impl_CreateMaterial,
1570 IDirect3DRM3Impl_CreateDevice,
1571 IDirect3DRM3Impl_CreateDeviceFromSurface,
1572 IDirect3DRM3Impl_CreateDeviceFromD3D,
1573 IDirect3DRM3Impl_CreateDeviceFromClipper,
1574 IDirect3DRM3Impl_CreateTextureFromSurface,
1575 IDirect3DRM3Impl_CreateShadow,
1576 IDirect3DRM3Impl_CreateViewport,
1577 IDirect3DRM3Impl_CreateWrap,
1578 IDirect3DRM3Impl_CreateUserVisual,
1579 IDirect3DRM3Impl_LoadTexture,
1580 IDirect3DRM3Impl_LoadTextureFromResource,
1581 IDirect3DRM3Impl_SetSearchPath,
1582 IDirect3DRM3Impl_AddSearchPath,
1583 IDirect3DRM3Impl_GetSearchPath,
1584 IDirect3DRM3Impl_SetDefaultTextureColors,
1585 IDirect3DRM3Impl_SetDefaultTextureShades,
1586 IDirect3DRM3Impl_GetDevices,
1587 IDirect3DRM3Impl_GetNamedObject,
1588 IDirect3DRM3Impl_EnumerateObjects,
1589 IDirect3DRM3Impl_Load,
1590 IDirect3DRM3Impl_Tick,
1591 IDirect3DRM3Impl_CreateProgressiveMesh,
1592 IDirect3DRM3Impl_RegisterClient,
1593 IDirect3DRM3Impl_UnregisterClient,
1594 IDirect3DRM3Impl_CreateClippedVisual,
1595 IDirect3DRM3Impl_SetOptions,
1596 IDirect3DRM3Impl_GetOptions
1599 HRESULT WINAPI Direct3DRMCreate(IDirect3DRM **d3drm)
1601 IDirect3DRMImpl *object;
1603 TRACE("d3drm %p.\n", d3drm);
1605 if (!(object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object))))
1606 return E_OUTOFMEMORY;
1608 object->IDirect3DRM_iface.lpVtbl = &Direct3DRM_Vtbl;
1609 object->IDirect3DRM2_iface.lpVtbl = &Direct3DRM2_Vtbl;
1610 object->IDirect3DRM3_iface.lpVtbl = &Direct3DRM3_Vtbl;
1611 object->ref = 1;
1613 *d3drm = &object->IDirect3DRM_iface;
1615 return S_OK;