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";
55 IDirect3DRM IDirect3DRM_iface
;
56 IDirect3DRM2 IDirect3DRM2_iface
;
57 IDirect3DRM3 IDirect3DRM3_iface
;
61 static inline struct d3drm
*impl_from_IDirect3DRM(IDirect3DRM
*iface
)
63 return CONTAINING_RECORD(iface
, struct d3drm
, IDirect3DRM_iface
);
66 static inline struct d3drm
*impl_from_IDirect3DRM2(IDirect3DRM2
*iface
)
68 return CONTAINING_RECORD(iface
, struct d3drm
, IDirect3DRM2_iface
);
71 static inline struct d3drm
*impl_from_IDirect3DRM3(IDirect3DRM3
*iface
)
73 return CONTAINING_RECORD(iface
, struct d3drm
, IDirect3DRM3_iface
);
76 static HRESULT WINAPI
d3drm1_QueryInterface(IDirect3DRM
*iface
, REFIID riid
, void **out
)
78 struct d3drm
*d3drm
= impl_from_IDirect3DRM(iface
);
80 TRACE("iface %p, riid %s, out %p.\n", iface
, debugstr_guid(riid
), out
);
82 if (IsEqualGUID(riid
, &IID_IDirect3DRM
)
83 || IsEqualGUID(riid
, &IID_IUnknown
))
85 *out
= &d3drm
->IDirect3DRM_iface
;
87 else if (IsEqualGUID(riid
, &IID_IDirect3DRM2
))
89 *out
= &d3drm
->IDirect3DRM2_iface
;
91 else if (IsEqualGUID(riid
, &IID_IDirect3DRM3
))
93 *out
= &d3drm
->IDirect3DRM3_iface
;
98 WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid
));
102 IUnknown_AddRef((IUnknown
*)*out
);
106 static ULONG WINAPI
d3drm1_AddRef(IDirect3DRM
*iface
)
108 struct d3drm
*d3drm
= impl_from_IDirect3DRM(iface
);
109 ULONG refcount
= InterlockedIncrement(&d3drm
->ref
);
111 TRACE("%p increasing refcount to %u.\n", iface
, refcount
);
116 static ULONG WINAPI
d3drm1_Release(IDirect3DRM
*iface
)
118 struct d3drm
*d3drm
= impl_from_IDirect3DRM(iface
);
119 ULONG refcount
= InterlockedDecrement(&d3drm
->ref
);
121 TRACE("%p decreasing refcount to %u.\n", iface
, refcount
);
124 HeapFree(GetProcessHeap(), 0, d3drm
);
129 static HRESULT WINAPI
d3drm1_CreateObject(IDirect3DRM
*iface
,
130 REFCLSID clsid
, IUnknown
*outer
, REFIID iid
, void **out
)
132 FIXME("iface %p, clsid %s, outer %p, iid %s, out %p stub!\n",
133 iface
, debugstr_guid(clsid
), outer
, debugstr_guid(iid
), out
);
138 static HRESULT WINAPI
d3drm1_CreateFrame(IDirect3DRM
*iface
,
139 IDirect3DRMFrame
*parent_frame
, IDirect3DRMFrame
**frame
)
141 TRACE("iface %p, parent_frame %p, frame %p.\n", iface
, parent_frame
, frame
);
143 return Direct3DRMFrame_create(&IID_IDirect3DRMFrame
, (IUnknown
*)parent_frame
, (IUnknown
**)frame
);
146 static HRESULT WINAPI
d3drm1_CreateMesh(IDirect3DRM
*iface
, IDirect3DRMMesh
**mesh
)
148 struct d3drm
*d3drm
= impl_from_IDirect3DRM(iface
);
150 TRACE("iface %p, mesh %p.\n", iface
, mesh
);
152 return IDirect3DRM3_CreateMesh(&d3drm
->IDirect3DRM3_iface
, mesh
);
155 static HRESULT WINAPI
d3drm1_CreateMeshBuilder(IDirect3DRM
*iface
, IDirect3DRMMeshBuilder
**mesh_builder
)
157 TRACE("iface %p, mesh_builder %p.\n", iface
, mesh_builder
);
159 return Direct3DRMMeshBuilder_create(&IID_IDirect3DRMMeshBuilder
, (IUnknown
**)mesh_builder
);
162 static HRESULT WINAPI
d3drm1_CreateFace(IDirect3DRM
*iface
, IDirect3DRMFace
**face
)
164 TRACE("iface %p, face %p.\n", iface
, face
);
166 return Direct3DRMFace_create(&IID_IDirect3DRMFace
, (IUnknown
**)face
);
169 static HRESULT WINAPI
d3drm1_CreateAnimation(IDirect3DRM
*iface
, IDirect3DRMAnimation
**animation
)
171 FIXME("iface %p, animation %p stub!\n", iface
, animation
);
176 static HRESULT WINAPI
d3drm1_CreateAnimationSet(IDirect3DRM
*iface
, IDirect3DRMAnimationSet
**set
)
178 FIXME("iface %p, set %p stub!\n", iface
, set
);
183 static HRESULT WINAPI
d3drm1_CreateTexture(IDirect3DRM
*iface
,
184 D3DRMIMAGE
*image
, IDirect3DRMTexture
**texture
)
186 FIXME("iface %p, image %p, texture %p partial stub.\n", iface
, image
, texture
);
188 return Direct3DRMTexture_create(&IID_IDirect3DRMTexture
, (IUnknown
**)texture
);
191 static HRESULT WINAPI
d3drm1_CreateLight(IDirect3DRM
*iface
,
192 D3DRMLIGHTTYPE type
, D3DCOLOR color
, IDirect3DRMLight
**light
)
194 struct d3drm
*d3drm
= impl_from_IDirect3DRM(iface
);
196 TRACE("iface %p, type %#x, color 0x%08x, light %p.\n", iface
, type
, color
, light
);
198 return IDirect3DRM3_CreateLight(&d3drm
->IDirect3DRM3_iface
, type
, color
, light
);
201 static HRESULT WINAPI
d3drm1_CreateLightRGB(IDirect3DRM
*iface
, D3DRMLIGHTTYPE type
,
202 D3DVALUE red
, D3DVALUE green
, D3DVALUE blue
, IDirect3DRMLight
**light
)
204 struct d3drm
*d3drm
= impl_from_IDirect3DRM(iface
);
206 TRACE("iface %p, type %#x, red %.8e, green %.8e, blue %.8e, light %p.\n",
207 iface
, type
, red
, green
, blue
, light
);
209 return IDirect3DRM3_CreateLightRGB(&d3drm
->IDirect3DRM3_iface
, type
, red
, green
, blue
, light
);
212 static HRESULT WINAPI
d3drm1_CreateMaterial(IDirect3DRM
*iface
,
213 D3DVALUE power
, IDirect3DRMMaterial
**material
)
215 struct d3drm
*d3drm
= impl_from_IDirect3DRM(iface
);
217 TRACE("iface %p, power %.8e, material %p.\n", iface
, power
, material
);
219 return IDirect3DRM3_CreateMaterial(&d3drm
->IDirect3DRM3_iface
, power
, (IDirect3DRMMaterial2
**)material
);
222 static HRESULT WINAPI
d3drm1_CreateDevice(IDirect3DRM
*iface
,
223 DWORD width
, DWORD height
, IDirect3DRMDevice
**device
)
225 FIXME("iface %p, width %u, height %u, device %p partial stub!\n", iface
, width
, height
, device
);
227 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice
, (IUnknown
**)device
);
230 static HRESULT WINAPI
d3drm1_CreateDeviceFromSurface(IDirect3DRM
*iface
, GUID
*guid
,
231 IDirectDraw
*ddraw
, IDirectDrawSurface
*backbuffer
, IDirect3DRMDevice
**device
)
233 FIXME("iface %p, guid %s, ddraw %p, backbuffer %p, device %p partial stub.\n",
234 iface
, debugstr_guid(guid
), ddraw
, backbuffer
, device
);
236 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice
, (IUnknown
**)device
);
239 static HRESULT WINAPI
d3drm1_CreateDeviceFromD3D(IDirect3DRM
*iface
,
240 IDirect3D
*d3d
, IDirect3DDevice
*d3d_device
, IDirect3DRMDevice
**device
)
242 FIXME("iface %p, d3d %p, d3d_device %p, device %p partial stub.\n",
243 iface
, d3d
, d3d_device
, device
);
245 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice
, (IUnknown
**)device
);
248 static HRESULT WINAPI
d3drm1_CreateDeviceFromClipper(IDirect3DRM
*iface
,
249 IDirectDrawClipper
*clipper
, GUID
*guid
, int width
, int height
,
250 IDirect3DRMDevice
**device
)
252 FIXME("iface %p, clipper %p, guid %s, width %d, height %d, device %p.\n",
253 iface
, clipper
, debugstr_guid(guid
), width
, height
, device
);
255 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice
, (IUnknown
**)device
);
258 static HRESULT WINAPI
d3drm1_CreateTextureFromSurface(IDirect3DRM
*iface
,
259 IDirectDrawSurface
*surface
, IDirect3DRMTexture
**texture
)
261 FIXME("iface %p, surface %p, texture %p stub!\n", iface
, surface
, texture
);
266 static HRESULT WINAPI
d3drm1_CreateShadow(IDirect3DRM
*iface
, IDirect3DRMVisual
*visual
,
267 IDirect3DRMLight
*light
, D3DVALUE px
, D3DVALUE py
, D3DVALUE pz
, D3DVALUE nx
, D3DVALUE ny
, D3DVALUE nz
,
268 IDirect3DRMVisual
**shadow
)
270 FIXME("iface %p, visual %p, light %p, px %.8e, py %.8e, pz %.8e, nx %.8e, ny %.8e, nz %.8e, shadow %p stub!\n",
271 iface
, visual
, light
, px
, py
, pz
, nx
, ny
, nz
, shadow
);
276 static HRESULT WINAPI
d3drm1_CreateViewport(IDirect3DRM
*iface
, IDirect3DRMDevice
*device
,
277 IDirect3DRMFrame
*camera
, DWORD x
, DWORD y
, DWORD width
, DWORD height
, IDirect3DRMViewport
**viewport
)
279 FIXME("iface %p, device %p, camera %p, x %u, y %u, width %u, height %u, viewport %p partial stub!\n",
280 iface
, device
, camera
, x
, y
, width
, height
, viewport
);
282 return Direct3DRMViewport_create(&IID_IDirect3DRMViewport
, (IUnknown
**)viewport
);
285 static HRESULT WINAPI
d3drm1_CreateWrap(IDirect3DRM
*iface
, D3DRMWRAPTYPE type
, IDirect3DRMFrame
*frame
,
286 D3DVALUE ox
, D3DVALUE oy
, D3DVALUE oz
, D3DVALUE dx
, D3DVALUE dy
, D3DVALUE dz
,
287 D3DVALUE ux
, D3DVALUE uy
, D3DVALUE uz
, D3DVALUE ou
, D3DVALUE ov
, D3DVALUE su
, D3DVALUE sv
,
288 IDirect3DRMWrap
**wrap
)
290 FIXME("iface %p, type %#x, frame %p, ox %.8e, oy %.8e, oz %.8e, dx %.8e, dy %.8e, dz %.8e, "
291 "ux %.8e, uy %.8e, uz %.8e, ou %.8e, ov %.8e, su %.8e, sv %.8e, wrap %p stub!\n",
292 iface
, type
, frame
, ox
, oy
, oz
, dx
, dy
, dz
, ux
, uy
, uz
, ou
, ov
, su
, sv
, wrap
);
297 static HRESULT WINAPI
d3drm1_CreateUserVisual(IDirect3DRM
*iface
,
298 D3DRMUSERVISUALCALLBACK cb
, void *ctx
, IDirect3DRMUserVisual
**visual
)
300 FIXME("iface %p, cb %p, ctx %p visual %p stub!\n", iface
, cb
, ctx
, visual
);
305 static HRESULT WINAPI
d3drm1_LoadTexture(IDirect3DRM
*iface
,
306 const char *filename
, IDirect3DRMTexture
**texture
)
308 FIXME("iface %p, filename %s, texture %p stub!\n", iface
, debugstr_a(filename
), texture
);
310 return Direct3DRMTexture_create(&IID_IDirect3DRMTexture
, (IUnknown
**)texture
);
313 static HRESULT WINAPI
d3drm1_LoadTextureFromResource(IDirect3DRM
*iface
,
314 HRSRC resource
, IDirect3DRMTexture
**texture
)
316 FIXME("iface %p, resource %p, texture %p stub!\n", iface
, resource
, texture
);
318 return Direct3DRMTexture_create(&IID_IDirect3DRMTexture
, (IUnknown
**)texture
);
321 static HRESULT WINAPI
d3drm1_SetSearchPath(IDirect3DRM
*iface
, const char *path
)
323 FIXME("iface %p, path %s stub!\n", iface
, debugstr_a(path
));
328 static HRESULT WINAPI
d3drm1_AddSearchPath(IDirect3DRM
*iface
, const char *path
)
330 FIXME("iface %p, path %s stub!\n", iface
, debugstr_a(path
));
335 static HRESULT WINAPI
d3drm1_GetSearchPath(IDirect3DRM
*iface
, DWORD
*size
, char *path
)
337 FIXME("iface %p, size %p, path %p stub!\n", iface
, size
, path
);
342 static HRESULT WINAPI
d3drm1_SetDefaultTextureColors(IDirect3DRM
*iface
, DWORD color_count
)
344 FIXME("iface %p, color_count %u stub!\n", iface
, color_count
);
349 static HRESULT WINAPI
d3drm1_SetDefaultTextureShades(IDirect3DRM
*iface
, DWORD shade_count
)
351 FIXME("iface %p, shade_count %u stub!\n", iface
, shade_count
);
356 static HRESULT WINAPI
d3drm1_GetDevices(IDirect3DRM
*iface
, IDirect3DRMDeviceArray
**array
)
358 FIXME("iface %p, array %p stub!\n", iface
, array
);
363 static HRESULT WINAPI
d3drm1_GetNamedObject(IDirect3DRM
*iface
,
364 const char *name
, IDirect3DRMObject
**object
)
366 FIXME("iface %p, name %s, object %p stub!\n", iface
, debugstr_a(name
), object
);
371 static HRESULT WINAPI
d3drm1_EnumerateObjects(IDirect3DRM
*iface
, D3DRMOBJECTCALLBACK cb
, void *ctx
)
373 FIXME("iface %p, cb %p, ctx %p stub!\n", iface
, cb
, ctx
);
378 static HRESULT WINAPI
d3drm1_Load(IDirect3DRM
*iface
, void *source
, void *object_id
, IID
**iids
,
379 DWORD iid_count
, D3DRMLOADOPTIONS flags
, D3DRMLOADCALLBACK load_cb
, void *load_ctx
,
380 D3DRMLOADTEXTURECALLBACK load_tex_cb
, void *load_tex_ctx
, IDirect3DRMFrame
*parent_frame
)
382 struct d3drm
*d3drm
= impl_from_IDirect3DRM(iface
);
383 IDirect3DRMFrame3
*parent_frame3
= NULL
;
384 HRESULT hr
= D3DRM_OK
;
386 TRACE("iface %p, source %p, object_id %p, iids %p, iid_count %u, flags %#x, "
387 "load_cb %p, load_ctx %p, load_tex_cb %p, load_tex_ctx %p, parent_frame %p.\n",
388 iface
, source
, object_id
, iids
, iid_count
, flags
,
389 load_cb
, load_ctx
, load_tex_cb
, load_tex_ctx
, parent_frame
);
392 hr
= IDirect3DRMFrame_QueryInterface(parent_frame
, &IID_IDirect3DRMFrame3
, (void **)&parent_frame3
);
394 hr
= IDirect3DRM3_Load(&d3drm
->IDirect3DRM3_iface
, source
, object_id
, iids
, iid_count
,
395 flags
, load_cb
, load_ctx
, load_tex_cb
, load_tex_ctx
, parent_frame3
);
397 IDirect3DRMFrame3_Release(parent_frame3
);
402 static HRESULT WINAPI
d3drm1_Tick(IDirect3DRM
*iface
, D3DVALUE tick
)
404 FIXME("iface %p, tick %.8e stub!\n", iface
, tick
);
409 static const struct IDirect3DRMVtbl d3drm1_vtbl
=
411 d3drm1_QueryInterface
,
417 d3drm1_CreateMeshBuilder
,
419 d3drm1_CreateAnimation
,
420 d3drm1_CreateAnimationSet
,
421 d3drm1_CreateTexture
,
423 d3drm1_CreateLightRGB
,
424 d3drm1_CreateMaterial
,
426 d3drm1_CreateDeviceFromSurface
,
427 d3drm1_CreateDeviceFromD3D
,
428 d3drm1_CreateDeviceFromClipper
,
429 d3drm1_CreateTextureFromSurface
,
431 d3drm1_CreateViewport
,
433 d3drm1_CreateUserVisual
,
435 d3drm1_LoadTextureFromResource
,
436 d3drm1_SetSearchPath
,
437 d3drm1_AddSearchPath
,
438 d3drm1_GetSearchPath
,
439 d3drm1_SetDefaultTextureColors
,
440 d3drm1_SetDefaultTextureShades
,
442 d3drm1_GetNamedObject
,
443 d3drm1_EnumerateObjects
,
448 static HRESULT WINAPI
d3drm2_QueryInterface(IDirect3DRM2
*iface
, REFIID riid
, void **out
)
450 struct d3drm
*d3drm
= impl_from_IDirect3DRM2(iface
);
452 return d3drm1_QueryInterface(&d3drm
->IDirect3DRM_iface
, riid
, out
);
455 static ULONG WINAPI
d3drm2_AddRef(IDirect3DRM2
*iface
)
457 struct d3drm
*d3drm
= impl_from_IDirect3DRM2(iface
);
459 return d3drm1_AddRef(&d3drm
->IDirect3DRM_iface
);
462 static ULONG WINAPI
d3drm2_Release(IDirect3DRM2
*iface
)
464 struct d3drm
*d3drm
= impl_from_IDirect3DRM2(iface
);
466 return d3drm1_Release(&d3drm
->IDirect3DRM_iface
);
469 static HRESULT WINAPI
d3drm2_CreateObject(IDirect3DRM2
*iface
,
470 REFCLSID clsid
, IUnknown
*outer
, REFIID iid
, void **out
)
472 FIXME("iface %p, clsid %s, outer %p, iid %s, out %p stub!\n",
473 iface
, debugstr_guid(clsid
), outer
, debugstr_guid(iid
), out
);
478 static HRESULT WINAPI
d3drm2_CreateFrame(IDirect3DRM2
*iface
,
479 IDirect3DRMFrame
*parent_frame
, IDirect3DRMFrame2
**frame
)
481 TRACE("iface %p, parent_frame %p, frame %p.\n", iface
, parent_frame
, frame
);
483 return Direct3DRMFrame_create(&IID_IDirect3DRMFrame2
, (IUnknown
*)parent_frame
, (IUnknown
**)frame
);
486 static HRESULT WINAPI
d3drm2_CreateMesh(IDirect3DRM2
*iface
, IDirect3DRMMesh
**mesh
)
488 struct d3drm
*d3drm
= impl_from_IDirect3DRM2(iface
);
490 TRACE("iface %p, mesh %p.\n", iface
, mesh
);
492 return IDirect3DRM3_CreateMesh(&d3drm
->IDirect3DRM3_iface
, mesh
);
495 static HRESULT WINAPI
d3drm2_CreateMeshBuilder(IDirect3DRM2
*iface
, IDirect3DRMMeshBuilder2
**mesh_builder
)
497 TRACE("iface %p, mesh_builder %p.\n", iface
, mesh_builder
);
499 return Direct3DRMMeshBuilder_create(&IID_IDirect3DRMMeshBuilder2
, (IUnknown
**)mesh_builder
);
502 static HRESULT WINAPI
d3drm2_CreateFace(IDirect3DRM2
*iface
, IDirect3DRMFace
**face
)
504 TRACE("iface %p, face %p.\n", iface
, face
);
506 return Direct3DRMFace_create(&IID_IDirect3DRMFace
, (IUnknown
**)face
);
509 static HRESULT WINAPI
d3drm2_CreateAnimation(IDirect3DRM2
*iface
, IDirect3DRMAnimation
**animation
)
511 FIXME("iface %p, animation %p stub!\n", iface
, animation
);
516 static HRESULT WINAPI
d3drm2_CreateAnimationSet(IDirect3DRM2
*iface
, IDirect3DRMAnimationSet
**set
)
518 FIXME("iface %p, set %p stub!\n", iface
, set
);
523 static HRESULT WINAPI
d3drm2_CreateTexture(IDirect3DRM2
*iface
,
524 D3DRMIMAGE
*image
, IDirect3DRMTexture2
**texture
)
526 FIXME("iface %p, image %p, texture %p partial stub.\n", iface
, image
, texture
);
528 return Direct3DRMTexture_create(&IID_IDirect3DRMTexture2
, (IUnknown
**)texture
);
531 static HRESULT WINAPI
d3drm2_CreateLight(IDirect3DRM2
*iface
,
532 D3DRMLIGHTTYPE type
, D3DCOLOR color
, IDirect3DRMLight
**light
)
534 struct d3drm
*d3drm
= impl_from_IDirect3DRM2(iface
);
536 TRACE("iface %p, type %#x, color 0x%08x, light %p.\n", iface
, type
, color
, light
);
538 return IDirect3DRM3_CreateLight(&d3drm
->IDirect3DRM3_iface
, type
, color
, light
);
541 static HRESULT WINAPI
d3drm2_CreateLightRGB(IDirect3DRM2
*iface
, D3DRMLIGHTTYPE type
,
542 D3DVALUE red
, D3DVALUE green
, D3DVALUE blue
, IDirect3DRMLight
**light
)
544 struct d3drm
*d3drm
= impl_from_IDirect3DRM2(iface
);
546 TRACE("iface %p, type %#x, red %.8e, green %.8e, blue %.8e, light %p.\n",
547 iface
, type
, red
, green
, blue
, light
);
549 return IDirect3DRM3_CreateLightRGB(&d3drm
->IDirect3DRM3_iface
, type
, red
, green
, blue
, light
);
552 static HRESULT WINAPI
d3drm2_CreateMaterial(IDirect3DRM2
*iface
,
553 D3DVALUE power
, IDirect3DRMMaterial
**material
)
555 struct d3drm
*d3drm
= impl_from_IDirect3DRM2(iface
);
557 TRACE("iface %p, power %.8e, material %p.\n", iface
, power
, material
);
559 return IDirect3DRM3_CreateMaterial(&d3drm
->IDirect3DRM3_iface
, power
, (IDirect3DRMMaterial2
**)material
);
562 static HRESULT WINAPI
d3drm2_CreateDevice(IDirect3DRM2
*iface
,
563 DWORD width
, DWORD height
, IDirect3DRMDevice2
**device
)
565 FIXME("iface %p, width %u, height %u, device %p.\n", iface
, width
, height
, device
);
567 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice2
, (IUnknown
**)device
);
570 static HRESULT WINAPI
d3drm2_CreateDeviceFromSurface(IDirect3DRM2
*iface
, GUID
*guid
,
571 IDirectDraw
*ddraw
, IDirectDrawSurface
*backbuffer
, IDirect3DRMDevice2
**device
)
573 FIXME("iface %p, guid %s, ddraw %p, backbuffer %p, device %p partial stub.\n",
574 iface
, debugstr_guid(guid
), ddraw
, backbuffer
, device
);
576 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice2
, (IUnknown
**)device
);
579 static HRESULT WINAPI
d3drm2_CreateDeviceFromD3D(IDirect3DRM2
*iface
,
580 IDirect3D2
*d3d
, IDirect3DDevice2
*d3d_device
, IDirect3DRMDevice2
**device
)
582 FIXME("iface %p, d3d %p, d3d_device %p, device %p partial stub.\n",
583 iface
, d3d
, d3d_device
, device
);
585 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice2
, (IUnknown
**)device
);
588 static HRESULT WINAPI
d3drm2_CreateDeviceFromClipper(IDirect3DRM2
*iface
,
589 IDirectDrawClipper
*clipper
, GUID
*guid
, int width
, int height
,
590 IDirect3DRMDevice2
**device
)
592 FIXME("iface %p, clipper %p, guid %s, width %d, height %d, device %p partial stub.\n",
593 iface
, clipper
, debugstr_guid(guid
), width
, height
, device
);
595 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice2
, (IUnknown
**)device
);
598 static HRESULT WINAPI
d3drm2_CreateTextureFromSurface(IDirect3DRM2
*iface
,
599 IDirectDrawSurface
*surface
, IDirect3DRMTexture2
**texture
)
601 FIXME("iface %p, surface %p, texture %p stub!\n", iface
, surface
, texture
);
606 static HRESULT WINAPI
d3drm2_CreateShadow(IDirect3DRM2
*iface
, IDirect3DRMVisual
*visual
,
607 IDirect3DRMLight
*light
, D3DVALUE px
, D3DVALUE py
, D3DVALUE pz
, D3DVALUE nx
, D3DVALUE ny
, D3DVALUE nz
,
608 IDirect3DRMVisual
**shadow
)
610 FIXME("iface %p, visual %p, light %p, px %.8e, py %.8e, pz %.8e, nx %.8e, ny %.8e, nz %.8e, shadow %p stub!\n",
611 iface
, visual
, light
, px
, py
, pz
, nx
, ny
, nz
, shadow
);
616 static HRESULT WINAPI
d3drm2_CreateViewport(IDirect3DRM2
*iface
, IDirect3DRMDevice
*device
,
617 IDirect3DRMFrame
*camera
, DWORD x
, DWORD y
, DWORD width
, DWORD height
, IDirect3DRMViewport
**viewport
)
619 FIXME("iface %p, device %p, camera %p, x %u, y %u, width %u, height %u, viewport %p partial stub!\n",
620 iface
, device
, camera
, x
, y
, width
, height
, viewport
);
622 return Direct3DRMViewport_create(&IID_IDirect3DRMViewport
, (IUnknown
**)viewport
);
625 static HRESULT WINAPI
d3drm2_CreateWrap(IDirect3DRM2
*iface
, D3DRMWRAPTYPE type
, IDirect3DRMFrame
*frame
,
626 D3DVALUE ox
, D3DVALUE oy
, D3DVALUE oz
, D3DVALUE dx
, D3DVALUE dy
, D3DVALUE dz
,
627 D3DVALUE ux
, D3DVALUE uy
, D3DVALUE uz
, D3DVALUE ou
, D3DVALUE ov
, D3DVALUE su
, D3DVALUE sv
,
628 IDirect3DRMWrap
**wrap
)
630 FIXME("iface %p, type %#x, frame %p, ox %.8e, oy %.8e, oz %.8e, dx %.8e, dy %.8e, dz %.8e, "
631 "ux %.8e, uy %.8e, uz %.8e, ou %.8e, ov %.8e, su %.8e, sv %.8e, wrap %p stub!\n",
632 iface
, type
, frame
, ox
, oy
, oz
, dx
, dy
, dz
, ux
, uy
, uz
, ou
, ov
, su
, sv
, wrap
);
637 static HRESULT WINAPI
d3drm2_CreateUserVisual(IDirect3DRM2
*iface
,
638 D3DRMUSERVISUALCALLBACK cb
, void *ctx
, IDirect3DRMUserVisual
**visual
)
640 FIXME("iface %p, cb %p, ctx %p, visual %p stub!\n", iface
, cb
, ctx
, visual
);
645 static HRESULT WINAPI
d3drm2_LoadTexture(IDirect3DRM2
*iface
,
646 const char *filename
, IDirect3DRMTexture2
**texture
)
648 FIXME("iface %p, filename %s, texture %p stub!\n", iface
, debugstr_a(filename
), texture
);
650 return Direct3DRMTexture_create(&IID_IDirect3DRMTexture2
, (IUnknown
**)texture
);
653 static HRESULT WINAPI
d3drm2_LoadTextureFromResource(IDirect3DRM2
*iface
, HMODULE module
,
654 const char *resource_name
, const char *resource_type
, IDirect3DRMTexture2
**texture
)
656 FIXME("iface %p, resource_name %s, resource_type %s, texture %p stub!\n",
657 iface
, debugstr_a(resource_name
), debugstr_a(resource_type
), texture
);
659 return Direct3DRMTexture_create(&IID_IDirect3DRMTexture2
, (IUnknown
**)texture
);
662 static HRESULT WINAPI
d3drm2_SetSearchPath(IDirect3DRM2
*iface
, const char *path
)
664 FIXME("iface %p, path %s stub!\n", iface
, debugstr_a(path
));
669 static HRESULT WINAPI
d3drm2_AddSearchPath(IDirect3DRM2
*iface
, const char *path
)
671 FIXME("iface %p, path %s stub!\n", iface
, debugstr_a(path
));
676 static HRESULT WINAPI
d3drm2_GetSearchPath(IDirect3DRM2
*iface
, DWORD
*size
, char *path
)
678 FIXME("iface %p, size %p, path %p stub!\n", iface
, size
, path
);
683 static HRESULT WINAPI
d3drm2_SetDefaultTextureColors(IDirect3DRM2
*iface
, DWORD color_count
)
685 FIXME("iface %p, color_count %u stub!\n", iface
, color_count
);
690 static HRESULT WINAPI
d3drm2_SetDefaultTextureShades(IDirect3DRM2
*iface
, DWORD shade_count
)
692 FIXME("iface %p, shade_count %u stub!\n", iface
, shade_count
);
697 static HRESULT WINAPI
d3drm2_GetDevices(IDirect3DRM2
*iface
, IDirect3DRMDeviceArray
**array
)
699 FIXME("iface %p, array %p stub!\n", iface
, array
);
704 static HRESULT WINAPI
d3drm2_GetNamedObject(IDirect3DRM2
*iface
,
705 const char *name
, IDirect3DRMObject
**object
)
707 FIXME("iface %p, name %s, object %p stub!\n", iface
, debugstr_a(name
), object
);
712 static HRESULT WINAPI
d3drm2_EnumerateObjects(IDirect3DRM2
*iface
, D3DRMOBJECTCALLBACK cb
, void *ctx
)
714 FIXME("iface %p, cb %p, ctx %p stub!\n", iface
, cb
, ctx
);
719 static HRESULT WINAPI
d3drm2_Load(IDirect3DRM2
*iface
, void *source
, void *object_id
, IID
**iids
,
720 DWORD iid_count
, D3DRMLOADOPTIONS flags
, D3DRMLOADCALLBACK load_cb
, void *load_ctx
,
721 D3DRMLOADTEXTURECALLBACK load_tex_cb
, void *load_tex_ctx
, IDirect3DRMFrame
*parent_frame
)
723 struct d3drm
*d3drm
= impl_from_IDirect3DRM2(iface
);
724 IDirect3DRMFrame3
*parent_frame3
= NULL
;
725 HRESULT hr
= D3DRM_OK
;
727 TRACE("iface %p, source %p, object_id %p, iids %p, iid_count %u, flags %#x, "
728 "load_cb %p, load_ctx %p, load_tex_cb %p, load_tex_ctx %p, parent_frame %p.\n",
729 iface
, source
, object_id
, iids
, iid_count
, flags
,
730 load_cb
, load_ctx
, load_tex_cb
, load_tex_ctx
, parent_frame
);
733 hr
= IDirect3DRMFrame_QueryInterface(parent_frame
, &IID_IDirect3DRMFrame3
, (void **)&parent_frame3
);
735 hr
= IDirect3DRM3_Load(&d3drm
->IDirect3DRM3_iface
, source
, object_id
, iids
, iid_count
,
736 flags
, load_cb
, load_ctx
, load_tex_cb
, load_tex_ctx
, parent_frame3
);
738 IDirect3DRMFrame3_Release(parent_frame3
);
743 static HRESULT WINAPI
d3drm2_Tick(IDirect3DRM2
*iface
, D3DVALUE tick
)
745 FIXME("iface %p, tick %.8e stub!\n", iface
, tick
);
750 static HRESULT WINAPI
d3drm2_CreateProgressiveMesh(IDirect3DRM2
*iface
, IDirect3DRMProgressiveMesh
**mesh
)
752 FIXME("iface %p, mesh %p stub!\n", iface
, mesh
);
757 static const struct IDirect3DRM2Vtbl d3drm2_vtbl
=
759 d3drm2_QueryInterface
,
765 d3drm2_CreateMeshBuilder
,
767 d3drm2_CreateAnimation
,
768 d3drm2_CreateAnimationSet
,
769 d3drm2_CreateTexture
,
771 d3drm2_CreateLightRGB
,
772 d3drm2_CreateMaterial
,
774 d3drm2_CreateDeviceFromSurface
,
775 d3drm2_CreateDeviceFromD3D
,
776 d3drm2_CreateDeviceFromClipper
,
777 d3drm2_CreateTextureFromSurface
,
779 d3drm2_CreateViewport
,
781 d3drm2_CreateUserVisual
,
783 d3drm2_LoadTextureFromResource
,
784 d3drm2_SetSearchPath
,
785 d3drm2_AddSearchPath
,
786 d3drm2_GetSearchPath
,
787 d3drm2_SetDefaultTextureColors
,
788 d3drm2_SetDefaultTextureShades
,
790 d3drm2_GetNamedObject
,
791 d3drm2_EnumerateObjects
,
794 d3drm2_CreateProgressiveMesh
,
797 static HRESULT WINAPI
d3drm3_QueryInterface(IDirect3DRM3
*iface
, REFIID riid
, void **out
)
799 struct d3drm
*d3drm
= impl_from_IDirect3DRM3(iface
);
801 return d3drm1_QueryInterface(&d3drm
->IDirect3DRM_iface
, riid
, out
);
804 static ULONG WINAPI
d3drm3_AddRef(IDirect3DRM3
*iface
)
806 struct d3drm
*d3drm
= impl_from_IDirect3DRM3(iface
);
808 return d3drm1_AddRef(&d3drm
->IDirect3DRM_iface
);
811 static ULONG WINAPI
d3drm3_Release(IDirect3DRM3
*iface
)
813 struct d3drm
*d3drm
= impl_from_IDirect3DRM3(iface
);
815 return d3drm1_Release(&d3drm
->IDirect3DRM_iface
);
818 static HRESULT WINAPI
d3drm3_CreateObject(IDirect3DRM3
*iface
,
819 REFCLSID clsid
, IUnknown
*outer
, REFIID iid
, void **out
)
821 FIXME("iface %p, clsid %s, outer %p, iid %s, out %p stub!\n",
822 iface
, debugstr_guid(clsid
), outer
, debugstr_guid(iid
), out
);
827 static HRESULT WINAPI
d3drm3_CreateFrame(IDirect3DRM3
*iface
,
828 IDirect3DRMFrame3
*parent
, IDirect3DRMFrame3
**frame
)
830 TRACE("iface %p, parent %p, frame %p.\n", iface
, parent
, frame
);
832 return Direct3DRMFrame_create(&IID_IDirect3DRMFrame3
, (IUnknown
*)parent
, (IUnknown
**)frame
);
835 static HRESULT WINAPI
d3drm3_CreateMesh(IDirect3DRM3
*iface
, IDirect3DRMMesh
**mesh
)
837 TRACE("iface %p, mesh %p.\n", iface
, mesh
);
839 return Direct3DRMMesh_create(mesh
);
842 static HRESULT WINAPI
d3drm3_CreateMeshBuilder(IDirect3DRM3
*iface
, IDirect3DRMMeshBuilder3
**mesh_builder
)
844 TRACE("iface %p, mesh_builder %p.\n", iface
, mesh_builder
);
846 return Direct3DRMMeshBuilder_create(&IID_IDirect3DRMMeshBuilder3
, (IUnknown
**)mesh_builder
);
849 static HRESULT WINAPI
d3drm3_CreateFace(IDirect3DRM3
*iface
, IDirect3DRMFace2
**face
)
851 TRACE("iface %p, face %p.\n", iface
, face
);
853 return Direct3DRMFace_create(&IID_IDirect3DRMFace2
, (IUnknown
**)face
);
856 static HRESULT WINAPI
d3drm3_CreateAnimation(IDirect3DRM3
*iface
, IDirect3DRMAnimation2
**animation
)
858 FIXME("iface %p, animation %p stub!\n", iface
, animation
);
863 static HRESULT WINAPI
d3drm3_CreateAnimationSet(IDirect3DRM3
*iface
, IDirect3DRMAnimationSet2
**set
)
865 FIXME("iface %p, set %p stub!\n", iface
, set
);
870 static HRESULT WINAPI
d3drm3_CreateTexture(IDirect3DRM3
*iface
,
871 D3DRMIMAGE
*image
, IDirect3DRMTexture3
**texture
)
873 FIXME("iface %p, image %p, texture %p partial stub.\n", iface
, image
, texture
);
875 return Direct3DRMTexture_create(&IID_IDirect3DRMTexture3
, (IUnknown
**)texture
);
878 static HRESULT WINAPI
d3drm3_CreateLight(IDirect3DRM3
*iface
,
879 D3DRMLIGHTTYPE type
, D3DCOLOR color
, IDirect3DRMLight
**light
)
883 FIXME("iface %p, type %#x, color 0x%08x, light %p partial stub!\n", iface
, type
, color
, light
);
885 if (SUCCEEDED(hr
= Direct3DRMLight_create((IUnknown
**)light
)))
887 IDirect3DRMLight_SetType(*light
, type
);
888 IDirect3DRMLight_SetColor(*light
, color
);
894 static HRESULT WINAPI
d3drm3_CreateLightRGB(IDirect3DRM3
*iface
, D3DRMLIGHTTYPE type
,
895 D3DVALUE red
, D3DVALUE green
, D3DVALUE blue
, IDirect3DRMLight
**light
)
899 FIXME("iface %p, type %#x, red %.8e, green %.8e, blue %.8e, light %p partial stub!\n",
900 iface
, type
, red
, green
, blue
, light
);
902 if (SUCCEEDED(hr
= Direct3DRMLight_create((IUnknown
**)light
)))
904 IDirect3DRMLight_SetType(*light
, type
);
905 IDirect3DRMLight_SetColorRGB(*light
, red
, green
, blue
);
911 static HRESULT WINAPI
d3drm3_CreateMaterial(IDirect3DRM3
*iface
,
912 D3DVALUE power
, IDirect3DRMMaterial2
**material
)
916 TRACE("iface %p, power %.8e, material %p.\n", iface
, power
, material
);
918 if (SUCCEEDED(hr
= Direct3DRMMaterial_create(material
)))
919 IDirect3DRMMaterial2_SetPower(*material
, power
);
924 static HRESULT WINAPI
d3drm3_CreateDevice(IDirect3DRM3
*iface
,
925 DWORD width
, DWORD height
, IDirect3DRMDevice3
**device
)
927 FIXME("iface %p, width %u, height %u, device %p partial stub!\n", iface
, width
, height
, device
);
929 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice3
, (IUnknown
**)device
);
932 static HRESULT WINAPI
d3drm3_CreateDeviceFromSurface(IDirect3DRM3
*iface
, GUID
*guid
,
933 IDirectDraw
*ddraw
, IDirectDrawSurface
*backbuffer
, IDirect3DRMDevice3
**device
)
935 FIXME("iface %p, guid %s, ddraw %p, backbuffer %p, device %p partial stub.\n",
936 iface
, debugstr_guid(guid
), ddraw
, backbuffer
, device
);
938 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice3
, (IUnknown
**)device
);
941 static HRESULT WINAPI
d3drm3_CreateDeviceFromD3D(IDirect3DRM3
*iface
,
942 IDirect3D2
*d3d
, IDirect3DDevice2
*d3d_device
, IDirect3DRMDevice3
**device
)
944 FIXME("iface %p, d3d %p, d3d_device %p, device %p partial stub.\n",
945 iface
, d3d
, d3d_device
, device
);
947 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice3
, (IUnknown
**)device
);
950 static HRESULT WINAPI
d3drm3_CreateDeviceFromClipper(IDirect3DRM3
*iface
,
951 IDirectDrawClipper
*clipper
, GUID
*guid
, int width
, int height
,
952 IDirect3DRMDevice3
**device
)
954 FIXME("iface %p, clipper %p, guid %s, width %d, height %d, device %p partial stub.\n",
955 iface
, clipper
, debugstr_guid(guid
), width
, height
, device
);
957 return Direct3DRMDevice_create(&IID_IDirect3DRMDevice3
, (IUnknown
**)device
);
960 static HRESULT WINAPI
d3drm3_CreateShadow(IDirect3DRM3
*iface
, IUnknown
*object
, IDirect3DRMLight
*light
,
961 D3DVALUE px
, D3DVALUE py
, D3DVALUE pz
, D3DVALUE nx
, D3DVALUE ny
, D3DVALUE nz
, IDirect3DRMShadow2
**shadow
)
963 FIXME("iface %p, object %p, light %p, px %.8e, py %.8e, pz %.8e, nx %.8e, ny %.8e, nz %.8e, shadow %p stub!\n",
964 iface
, object
, light
, px
, py
, pz
, nx
, ny
, nz
, shadow
);
969 static HRESULT WINAPI
d3drm3_CreateTextureFromSurface(IDirect3DRM3
*iface
,
970 IDirectDrawSurface
*surface
, IDirect3DRMTexture3
**texture
)
972 FIXME("iface %p, surface %p, texture %p stub!\n", iface
, surface
, texture
);
977 static HRESULT WINAPI
d3drm3_CreateViewport(IDirect3DRM3
*iface
, IDirect3DRMDevice3
*device
,
978 IDirect3DRMFrame3
*camera
, DWORD x
, DWORD y
, DWORD width
, DWORD height
, IDirect3DRMViewport2
**viewport
)
980 FIXME("iface %p, device %p, camera %p, x %u, y %u, width %u, height %u, viewport %p partial stub!\n",
981 iface
, device
, camera
, x
, y
, width
, height
, viewport
);
983 return Direct3DRMViewport_create(&IID_IDirect3DRMViewport2
, (IUnknown
**)viewport
);
986 static HRESULT WINAPI
d3drm3_CreateWrap(IDirect3DRM3
*iface
, D3DRMWRAPTYPE type
, IDirect3DRMFrame3
*frame
,
987 D3DVALUE ox
, D3DVALUE oy
, D3DVALUE oz
, D3DVALUE dx
, D3DVALUE dy
, D3DVALUE dz
,
988 D3DVALUE ux
, D3DVALUE uy
, D3DVALUE uz
, D3DVALUE ou
, D3DVALUE ov
, D3DVALUE su
, D3DVALUE sv
,
989 IDirect3DRMWrap
**wrap
)
991 FIXME("iface %p, type %#x, frame %p, ox %.8e, oy %.8e, oz %.8e, dx %.8e, dy %.8e, dz %.8e, "
992 "ux %.8e, uy %.8e, uz %.8e, ou %.8e, ov %.8e, su %.8e, sv %.8e, wrap %p stub!\n",
993 iface
, type
, frame
, ox
, oy
, oz
, dx
, dy
, dz
, ux
, uy
, uz
, ou
, ov
, su
, sv
, wrap
);
998 static HRESULT WINAPI
d3drm3_CreateUserVisual(IDirect3DRM3
*iface
,
999 D3DRMUSERVISUALCALLBACK cb
, void *ctx
, IDirect3DRMUserVisual
**visual
)
1001 FIXME("iface %p, cb %p, ctx %p, visual %p stub!\n", iface
, cb
, ctx
, visual
);
1006 static HRESULT WINAPI
d3drm3_LoadTexture(IDirect3DRM3
*iface
,
1007 const char *filename
, IDirect3DRMTexture3
**texture
)
1009 FIXME("iface %p, filename %s, texture %p stub!\n", iface
, debugstr_a(filename
), texture
);
1011 return Direct3DRMTexture_create(&IID_IDirect3DRMTexture3
, (IUnknown
**)texture
);
1014 static HRESULT WINAPI
d3drm3_LoadTextureFromResource(IDirect3DRM3
*iface
, HMODULE module
,
1015 const char *resource_name
, const char *resource_type
, IDirect3DRMTexture3
**texture
)
1017 FIXME("iface %p, module %p, resource_name %s, resource_type %s, texture %p stub!\n",
1018 iface
, module
, debugstr_a(resource_name
), debugstr_a(resource_type
), texture
);
1020 return Direct3DRMTexture_create(&IID_IDirect3DRMTexture3
, (IUnknown
**)texture
);
1023 static HRESULT WINAPI
d3drm3_SetSearchPath(IDirect3DRM3
*iface
, const char *path
)
1025 FIXME("iface %p, path %s stub!\n", iface
, debugstr_a(path
));
1030 static HRESULT WINAPI
d3drm3_AddSearchPath(IDirect3DRM3
*iface
, const char *path
)
1032 FIXME("iface %p, path %s stub!\n", iface
, debugstr_a(path
));
1037 static HRESULT WINAPI
d3drm3_GetSearchPath(IDirect3DRM3
*iface
, DWORD
*size
, char *path
)
1039 FIXME("iface %p, size %p, path %p stub!\n", iface
, size
, path
);
1044 static HRESULT WINAPI
d3drm3_SetDefaultTextureColors(IDirect3DRM3
*iface
, DWORD color_count
)
1046 FIXME("iface %p, color_count %u stub!\n", iface
, color_count
);
1051 static HRESULT WINAPI
d3drm3_SetDefaultTextureShades(IDirect3DRM3
*iface
, DWORD shade_count
)
1053 FIXME("iface %p, shade_count %u stub!\n", iface
, shade_count
);
1058 static HRESULT WINAPI
d3drm3_GetDevices(IDirect3DRM3
*iface
, IDirect3DRMDeviceArray
**array
)
1060 FIXME("iface %p, array %p stub!\n", iface
, array
);
1065 static HRESULT WINAPI
d3drm3_GetNamedObject(IDirect3DRM3
*iface
,
1066 const char *name
, IDirect3DRMObject
**object
)
1068 FIXME("iface %p, name %s, object %p stub!\n", iface
, debugstr_a(name
), object
);
1073 static HRESULT WINAPI
d3drm3_EnumerateObjects(IDirect3DRM3
*iface
, D3DRMOBJECTCALLBACK cb
, void *ctx
)
1075 FIXME("iface %p, cb %p, ctx %p stub!\n", iface
, cb
, ctx
);
1080 static HRESULT
load_data(IDirect3DRM3
*iface
, IDirectXFileData
*data_object
, IID
**GUIDs
, DWORD nb_GUIDs
, D3DRMLOADCALLBACK LoadProc
,
1081 void *ArgLP
, D3DRMLOADTEXTURECALLBACK LoadTextureProc
, void *ArgLTP
, IDirect3DRMFrame3
*parent_frame
)
1083 HRESULT ret
= D3DRMERR_BADOBJECT
;
1087 BOOL requested
= FALSE
;
1089 hr
= IDirectXFileData_GetType(data_object
, &guid
);
1090 if (hr
!= DXFILE_OK
)
1093 TRACE("Found object type whose GUID = %s\n", debugstr_guid(guid
));
1095 /* Load object only if it is top level and requested or if it is part of another object */
1097 if (IsEqualGUID(guid
, &TID_D3DRMMesh
))
1099 TRACE("Found TID_D3DRMMesh\n");
1101 for (i
= 0; i
< nb_GUIDs
; i
++)
1102 if (IsEqualGUID(GUIDs
[i
], &IID_IDirect3DRMMeshBuilder
) ||
1103 IsEqualGUID(GUIDs
[i
], &IID_IDirect3DRMMeshBuilder2
) ||
1104 IsEqualGUID(GUIDs
[i
], &IID_IDirect3DRMMeshBuilder3
))
1110 if (requested
|| parent_frame
)
1112 IDirect3DRMMeshBuilder3
*meshbuilder
;
1114 TRACE("Load mesh data\n");
1116 hr
= IDirect3DRM3_CreateMeshBuilder(iface
, &meshbuilder
);
1119 hr
= load_mesh_data(meshbuilder
, data_object
, LoadTextureProc
, ArgLTP
);
1122 /* Only top level objects are notified */
1125 IDirect3DRMObject
*object
;
1127 hr
= IDirect3DRMMeshBuilder3_QueryInterface(meshbuilder
, GUIDs
[i
], (void**)&object
);
1130 LoadProc(object
, GUIDs
[i
], ArgLP
);
1131 IDirect3DRMObject_Release(object
);
1136 IDirect3DRMFrame3_AddVisual(parent_frame
, (IUnknown
*)meshbuilder
);
1139 IDirect3DRMMeshBuilder3_Release(meshbuilder
);
1143 ERR("Cannot process mesh\n");
1146 else if (IsEqualGUID(guid
, &TID_D3DRMFrame
))
1148 TRACE("Found TID_D3DRMFrame\n");
1150 for (i
= 0; i
< nb_GUIDs
; i
++)
1151 if (IsEqualGUID(GUIDs
[i
], &IID_IDirect3DRMFrame
) ||
1152 IsEqualGUID(GUIDs
[i
], &IID_IDirect3DRMFrame2
) ||
1153 IsEqualGUID(GUIDs
[i
], &IID_IDirect3DRMFrame3
))
1159 if (requested
|| parent_frame
)
1161 IDirect3DRMFrame3
*frame
;
1163 TRACE("Load frame data\n");
1165 hr
= IDirect3DRM3_CreateFrame(iface
, parent_frame
, &frame
);
1168 IDirectXFileObject
*child
;
1170 while (SUCCEEDED(hr
= IDirectXFileData_GetNextObject(data_object
, &child
)))
1172 IDirectXFileData
*data
;
1173 IDirectXFileDataReference
*reference
;
1174 IDirectXFileBinary
*binary
;
1176 hr
= IDirectXFileObject_QueryInterface(child
, &IID_IDirectXFileBinary
, (void **)&binary
);
1179 FIXME("Binary Object not supported yet\n");
1180 IDirectXFileBinary_Release(binary
);
1184 hr
= IDirectXFileObject_QueryInterface(child
, &IID_IDirectXFileData
, (void **)&data
);
1187 TRACE("Found Data Object\n");
1188 hr
= load_data(iface
, data
, GUIDs
, nb_GUIDs
, LoadProc
, ArgLP
, LoadTextureProc
, ArgLTP
, frame
);
1189 IDirectXFileData_Release(data
);
1192 hr
= IDirectXFileObject_QueryInterface(child
, &IID_IDirectXFileDataReference
, (void **)&reference
);
1195 TRACE("Found Data Object Reference\n");
1196 IDirectXFileDataReference_Resolve(reference
, &data
);
1197 hr
= load_data(iface
, data
, GUIDs
, nb_GUIDs
, LoadProc
, ArgLP
, LoadTextureProc
, ArgLTP
, frame
);
1198 IDirectXFileData_Release(data
);
1199 IDirectXFileDataReference_Release(reference
);
1204 if (hr
!= DXFILEERR_NOMOREOBJECTS
)
1206 IDirect3DRMFrame3_Release(frame
);
1211 /* Only top level objects are notified */
1214 IDirect3DRMObject
*object
;
1216 hr
= IDirect3DRMFrame3_QueryInterface(frame
, GUIDs
[i
], (void**)&object
);
1219 LoadProc(object
, GUIDs
[i
], ArgLP
);
1220 IDirect3DRMObject_Release(object
);
1223 IDirect3DRMFrame3_Release(frame
);
1227 ERR("Cannot process frame\n");
1230 else if (IsEqualGUID(guid
, &TID_D3DRMMaterial
))
1232 TRACE("Found TID_D3DRMMaterial\n");
1234 /* Cannot be requested so nothing to do */
1236 else if (IsEqualGUID(guid
, &TID_D3DRMFrameTransformMatrix
))
1238 TRACE("Found TID_D3DRMFrameTransformMatrix\n");
1240 /* Cannot be requested */
1243 D3DRMMATRIX4D
*matrix
;
1246 TRACE("Load Frame Transform Matrix data\n");
1248 hr
= IDirectXFileData_GetData(data_object
, NULL
, &size
, (void**)&matrix
);
1249 if ((hr
!= DXFILE_OK
) || (size
!= sizeof(matrix
)))
1252 hr
= IDirect3DRMFrame3_AddTransform(parent_frame
, D3DRMCOMBINE_REPLACE
, *matrix
);
1259 FIXME("Found unknown TID %s\n", debugstr_guid(guid
));
1269 static HRESULT WINAPI
d3drm3_Load(IDirect3DRM3
*iface
, void *source
, void *object_id
, IID
**iids
,
1270 DWORD iid_count
, D3DRMLOADOPTIONS flags
, D3DRMLOADCALLBACK load_cb
, void *load_ctx
,
1271 D3DRMLOADTEXTURECALLBACK load_tex_cb
, void *load_tex_ctx
, IDirect3DRMFrame3
*parent_frame
)
1273 DXFILELOADOPTIONS load_options
;
1274 IDirectXFile
*file
= NULL
;
1275 IDirectXFileEnumObject
*enum_object
= NULL
;
1276 IDirectXFileData
*data
= NULL
;
1280 struct d3drm_file_header
*header
;
1281 HRESULT ret
= D3DRMERR_BADOBJECT
;
1284 TRACE("iface %p, source %p, object_id %p, iids %p, iid_count %u, flags %#x, "
1285 "load_cb %p, load_ctx %p, load_tex_cb %p, load_tex_ctx %p, parent_frame %p.\n",
1286 iface
, source
, object_id
, iids
, iid_count
, flags
,
1287 load_cb
, load_ctx
, load_tex_cb
, load_tex_ctx
, parent_frame
);
1289 TRACE("Looking for GUIDs:\n");
1290 for (i
= 0; i
< iid_count
; ++i
)
1291 TRACE("- %s (%s)\n", debugstr_guid(iids
[i
]), get_IID_string(iids
[i
]));
1293 if (flags
== D3DRMLOAD_FROMMEMORY
)
1295 load_options
= DXFILELOAD_FROMMEMORY
;
1297 else if (flags
== D3DRMLOAD_FROMFILE
)
1299 load_options
= DXFILELOAD_FROMFILE
;
1300 TRACE("Loading from file %s\n", debugstr_a(source
));
1304 FIXME("Load options %#x not supported yet.\n", flags
);
1308 hr
= DirectXFileCreate(&file
);
1309 if (hr
!= DXFILE_OK
)
1312 hr
= IDirectXFile_RegisterTemplates(file
, templates
, strlen(templates
));
1313 if (hr
!= DXFILE_OK
)
1316 hr
= IDirectXFile_CreateEnumObject(file
, source
, load_options
, &enum_object
);
1317 if (hr
!= DXFILE_OK
)
1320 hr
= IDirectXFileEnumObject_GetNextDataObject(enum_object
, &data
);
1321 if (hr
!= DXFILE_OK
)
1324 hr
= IDirectXFileData_GetType(data
, &pGuid
);
1325 if (hr
!= DXFILE_OK
)
1328 TRACE("Found object type whose GUID = %s\n", debugstr_guid(pGuid
));
1330 if (!IsEqualGUID(pGuid
, &TID_DXFILEHeader
))
1332 ret
= D3DRMERR_BADFILE
;
1336 hr
= IDirectXFileData_GetData(data
, NULL
, &size
, (void **)&header
);
1337 if ((hr
!= DXFILE_OK
) || (size
!= sizeof(*header
)))
1340 TRACE("Version is %u.%u, flags %#x.\n", header
->major
, header
->minor
, header
->flags
);
1342 /* Version must be 1.0.x */
1343 if ((header
->major
!= 1) || (header
->minor
!= 0))
1345 ret
= D3DRMERR_BADFILE
;
1349 IDirectXFileData_Release(data
);
1354 hr
= IDirectXFileEnumObject_GetNextDataObject(enum_object
, &data
);
1355 if (hr
== DXFILEERR_NOMOREOBJECTS
)
1357 TRACE("No more object\n");
1360 else if (hr
!= DXFILE_OK
)
1362 ret
= D3DRMERR_BADFILE
;
1366 ret
= load_data(iface
, data
, iids
, iid_count
, load_cb
, load_ctx
, load_tex_cb
, load_tex_ctx
, parent_frame
);
1367 if (ret
!= D3DRM_OK
)
1370 IDirectXFileData_Release(data
);
1378 IDirectXFileData_Release(data
);
1380 IDirectXFileEnumObject_Release(enum_object
);
1382 IDirectXFile_Release(file
);
1387 static HRESULT WINAPI
d3drm3_Tick(IDirect3DRM3
*iface
, D3DVALUE tick
)
1389 FIXME("iface %p, tick %.8e stub!\n", iface
, tick
);
1394 static HRESULT WINAPI
d3drm3_CreateProgressiveMesh(IDirect3DRM3
*iface
, IDirect3DRMProgressiveMesh
**mesh
)
1396 FIXME("iface %p, mesh %p stub!\n", iface
, mesh
);
1401 static HRESULT WINAPI
d3drm3_RegisterClient(IDirect3DRM3
*iface
, REFGUID guid
, DWORD
*id
)
1403 FIXME("iface %p, guid %s, id %p stub!\n", iface
, debugstr_guid(guid
), id
);
1408 static HRESULT WINAPI
d3drm3_UnregisterClient(IDirect3DRM3
*iface
, REFGUID guid
)
1410 FIXME("iface %p, guid %s stub!\n", iface
, debugstr_guid(guid
));
1415 static HRESULT WINAPI
d3drm3_CreateClippedVisual(IDirect3DRM3
*iface
,
1416 IDirect3DRMVisual
*visual
, IDirect3DRMClippedVisual
**clipped_visual
)
1418 FIXME("iface %p, visual %p, clipped_visual %p stub!\n", iface
, visual
, clipped_visual
);
1423 static HRESULT WINAPI
d3drm3_SetOptions(IDirect3DRM3
*iface
, DWORD flags
)
1425 FIXME("iface %p, flags %#x stub!\n", iface
, flags
);
1430 static HRESULT WINAPI
d3drm3_GetOptions(IDirect3DRM3
*iface
, DWORD
*flags
)
1432 FIXME("iface %p, flags %p stub!\n", iface
, flags
);
1437 static const struct IDirect3DRM3Vtbl d3drm3_vtbl
=
1439 d3drm3_QueryInterface
,
1442 d3drm3_CreateObject
,
1445 d3drm3_CreateMeshBuilder
,
1447 d3drm3_CreateAnimation
,
1448 d3drm3_CreateAnimationSet
,
1449 d3drm3_CreateTexture
,
1451 d3drm3_CreateLightRGB
,
1452 d3drm3_CreateMaterial
,
1453 d3drm3_CreateDevice
,
1454 d3drm3_CreateDeviceFromSurface
,
1455 d3drm3_CreateDeviceFromD3D
,
1456 d3drm3_CreateDeviceFromClipper
,
1457 d3drm3_CreateTextureFromSurface
,
1458 d3drm3_CreateShadow
,
1459 d3drm3_CreateViewport
,
1461 d3drm3_CreateUserVisual
,
1463 d3drm3_LoadTextureFromResource
,
1464 d3drm3_SetSearchPath
,
1465 d3drm3_AddSearchPath
,
1466 d3drm3_GetSearchPath
,
1467 d3drm3_SetDefaultTextureColors
,
1468 d3drm3_SetDefaultTextureShades
,
1470 d3drm3_GetNamedObject
,
1471 d3drm3_EnumerateObjects
,
1474 d3drm3_CreateProgressiveMesh
,
1475 d3drm3_RegisterClient
,
1476 d3drm3_UnregisterClient
,
1477 d3drm3_CreateClippedVisual
,
1482 HRESULT WINAPI
Direct3DRMCreate(IDirect3DRM
**d3drm
)
1484 struct d3drm
*object
;
1486 TRACE("d3drm %p.\n", d3drm
);
1488 if (!(object
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(*object
))))
1489 return E_OUTOFMEMORY
;
1491 object
->IDirect3DRM_iface
.lpVtbl
= &d3drm1_vtbl
;
1492 object
->IDirect3DRM2_iface
.lpVtbl
= &d3drm2_vtbl
;
1493 object
->IDirect3DRM3_iface
.lpVtbl
= &d3drm3_vtbl
;
1496 *d3drm
= &object
->IDirect3DRM_iface
;