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"
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";
54 IDirect3DRM IDirect3DRM_iface;
55 IDirect3DRM2 IDirect3DRM2_iface;
56 IDirect3DRM3 IDirect3DRM3_iface;
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);
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;
99 FIXME("interface %s not implemented\n", debugstr_guid(riid));
100 return E_NOINTERFACE;
103 IDirect3DRM_AddRef(iface);
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);
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);
125 HeapFree(GetProcessHeap(), 0, This);
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);
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, LPDIRECT3DRMMESH * ppMesh)
150 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
152 TRACE("(%p/%p)->(%p)\n", iface, This, ppMesh);
154 return IDirect3DRM3_CreateMesh(&This->IDirect3DRM3_iface, ppMesh);
157 static HRESULT WINAPI IDirect3DRMImpl_CreateMeshBuilder(IDirect3DRM* iface, LPDIRECT3DRMMESHBUILDER * ppMeshBuilder)
159 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
161 TRACE("(%p/%p)->(%p)\n", iface, This, ppMeshBuilder);
163 return Direct3DRMMeshBuilder_create(&IID_IDirect3DRMMeshBuilder, (IUnknown**)ppMeshBuilder);
166 static HRESULT WINAPI IDirect3DRMImpl_CreateFace(IDirect3DRM* iface, LPDIRECT3DRMFACE * ppFace)
168 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
170 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppFace);
175 static HRESULT WINAPI IDirect3DRMImpl_CreateAnimation(IDirect3DRM* iface, LPDIRECT3DRMANIMATION * ppAnimation)
177 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
179 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppAnimation);
184 static HRESULT WINAPI IDirect3DRMImpl_CreateAnimationSet(IDirect3DRM* iface, LPDIRECT3DRMANIMATIONSET * ppAnimationSet)
186 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
188 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppAnimationSet);
193 static HRESULT WINAPI IDirect3DRMImpl_CreateTexture(IDirect3DRM *iface,
194 D3DRMIMAGE *image, IDirect3DRMTexture **texture)
196 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
198 FIXME("(%p/%p)->(%p,%p): partial stub\n", iface, This, image, texture);
200 return Direct3DRMTexture_create(&IID_IDirect3DRMTexture, (IUnknown **)texture);
203 static HRESULT WINAPI IDirect3DRMImpl_CreateLight(IDirect3DRM* iface, D3DRMLIGHTTYPE type,
204 D3DCOLOR color, LPDIRECT3DRMLIGHT* Light)
206 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
208 TRACE("(%p/%p)->(%d,%d,%p)\n", iface, This, type, color, Light);
210 return IDirect3DRM3_CreateLight(&This->IDirect3DRM3_iface, type, color, Light);
213 static HRESULT WINAPI IDirect3DRMImpl_CreateLightRGB(IDirect3DRM* iface, D3DRMLIGHTTYPE type,
214 D3DVALUE red, D3DVALUE green, D3DVALUE blue,
215 LPDIRECT3DRMLIGHT* Light)
217 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
219 TRACE("(%p/%p)->(%d,%f,%f,%f,%p)\n", iface, This, type, red, green, blue, Light);
221 return IDirect3DRM3_CreateLightRGB(&This->IDirect3DRM3_iface, type, red, green, blue, Light);
224 static HRESULT WINAPI IDirect3DRMImpl_CreateMaterial(IDirect3DRM* iface, D3DVALUE power, LPDIRECT3DRMMATERIAL * material)
226 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
228 TRACE("(%p/%p)->(%f,%p)\n", iface, This, power, material);
230 return IDirect3DRM3_CreateMaterial(&This->IDirect3DRM3_iface, power, (LPDIRECT3DRMMATERIAL2*)material);
233 static HRESULT WINAPI IDirect3DRMImpl_CreateDevice(IDirect3DRM *iface,
234 DWORD width, DWORD height, IDirect3DRMDevice **device)
236 FIXME("iface %p, width %u, height %u, device %p partial stub!\n", iface, width, height, device);
238 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice, (IUnknown **)device);
241 static HRESULT WINAPI IDirect3DRMImpl_CreateDeviceFromSurface(IDirect3DRM *iface, GUID *pGUID,
242 IDirectDraw *pDD, IDirectDrawSurface *pDDSBack, IDirect3DRMDevice **ppDevice)
244 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
246 FIXME("(%p/%p)->(%s,%p,%p,%p): partial stub\n", iface, This, debugstr_guid(pGUID), pDD,
249 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice, (IUnknown**)ppDevice);
252 static HRESULT WINAPI IDirect3DRMImpl_CreateDeviceFromD3D(IDirect3DRM *iface,
253 IDirect3D *pD3D, IDirect3DDevice *pD3DDev, IDirect3DRMDevice **ppDevice)
255 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
257 FIXME("(%p/%p)->(%p,%p,%p): partial stub\n", iface, This, pD3D, pD3DDev, ppDevice);
259 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice, (IUnknown**)ppDevice);
262 static HRESULT WINAPI IDirect3DRMImpl_CreateDeviceFromClipper(IDirect3DRM *iface,
263 IDirectDrawClipper *pDDClipper, GUID *pGUID, int width, int height,
264 IDirect3DRMDevice **ppDevice)
266 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
268 FIXME("(%p/%p)->(%p,%s,%d,%d,%p): partial stub\n", iface, This, pDDClipper,
269 debugstr_guid(pGUID), width, height, ppDevice);
271 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice, (IUnknown**)ppDevice);
274 static HRESULT WINAPI IDirect3DRMImpl_CreateTextureFromSurface(IDirect3DRM *iface,
275 IDirectDrawSurface *pDDS, IDirect3DRMTexture **ppTexture)
277 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
279 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, pDDS, ppTexture);
284 static HRESULT WINAPI IDirect3DRMImpl_CreateShadow(IDirect3DRM* iface, LPDIRECT3DRMVISUAL pVisual, LPDIRECT3DRMLIGHT pLight, D3DVALUE px, D3DVALUE py, D3DVALUE pz, D3DVALUE nx, D3DVALUE ny, D3DVALUE nz, LPDIRECT3DRMVISUAL * ppVisual)
286 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
288 FIXME("(%p/%p)->(%p,%p,%f,%f,%f,%f,%f,%f,%p): stub\n", iface, This, pVisual, pLight, px, py, pz, nx, ny, nz, ppVisual);
293 static HRESULT WINAPI IDirect3DRMImpl_CreateViewport(IDirect3DRM *iface, IDirect3DRMDevice *device,
294 IDirect3DRMFrame *camera, DWORD x, DWORD y, DWORD width, DWORD height, IDirect3DRMViewport **viewport)
296 FIXME("iface %p, device %p, camera %p, x %u, y %u, width %u, height %u, viewport %p partial stub!\n",
297 iface, device, camera, x, y, width, height, viewport);
299 return Direct3DRMViewport_create(&IID_IDirect3DRMViewport, (IUnknown **)viewport);
302 static HRESULT WINAPI IDirect3DRMImpl_CreateWrap(IDirect3DRM *iface, D3DRMWRAPTYPE type, IDirect3DRMFrame *frame,
303 D3DVALUE ox, D3DVALUE oy, D3DVALUE oz, D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
304 D3DVALUE ux, D3DVALUE uy, D3DVALUE uz, D3DVALUE ou, D3DVALUE ov, D3DVALUE su, D3DVALUE sv,
305 IDirect3DRMWrap **wrap)
307 FIXME("iface %p, type %#x, frame %p, ox %.8e, oy %.8e, oz %.8e, dx %.8e, dy %.8e, dz %.8e, "
308 "ux %.8e, uy %.8e, uz %.8e, ou %.8e, ov %.8e, su %.8e, sv %.8e, wrap %p stub!\n",
309 iface, type, frame, ox, oy, oz, dx, dy, dz, ux, uy, uz, ou, ov, su, sv, wrap);
314 static HRESULT WINAPI IDirect3DRMImpl_CreateUserVisual(IDirect3DRM* iface, D3DRMUSERVISUALCALLBACK cb, LPVOID pArg, LPDIRECT3DRMUSERVISUAL * ppUserVisual)
316 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
318 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, cb, pArg, ppUserVisual);
323 static HRESULT WINAPI IDirect3DRMImpl_LoadTexture(IDirect3DRM* iface, const char * filename, LPDIRECT3DRMTEXTURE * ppTexture)
325 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
327 FIXME("(%p/%p)->(%s,%p): stub\n", iface, This, filename, ppTexture);
332 static HRESULT WINAPI IDirect3DRMImpl_LoadTextureFromResource(IDirect3DRM* iface, HRSRC rs, LPDIRECT3DRMTEXTURE * ppTexture)
334 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
336 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, rs, ppTexture);
341 static HRESULT WINAPI IDirect3DRMImpl_SetSearchPath(IDirect3DRM* iface, LPCSTR path)
343 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
345 FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
350 static HRESULT WINAPI IDirect3DRMImpl_AddSearchPath(IDirect3DRM* iface, LPCSTR path)
352 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
354 FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
359 static HRESULT WINAPI IDirect3DRMImpl_GetSearchPath(IDirect3DRM* iface, DWORD *size_return, LPSTR path_return)
361 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
363 FIXME("(%p/%p)->(%p,%s): stub\n", iface, This, size_return, path_return);
368 static HRESULT WINAPI IDirect3DRMImpl_SetDefaultTextureColors(IDirect3DRM* iface, DWORD nb_colors)
370 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
372 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_colors);
377 static HRESULT WINAPI IDirect3DRMImpl_SetDefaultTextureShades(IDirect3DRM* iface, DWORD nb_shades)
379 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
381 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_shades);
386 static HRESULT WINAPI IDirect3DRMImpl_GetDevices(IDirect3DRM* iface, LPDIRECT3DRMDEVICEARRAY * ppDeviceArray)
388 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
390 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppDeviceArray);
395 static HRESULT WINAPI IDirect3DRMImpl_GetNamedObject(IDirect3DRM *iface,
396 const char *name, IDirect3DRMObject **object)
398 FIXME("iface %p, name %s, object %p stub!\n", iface, debugstr_a(name), object);
403 static HRESULT WINAPI IDirect3DRMImpl_EnumerateObjects(IDirect3DRM* iface, D3DRMOBJECTCALLBACK cb, LPVOID pArg)
405 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
407 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, cb, pArg);
412 static HRESULT WINAPI IDirect3DRMImpl_Load(IDirect3DRM *iface, void *source, void *object_id, IID **iids,
413 DWORD iid_count, D3DRMLOADOPTIONS flags, D3DRMLOADCALLBACK load_cb, void *load_ctx,
414 D3DRMLOADTEXTURECALLBACK load_tex_cb, void *load_tex_ctx, IDirect3DRMFrame *parent_frame)
416 IDirect3DRMImpl *d3drm = impl_from_IDirect3DRM(iface);
417 IDirect3DRMFrame3 *parent_frame3 = NULL;
418 HRESULT hr = D3DRM_OK;
420 TRACE("iface %p, source %p, object_id %p, iids %p, iid_count %u, flags %#x, "
421 "load_cb %p, load_ctx %p, load_tex_cb %p, load_tex_ctx %p, parent_frame %p.\n",
422 iface, source, object_id, iids, iid_count, flags,
423 load_cb, load_ctx, load_tex_cb, load_tex_ctx, parent_frame);
426 hr = IDirect3DRMFrame_QueryInterface(parent_frame, &IID_IDirect3DRMFrame3, (void **)&parent_frame3);
428 hr = IDirect3DRM3_Load(&d3drm->IDirect3DRM3_iface, source, object_id, iids, iid_count,
429 flags, load_cb, load_ctx, load_tex_cb, load_tex_ctx, parent_frame3);
431 IDirect3DRMFrame3_Release(parent_frame3);
436 static HRESULT WINAPI IDirect3DRMImpl_Tick(IDirect3DRM* iface, D3DVALUE tick)
438 IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
440 FIXME("(%p/%p)->(%f): stub\n", iface, This, tick);
445 static const struct IDirect3DRMVtbl Direct3DRM_Vtbl =
447 IDirect3DRMImpl_QueryInterface,
448 IDirect3DRMImpl_AddRef,
449 IDirect3DRMImpl_Release,
450 IDirect3DRMImpl_CreateObject,
451 IDirect3DRMImpl_CreateFrame,
452 IDirect3DRMImpl_CreateMesh,
453 IDirect3DRMImpl_CreateMeshBuilder,
454 IDirect3DRMImpl_CreateFace,
455 IDirect3DRMImpl_CreateAnimation,
456 IDirect3DRMImpl_CreateAnimationSet,
457 IDirect3DRMImpl_CreateTexture,
458 IDirect3DRMImpl_CreateLight,
459 IDirect3DRMImpl_CreateLightRGB,
460 IDirect3DRMImpl_CreateMaterial,
461 IDirect3DRMImpl_CreateDevice,
462 IDirect3DRMImpl_CreateDeviceFromSurface,
463 IDirect3DRMImpl_CreateDeviceFromD3D,
464 IDirect3DRMImpl_CreateDeviceFromClipper,
465 IDirect3DRMImpl_CreateTextureFromSurface,
466 IDirect3DRMImpl_CreateShadow,
467 IDirect3DRMImpl_CreateViewport,
468 IDirect3DRMImpl_CreateWrap,
469 IDirect3DRMImpl_CreateUserVisual,
470 IDirect3DRMImpl_LoadTexture,
471 IDirect3DRMImpl_LoadTextureFromResource,
472 IDirect3DRMImpl_SetSearchPath,
473 IDirect3DRMImpl_AddSearchPath,
474 IDirect3DRMImpl_GetSearchPath,
475 IDirect3DRMImpl_SetDefaultTextureColors,
476 IDirect3DRMImpl_SetDefaultTextureShades,
477 IDirect3DRMImpl_GetDevices,
478 IDirect3DRMImpl_GetNamedObject,
479 IDirect3DRMImpl_EnumerateObjects,
480 IDirect3DRMImpl_Load,
485 /*** IUnknown methods ***/
486 static HRESULT WINAPI IDirect3DRM2Impl_QueryInterface(IDirect3DRM2* iface, REFIID riid,
489 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
490 return IDirect3DRM_QueryInterface(&This->IDirect3DRM_iface, riid, ppvObject);
493 static ULONG WINAPI IDirect3DRM2Impl_AddRef(IDirect3DRM2* iface)
495 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
496 return IDirect3DRM_AddRef(&This->IDirect3DRM_iface);
499 static ULONG WINAPI IDirect3DRM2Impl_Release(IDirect3DRM2* iface)
501 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
502 return IDirect3DRM_Release(&This->IDirect3DRM_iface);
505 /*** IDirect3DRM2 methods ***/
506 static HRESULT WINAPI IDirect3DRM2Impl_CreateObject(IDirect3DRM2* iface, REFCLSID rclsid,
507 LPUNKNOWN pUnkOuter, REFIID riid,
510 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
512 FIXME("(%p/%p)->(%s,%p,%s,%p): stub\n", iface, This, debugstr_guid(rclsid), pUnkOuter,
513 debugstr_guid(riid), ppvObj);
518 static HRESULT WINAPI IDirect3DRM2Impl_CreateFrame(IDirect3DRM2 *iface,
519 IDirect3DRMFrame *parent_frame, IDirect3DRMFrame2 **frame)
521 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
523 TRACE("(%p/%p)->(%p,%p)\n", iface, This, parent_frame, frame);
525 return Direct3DRMFrame_create(&IID_IDirect3DRMFrame2, (IUnknown*)parent_frame, (IUnknown**)frame);
528 static HRESULT WINAPI IDirect3DRM2Impl_CreateMesh(IDirect3DRM2* iface, LPDIRECT3DRMMESH * ppMesh)
530 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
532 TRACE("(%p/%p)->(%p)\n", iface, This, ppMesh);
534 return IDirect3DRM3_CreateMesh(&This->IDirect3DRM3_iface, ppMesh);
537 static HRESULT WINAPI IDirect3DRM2Impl_CreateMeshBuilder(IDirect3DRM2* iface,
538 LPDIRECT3DRMMESHBUILDER2 * ppMeshBuilder)
540 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
542 TRACE("(%p/%p)->(%p)\n", iface, This, ppMeshBuilder);
544 return Direct3DRMMeshBuilder_create(&IID_IDirect3DRMMeshBuilder2, (IUnknown**)ppMeshBuilder);
547 static HRESULT WINAPI IDirect3DRM2Impl_CreateFace(IDirect3DRM2* iface, LPDIRECT3DRMFACE * ppFace)
549 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
551 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppFace);
556 static HRESULT WINAPI IDirect3DRM2Impl_CreateAnimation(IDirect3DRM2* iface,
557 LPDIRECT3DRMANIMATION * ppAnimation)
559 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
561 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppAnimation);
566 static HRESULT WINAPI IDirect3DRM2Impl_CreateAnimationSet(IDirect3DRM2* iface,
567 LPDIRECT3DRMANIMATIONSET * ppAnimationSet)
569 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
571 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppAnimationSet);
576 static HRESULT WINAPI IDirect3DRM2Impl_CreateTexture(IDirect3DRM2 *iface,
577 D3DRMIMAGE *image, IDirect3DRMTexture2 **texture)
579 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
581 FIXME("(%p/%p)->(%p,%p): partial stub\n", iface, This, image, texture);
583 return Direct3DRMTexture_create(&IID_IDirect3DRMTexture2, (IUnknown **)texture);
586 static HRESULT WINAPI IDirect3DRM2Impl_CreateLight(IDirect3DRM2* iface, D3DRMLIGHTTYPE type,
587 D3DCOLOR color, LPDIRECT3DRMLIGHT* Light)
589 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
591 TRACE("(%p/%p)->(%d,%d,%p)\n", iface, This, type, color, Light);
593 return IDirect3DRM3_CreateLight(&This->IDirect3DRM3_iface, type, color, Light);
596 static HRESULT WINAPI IDirect3DRM2Impl_CreateLightRGB(IDirect3DRM2* iface, D3DRMLIGHTTYPE type,
597 D3DVALUE red, D3DVALUE green, D3DVALUE blue,
598 LPDIRECT3DRMLIGHT* Light)
600 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
602 TRACE("(%p/%p)->(%d,%f,%f,%f,%p)\n", iface, This, type, red, green, blue, Light);
604 return IDirect3DRM3_CreateLightRGB(&This->IDirect3DRM3_iface, type, red, green, blue, Light);
607 static HRESULT WINAPI IDirect3DRM2Impl_CreateMaterial(IDirect3DRM2* iface, D3DVALUE power,
608 LPDIRECT3DRMMATERIAL * material)
610 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
612 TRACE("(%p/%p)->(%f,%p)\n", iface, This, power, material);
614 return IDirect3DRM3_CreateMaterial(&This->IDirect3DRM3_iface, power, (LPDIRECT3DRMMATERIAL2*)material);
617 static HRESULT WINAPI IDirect3DRM2Impl_CreateDevice(IDirect3DRM2 *iface,
618 DWORD width, DWORD height, IDirect3DRMDevice2 **device)
620 FIXME("iface %p, width %u, height %u, device %p.\n", iface, width, height, device);
622 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice2, (IUnknown **)device);
625 static HRESULT WINAPI IDirect3DRM2Impl_CreateDeviceFromSurface(IDirect3DRM2 *iface, GUID *pGUID,
626 IDirectDraw *pDD, IDirectDrawSurface *pDDSBack, IDirect3DRMDevice2 **ppDevice)
628 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
630 FIXME("(%p/%p)->(%s,%p,%p,%p): partial stub\n", iface, This, debugstr_guid(pGUID),
631 pDD, pDDSBack, ppDevice);
633 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice2, (IUnknown**)ppDevice);
636 static HRESULT WINAPI IDirect3DRM2Impl_CreateDeviceFromD3D(IDirect3DRM2 *iface,
637 IDirect3D2 *pD3D, IDirect3DDevice2 *pD3DDev, IDirect3DRMDevice2 **ppDevice)
639 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
641 FIXME("(%p/%p)->(%p,%p,%p): partial stub\n", iface, This, pD3D, pD3DDev, ppDevice);
643 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice2, (IUnknown**)ppDevice);
646 static HRESULT WINAPI IDirect3DRM2Impl_CreateDeviceFromClipper(IDirect3DRM2 *iface,
647 IDirectDrawClipper *pDDClipper, GUID *pGUID, int width, int height,
648 IDirect3DRMDevice2 **ppDevice)
650 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
652 FIXME("(%p/%p)->(%p,%s,%d,%d,%p): partial stub\n", iface, This, pDDClipper,
653 debugstr_guid(pGUID), width, height, ppDevice);
655 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice2, (IUnknown**)ppDevice);
658 static HRESULT WINAPI IDirect3DRM2Impl_CreateTextureFromSurface(IDirect3DRM2 *iface,
659 IDirectDrawSurface *pDDS, IDirect3DRMTexture2 **ppTexture)
661 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
663 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, pDDS, ppTexture);
668 static HRESULT WINAPI IDirect3DRM2Impl_CreateShadow(IDirect3DRM2* iface, LPDIRECT3DRMVISUAL pVisual,
669 LPDIRECT3DRMLIGHT pLight,
670 D3DVALUE px, D3DVALUE py, D3DVALUE pz,
671 D3DVALUE nx, D3DVALUE ny, D3DVALUE nz,
672 LPDIRECT3DRMVISUAL * ppVisual)
674 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
676 FIXME("(%p/%p)->(%p,%p,%f,%f,%f,%f,%f,%f,%p): stub\n", iface, This, pVisual, pLight, px, py, pz,
677 nx, ny, nz, ppVisual);
682 static HRESULT WINAPI IDirect3DRM2Impl_CreateViewport(IDirect3DRM2 *iface, IDirect3DRMDevice *device,
683 IDirect3DRMFrame *camera, DWORD x, DWORD y, DWORD width, DWORD height, IDirect3DRMViewport **viewport)
685 FIXME("iface %p, device %p, camera %p, x %u, y %u, width %u, height %u, viewport %p partial stub!\n",
686 iface, device, camera, x, y, width, height, viewport);
688 return Direct3DRMViewport_create(&IID_IDirect3DRMViewport, (IUnknown **)viewport);
691 static HRESULT WINAPI IDirect3DRM2Impl_CreateWrap(IDirect3DRM2 *iface, D3DRMWRAPTYPE type, IDirect3DRMFrame *frame,
692 D3DVALUE ox, D3DVALUE oy, D3DVALUE oz, D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
693 D3DVALUE ux, D3DVALUE uy, D3DVALUE uz, D3DVALUE ou, D3DVALUE ov, D3DVALUE su, D3DVALUE sv,
694 IDirect3DRMWrap **wrap)
696 FIXME("iface %p, type %#x, frame %p, ox %.8e, oy %.8e, oz %.8e, dx %.8e, dy %.8e, dz %.8e, "
697 "ux %.8e, uy %.8e, uz %.8e, ou %.8e, ov %.8e, su %.8e, sv %.8e, wrap %p stub!\n",
698 iface, type, frame, ox, oy, oz, dx, dy, dz, ux, uy, uz, ou, ov, su, sv, wrap);
703 static HRESULT WINAPI IDirect3DRM2Impl_CreateUserVisual(IDirect3DRM2* iface,
704 D3DRMUSERVISUALCALLBACK cb, LPVOID pArg,
705 LPDIRECT3DRMUSERVISUAL * ppUserVisual)
707 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
709 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, cb, pArg, ppUserVisual);
714 static HRESULT WINAPI IDirect3DRM2Impl_LoadTexture(IDirect3DRM2* iface, const char * filename,
715 LPDIRECT3DRMTEXTURE2 * ppTexture)
717 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
719 FIXME("(%p/%p)->(%s,%p): stub\n", iface, This, filename, ppTexture);
724 static HRESULT WINAPI IDirect3DRM2Impl_LoadTextureFromResource(IDirect3DRM2* iface, HMODULE hModule,
725 LPCSTR strName, LPCSTR strType,
726 LPDIRECT3DRMTEXTURE2 * ppTexture)
728 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
730 FIXME("(%p/%p)->(%p,%p,%p,%p): stub\n", iface, This, hModule, strName, strType, ppTexture);
735 static HRESULT WINAPI IDirect3DRM2Impl_SetSearchPath(IDirect3DRM2* iface, LPCSTR path)
737 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
739 FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
744 static HRESULT WINAPI IDirect3DRM2Impl_AddSearchPath(IDirect3DRM2* iface, LPCSTR path)
746 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
748 FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
753 static HRESULT WINAPI IDirect3DRM2Impl_GetSearchPath(IDirect3DRM2* iface, DWORD *size_return,
756 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
758 FIXME("(%p/%p)->(%p,%s): stub\n", iface, This, size_return, path_return);
763 static HRESULT WINAPI IDirect3DRM2Impl_SetDefaultTextureColors(IDirect3DRM2* iface, DWORD nb_colors)
765 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
767 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_colors);
772 static HRESULT WINAPI IDirect3DRM2Impl_SetDefaultTextureShades(IDirect3DRM2* iface, DWORD nb_shades)
774 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
776 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_shades);
781 static HRESULT WINAPI IDirect3DRM2Impl_GetDevices(IDirect3DRM2* iface,
782 LPDIRECT3DRMDEVICEARRAY * ppDeviceArray)
784 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
786 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppDeviceArray);
791 static HRESULT WINAPI IDirect3DRM2Impl_GetNamedObject(IDirect3DRM2 *iface,
792 const char *name, IDirect3DRMObject **object)
794 FIXME("iface %p, name %s, object %p stub!\n", iface, debugstr_a(name), object);
799 static HRESULT WINAPI IDirect3DRM2Impl_EnumerateObjects(IDirect3DRM2* iface, D3DRMOBJECTCALLBACK cb,
802 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
804 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, cb, pArg);
809 static HRESULT WINAPI IDirect3DRM2Impl_Load(IDirect3DRM2 *iface, void *source, void *object_id, IID **iids,
810 DWORD iid_count, D3DRMLOADOPTIONS flags, D3DRMLOADCALLBACK load_cb, void *load_ctx,
811 D3DRMLOADTEXTURECALLBACK load_tex_cb, void *load_tex_ctx, IDirect3DRMFrame *parent_frame)
813 IDirect3DRMImpl *d3drm = impl_from_IDirect3DRM2(iface);
814 IDirect3DRMFrame3 *parent_frame3 = NULL;
815 HRESULT hr = D3DRM_OK;
817 TRACE("iface %p, source %p, object_id %p, iids %p, iid_count %u, flags %#x, "
818 "load_cb %p, load_ctx %p, load_tex_cb %p, load_tex_ctx %p, parent_frame %p.\n",
819 iface, source, object_id, iids, iid_count, flags,
820 load_cb, load_ctx, load_tex_cb, load_tex_ctx, parent_frame);
823 hr = IDirect3DRMFrame_QueryInterface(parent_frame, &IID_IDirect3DRMFrame3, (void **)&parent_frame3);
825 hr = IDirect3DRM3_Load(&d3drm->IDirect3DRM3_iface, source, object_id, iids, iid_count,
826 flags, load_cb, load_ctx, load_tex_cb, load_tex_ctx, parent_frame3);
828 IDirect3DRMFrame3_Release(parent_frame3);
833 static HRESULT WINAPI IDirect3DRM2Impl_Tick(IDirect3DRM2* iface, D3DVALUE tick)
835 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
837 FIXME("(%p/%p)->(%f): stub\n", iface, This, tick);
842 static HRESULT WINAPI IDirect3DRM2Impl_CreateProgressiveMesh(IDirect3DRM2* iface,
843 LPDIRECT3DRMPROGRESSIVEMESH * ppMesh)
845 IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
847 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppMesh);
852 static const struct IDirect3DRM2Vtbl Direct3DRM2_Vtbl =
854 IDirect3DRM2Impl_QueryInterface,
855 IDirect3DRM2Impl_AddRef,
856 IDirect3DRM2Impl_Release,
857 IDirect3DRM2Impl_CreateObject,
858 IDirect3DRM2Impl_CreateFrame,
859 IDirect3DRM2Impl_CreateMesh,
860 IDirect3DRM2Impl_CreateMeshBuilder,
861 IDirect3DRM2Impl_CreateFace,
862 IDirect3DRM2Impl_CreateAnimation,
863 IDirect3DRM2Impl_CreateAnimationSet,
864 IDirect3DRM2Impl_CreateTexture,
865 IDirect3DRM2Impl_CreateLight,
866 IDirect3DRM2Impl_CreateLightRGB,
867 IDirect3DRM2Impl_CreateMaterial,
868 IDirect3DRM2Impl_CreateDevice,
869 IDirect3DRM2Impl_CreateDeviceFromSurface,
870 IDirect3DRM2Impl_CreateDeviceFromD3D,
871 IDirect3DRM2Impl_CreateDeviceFromClipper,
872 IDirect3DRM2Impl_CreateTextureFromSurface,
873 IDirect3DRM2Impl_CreateShadow,
874 IDirect3DRM2Impl_CreateViewport,
875 IDirect3DRM2Impl_CreateWrap,
876 IDirect3DRM2Impl_CreateUserVisual,
877 IDirect3DRM2Impl_LoadTexture,
878 IDirect3DRM2Impl_LoadTextureFromResource,
879 IDirect3DRM2Impl_SetSearchPath,
880 IDirect3DRM2Impl_AddSearchPath,
881 IDirect3DRM2Impl_GetSearchPath,
882 IDirect3DRM2Impl_SetDefaultTextureColors,
883 IDirect3DRM2Impl_SetDefaultTextureShades,
884 IDirect3DRM2Impl_GetDevices,
885 IDirect3DRM2Impl_GetNamedObject,
886 IDirect3DRM2Impl_EnumerateObjects,
887 IDirect3DRM2Impl_Load,
888 IDirect3DRM2Impl_Tick,
889 IDirect3DRM2Impl_CreateProgressiveMesh
893 /*** IUnknown methods ***/
894 static HRESULT WINAPI IDirect3DRM3Impl_QueryInterface(IDirect3DRM3* iface, REFIID riid,
897 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
898 return IDirect3DRM_QueryInterface(&This->IDirect3DRM_iface, riid, ppvObject);
901 static ULONG WINAPI IDirect3DRM3Impl_AddRef(IDirect3DRM3* iface)
903 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
904 return IDirect3DRM_AddRef(&This->IDirect3DRM_iface);
907 static ULONG WINAPI IDirect3DRM3Impl_Release(IDirect3DRM3* iface)
909 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
910 return IDirect3DRM_Release(&This->IDirect3DRM_iface);
913 /*** IDirect3DRM3 methods ***/
914 static HRESULT WINAPI IDirect3DRM3Impl_CreateObject(IDirect3DRM3* iface, REFCLSID rclsid,
915 LPUNKNOWN unkwn, REFIID riid, LPVOID* object)
917 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
919 FIXME("(%p/%p)->(%s,%p,%s,%p): stub\n", iface, This, debugstr_guid(rclsid), unkwn,
920 debugstr_guid(riid), object);
925 static HRESULT WINAPI IDirect3DRM3Impl_CreateFrame(IDirect3DRM3* iface, LPDIRECT3DRMFRAME3 parent_frame,
926 LPDIRECT3DRMFRAME3* frame)
928 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
930 TRACE("(%p/%p)->(%p,%p)\n", iface, This, parent_frame, frame);
932 return Direct3DRMFrame_create(&IID_IDirect3DRMFrame3, (IUnknown*)parent_frame, (IUnknown**)frame);
935 static HRESULT WINAPI IDirect3DRM3Impl_CreateMesh(IDirect3DRM3* iface, LPDIRECT3DRMMESH* Mesh)
937 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
939 TRACE("(%p/%p)->(%p)\n", iface, This, Mesh);
941 return Direct3DRMMesh_create(Mesh);
944 static HRESULT WINAPI IDirect3DRM3Impl_CreateMeshBuilder(IDirect3DRM3* iface,
945 LPDIRECT3DRMMESHBUILDER3* ppMeshBuilder)
947 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
949 TRACE("(%p/%p)->(%p)\n", iface, This, ppMeshBuilder);
951 return Direct3DRMMeshBuilder_create(&IID_IDirect3DRMMeshBuilder3, (IUnknown**)ppMeshBuilder);
954 static HRESULT WINAPI IDirect3DRM3Impl_CreateFace(IDirect3DRM3* iface, LPDIRECT3DRMFACE2* Face)
956 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
958 FIXME("(%p/%p)->(%p): stub\n", iface, This, Face);
963 static HRESULT WINAPI IDirect3DRM3Impl_CreateAnimation(IDirect3DRM3* iface,
964 LPDIRECT3DRMANIMATION2* Animation)
966 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
968 FIXME("(%p/%p)->(%p): stub\n", iface, This, Animation);
973 static HRESULT WINAPI IDirect3DRM3Impl_CreateAnimationSet(IDirect3DRM3* iface,
974 LPDIRECT3DRMANIMATIONSET2* AnimationSet)
976 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
978 FIXME("(%p/%p)->(%p): stub\n", iface, This, AnimationSet);
983 static HRESULT WINAPI IDirect3DRM3Impl_CreateTexture(IDirect3DRM3 *iface,
984 D3DRMIMAGE *image, IDirect3DRMTexture3 **texture)
986 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
988 FIXME("(%p/%p)->(%p,%p): partial stub\n", iface, This, image, texture);
990 return Direct3DRMTexture_create(&IID_IDirect3DRMTexture3, (IUnknown **)texture);
993 static HRESULT WINAPI IDirect3DRM3Impl_CreateLight(IDirect3DRM3* iface, D3DRMLIGHTTYPE type,
994 D3DCOLOR color, LPDIRECT3DRMLIGHT* Light)
996 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
999 FIXME("(%p/%p)->(%d,%d,%p): partial stub\n", iface, This, type, color, Light);
1001 ret = Direct3DRMLight_create((IUnknown**)Light);
1005 IDirect3DRMLight_SetType(*Light, type);
1006 IDirect3DRMLight_SetColor(*Light, color);
1012 static HRESULT WINAPI IDirect3DRM3Impl_CreateLightRGB(IDirect3DRM3* iface, D3DRMLIGHTTYPE type,
1013 D3DVALUE red, D3DVALUE green, D3DVALUE blue,
1014 LPDIRECT3DRMLIGHT* Light)
1016 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1019 FIXME("(%p/%p)->(%d,%f,%f,%f,%p): partial stub\n", iface, This, type, red, green, blue, Light);
1021 ret = Direct3DRMLight_create((IUnknown**)Light);
1025 IDirect3DRMLight_SetType(*Light, type);
1026 IDirect3DRMLight_SetColorRGB(*Light, red, green, blue);
1032 static HRESULT WINAPI IDirect3DRM3Impl_CreateMaterial(IDirect3DRM3* iface, D3DVALUE power,
1033 LPDIRECT3DRMMATERIAL2* material)
1035 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1038 TRACE("(%p/%p)->(%f,%p)\n", iface, This, power, material);
1040 ret = Direct3DRMMaterial_create(material);
1043 IDirect3DRMMaterial2_SetPower(*material, power);
1048 static HRESULT WINAPI IDirect3DRM3Impl_CreateDevice(IDirect3DRM3 *iface,
1049 DWORD width, DWORD height, IDirect3DRMDevice3 **device)
1051 FIXME("iface %p, width %u, height %u, device %p partial stub!\n", iface, width, height, device);
1053 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice3, (IUnknown **)device);
1056 static HRESULT WINAPI IDirect3DRM3Impl_CreateDeviceFromSurface(IDirect3DRM3 *iface, GUID *pGUID,
1057 IDirectDraw *dd, IDirectDrawSurface *back, IDirect3DRMDevice3 **device)
1059 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1061 FIXME("(%p/%p)->(%s,%p,%p,%p): partial stub\n", iface, This, debugstr_guid(pGUID), dd, back, device);
1063 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice3, (IUnknown**)device);
1066 static HRESULT WINAPI IDirect3DRM3Impl_CreateDeviceFromD3D(IDirect3DRM3 *iface,
1067 IDirect3D2 *d3d, IDirect3DDevice2 *d3ddev, IDirect3DRMDevice3 **device)
1069 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1071 FIXME("(%p/%p)->(%p,%p,%p): partial stub\n", iface, This, d3d, d3ddev, device);
1073 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice3, (IUnknown**)device);
1076 static HRESULT WINAPI IDirect3DRM3Impl_CreateDeviceFromClipper(IDirect3DRM3 *iface,
1077 IDirectDrawClipper *clipper, GUID *guid, int width, int height,
1078 IDirect3DRMDevice3 **device)
1080 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1082 FIXME("(%p/%p)->(%p,%s,%d,%d,%p): partial stub\n", iface, This, clipper, debugstr_guid(guid),
1083 width, height, device);
1085 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice3, (IUnknown**)device);
1088 static HRESULT WINAPI IDirect3DRM3Impl_CreateShadow(IDirect3DRM3* iface, LPUNKNOWN Visual1,
1089 LPDIRECT3DRMLIGHT Light, D3DVALUE px,
1090 D3DVALUE py, D3DVALUE pz, D3DVALUE nx,
1091 D3DVALUE ny, D3DVALUE nz,
1092 LPDIRECT3DRMSHADOW2* Visual2)
1094 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1096 FIXME("(%p/%p)->(%p,%p,%f,%f,%f,%f,%f,%f,%p): stub\n", iface, This, Visual1, Light, px, py, pz,
1097 nx, ny, nz, Visual2);
1102 static HRESULT WINAPI IDirect3DRM3Impl_CreateTextureFromSurface(IDirect3DRM3 *iface,
1103 IDirectDrawSurface *surface, IDirect3DRMTexture3 **texture)
1105 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1107 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, surface, texture);
1112 static HRESULT WINAPI IDirect3DRM3Impl_CreateViewport(IDirect3DRM3 *iface, IDirect3DRMDevice3 *device,
1113 IDirect3DRMFrame3 *camera, DWORD x, DWORD y, DWORD width, DWORD height, IDirect3DRMViewport2 **viewport)
1115 FIXME("iface %p, device %p, camera %p, x %u, y %u, width %u, height %u, viewport %p partial stub!\n",
1116 iface, device, camera, x, y, width, height, viewport);
1118 return Direct3DRMViewport_create(&IID_IDirect3DRMViewport2, (IUnknown **)viewport);
1121 static HRESULT WINAPI IDirect3DRM3Impl_CreateWrap(IDirect3DRM3* iface, D3DRMWRAPTYPE type,
1122 LPDIRECT3DRMFRAME3 frame,
1123 D3DVALUE ox, D3DVALUE oy, D3DVALUE oz,
1124 D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
1125 D3DVALUE ux, D3DVALUE uy, D3DVALUE uz,
1126 D3DVALUE ou, D3DVALUE ov, D3DVALUE su,
1127 D3DVALUE sv, LPDIRECT3DRMWRAP* wrap)
1129 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1131 FIXME("(%p/%p)->(%d,%p,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%p): stub\n", iface, This, type,
1132 frame, ox, oy, oz, dx, dy, dz, ux, uy, uz, ou, ov, su, sv, wrap);
1137 static HRESULT WINAPI IDirect3DRM3Impl_CreateUserVisual(IDirect3DRM3* iface,
1138 D3DRMUSERVISUALCALLBACK cb, LPVOID arg,
1139 LPDIRECT3DRMUSERVISUAL* UserVisual)
1141 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1143 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, cb, arg, UserVisual);
1148 static HRESULT WINAPI IDirect3DRM3Impl_LoadTexture(IDirect3DRM3* iface, const char* filename,
1149 LPDIRECT3DRMTEXTURE3* Texture)
1151 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1153 FIXME("(%p/%p)->(%s,%p): stub\n", iface, This, filename, Texture);
1158 static HRESULT WINAPI IDirect3DRM3Impl_LoadTextureFromResource(IDirect3DRM3* iface, HMODULE mod,
1159 LPCSTR strName, LPCSTR strType,
1160 LPDIRECT3DRMTEXTURE3 * ppTexture)
1162 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1164 FIXME("(%p/%p)->(%p,%p,%p,%p): stub\n", iface, This, mod, strName, strType, ppTexture);
1169 static HRESULT WINAPI IDirect3DRM3Impl_SetSearchPath(IDirect3DRM3* iface, LPCSTR path)
1171 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1173 FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
1178 static HRESULT WINAPI IDirect3DRM3Impl_AddSearchPath(IDirect3DRM3* iface, LPCSTR path)
1180 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1182 FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
1187 static HRESULT WINAPI IDirect3DRM3Impl_GetSearchPath(IDirect3DRM3* iface, DWORD* size_return,
1190 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1192 FIXME("(%p/%p)->(%p,%s): stub\n", iface, This, size_return, path_return);
1197 static HRESULT WINAPI IDirect3DRM3Impl_SetDefaultTextureColors(IDirect3DRM3* iface, DWORD nb_colors)
1199 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1201 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_colors);
1206 static HRESULT WINAPI IDirect3DRM3Impl_SetDefaultTextureShades(IDirect3DRM3* iface, DWORD nb_shades)
1208 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1210 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_shades);
1215 static HRESULT WINAPI IDirect3DRM3Impl_GetDevices(IDirect3DRM3* iface,
1216 LPDIRECT3DRMDEVICEARRAY* DeviceArray)
1218 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1220 FIXME("(%p/%p)->(%p): stub\n", iface, This, DeviceArray);
1225 static HRESULT WINAPI IDirect3DRM3Impl_GetNamedObject(IDirect3DRM3 *iface,
1226 const char *name, IDirect3DRMObject **object)
1228 FIXME("iface %p, name %s, object %p stub!\n", iface, debugstr_a(name), object);
1233 static HRESULT WINAPI IDirect3DRM3Impl_EnumerateObjects(IDirect3DRM3* iface, D3DRMOBJECTCALLBACK cb,
1236 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1238 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, cb, arg);
1243 static HRESULT load_data(IDirect3DRM3 *iface, IDirectXFileData *data_object, IID **GUIDs, DWORD nb_GUIDs, D3DRMLOADCALLBACK LoadProc,
1244 void *ArgLP, D3DRMLOADTEXTURECALLBACK LoadTextureProc, void *ArgLTP, IDirect3DRMFrame3 *parent_frame)
1246 HRESULT ret = D3DRMERR_BADOBJECT;
1250 BOOL requested = FALSE;
1252 hr = IDirectXFileData_GetType(data_object, &guid);
1253 if (hr != DXFILE_OK)
1256 TRACE("Found object type whose GUID = %s\n", debugstr_guid(guid));
1258 /* Load object only if it is top level and requested or if it is part of another object */
1260 if (IsEqualGUID(guid, &TID_D3DRMMesh))
1262 TRACE("Found TID_D3DRMMesh\n");
1264 for (i = 0; i < nb_GUIDs; i++)
1265 if (IsEqualGUID(GUIDs[i], &IID_IDirect3DRMMeshBuilder) ||
1266 IsEqualGUID(GUIDs[i], &IID_IDirect3DRMMeshBuilder2) ||
1267 IsEqualGUID(GUIDs[i], &IID_IDirect3DRMMeshBuilder3))
1273 if (requested || parent_frame)
1275 IDirect3DRMMeshBuilder3 *meshbuilder;
1277 TRACE("Load mesh data\n");
1279 hr = IDirect3DRM3_CreateMeshBuilder(iface, &meshbuilder);
1282 hr = load_mesh_data(meshbuilder, data_object, LoadTextureProc, ArgLTP);
1285 /* Only top level objects are notified */
1288 IDirect3DRMObject *object;
1290 hr = IDirect3DRMMeshBuilder3_QueryInterface(meshbuilder, GUIDs[i], (void**)&object);
1293 LoadProc(object, GUIDs[i], ArgLP);
1294 IDirect3DRMObject_Release(object);
1299 IDirect3DRMFrame3_AddVisual(parent_frame, (IUnknown*)meshbuilder);
1302 IDirect3DRMMeshBuilder3_Release(meshbuilder);
1306 ERR("Cannot process mesh\n");
1309 else if (IsEqualGUID(guid, &TID_D3DRMFrame))
1311 TRACE("Found TID_D3DRMFrame\n");
1313 for (i = 0; i < nb_GUIDs; i++)
1314 if (IsEqualGUID(GUIDs[i], &IID_IDirect3DRMFrame) ||
1315 IsEqualGUID(GUIDs[i], &IID_IDirect3DRMFrame2) ||
1316 IsEqualGUID(GUIDs[i], &IID_IDirect3DRMFrame3))
1322 if (requested || parent_frame)
1324 IDirect3DRMFrame3 *frame;
1326 TRACE("Load frame data\n");
1328 hr = IDirect3DRM3_CreateFrame(iface, parent_frame, &frame);
1331 IDirectXFileObject *child;
1333 while (SUCCEEDED(hr = IDirectXFileData_GetNextObject(data_object, &child)))
1335 IDirectXFileData *data;
1336 IDirectXFileDataReference *reference;
1337 IDirectXFileBinary *binary;
1339 hr = IDirectXFileObject_QueryInterface(child, &IID_IDirectXFileBinary, (void **)&binary);
1342 FIXME("Binary Object not supported yet\n");
1343 IDirectXFileBinary_Release(binary);
1347 hr = IDirectXFileObject_QueryInterface(child, &IID_IDirectXFileData, (void **)&data);
1350 TRACE("Found Data Object\n");
1351 hr = load_data(iface, data, GUIDs, nb_GUIDs, LoadProc, ArgLP, LoadTextureProc, ArgLTP, frame);
1352 IDirectXFileData_Release(data);
1355 hr = IDirectXFileObject_QueryInterface(child, &IID_IDirectXFileDataReference, (void **)&reference);
1358 TRACE("Found Data Object Reference\n");
1359 IDirectXFileDataReference_Resolve(reference, &data);
1360 hr = load_data(iface, data, GUIDs, nb_GUIDs, LoadProc, ArgLP, LoadTextureProc, ArgLTP, frame);
1361 IDirectXFileData_Release(data);
1362 IDirectXFileDataReference_Release(reference);
1367 if (hr != DXFILEERR_NOMOREOBJECTS)
1369 IDirect3DRMFrame3_Release(frame);
1374 /* Only top level objects are notified */
1377 IDirect3DRMObject *object;
1379 hr = IDirect3DRMFrame3_QueryInterface(frame, GUIDs[i], (void**)&object);
1382 LoadProc(object, GUIDs[i], ArgLP);
1383 IDirect3DRMObject_Release(object);
1386 IDirect3DRMFrame3_Release(frame);
1390 ERR("Cannot process frame\n");
1393 else if (IsEqualGUID(guid, &TID_D3DRMMaterial))
1395 TRACE("Found TID_D3DRMMaterial\n");
1397 /* Cannot be requested so nothing to do */
1399 else if (IsEqualGUID(guid, &TID_D3DRMFrameTransformMatrix))
1401 TRACE("Found TID_D3DRMFrameTransformMatrix\n");
1403 /* Cannot be requested */
1406 D3DRMMATRIX4D matrix;
1409 TRACE("Load Frame Transform Matrix data\n");
1411 size = sizeof(matrix);
1412 hr = IDirectXFileData_GetData(data_object, NULL, &size, (void**)matrix);
1413 if ((hr != DXFILE_OK) || (size != sizeof(matrix)))
1416 hr = IDirect3DRMFrame3_AddTransform(parent_frame, D3DRMCOMBINE_REPLACE, matrix);
1423 FIXME("Found unknown TID %s\n", debugstr_guid(guid));
1433 static HRESULT WINAPI IDirect3DRM3Impl_Load(IDirect3DRM3* iface, LPVOID ObjSource, LPVOID ObjID,
1434 LPIID* GUIDs, DWORD nb_GUIDs, D3DRMLOADOPTIONS LOFlags,
1435 D3DRMLOADCALLBACK LoadProc, LPVOID ArgLP,
1436 D3DRMLOADTEXTURECALLBACK LoadTextureProc, LPVOID ArgLTP,
1437 LPDIRECT3DRMFRAME3 ParentFrame)
1439 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1440 DXFILELOADOPTIONS load_options;
1441 LPDIRECTXFILE pDXFile = NULL;
1442 LPDIRECTXFILEENUMOBJECT pEnumObject = NULL;
1443 LPDIRECTXFILEDATA pData = NULL;
1448 HRESULT ret = D3DRMERR_BADOBJECT;
1451 TRACE("(%p/%p)->(%p,%p,%p,%d,%d,%p,%p,%p,%p,%p)\n", iface, This, ObjSource, ObjID, GUIDs,
1452 nb_GUIDs, LOFlags, LoadProc, ArgLP, LoadTextureProc, ArgLTP, ParentFrame);
1454 TRACE("Looking for GUIDs:\n");
1455 for (i = 0; i < nb_GUIDs; i++)
1456 TRACE("- %s (%s)\n", debugstr_guid(GUIDs[i]), get_IID_string(GUIDs[i]));
1458 if (LOFlags == D3DRMLOAD_FROMMEMORY)
1460 load_options = DXFILELOAD_FROMMEMORY;
1462 else if (LOFlags == D3DRMLOAD_FROMFILE)
1464 load_options = DXFILELOAD_FROMFILE;
1465 TRACE("Loading from file %s\n", debugstr_a(ObjSource));
1469 FIXME("Load options %d not supported yet\n", LOFlags);
1473 hr = DirectXFileCreate(&pDXFile);
1474 if (hr != DXFILE_OK)
1477 hr = IDirectXFile_RegisterTemplates(pDXFile, templates, strlen(templates));
1478 if (hr != DXFILE_OK)
1481 hr = IDirectXFile_CreateEnumObject(pDXFile, ObjSource, load_options, &pEnumObject);
1482 if (hr != DXFILE_OK)
1485 hr = IDirectXFileEnumObject_GetNextDataObject(pEnumObject, &pData);
1486 if (hr != DXFILE_OK)
1489 hr = IDirectXFileData_GetType(pData, &pGuid);
1490 if (hr != DXFILE_OK)
1493 TRACE("Found object type whose GUID = %s\n", debugstr_guid(pGuid));
1495 if (!IsEqualGUID(pGuid, &TID_DXFILEHeader))
1497 ret = D3DRMERR_BADFILE;
1501 hr = IDirectXFileData_GetData(pData, NULL, &size, (void**)&pHeader);
1502 if ((hr != DXFILE_OK) || (size != sizeof(Header)))
1505 TRACE("Version is %d %d %d\n", pHeader->major, pHeader->minor, pHeader->flags);
1507 /* Version must be 1.0.x */
1508 if ((pHeader->major != 1) || (pHeader->minor != 0))
1510 ret = D3DRMERR_BADFILE;
1514 IDirectXFileData_Release(pData);
1519 hr = IDirectXFileEnumObject_GetNextDataObject(pEnumObject, &pData);
1520 if (hr == DXFILEERR_NOMOREOBJECTS)
1522 TRACE("No more object\n");
1525 else if (hr != DXFILE_OK)
1527 ret = D3DRMERR_BADFILE;
1531 ret = load_data(iface, pData, GUIDs, nb_GUIDs, LoadProc, ArgLP, LoadTextureProc, ArgLTP, ParentFrame);
1532 if (ret != D3DRM_OK)
1535 IDirectXFileData_Release(pData);
1543 IDirectXFileData_Release(pData);
1545 IDirectXFileEnumObject_Release(pEnumObject);
1547 IDirectXFile_Release(pDXFile);
1552 static HRESULT WINAPI IDirect3DRM3Impl_Tick(IDirect3DRM3* iface, D3DVALUE tick)
1554 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1556 FIXME("(%p/%p)->(%f): stub\n", iface, This, tick);
1561 static HRESULT WINAPI IDirect3DRM3Impl_CreateProgressiveMesh(IDirect3DRM3* iface,
1562 LPDIRECT3DRMPROGRESSIVEMESH Mesh)
1564 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1566 FIXME("(%p/%p)->(%p): stub\n", iface, This, Mesh);
1571 static HRESULT WINAPI IDirect3DRM3Impl_RegisterClient(IDirect3DRM3* iface, REFGUID rguid,
1574 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1576 FIXME("(%p/%p)->(%s, %p): stub\n", iface, This, debugstr_guid(rguid), id);
1581 static HRESULT WINAPI IDirect3DRM3Impl_UnregisterClient(IDirect3DRM3* iface, REFGUID rguid)
1583 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1585 FIXME("(%p/%p)->(%s): stub\n", iface, This, debugstr_guid(rguid));
1590 static HRESULT WINAPI IDirect3DRM3Impl_CreateClippedVisual(IDirect3DRM3* iface,
1591 LPDIRECT3DRMVISUAL vis,
1592 LPDIRECT3DRMCLIPPEDVISUAL* clippedvis)
1594 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1596 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, vis, clippedvis);
1601 static HRESULT WINAPI IDirect3DRM3Impl_SetOptions(IDirect3DRM3* iface, DWORD opt)
1603 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1605 FIXME("(%p/%p)->(%d): stub\n", iface, This, opt);
1610 static HRESULT WINAPI IDirect3DRM3Impl_GetOptions(IDirect3DRM3* iface, LPDWORD opt)
1612 IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1614 FIXME("(%p/%p)->(%p): stub\n", iface, This, opt);
1619 static const struct IDirect3DRM3Vtbl Direct3DRM3_Vtbl =
1621 IDirect3DRM3Impl_QueryInterface,
1622 IDirect3DRM3Impl_AddRef,
1623 IDirect3DRM3Impl_Release,
1624 IDirect3DRM3Impl_CreateObject,
1625 IDirect3DRM3Impl_CreateFrame,
1626 IDirect3DRM3Impl_CreateMesh,
1627 IDirect3DRM3Impl_CreateMeshBuilder,
1628 IDirect3DRM3Impl_CreateFace,
1629 IDirect3DRM3Impl_CreateAnimation,
1630 IDirect3DRM3Impl_CreateAnimationSet,
1631 IDirect3DRM3Impl_CreateTexture,
1632 IDirect3DRM3Impl_CreateLight,
1633 IDirect3DRM3Impl_CreateLightRGB,
1634 IDirect3DRM3Impl_CreateMaterial,
1635 IDirect3DRM3Impl_CreateDevice,
1636 IDirect3DRM3Impl_CreateDeviceFromSurface,
1637 IDirect3DRM3Impl_CreateDeviceFromD3D,
1638 IDirect3DRM3Impl_CreateDeviceFromClipper,
1639 IDirect3DRM3Impl_CreateTextureFromSurface,
1640 IDirect3DRM3Impl_CreateShadow,
1641 IDirect3DRM3Impl_CreateViewport,
1642 IDirect3DRM3Impl_CreateWrap,
1643 IDirect3DRM3Impl_CreateUserVisual,
1644 IDirect3DRM3Impl_LoadTexture,
1645 IDirect3DRM3Impl_LoadTextureFromResource,
1646 IDirect3DRM3Impl_SetSearchPath,
1647 IDirect3DRM3Impl_AddSearchPath,
1648 IDirect3DRM3Impl_GetSearchPath,
1649 IDirect3DRM3Impl_SetDefaultTextureColors,
1650 IDirect3DRM3Impl_SetDefaultTextureShades,
1651 IDirect3DRM3Impl_GetDevices,
1652 IDirect3DRM3Impl_GetNamedObject,
1653 IDirect3DRM3Impl_EnumerateObjects,
1654 IDirect3DRM3Impl_Load,
1655 IDirect3DRM3Impl_Tick,
1656 IDirect3DRM3Impl_CreateProgressiveMesh,
1657 IDirect3DRM3Impl_RegisterClient,
1658 IDirect3DRM3Impl_UnregisterClient,
1659 IDirect3DRM3Impl_CreateClippedVisual,
1660 IDirect3DRM3Impl_SetOptions,
1661 IDirect3DRM3Impl_GetOptions
1664 HRESULT WINAPI Direct3DRMCreate(IDirect3DRM **d3drm)
1666 IDirect3DRMImpl *object;
1668 TRACE("d3drm %p.\n", d3drm);
1670 if (!(object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object))))
1671 return E_OUTOFMEMORY;
1673 object->IDirect3DRM_iface.lpVtbl = &Direct3DRM_Vtbl;
1674 object->IDirect3DRM2_iface.lpVtbl = &Direct3DRM2_Vtbl;
1675 object->IDirect3DRM3_iface.lpVtbl = &Direct3DRM3_Vtbl;
1678 *d3drm = &object->IDirect3DRM_iface;