ReactOS 0.4.15-dev-8222-g9164419
d3drm.c
Go to the documentation of this file.
1/*
2 * Implementation of IDirect3DRM Interface
3 *
4 * Copyright 2010, 2012 Christian Costa
5 * Copyright 2011 André Hentschel
6 * Copyright 2016 Aaryaman Vasishta
7 *
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
12 *
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this library; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 */
22
23#include "d3drm_private.h"
24
26
27static const char* get_IID_string(const GUID* guid)
28{
29 if (IsEqualGUID(guid, &IID_IDirect3DRMFrame))
30 return "IID_IDirect3DRMFrame";
31 else if (IsEqualGUID(guid, &IID_IDirect3DRMFrame2))
32 return "IID_IDirect3DRMFrame2";
33 else if (IsEqualGUID(guid, &IID_IDirect3DRMFrame3))
34 return "IID_IDirect3DRMFrame3";
35 else if (IsEqualGUID(guid, &IID_IDirect3DRMMeshBuilder))
36 return "IID_IDirect3DRMMeshBuilder";
37 else if (IsEqualGUID(guid, &IID_IDirect3DRMMeshBuilder2))
38 return "IID_IDirect3DRMMeshBuilder2";
39 else if (IsEqualGUID(guid, &IID_IDirect3DRMMeshBuilder3))
40 return "IID_IDirect3DRMMeshBuilder3";
41
42 return "?";
43}
44
45static HRESULT d3drm_create_texture_object(void **object, IDirect3DRM *d3drm)
46{
47 struct d3drm_texture *texture;
48 HRESULT hr;
49
51 return hr;
52
53 *object = &texture->IDirect3DRMTexture_iface;
54
55 return hr;
56}
57
58static HRESULT d3drm_create_device_object(void **object, IDirect3DRM *d3drm)
59{
60 struct d3drm_device *device;
61 HRESULT hr;
62
64 return hr;
65
66 *object = &device->IDirect3DRMDevice_iface;
67
68 return hr;
69}
70
71static HRESULT d3drm_create_viewport_object(void **object, IDirect3DRM *d3drm)
72{
73 struct d3drm_viewport *viewport;
74 HRESULT hr;
75
76 if (FAILED(hr = d3drm_viewport_create(&viewport, d3drm)))
77 return hr;
78
79 *object = &viewport->IDirect3DRMViewport_iface;
80
81 return hr;
82}
83
84static HRESULT d3drm_create_face_object(void **object, IDirect3DRM *d3drm)
85{
86 struct d3drm_face *face;
87 HRESULT hr;
88
90 return hr;
91
92 *object = &face->IDirect3DRMFace_iface;
93
94 return hr;
95}
96
97static HRESULT d3drm_create_mesh_builder_object(void **object, IDirect3DRM *d3drm)
98{
100 HRESULT hr;
101
103 return hr;
104
105 *object = &mesh_builder->IDirect3DRMMeshBuilder2_iface;
106
107 return hr;
108}
109
110static HRESULT d3drm_create_frame_object(void **object, IDirect3DRM *d3drm)
111{
112 struct d3drm_frame *frame;
113 HRESULT hr;
114
115 if (FAILED(hr = d3drm_frame_create(&frame, NULL, d3drm)))
116 return hr;
117
118 *object = &frame->IDirect3DRMFrame_iface;
119
120 return hr;
121}
122
123static HRESULT d3drm_create_light_object(void **object, IDirect3DRM *d3drm)
124{
125 struct d3drm_light *light;
126 HRESULT hr;
127
129 return hr;
130
131 *object = &light->IDirect3DRMLight_iface;
132
133 return hr;
134}
135
136static HRESULT d3drm_create_material_object(void **object, IDirect3DRM *d3drm)
137{
138 struct d3drm_material *material;
139 HRESULT hr;
140
141 if (FAILED(hr = d3drm_material_create(&material, d3drm)))
142 return hr;
143
144 *object = &material->IDirect3DRMMaterial2_iface;
145
146 return hr;
147}
148
149static HRESULT d3drm_create_mesh_object(void **object, IDirect3DRM *d3drm)
150{
151 struct d3drm_mesh *mesh;
152 HRESULT hr;
153
155 return hr;
156
157 *object = &mesh->IDirect3DRMMesh_iface;
158
159 return hr;
160}
161
162static HRESULT d3drm_create_animation_object(void **object, IDirect3DRM *d3drm)
163{
164 struct d3drm_animation *animation;
165 HRESULT hr;
166
167 if (FAILED(hr = d3drm_animation_create(&animation, d3drm)))
168 return hr;
169
170 *object = &animation->IDirect3DRMAnimation_iface;
171
172 return hr;
173}
174
175static HRESULT d3drm_create_wrap_object(void **object, IDirect3DRM *d3drm)
176{
177 struct d3drm_wrap *wrap;
178 HRESULT hr;
179
181 return hr;
182
183 *object = &wrap->IDirect3DRMWrap_iface;
184
185 return hr;
186}
187
188struct d3drm
189{
190 IDirect3DRM IDirect3DRM_iface;
191 IDirect3DRM2 IDirect3DRM2_iface;
192 IDirect3DRM3 IDirect3DRM3_iface;
194};
195
196static inline struct d3drm *impl_from_IDirect3DRM(IDirect3DRM *iface)
197{
198 return CONTAINING_RECORD(iface, struct d3drm, IDirect3DRM_iface);
199}
200
201static inline struct d3drm *impl_from_IDirect3DRM2(IDirect3DRM2 *iface)
202{
203 return CONTAINING_RECORD(iface, struct d3drm, IDirect3DRM2_iface);
204}
205
206static inline struct d3drm *impl_from_IDirect3DRM3(IDirect3DRM3 *iface)
207{
208 return CONTAINING_RECORD(iface, struct d3drm, IDirect3DRM3_iface);
209}
210
211static void d3drm_destroy(struct d3drm *d3drm)
212{
214 TRACE("d3drm object %p is being destroyed.\n", d3drm);
215}
216
217static HRESULT WINAPI d3drm1_QueryInterface(IDirect3DRM *iface, REFIID riid, void **out)
218{
219 struct d3drm *d3drm = impl_from_IDirect3DRM(iface);
220
221 TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out);
222
223 if (IsEqualGUID(riid, &IID_IDirect3DRM)
225 {
227 }
228 else if (IsEqualGUID(riid, &IID_IDirect3DRM2))
229 {
231 }
232 else if (IsEqualGUID(riid, &IID_IDirect3DRM3))
233 {
235 }
236 else
237 {
238 *out = NULL;
239 WARN("%s not implemented, returning CLASS_E_CLASSNOTAVAILABLE.\n", debugstr_guid(riid));
241 }
242
243 IUnknown_AddRef((IUnknown *)*out);
244 return S_OK;
245}
246
247static ULONG WINAPI d3drm1_AddRef(IDirect3DRM *iface)
248{
249 struct d3drm *d3drm = impl_from_IDirect3DRM(iface);
250 ULONG refcount = InterlockedIncrement(&d3drm->ref1);
251
252 TRACE("%p increasing refcount to %u.\n", iface, refcount);
253
254 if (refcount == 1)
256
257 return refcount;
258}
259
260static ULONG WINAPI d3drm1_Release(IDirect3DRM *iface)
261{
262 struct d3drm *d3drm = impl_from_IDirect3DRM(iface);
263 ULONG refcount = InterlockedDecrement(&d3drm->ref1);
264
265 TRACE("%p decreasing refcount to %u.\n", iface, refcount);
266
267 if (!refcount && !InterlockedDecrement(&d3drm->iface_count))
269
270 return refcount;
271}
272
273static HRESULT WINAPI d3drm1_CreateObject(IDirect3DRM *iface,
274 REFCLSID clsid, IUnknown *outer, REFIID iid, void **out)
275{
276 struct d3drm *d3drm = impl_from_IDirect3DRM(iface);
277
278 TRACE("iface %p, clsid %s, outer %p, iid %s, out %p.\n",
279 iface, debugstr_guid(clsid), outer, debugstr_guid(iid), out);
280
282}
283
284static HRESULT WINAPI d3drm1_CreateFrame(IDirect3DRM *iface,
285 IDirect3DRMFrame *parent_frame, IDirect3DRMFrame **frame)
286{
287 struct d3drm_frame *object;
288 HRESULT hr;
289
290 TRACE("iface %p, parent_frame %p, frame %p.\n", iface, parent_frame, frame);
291
292 if (FAILED(hr = d3drm_frame_create(&object, (IUnknown *)parent_frame, iface)))
293 return hr;
294
295 *frame = &object->IDirect3DRMFrame_iface;
296
297 return D3DRM_OK;
298}
299
300static HRESULT WINAPI d3drm1_CreateMesh(IDirect3DRM *iface, IDirect3DRMMesh **mesh)
301{
302 struct d3drm *d3drm = impl_from_IDirect3DRM(iface);
303
304 TRACE("iface %p, mesh %p.\n", iface, mesh);
305
307}
308
309static HRESULT WINAPI d3drm1_CreateMeshBuilder(IDirect3DRM *iface, IDirect3DRMMeshBuilder **mesh_builder)
310{
311 struct d3drm *d3drm = impl_from_IDirect3DRM(iface);
312
313 TRACE("iface %p, mesh_builder %p.\n", iface, mesh_builder);
314
315 return IDirect3DRM2_CreateMeshBuilder(&d3drm->IDirect3DRM2_iface, (IDirect3DRMMeshBuilder2 **)mesh_builder);
316}
317
318static HRESULT WINAPI d3drm1_CreateFace(IDirect3DRM *iface, IDirect3DRMFace **face)
319{
320 struct d3drm_face *object;
321 HRESULT hr;
322
323 TRACE("iface %p, face %p.\n", iface, face);
324
325 if (FAILED(hr = d3drm_face_create(&object)))
326 return hr;
327
328 *face = &object->IDirect3DRMFace_iface;
329
330 return S_OK;
331}
332
333static HRESULT WINAPI d3drm1_CreateAnimation(IDirect3DRM *iface, IDirect3DRMAnimation **animation)
334{
335 struct d3drm_animation *object;
336 HRESULT hr;
337
338 TRACE("iface %p, animation %p.\n", iface, animation);
339
340 if (!animation)
341 return D3DRMERR_BADVALUE;
342
343 if (FAILED(hr = d3drm_animation_create(&object, iface)))
344 return hr;
345
346 *animation = &object->IDirect3DRMAnimation_iface;
347
348 return S_OK;
349}
350
351static HRESULT WINAPI d3drm1_CreateAnimationSet(IDirect3DRM *iface, IDirect3DRMAnimationSet **set)
352{
353 FIXME("iface %p, set %p stub!\n", iface, set);
354
355 return E_NOTIMPL;
356}
357
358static HRESULT WINAPI d3drm1_CreateTexture(IDirect3DRM *iface,
359 D3DRMIMAGE *image, IDirect3DRMTexture **texture)
360{
361 struct d3drm *d3drm = impl_from_IDirect3DRM(iface);
362 IDirect3DRMTexture3 *texture3;
363 HRESULT hr;
364
365 TRACE("iface %p, image %p, texture %p.\n", iface, image, texture);
366
367 if (!texture)
368 return D3DRMERR_BADVALUE;
369
371 {
372 *texture = NULL;
373 return hr;
374 }
375
376 hr = IDirect3DRMTexture3_QueryInterface(texture3, &IID_IDirect3DRMTexture, (void **)texture);
378
379 return hr;
380}
381
382static HRESULT WINAPI d3drm1_CreateLight(IDirect3DRM *iface,
383 D3DRMLIGHTTYPE type, D3DCOLOR color, IDirect3DRMLight **light)
384{
385 struct d3drm *d3drm = impl_from_IDirect3DRM(iface);
386
387 TRACE("iface %p, type %#x, color 0x%08x, light %p.\n", iface, type, color, light);
388
390}
391
393 D3DVALUE red, D3DVALUE green, D3DVALUE blue, IDirect3DRMLight **light)
394{
395 struct d3drm *d3drm = impl_from_IDirect3DRM(iface);
396
397 TRACE("iface %p, type %#x, red %.8e, green %.8e, blue %.8e, light %p.\n",
398 iface, type, red, green, blue, light);
399
401}
402
403static HRESULT WINAPI d3drm1_CreateMaterial(IDirect3DRM *iface,
404 D3DVALUE power, IDirect3DRMMaterial **material)
405{
406 struct d3drm *d3drm = impl_from_IDirect3DRM(iface);
407
408 TRACE("iface %p, power %.8e, material %p.\n", iface, power, material);
409
410 return IDirect3DRM3_CreateMaterial(&d3drm->IDirect3DRM3_iface, power, (IDirect3DRMMaterial2 **)material);
411}
412
413static HRESULT WINAPI d3drm1_CreateDevice(IDirect3DRM *iface,
414 DWORD width, DWORD height, IDirect3DRMDevice **device)
415{
416 TRACE("iface %p, width %u, height %u, device %p.\n", iface, width, height, device);
417
418 if (!device)
419 return D3DRMERR_BADVALUE;
420 *device = NULL;
421
422 return D3DRMERR_BADDEVICE;
423}
424
426 IDirectDraw *ddraw, IDirectDrawSurface *backbuffer, IDirect3DRMDevice **device)
427{
428 struct d3drm_device *object;
429 HRESULT hr;
430
431 TRACE("iface %p, guid %s, ddraw %p, backbuffer %p, device %p.\n",
432 iface, debugstr_guid(guid), ddraw, backbuffer, device);
433
434 if (!device)
435 return D3DRMERR_BADVALUE;
436 *device = NULL;
437
438 if (!backbuffer || !ddraw)
439 return D3DRMERR_BADDEVICE;
440
441 if (FAILED(hr = d3drm_device_create(&object, iface)))
442 return hr;
443
444 if (SUCCEEDED(hr = d3drm_device_init(object, 1, ddraw, backbuffer, TRUE)))
445 *device = &object->IDirect3DRMDevice_iface;
446 else
447 d3drm_device_destroy(object);
448
449 return hr;
450}
451
452static HRESULT WINAPI d3drm1_CreateDeviceFromD3D(IDirect3DRM *iface,
453 IDirect3D *d3d, IDirect3DDevice *d3d_device, IDirect3DRMDevice **device)
454{
455 struct d3drm_device *object;
456 HRESULT hr;
457 TRACE("iface %p, d3d %p, d3d_device %p, device %p.\n",
458 iface, d3d, d3d_device, device);
459
460 if (!device)
461 return D3DRMERR_BADVALUE;
462 *device = NULL;
463
464 if (FAILED(hr = d3drm_device_create(&object, iface)))
465 return hr;
466
467 if (FAILED(hr = IDirect3DRMDevice_InitFromD3D(&object->IDirect3DRMDevice_iface, d3d, d3d_device)))
468 {
469 d3drm_device_destroy(object);
470 return hr;
471 }
472 *device = &object->IDirect3DRMDevice_iface;
473
474 return D3DRM_OK;
475}
476
478 IDirectDrawClipper *clipper, GUID *guid, int width, int height,
479 IDirect3DRMDevice **device)
480{
481 struct d3drm_device *object;
482 IDirectDraw *ddraw;
483 IDirectDrawSurface *render_target;
484 HRESULT hr;
485
486 TRACE("iface %p, clipper %p, guid %s, width %d, height %d, device %p.\n",
488
489 if (!device)
490 return D3DRMERR_BADVALUE;
491 *device = NULL;
492
493 if (!clipper || !width || !height)
494 return D3DRMERR_BADVALUE;
495
497 if (FAILED(hr))
498 return hr;
499
500 if (FAILED(hr = d3drm_device_create(&object, iface)))
501 {
502 IDirectDraw_Release(ddraw);
503 return hr;
504 }
505
507 if (FAILED(hr))
508 {
509 IDirectDraw_Release(ddraw);
510 d3drm_device_destroy(object);
511 return hr;
512 }
513
515 IDirectDraw_Release(ddraw);
516 IDirectDrawSurface_Release(render_target);
517 if (FAILED(hr))
518 d3drm_device_destroy(object);
519 else
520 *device = &object->IDirect3DRMDevice_iface;
521
522 return hr;
523}
524
526 IDirectDrawSurface *surface, IDirect3DRMTexture **texture)
527{
528 struct d3drm *d3drm = impl_from_IDirect3DRM(iface);
529 IDirect3DRMTexture3 *texture3;
530 HRESULT hr;
531
532 TRACE("iface %p, surface %p, texture %p.\n", iface, surface, texture);
533
534 if (!texture)
535 return D3DRMERR_BADVALUE;
536
538 {
539 *texture = NULL;
540 return hr;
541 }
542
543 hr = IDirect3DRMTexture3_QueryInterface(texture3, &IID_IDirect3DRMTexture, (void **)texture);
545
546 return hr;
547}
548
549static HRESULT WINAPI d3drm1_CreateShadow(IDirect3DRM *iface, IDirect3DRMVisual *visual,
550 IDirect3DRMLight *light, D3DVALUE px, D3DVALUE py, D3DVALUE pz, D3DVALUE nx, D3DVALUE ny, D3DVALUE nz,
551 IDirect3DRMVisual **shadow)
552{
553 FIXME("iface %p, visual %p, light %p, px %.8e, py %.8e, pz %.8e, nx %.8e, ny %.8e, nz %.8e, shadow %p stub!\n",
554 iface, visual, light, px, py, pz, nx, ny, nz, shadow);
555
556 return E_NOTIMPL;
557}
558
559static HRESULT WINAPI d3drm1_CreateViewport(IDirect3DRM *iface, IDirect3DRMDevice *device,
560 IDirect3DRMFrame *camera, DWORD x, DWORD y, DWORD width, DWORD height, IDirect3DRMViewport **viewport)
561{
562 struct d3drm *d3drm = impl_from_IDirect3DRM(iface);
563 IDirect3DRMDevice3 *device3;
564 IDirect3DRMFrame3 *camera3;
565 IDirect3DRMViewport2 *viewport2;
566 HRESULT hr;
567
568 TRACE("iface %p, device %p, camera %p, x %u, y %u, width %u, height %u, viewport %p.\n",
569 iface, device, camera, x, y, width, height, viewport);
570
571 if (!viewport)
572 return D3DRMERR_BADVALUE;
573 *viewport = NULL;
574
575 if (!device || !camera)
576 return D3DRMERR_BADOBJECT;
577
578 if (FAILED(hr = IDirect3DRMDevice_QueryInterface(device, &IID_IDirect3DRMDevice3, (void **)&device3)))
579 return hr;
580
581 if (FAILED(hr = IDirect3DRMFrame_QueryInterface(camera, &IID_IDirect3DRMFrame3, (void **)&camera3)))
582 {
584 return hr;
585 }
586
587 hr = IDirect3DRM3_CreateViewport(&d3drm->IDirect3DRM3_iface, device3, camera3, x, y, width, height, &viewport2);
590 if (FAILED(hr))
591 return hr;
592
593 hr = IDirect3DRMViewport2_QueryInterface(viewport2, &IID_IDirect3DRMViewport, (void **)viewport);
595
596 return hr;
597}
598
599static HRESULT WINAPI d3drm1_CreateWrap(IDirect3DRM *iface, D3DRMWRAPTYPE type, IDirect3DRMFrame *frame,
601 D3DVALUE ux, D3DVALUE uy, D3DVALUE uz, D3DVALUE ou, D3DVALUE ov, D3DVALUE su, D3DVALUE sv,
602 IDirect3DRMWrap **wrap)
603{
604 struct d3drm_wrap *object;
605 HRESULT hr;
606
607 FIXME("iface %p, type %#x, frame %p, ox %.8e, oy %.8e, oz %.8e, dx %.8e, dy %.8e, dz %.8e, "
608 "ux %.8e, uy %.8e, uz %.8e, ou %.8e, ov %.8e, su %.8e, sv %.8e, wrap %p, semi-stub.\n",
609 iface, type, frame, ox, oy, oz, dx, dy, dz, ux, uy, uz, ou, ov, su, sv, wrap);
610
611 if (!wrap)
612 return D3DRMERR_BADVALUE;
613
614 if (FAILED(hr = d3drm_wrap_create(&object, iface)))
615 return hr;
616
617 *wrap = &object->IDirect3DRMWrap_iface;
618
619 return S_OK;
620}
621
622static HRESULT WINAPI d3drm1_CreateUserVisual(IDirect3DRM *iface,
623 D3DRMUSERVISUALCALLBACK cb, void *ctx, IDirect3DRMUserVisual **visual)
624{
625 FIXME("iface %p, cb %p, ctx %p visual %p stub!\n", iface, cb, ctx, visual);
626
627 return E_NOTIMPL;
628}
629
630static HRESULT WINAPI d3drm1_LoadTexture(IDirect3DRM *iface,
631 const char *filename, IDirect3DRMTexture **texture)
632{
633 struct d3drm_texture *object;
634 HRESULT hr;
635
636 TRACE("iface %p, filename %s, texture %p.\n", iface, debugstr_a(filename), texture);
637
638 if (!texture)
639 return D3DRMERR_BADVALUE;
640
641 if (FAILED(hr = d3drm_texture_create(&object, iface)))
642 return hr;
643
644 *texture = &object->IDirect3DRMTexture_iface;
646 {
648 *texture = NULL;
649 if (!filename)
650 return D3DRMERR_BADVALUE;
651
653 }
654
655 return D3DRM_OK;
656}
657
659 HRSRC resource, IDirect3DRMTexture **texture)
660{
661 struct d3drm_texture *object;
662 HRESULT hr;
663
664 FIXME("iface %p, resource %p, texture %p stub!\n", iface, resource, texture);
665
666 if (FAILED(hr = d3drm_texture_create(&object, iface)))
667 return hr;
668
669 *texture = &object->IDirect3DRMTexture_iface;
670
671 return D3DRM_OK;
672}
673
674static HRESULT WINAPI d3drm1_SetSearchPath(IDirect3DRM *iface, const char *path)
675{
676 FIXME("iface %p, path %s stub!\n", iface, debugstr_a(path));
677
678 return E_NOTIMPL;
679}
680
681static HRESULT WINAPI d3drm1_AddSearchPath(IDirect3DRM *iface, const char *path)
682{
683 FIXME("iface %p, path %s stub!\n", iface, debugstr_a(path));
684
685 return E_NOTIMPL;
686}
687
688static HRESULT WINAPI d3drm1_GetSearchPath(IDirect3DRM *iface, DWORD *size, char *path)
689{
690 FIXME("iface %p, size %p, path %p stub!\n", iface, size, path);
691
692 return E_NOTIMPL;
693}
694
695static HRESULT WINAPI d3drm1_SetDefaultTextureColors(IDirect3DRM *iface, DWORD color_count)
696{
697 FIXME("iface %p, color_count %u stub!\n", iface, color_count);
698
699 return E_NOTIMPL;
700}
701
702static HRESULT WINAPI d3drm1_SetDefaultTextureShades(IDirect3DRM *iface, DWORD shade_count)
703{
704 FIXME("iface %p, shade_count %u stub!\n", iface, shade_count);
705
706 return E_NOTIMPL;
707}
708
709static HRESULT WINAPI d3drm1_GetDevices(IDirect3DRM *iface, IDirect3DRMDeviceArray **array)
710{
711 FIXME("iface %p, array %p stub!\n", iface, array);
712
713 return E_NOTIMPL;
714}
715
716static HRESULT WINAPI d3drm1_GetNamedObject(IDirect3DRM *iface,
717 const char *name, IDirect3DRMObject **object)
718{
719 FIXME("iface %p, name %s, object %p stub!\n", iface, debugstr_a(name), object);
720
721 return E_NOTIMPL;
722}
723
725{
726 FIXME("iface %p, cb %p, ctx %p stub!\n", iface, cb, ctx);
727
728 return E_NOTIMPL;
729}
730
731static HRESULT WINAPI d3drm1_Load(IDirect3DRM *iface, void *source, void *object_id, IID **iids,
732 DWORD iid_count, D3DRMLOADOPTIONS flags, D3DRMLOADCALLBACK load_cb, void *load_ctx,
733 D3DRMLOADTEXTURECALLBACK load_tex_cb, void *load_tex_ctx, IDirect3DRMFrame *parent_frame)
734{
735 struct d3drm *d3drm = impl_from_IDirect3DRM(iface);
736 IDirect3DRMFrame3 *parent_frame3 = NULL;
738
739 TRACE("iface %p, source %p, object_id %p, iids %p, iid_count %u, flags %#x, "
740 "load_cb %p, load_ctx %p, load_tex_cb %p, load_tex_ctx %p, parent_frame %p.\n",
741 iface, source, object_id, iids, iid_count, flags,
742 load_cb, load_ctx, load_tex_cb, load_tex_ctx, parent_frame);
743
744 if (parent_frame)
745 hr = IDirect3DRMFrame_QueryInterface(parent_frame, &IID_IDirect3DRMFrame3, (void **)&parent_frame3);
746 if (SUCCEEDED(hr))
747 hr = IDirect3DRM3_Load(&d3drm->IDirect3DRM3_iface, source, object_id, iids, iid_count,
748 flags, load_cb, load_ctx, load_tex_cb, load_tex_ctx, parent_frame3);
749 if (parent_frame3)
750 IDirect3DRMFrame3_Release(parent_frame3);
751
752 return hr;
753}
754
755static HRESULT WINAPI d3drm1_Tick(IDirect3DRM *iface, D3DVALUE tick)
756{
757 FIXME("iface %p, tick %.8e stub!\n", iface, tick);
758
759 return E_NOTIMPL;
760}
761
762static const struct IDirect3DRMVtbl d3drm1_vtbl =
763{
799};
800
801static HRESULT WINAPI d3drm2_QueryInterface(IDirect3DRM2 *iface, REFIID riid, void **out)
802{
803 struct d3drm *d3drm = impl_from_IDirect3DRM2(iface);
804
806}
807
808static ULONG WINAPI d3drm2_AddRef(IDirect3DRM2 *iface)
809{
810 struct d3drm *d3drm = impl_from_IDirect3DRM2(iface);
811 ULONG refcount = InterlockedIncrement(&d3drm->ref2);
812
813 TRACE("%p increasing refcount to %u.\n", iface, refcount);
814
815 if (refcount == 1)
817
818 return refcount;
819}
820
821static ULONG WINAPI d3drm2_Release(IDirect3DRM2 *iface)
822{
823 struct d3drm *d3drm = impl_from_IDirect3DRM2(iface);
824 ULONG refcount = InterlockedDecrement(&d3drm->ref2);
825
826 TRACE("%p decreasing refcount to %u.\n", iface, refcount);
827
828 if (!refcount && !InterlockedDecrement(&d3drm->iface_count))
830
831 return refcount;
832}
833
834static HRESULT WINAPI d3drm2_CreateObject(IDirect3DRM2 *iface,
835 REFCLSID clsid, IUnknown *outer, REFIID iid, void **out)
836{
837 struct d3drm *d3drm = impl_from_IDirect3DRM2(iface);
838
839 TRACE("iface %p, clsid %s, outer %p, iid %s, out %p.\n",
840 iface, debugstr_guid(clsid), outer, debugstr_guid(iid), out);
841
843}
844
845static HRESULT WINAPI d3drm2_CreateFrame(IDirect3DRM2 *iface,
846 IDirect3DRMFrame *parent_frame, IDirect3DRMFrame2 **frame)
847{
848 struct d3drm *d3drm = impl_from_IDirect3DRM2(iface);
849 struct d3drm_frame *object;
850 HRESULT hr;
851
852 TRACE("iface %p, parent_frame %p, frame %p.\n", iface, parent_frame, frame);
853
854 if (FAILED(hr = d3drm_frame_create(&object, (IUnknown *)parent_frame, &d3drm->IDirect3DRM_iface)))
855 return hr;
856
857 *frame = &object->IDirect3DRMFrame2_iface;
858
859 return D3DRM_OK;
860}
861
862static HRESULT WINAPI d3drm2_CreateMesh(IDirect3DRM2 *iface, IDirect3DRMMesh **mesh)
863{
864 struct d3drm *d3drm = impl_from_IDirect3DRM2(iface);
865
866 TRACE("iface %p, mesh %p.\n", iface, mesh);
867
869}
870
871static HRESULT WINAPI d3drm2_CreateMeshBuilder(IDirect3DRM2 *iface, IDirect3DRMMeshBuilder2 **mesh_builder)
872{
873 struct d3drm *d3drm = impl_from_IDirect3DRM2(iface);
875 HRESULT hr;
876
877 TRACE("iface %p, mesh_builder %p.\n", iface, mesh_builder);
878
880 return hr;
881
882 *mesh_builder = &object->IDirect3DRMMeshBuilder2_iface;
883
884 return S_OK;
885}
886
887static HRESULT WINAPI d3drm2_CreateFace(IDirect3DRM2 *iface, IDirect3DRMFace **face)
888{
889 struct d3drm *d3drm = impl_from_IDirect3DRM2(iface);
890
891 TRACE("iface %p, face %p.\n", iface, face);
892
894}
895
896static HRESULT WINAPI d3drm2_CreateAnimation(IDirect3DRM2 *iface, IDirect3DRMAnimation **animation)
897{
898 struct d3drm *d3drm = impl_from_IDirect3DRM2(iface);
899
900 TRACE("iface %p, animation %p.\n", iface, animation);
901
903}
904
905static HRESULT WINAPI d3drm2_CreateAnimationSet(IDirect3DRM2 *iface, IDirect3DRMAnimationSet **set)
906{
907 FIXME("iface %p, set %p stub!\n", iface, set);
908
909 return E_NOTIMPL;
910}
911
912static HRESULT WINAPI d3drm2_CreateTexture(IDirect3DRM2 *iface,
913 D3DRMIMAGE *image, IDirect3DRMTexture2 **texture)
914{
915 struct d3drm *d3drm = impl_from_IDirect3DRM2(iface);
916 IDirect3DRMTexture3 *texture3;
917 HRESULT hr;
918
919 TRACE("iface %p, image %p, texture %p.\n", iface, image, texture);
920
921 if (!texture)
922 return D3DRMERR_BADVALUE;
923
925 {
926 *texture = NULL;
927 return hr;
928 }
929
930 hr = IDirect3DRMTexture3_QueryInterface(texture3, &IID_IDirect3DRMTexture2, (void **)texture);
932
933 return hr;
934}
935
936static HRESULT WINAPI d3drm2_CreateLight(IDirect3DRM2 *iface,
937 D3DRMLIGHTTYPE type, D3DCOLOR color, IDirect3DRMLight **light)
938{
939 struct d3drm *d3drm = impl_from_IDirect3DRM2(iface);
940
941 TRACE("iface %p, type %#x, color 0x%08x, light %p.\n", iface, type, color, light);
942
944}
945
947 D3DVALUE red, D3DVALUE green, D3DVALUE blue, IDirect3DRMLight **light)
948{
949 struct d3drm *d3drm = impl_from_IDirect3DRM2(iface);
950
951 TRACE("iface %p, type %#x, red %.8e, green %.8e, blue %.8e, light %p.\n",
952 iface, type, red, green, blue, light);
953
955}
956
957static HRESULT WINAPI d3drm2_CreateMaterial(IDirect3DRM2 *iface,
958 D3DVALUE power, IDirect3DRMMaterial **material)
959{
960 struct d3drm *d3drm = impl_from_IDirect3DRM2(iface);
961
962 TRACE("iface %p, power %.8e, material %p.\n", iface, power, material);
963
964 return IDirect3DRM3_CreateMaterial(&d3drm->IDirect3DRM3_iface, power, (IDirect3DRMMaterial2 **)material);
965}
966
967static HRESULT WINAPI d3drm2_CreateDevice(IDirect3DRM2 *iface,
968 DWORD width, DWORD height, IDirect3DRMDevice2 **device)
969{
970 TRACE("iface %p, width %u, height %u, device %p.\n", iface, width, height, device);
971
972 if (!device)
973 return D3DRMERR_BADVALUE;
974 *device = NULL;
975
976 return D3DRMERR_BADDEVICE;
977}
978
980 IDirectDraw *ddraw, IDirectDrawSurface *backbuffer, IDirect3DRMDevice2 **device)
981{
982 struct d3drm *d3drm = impl_from_IDirect3DRM2(iface);
983 IDirect3DRMDevice3 *device3;
984 HRESULT hr;
985 TRACE("iface %p, guid %s, ddraw %p, backbuffer %p, device %p.\n",
986 iface, debugstr_guid(guid), ddraw, backbuffer, device);
987
988 if (!device)
989 return D3DRMERR_BADVALUE;
990 *device = NULL;
992 if (FAILED(hr))
993 return hr;
994
995 hr = IDirect3DRMDevice3_QueryInterface(device3, &IID_IDirect3DRMDevice2, (void**)device);
997
998 return hr;
999}
1000
1001static HRESULT WINAPI d3drm2_CreateDeviceFromD3D(IDirect3DRM2 *iface,
1002 IDirect3D2 *d3d, IDirect3DDevice2 *d3d_device, IDirect3DRMDevice2 **device)
1003{
1004 struct d3drm *d3drm = impl_from_IDirect3DRM2(iface);
1005 IDirect3DRMDevice3 *device3;
1006 HRESULT hr;
1007
1008 TRACE("iface %p, d3d %p, d3d_device %p, device %p.\n",
1009 iface, d3d, d3d_device, device);
1010
1011 if (!device)
1012 return D3DRMERR_BADVALUE;
1013 *device = NULL;
1014
1016 if (FAILED(hr))
1017 return hr;
1018
1019 hr = IDirect3DRMDevice3_QueryInterface(device3, &IID_IDirect3DRMDevice2, (void **)device);
1021
1022 return hr;
1023}
1024
1026 IDirectDrawClipper *clipper, GUID *guid, int width, int height,
1027 IDirect3DRMDevice2 **device)
1028{
1029 struct d3drm *d3drm = impl_from_IDirect3DRM2(iface);
1030 IDirect3DRMDevice3 *device3;
1031 HRESULT hr;
1032
1033 TRACE("iface %p, clipper %p, guid %s, width %d, height %d, device %p.\n",
1034 iface, clipper, debugstr_guid(guid), width, height, device);
1035
1036 if (!device)
1037 return D3DRMERR_BADVALUE;
1038 *device = NULL;
1040 if (FAILED(hr))
1041 return hr;
1042
1043 hr = IDirect3DRMDevice3_QueryInterface(device3, &IID_IDirect3DRMDevice2, (void**)device);
1045
1046 return hr;
1047}
1048
1050 IDirectDrawSurface *surface, IDirect3DRMTexture2 **texture)
1051{
1052 struct d3drm *d3drm = impl_from_IDirect3DRM2(iface);
1053 IDirect3DRMTexture3 *texture3;
1054 HRESULT hr;
1055
1056 TRACE("iface %p, surface %p, texture %p.\n", iface, surface, texture);
1057
1058 if (!texture)
1059 return D3DRMERR_BADVALUE;
1060
1062 {
1063 *texture = NULL;
1064 return hr;
1065 }
1066
1067 hr = IDirect3DRMTexture3_QueryInterface(texture3, &IID_IDirect3DRMTexture, (void **)texture);
1069
1070 return hr;
1071}
1072
1073static HRESULT WINAPI d3drm2_CreateShadow(IDirect3DRM2 *iface, IDirect3DRMVisual *visual,
1074 IDirect3DRMLight *light, D3DVALUE px, D3DVALUE py, D3DVALUE pz, D3DVALUE nx, D3DVALUE ny, D3DVALUE nz,
1075 IDirect3DRMVisual **shadow)
1076{
1077 FIXME("iface %p, visual %p, light %p, px %.8e, py %.8e, pz %.8e, nx %.8e, ny %.8e, nz %.8e, shadow %p stub!\n",
1078 iface, visual, light, px, py, pz, nx, ny, nz, shadow);
1079
1080 return E_NOTIMPL;
1081}
1082
1083static HRESULT WINAPI d3drm2_CreateViewport(IDirect3DRM2 *iface, IDirect3DRMDevice *device,
1084 IDirect3DRMFrame *camera, DWORD x, DWORD y, DWORD width, DWORD height, IDirect3DRMViewport **viewport)
1085{
1086 struct d3drm *d3drm = impl_from_IDirect3DRM2(iface);
1087 IDirect3DRMDevice3 *device3;
1088 IDirect3DRMFrame3 *camera3;
1089 IDirect3DRMViewport2 *viewport2;
1090 HRESULT hr;
1091
1092 TRACE("iface %p, device %p, camera %p, x %u, y %u, width %u, height %u, viewport %p.\n",
1093 iface, device, camera, x, y, width, height, viewport);
1094
1095 if (!viewport)
1096 return D3DRMERR_BADVALUE;
1097 *viewport = NULL;
1098
1099 if (!device || !camera)
1100 return D3DRMERR_BADOBJECT;
1101
1102 if (FAILED(hr = IDirect3DRMDevice_QueryInterface(device, &IID_IDirect3DRMDevice3, (void **)&device3)))
1103 return hr;
1104
1105 if (FAILED(hr = IDirect3DRMFrame_QueryInterface(camera, &IID_IDirect3DRMFrame3, (void **)&camera3)))
1106 {
1108 return hr;
1109 }
1110
1111 hr = IDirect3DRM3_CreateViewport(&d3drm->IDirect3DRM3_iface, device3, camera3, x, y, width, height, &viewport2);
1114 if (FAILED(hr))
1115 return hr;
1116
1117 hr = IDirect3DRMViewport2_QueryInterface(viewport2, &IID_IDirect3DRMViewport, (void **)viewport);
1119
1120 return hr;
1121}
1122
1123static HRESULT WINAPI d3drm2_CreateWrap(IDirect3DRM2 *iface, D3DRMWRAPTYPE type, IDirect3DRMFrame *frame,
1125 D3DVALUE ux, D3DVALUE uy, D3DVALUE uz, D3DVALUE ou, D3DVALUE ov, D3DVALUE su, D3DVALUE sv,
1126 IDirect3DRMWrap **wrap)
1127{
1128 struct d3drm *d3drm = impl_from_IDirect3DRM2(iface);
1129
1130 TRACE("iface %p, type %#x, frame %p, ox %.8e, oy %.8e, oz %.8e, dx %.8e, dy %.8e, dz %.8e, "
1131 "ux %.8e, uy %.8e, uz %.8e, ou %.8e, ov %.8e, su %.8e, sv %.8e, wrap %p.\n",
1132 iface, type, frame, ox, oy, oz, dx, dy, dz, ux, uy, uz, ou, ov, su, sv, wrap);
1133
1134 return IDirect3DRM_CreateWrap(&d3drm->IDirect3DRM_iface, type, frame, ox, oy, oz, dx, dy, dz, ux, uy, uz,
1135 ou, ov, su, sv, wrap);
1136}
1137
1138static HRESULT WINAPI d3drm2_CreateUserVisual(IDirect3DRM2 *iface,
1139 D3DRMUSERVISUALCALLBACK cb, void *ctx, IDirect3DRMUserVisual **visual)
1140{
1141 FIXME("iface %p, cb %p, ctx %p, visual %p stub!\n", iface, cb, ctx, visual);
1142
1143 return E_NOTIMPL;
1144}
1145
1146static HRESULT WINAPI d3drm2_LoadTexture(IDirect3DRM2 *iface,
1147 const char *filename, IDirect3DRMTexture2 **texture)
1148{
1149 struct d3drm *d3drm = impl_from_IDirect3DRM2(iface);
1150 IDirect3DRMTexture3 *texture3;
1151 HRESULT hr;
1152
1153 TRACE("iface %p, filename %s, texture %p.\n", iface, debugstr_a(filename), texture);
1154
1155 if (!texture)
1156 return D3DRMERR_BADVALUE;
1157
1159 {
1160 *texture = NULL;
1161 return hr;
1162 }
1163
1164 hr = IDirect3DRMTexture3_QueryInterface(texture3, &IID_IDirect3DRMTexture2, (void **)texture);
1166
1167 return hr;
1168}
1169
1171 const char *resource_name, const char *resource_type, IDirect3DRMTexture2 **texture)
1172{
1173 struct d3drm *d3drm = impl_from_IDirect3DRM2(iface);
1174 struct d3drm_texture *object;
1175 HRESULT hr;
1176
1177 FIXME("iface %p, resource_name %s, resource_type %s, texture %p stub!\n",
1178 iface, debugstr_a(resource_name), debugstr_a(resource_type), texture);
1179
1181 return hr;
1182
1183 *texture = &object->IDirect3DRMTexture2_iface;
1184
1185 return D3DRM_OK;
1186}
1187
1188static HRESULT WINAPI d3drm2_SetSearchPath(IDirect3DRM2 *iface, const char *path)
1189{
1190 FIXME("iface %p, path %s stub!\n", iface, debugstr_a(path));
1191
1192 return E_NOTIMPL;
1193}
1194
1195static HRESULT WINAPI d3drm2_AddSearchPath(IDirect3DRM2 *iface, const char *path)
1196{
1197 FIXME("iface %p, path %s stub!\n", iface, debugstr_a(path));
1198
1199 return E_NOTIMPL;
1200}
1201
1202static HRESULT WINAPI d3drm2_GetSearchPath(IDirect3DRM2 *iface, DWORD *size, char *path)
1203{
1204 FIXME("iface %p, size %p, path %p stub!\n", iface, size, path);
1205
1206 return E_NOTIMPL;
1207}
1208
1209static HRESULT WINAPI d3drm2_SetDefaultTextureColors(IDirect3DRM2 *iface, DWORD color_count)
1210{
1211 FIXME("iface %p, color_count %u stub!\n", iface, color_count);
1212
1213 return E_NOTIMPL;
1214}
1215
1216static HRESULT WINAPI d3drm2_SetDefaultTextureShades(IDirect3DRM2 *iface, DWORD shade_count)
1217{
1218 FIXME("iface %p, shade_count %u stub!\n", iface, shade_count);
1219
1220 return E_NOTIMPL;
1221}
1222
1223static HRESULT WINAPI d3drm2_GetDevices(IDirect3DRM2 *iface, IDirect3DRMDeviceArray **array)
1224{
1225 FIXME("iface %p, array %p stub!\n", iface, array);
1226
1227 return E_NOTIMPL;
1228}
1229
1230static HRESULT WINAPI d3drm2_GetNamedObject(IDirect3DRM2 *iface,
1231 const char *name, IDirect3DRMObject **object)
1232{
1233 FIXME("iface %p, name %s, object %p stub!\n", iface, debugstr_a(name), object);
1234
1235 return E_NOTIMPL;
1236}
1237
1239{
1240 FIXME("iface %p, cb %p, ctx %p stub!\n", iface, cb, ctx);
1241
1242 return E_NOTIMPL;
1243}
1244
1245static HRESULT WINAPI d3drm2_Load(IDirect3DRM2 *iface, void *source, void *object_id, IID **iids,
1246 DWORD iid_count, D3DRMLOADOPTIONS flags, D3DRMLOADCALLBACK load_cb, void *load_ctx,
1247 D3DRMLOADTEXTURECALLBACK load_tex_cb, void *load_tex_ctx, IDirect3DRMFrame *parent_frame)
1248{
1249 struct d3drm *d3drm = impl_from_IDirect3DRM2(iface);
1250 IDirect3DRMFrame3 *parent_frame3 = NULL;
1252
1253 TRACE("iface %p, source %p, object_id %p, iids %p, iid_count %u, flags %#x, "
1254 "load_cb %p, load_ctx %p, load_tex_cb %p, load_tex_ctx %p, parent_frame %p.\n",
1255 iface, source, object_id, iids, iid_count, flags,
1256 load_cb, load_ctx, load_tex_cb, load_tex_ctx, parent_frame);
1257
1258 if (parent_frame)
1259 hr = IDirect3DRMFrame_QueryInterface(parent_frame, &IID_IDirect3DRMFrame3, (void **)&parent_frame3);
1260 if (SUCCEEDED(hr))
1261 hr = IDirect3DRM3_Load(&d3drm->IDirect3DRM3_iface, source, object_id, iids, iid_count,
1262 flags, load_cb, load_ctx, load_tex_cb, load_tex_ctx, parent_frame3);
1263 if (parent_frame3)
1264 IDirect3DRMFrame3_Release(parent_frame3);
1265
1266 return hr;
1267}
1268
1269static HRESULT WINAPI d3drm2_Tick(IDirect3DRM2 *iface, D3DVALUE tick)
1270{
1271 FIXME("iface %p, tick %.8e stub!\n", iface, tick);
1272
1273 return E_NOTIMPL;
1274}
1275
1276static HRESULT WINAPI d3drm2_CreateProgressiveMesh(IDirect3DRM2 *iface, IDirect3DRMProgressiveMesh **mesh)
1277{
1278 FIXME("iface %p, mesh %p stub!\n", iface, mesh);
1279
1280 return E_NOTIMPL;
1281}
1282
1283static const struct IDirect3DRM2Vtbl d3drm2_vtbl =
1284{
1321};
1322
1323static HRESULT WINAPI d3drm3_QueryInterface(IDirect3DRM3 *iface, REFIID riid, void **out)
1324{
1325 struct d3drm *d3drm = impl_from_IDirect3DRM3(iface);
1326
1328}
1329
1330static ULONG WINAPI d3drm3_AddRef(IDirect3DRM3 *iface)
1331{
1332 struct d3drm *d3drm = impl_from_IDirect3DRM3(iface);
1333 ULONG refcount = InterlockedIncrement(&d3drm->ref3);
1334
1335 TRACE("%p increasing refcount to %u.\n", iface, refcount);
1336
1337 if (refcount == 1)
1339
1340 return refcount;
1341}
1342
1343static ULONG WINAPI d3drm3_Release(IDirect3DRM3 *iface)
1344{
1345 struct d3drm *d3drm = impl_from_IDirect3DRM3(iface);
1346 ULONG refcount = InterlockedDecrement(&d3drm->ref3);
1347
1348 TRACE("%p decreasing refcount to %u.\n", iface, refcount);
1349
1350 if (!refcount && !InterlockedDecrement(&d3drm->iface_count))
1352
1353 return refcount;
1354}
1355
1356static HRESULT WINAPI d3drm3_CreateObject(IDirect3DRM3 *iface,
1357 REFCLSID clsid, IUnknown *outer, REFIID iid, void **out)
1358{
1359 struct d3drm *d3drm = impl_from_IDirect3DRM3(iface);
1361 unsigned int i;
1362 HRESULT hr;
1363
1364 static const struct
1365 {
1366 const CLSID *clsid;
1367 HRESULT (*create_object)(void **object, IDirect3DRM *d3drm);
1368 }
1369 object_table[] =
1370 {
1371 {&CLSID_CDirect3DRMTexture, d3drm_create_texture_object},
1372 {&CLSID_CDirect3DRMDevice, d3drm_create_device_object},
1373 {&CLSID_CDirect3DRMViewport, d3drm_create_viewport_object},
1374 {&CLSID_CDirect3DRMFace, d3drm_create_face_object},
1375 {&CLSID_CDirect3DRMMeshBuilder, d3drm_create_mesh_builder_object},
1376 {&CLSID_CDirect3DRMFrame, d3drm_create_frame_object},
1377 {&CLSID_CDirect3DRMLight, d3drm_create_light_object},
1378 {&CLSID_CDirect3DRMMaterial, d3drm_create_material_object},
1379 {&CLSID_CDirect3DRMMesh, d3drm_create_mesh_object},
1380 {&CLSID_CDirect3DRMAnimation, d3drm_create_animation_object},
1381 {&CLSID_CDirect3DRMWrap, d3drm_create_wrap_object},
1382 };
1383
1384 TRACE("iface %p, clsid %s, outer %p, iid %s, out %p.\n",
1385 iface, debugstr_guid(clsid), outer, debugstr_guid(iid), out);
1386
1387 if (!out)
1388 return D3DRMERR_BADVALUE;
1389
1390 if (!clsid || !iid)
1391 {
1392 *out = NULL;
1393 return D3DRMERR_BADVALUE;
1394 }
1395
1396 if (outer)
1397 {
1398 FIXME("COM aggregation for outer IUnknown (%p) not implemented. Returning E_NOTIMPL.\n", outer);
1399 *out = NULL;
1400 return E_NOTIMPL;
1401 }
1402
1403 for (i = 0; i < ARRAY_SIZE(object_table); ++i)
1404 {
1405 if (IsEqualGUID(clsid, object_table[i].clsid))
1406 {
1407 if (FAILED(hr = object_table[i].create_object((void **)&object, &d3drm->IDirect3DRM_iface)))
1408 {
1409 *out = NULL;
1410 return hr;
1411 }
1412 break;
1413 }
1414 }
1415 if (i == ARRAY_SIZE(object_table))
1416 {
1417 FIXME("%s not implemented. Returning CLASSFACTORY_E_FIRST.\n", debugstr_guid(clsid));
1418 *out = NULL;
1419 return CLASSFACTORY_E_FIRST;
1420 }
1421
1422 if (FAILED(hr = IUnknown_QueryInterface(object, iid, out)))
1423 *out = NULL;
1424 IUnknown_Release(object);
1425
1426 return hr;
1427}
1428
1429static HRESULT WINAPI d3drm3_CreateFrame(IDirect3DRM3 *iface,
1430 IDirect3DRMFrame3 *parent, IDirect3DRMFrame3 **frame)
1431{
1432 struct d3drm *d3drm = impl_from_IDirect3DRM3(iface);
1433 struct d3drm_frame *object;
1434 HRESULT hr;
1435
1436 TRACE("iface %p, parent %p, frame %p.\n", iface, parent, frame);
1437
1439 return hr;
1440
1441 *frame = &object->IDirect3DRMFrame3_iface;
1442
1443 return D3DRM_OK;
1444}
1445
1446static HRESULT WINAPI d3drm3_CreateMesh(IDirect3DRM3 *iface, IDirect3DRMMesh **mesh)
1447{
1448 struct d3drm *d3drm = impl_from_IDirect3DRM3(iface);
1449 struct d3drm_mesh *object;
1450 HRESULT hr;
1451
1452 TRACE("iface %p, mesh %p.\n", iface, mesh);
1453
1455 return hr;
1456
1457 *mesh = &object->IDirect3DRMMesh_iface;
1458
1459 return S_OK;
1460}
1461
1462static HRESULT WINAPI d3drm3_CreateMeshBuilder(IDirect3DRM3 *iface, IDirect3DRMMeshBuilder3 **mesh_builder)
1463{
1464 struct d3drm *d3drm = impl_from_IDirect3DRM3(iface);
1465 struct d3drm_mesh_builder *object;
1466 HRESULT hr;
1467
1468 TRACE("iface %p, mesh_builder %p.\n", iface, mesh_builder);
1469
1471 return hr;
1472
1473 *mesh_builder = &object->IDirect3DRMMeshBuilder3_iface;
1474
1475 return S_OK;
1476}
1477
1478static HRESULT WINAPI d3drm3_CreateFace(IDirect3DRM3 *iface, IDirect3DRMFace2 **face)
1479{
1480 struct d3drm *d3drm = impl_from_IDirect3DRM3(iface);
1481 IDirect3DRMFace *face1;
1482 HRESULT hr;
1483
1484 TRACE("iface %p, face %p.\n", iface, face);
1485
1487 return hr;
1488
1489 hr = IDirect3DRMFace_QueryInterface(face1, &IID_IDirect3DRMFace2, (void **)face);
1491
1492 return hr;
1493}
1494
1495static HRESULT WINAPI d3drm3_CreateAnimation(IDirect3DRM3 *iface, IDirect3DRMAnimation2 **animation)
1496{
1497 struct d3drm *d3drm = impl_from_IDirect3DRM3(iface);
1498 struct d3drm_animation *object;
1499 HRESULT hr;
1500
1501 TRACE("iface %p, animation %p.\n", iface, animation);
1502
1504 return hr;
1505
1506 *animation = &object->IDirect3DRMAnimation2_iface;
1507
1508 return hr;
1509}
1510
1511static HRESULT WINAPI d3drm3_CreateAnimationSet(IDirect3DRM3 *iface, IDirect3DRMAnimationSet2 **set)
1512{
1513 FIXME("iface %p, set %p stub!\n", iface, set);
1514
1515 return E_NOTIMPL;
1516}
1517
1518static HRESULT WINAPI d3drm3_CreateTexture(IDirect3DRM3 *iface,
1519 D3DRMIMAGE *image, IDirect3DRMTexture3 **texture)
1520{
1521 struct d3drm *d3drm = impl_from_IDirect3DRM3(iface);
1522 struct d3drm_texture *object;
1523 HRESULT hr;
1524
1525 TRACE("iface %p, image %p, texture %p.\n", iface, image, texture);
1526
1527 if (!texture)
1528 return D3DRMERR_BADVALUE;
1529
1531 return hr;
1532
1533 *texture = &object->IDirect3DRMTexture3_iface;
1534
1536 {
1538 *texture = NULL;
1539 return D3DRMERR_BADVALUE;
1540 }
1541
1542 return D3DRM_OK;
1543}
1544
1545static HRESULT WINAPI d3drm3_CreateLight(IDirect3DRM3 *iface,
1546 D3DRMLIGHTTYPE type, D3DCOLOR color, IDirect3DRMLight **light)
1547{
1548 struct d3drm *d3drm = impl_from_IDirect3DRM3(iface);
1549 struct d3drm_light *object;
1550 HRESULT hr;
1551
1552 FIXME("iface %p, type %#x, color 0x%08x, light %p partial stub!\n", iface, type, color, light);
1553
1555 {
1556 IDirect3DRMLight_SetType(&object->IDirect3DRMLight_iface, type);
1557 IDirect3DRMLight_SetColor(&object->IDirect3DRMLight_iface, color);
1558 }
1559
1560 *light = &object->IDirect3DRMLight_iface;
1561
1562 return hr;
1563}
1564
1566 D3DVALUE red, D3DVALUE green, D3DVALUE blue, IDirect3DRMLight **light)
1567{
1568 struct d3drm *d3drm = impl_from_IDirect3DRM3(iface);
1569 struct d3drm_light *object;
1570 HRESULT hr;
1571
1572 FIXME("iface %p, type %#x, red %.8e, green %.8e, blue %.8e, light %p partial stub!\n",
1573 iface, type, red, green, blue, light);
1574
1576 {
1577 IDirect3DRMLight_SetType(&object->IDirect3DRMLight_iface, type);
1578 IDirect3DRMLight_SetColorRGB(&object->IDirect3DRMLight_iface, red, green, blue);
1579 }
1580
1581 *light = &object->IDirect3DRMLight_iface;
1582
1583 return hr;
1584}
1585
1586static HRESULT WINAPI d3drm3_CreateMaterial(IDirect3DRM3 *iface,
1587 D3DVALUE power, IDirect3DRMMaterial2 **material)
1588{
1589 struct d3drm *d3drm = impl_from_IDirect3DRM3(iface);
1590 struct d3drm_material *object;
1591 HRESULT hr;
1592
1593 TRACE("iface %p, power %.8e, material %p.\n", iface, power, material);
1594
1596 IDirect3DRMMaterial2_SetPower(&object->IDirect3DRMMaterial2_iface, power);
1597
1598 *material = &object->IDirect3DRMMaterial2_iface;
1599
1600 return hr;
1601}
1602
1603static HRESULT WINAPI d3drm3_CreateDevice(IDirect3DRM3 *iface,
1604 DWORD width, DWORD height, IDirect3DRMDevice3 **device)
1605{
1606 TRACE("iface %p, width %u, height %u, device %p.\n", iface, width, height, device);
1607
1608 if (!device)
1609 return D3DRMERR_BADVALUE;
1610 *device = NULL;
1611
1612 return D3DRMERR_BADDEVICE;
1613}
1614
1616 IDirectDraw *ddraw, IDirectDrawSurface *backbuffer, DWORD flags, IDirect3DRMDevice3 **device)
1617{
1618 struct d3drm *d3drm = impl_from_IDirect3DRM3(iface);
1619 struct d3drm_device *object;
1620 BOOL use_z_surface;
1621 HRESULT hr;
1622
1623 TRACE("iface %p, guid %s, ddraw %p, backbuffer %p, flags %#x, device %p.\n",
1624 iface, debugstr_guid(guid), ddraw, backbuffer, flags, device);
1625
1626 if (!device)
1627 return D3DRMERR_BADVALUE;
1628 *device = NULL;
1629
1630 if (!backbuffer || !ddraw)
1631 return D3DRMERR_BADDEVICE;
1632
1634 return hr;
1635
1636 use_z_surface = !(flags & D3DRMDEVICE_NOZBUFFER);
1637
1638 if (SUCCEEDED(hr = d3drm_device_init(object, 3, ddraw, backbuffer, use_z_surface)))
1639 *device = &object->IDirect3DRMDevice3_iface;
1640 else
1641 d3drm_device_destroy(object);
1642
1643 return hr;
1644}
1645
1646static HRESULT WINAPI d3drm3_CreateDeviceFromD3D(IDirect3DRM3 *iface,
1647 IDirect3D2 *d3d, IDirect3DDevice2 *d3d_device, IDirect3DRMDevice3 **device)
1648{
1649 struct d3drm *d3drm = impl_from_IDirect3DRM3(iface);
1650 struct d3drm_device *object;
1651 HRESULT hr;
1652
1653 TRACE("iface %p, d3d %p, d3d_device %p, device %p.\n",
1654 iface, d3d, d3d_device, device);
1655
1656 if (!device)
1657 return D3DRMERR_BADVALUE;
1658 *device = NULL;
1659
1661 return hr;
1662
1663 if (FAILED(hr = IDirect3DRMDevice3_InitFromD3D2(&object->IDirect3DRMDevice3_iface, d3d, d3d_device)))
1664 {
1665 d3drm_device_destroy(object);
1666 return hr;
1667 }
1668 *device = &object->IDirect3DRMDevice3_iface;
1669
1670 return D3DRM_OK;
1671}
1672
1674 IDirectDrawClipper *clipper, GUID *guid, int width, int height,
1675 IDirect3DRMDevice3 **device)
1676{
1677 struct d3drm *d3drm = impl_from_IDirect3DRM3(iface);
1678 struct d3drm_device *object;
1679 IDirectDraw *ddraw;
1680 IDirectDrawSurface *render_target;
1681 HRESULT hr;
1682
1683 TRACE("iface %p, clipper %p, guid %s, width %d, height %d, device %p.\n",
1685
1686 if (!device)
1687 return D3DRMERR_BADVALUE;
1688 *device = NULL;
1689
1690 if (!clipper || !width || !height)
1691 return D3DRMERR_BADVALUE;
1692
1694 if (FAILED(hr))
1695 return hr;
1696
1698 {
1699 IDirectDraw_Release(ddraw);
1700 return hr;
1701 }
1702
1704 if (FAILED(hr))
1705 {
1706 IDirectDraw_Release(ddraw);
1707 d3drm_device_destroy(object);
1708 return hr;
1709 }
1710
1712 IDirectDraw_Release(ddraw);
1713 IDirectDrawSurface_Release(render_target);
1714 if (FAILED(hr))
1715 d3drm_device_destroy(object);
1716 else
1717 *device = &object->IDirect3DRMDevice3_iface;
1718
1719 return hr;
1720}
1721
1722static HRESULT WINAPI d3drm3_CreateShadow(IDirect3DRM3 *iface, IUnknown *object, IDirect3DRMLight *light,
1723 D3DVALUE px, D3DVALUE py, D3DVALUE pz, D3DVALUE nx, D3DVALUE ny, D3DVALUE nz, IDirect3DRMShadow2 **shadow)
1724{
1725 FIXME("iface %p, object %p, light %p, px %.8e, py %.8e, pz %.8e, nx %.8e, ny %.8e, nz %.8e, shadow %p stub!\n",
1726 iface, object, light, px, py, pz, nx, ny, nz, shadow);
1727
1728 return E_NOTIMPL;
1729}
1730
1732 IDirectDrawSurface *surface, IDirect3DRMTexture3 **texture)
1733{
1734 struct d3drm *d3drm = impl_from_IDirect3DRM3(iface);
1735 struct d3drm_texture *object;
1736 HRESULT hr;
1737
1738 TRACE("iface %p, surface %p, texture %p.\n", iface, surface, texture);
1739
1740 if (!texture)
1741 return D3DRMERR_BADVALUE;
1742
1744 return hr;
1745
1746 *texture = &object->IDirect3DRMTexture3_iface;
1747
1749 {
1751 *texture = NULL;
1752 return D3DRMERR_BADVALUE;
1753 }
1754
1755 return D3DRM_OK;
1756}
1757
1758static HRESULT WINAPI d3drm3_CreateViewport(IDirect3DRM3 *iface, IDirect3DRMDevice3 *device,
1759 IDirect3DRMFrame3 *camera, DWORD x, DWORD y, DWORD width, DWORD height, IDirect3DRMViewport2 **viewport)
1760{
1761 struct d3drm *d3drm = impl_from_IDirect3DRM3(iface);
1762 struct d3drm_viewport *object;
1763 HRESULT hr;
1764
1765 TRACE("iface %p, device %p, camera %p, x %u, y %u, width %u, height %u, viewport %p.\n",
1766 iface, device, camera, x, y, width, height, viewport);
1767
1768 if (!viewport)
1769 return D3DRMERR_BADVALUE;
1770 *viewport = NULL;
1771
1772 if (!device || !camera)
1773 return D3DRMERR_BADOBJECT;
1774
1776 return hr;
1777
1778 *viewport = &object->IDirect3DRMViewport2_iface;
1779
1780 if (FAILED(hr = IDirect3DRMViewport2_Init(*viewport, device, camera, x, y, width, height)))
1781 {
1783 *viewport = NULL;
1784 return D3DRMERR_BADVALUE;
1785 }
1786
1787 return D3DRM_OK;
1788}
1789
1790static HRESULT WINAPI d3drm3_CreateWrap(IDirect3DRM3 *iface, D3DRMWRAPTYPE type, IDirect3DRMFrame3 *frame,
1792 D3DVALUE ux, D3DVALUE uy, D3DVALUE uz, D3DVALUE ou, D3DVALUE ov, D3DVALUE su, D3DVALUE sv,
1793 IDirect3DRMWrap **wrap)
1794{
1795 struct d3drm *d3drm = impl_from_IDirect3DRM3(iface);
1796 struct d3drm_wrap *object;
1797 HRESULT hr;
1798
1799 FIXME("iface %p, type %#x, frame %p, ox %.8e, oy %.8e, oz %.8e, dx %.8e, dy %.8e, dz %.8e, "
1800 "ux %.8e, uy %.8e, uz %.8e, ou %.8e, ov %.8e, su %.8e, sv %.8e, wrap %p, semi-stub.\n",
1801 iface, type, frame, ox, oy, oz, dx, dy, dz, ux, uy, uz, ou, ov, su, sv, wrap);
1802
1803 if (!wrap)
1804 return D3DRMERR_BADVALUE;
1805
1807 return hr;
1808
1809 *wrap = &object->IDirect3DRMWrap_iface;
1810
1811 return S_OK;
1812}
1813
1814static HRESULT WINAPI d3drm3_CreateUserVisual(IDirect3DRM3 *iface,
1815 D3DRMUSERVISUALCALLBACK cb, void *ctx, IDirect3DRMUserVisual **visual)
1816{
1817 FIXME("iface %p, cb %p, ctx %p, visual %p stub!\n", iface, cb, ctx, visual);
1818
1819 return E_NOTIMPL;
1820}
1821
1822static HRESULT WINAPI d3drm3_LoadTexture(IDirect3DRM3 *iface,
1823 const char *filename, IDirect3DRMTexture3 **texture)
1824{
1825 struct d3drm *d3drm = impl_from_IDirect3DRM3(iface);
1826 struct d3drm_texture *object;
1827 HRESULT hr;
1828
1829 TRACE("iface %p, filename %s, texture %p.\n", iface, debugstr_a(filename), texture);
1830
1831 if (!texture)
1832 return D3DRMERR_BADVALUE;
1833
1835 return hr;
1836
1837 *texture = &object->IDirect3DRMTexture3_iface;
1839 {
1841 *texture = NULL;
1843 }
1844
1845 return D3DRM_OK;
1846}
1847
1849 const char *resource_name, const char *resource_type, IDirect3DRMTexture3 **texture)
1850{
1851 struct d3drm *d3drm = impl_from_IDirect3DRM3(iface);
1852 struct d3drm_texture *object;
1853 HRESULT hr;
1854
1855 FIXME("iface %p, module %p, resource_name %s, resource_type %s, texture %p stub!\n",
1856 iface, module, debugstr_a(resource_name), debugstr_a(resource_type), texture);
1857
1859 return hr;
1860
1861 *texture = &object->IDirect3DRMTexture3_iface;
1862
1863 return D3DRM_OK;
1864}
1865
1866static HRESULT WINAPI d3drm3_SetSearchPath(IDirect3DRM3 *iface, const char *path)
1867{
1868 FIXME("iface %p, path %s stub!\n", iface, debugstr_a(path));
1869
1870 return E_NOTIMPL;
1871}
1872
1873static HRESULT WINAPI d3drm3_AddSearchPath(IDirect3DRM3 *iface, const char *path)
1874{
1875 FIXME("iface %p, path %s stub!\n", iface, debugstr_a(path));
1876
1877 return E_NOTIMPL;
1878}
1879
1880static HRESULT WINAPI d3drm3_GetSearchPath(IDirect3DRM3 *iface, DWORD *size, char *path)
1881{
1882 FIXME("iface %p, size %p, path %p stub!\n", iface, size, path);
1883
1884 return E_NOTIMPL;
1885}
1886
1887static HRESULT WINAPI d3drm3_SetDefaultTextureColors(IDirect3DRM3 *iface, DWORD color_count)
1888{
1889 FIXME("iface %p, color_count %u stub!\n", iface, color_count);
1890
1891 return E_NOTIMPL;
1892}
1893
1894static HRESULT WINAPI d3drm3_SetDefaultTextureShades(IDirect3DRM3 *iface, DWORD shade_count)
1895{
1896 FIXME("iface %p, shade_count %u stub!\n", iface, shade_count);
1897
1898 return E_NOTIMPL;
1899}
1900
1901static HRESULT WINAPI d3drm3_GetDevices(IDirect3DRM3 *iface, IDirect3DRMDeviceArray **array)
1902{
1903 FIXME("iface %p, array %p stub!\n", iface, array);
1904
1905 return E_NOTIMPL;
1906}
1907
1908static HRESULT WINAPI d3drm3_GetNamedObject(IDirect3DRM3 *iface,
1909 const char *name, IDirect3DRMObject **object)
1910{
1911 FIXME("iface %p, name %s, object %p stub!\n", iface, debugstr_a(name), object);
1912
1913 return E_NOTIMPL;
1914}
1915
1917{
1918 FIXME("iface %p, cb %p, ctx %p stub!\n", iface, cb, ctx);
1919
1920 return E_NOTIMPL;
1921}
1922
1923static HRESULT load_data(IDirect3DRM3 *iface, IDirectXFileData *data_object, IID **GUIDs, DWORD nb_GUIDs, D3DRMLOADCALLBACK LoadProc,
1924 void *ArgLP, D3DRMLOADTEXTURECALLBACK LoadTextureProc, void *ArgLTP, IDirect3DRMFrame3 *parent_frame)
1925{
1927 HRESULT hr;
1928 const GUID* guid;
1929 DWORD i;
1930 BOOL requested = FALSE;
1931
1932 hr = IDirectXFileData_GetType(data_object, &guid);
1933 if (hr != DXFILE_OK)
1934 goto end;
1935
1936 TRACE("Found object type whose GUID = %s\n", debugstr_guid(guid));
1937
1938 /* Load object only if it is top level and requested or if it is part of another object */
1939
1940 if (IsEqualGUID(guid, &TID_D3DRMMesh))
1941 {
1942 TRACE("Found TID_D3DRMMesh\n");
1943
1944 for (i = 0; i < nb_GUIDs; i++)
1945 if (IsEqualGUID(GUIDs[i], &IID_IDirect3DRMMeshBuilder) ||
1946 IsEqualGUID(GUIDs[i], &IID_IDirect3DRMMeshBuilder2) ||
1947 IsEqualGUID(GUIDs[i], &IID_IDirect3DRMMeshBuilder3))
1948 {
1949 requested = TRUE;
1950 break;
1951 }
1952
1953 if (requested || parent_frame)
1954 {
1955 IDirect3DRMMeshBuilder3 *meshbuilder;
1956
1957 TRACE("Load mesh data\n");
1958
1959 hr = IDirect3DRM3_CreateMeshBuilder(iface, &meshbuilder);
1960 if (SUCCEEDED(hr))
1961 {
1962 hr = load_mesh_data(meshbuilder, data_object, LoadTextureProc, ArgLTP);
1963 if (SUCCEEDED(hr))
1964 {
1965 /* Only top level objects are notified */
1966 if (!parent_frame)
1967 {
1968 IDirect3DRMObject *object;
1969
1970 hr = IDirect3DRMMeshBuilder3_QueryInterface(meshbuilder, GUIDs[i], (void**)&object);
1971 if (SUCCEEDED(hr))
1972 {
1973 LoadProc(object, GUIDs[i], ArgLP);
1975 }
1976 }
1977 else
1978 {
1979 IDirect3DRMFrame3_AddVisual(parent_frame, (IUnknown*)meshbuilder);
1980 }
1981 }
1983 }
1984
1985 if (FAILED(hr))
1986 ERR("Cannot process mesh\n");
1987 }
1988 }
1989 else if (IsEqualGUID(guid, &TID_D3DRMFrame))
1990 {
1991 TRACE("Found TID_D3DRMFrame\n");
1992
1993 for (i = 0; i < nb_GUIDs; i++)
1994 if (IsEqualGUID(GUIDs[i], &IID_IDirect3DRMFrame) ||
1995 IsEqualGUID(GUIDs[i], &IID_IDirect3DRMFrame2) ||
1996 IsEqualGUID(GUIDs[i], &IID_IDirect3DRMFrame3))
1997 {
1998 requested = TRUE;
1999 break;
2000 }
2001
2002 if (requested || parent_frame)
2003 {
2004 IDirect3DRMFrame3 *frame;
2005
2006 TRACE("Load frame data\n");
2007
2008 hr = IDirect3DRM3_CreateFrame(iface, parent_frame, &frame);
2009 if (SUCCEEDED(hr))
2010 {
2011 IDirectXFileObject *child;
2012
2013 while (SUCCEEDED(hr = IDirectXFileData_GetNextObject(data_object, &child)))
2014 {
2015 IDirectXFileData *data;
2016 IDirectXFileDataReference *reference;
2017 IDirectXFileBinary *binary;
2018
2020 &IID_IDirectXFileBinary, (void **)&binary)))
2021 {
2022 FIXME("Binary Object not supported yet\n");
2024 }
2026 &IID_IDirectXFileData, (void **)&data)))
2027 {
2028 TRACE("Found Data Object\n");
2029 hr = load_data(iface, data, GUIDs, nb_GUIDs, LoadProc, ArgLP, LoadTextureProc, ArgLTP, frame);
2031 }
2033 &IID_IDirectXFileDataReference, (void **)&reference)))
2034 {
2035 TRACE("Found Data Object Reference\n");
2037 hr = load_data(iface, data, GUIDs, nb_GUIDs, LoadProc, ArgLP, LoadTextureProc, ArgLTP, frame);
2040 }
2042 }
2043
2045 {
2047 goto end;
2048 }
2049 hr = S_OK;
2050
2051 /* Only top level objects are notified */
2052 if (!parent_frame)
2053 {
2054 IDirect3DRMObject *object;
2055
2056 hr = IDirect3DRMFrame3_QueryInterface(frame, GUIDs[i], (void**)&object);
2057 if (SUCCEEDED(hr))
2058 {
2059 LoadProc(object, GUIDs[i], ArgLP);
2061 }
2062 }
2064 }
2065
2066 if (FAILED(hr))
2067 ERR("Cannot process frame\n");
2068 }
2069 }
2070 else if (IsEqualGUID(guid, &TID_D3DRMMaterial))
2071 {
2072 TRACE("Found TID_D3DRMMaterial\n");
2073
2074 /* Cannot be requested so nothing to do */
2075 }
2076 else if (IsEqualGUID(guid, &TID_D3DRMFrameTransformMatrix))
2077 {
2078 TRACE("Found TID_D3DRMFrameTransformMatrix\n");
2079
2080 /* Cannot be requested */
2081 if (parent_frame)
2082 {
2084 DWORD size;
2085
2086 TRACE("Load Frame Transform Matrix data\n");
2087
2088 hr = IDirectXFileData_GetData(data_object, NULL, &size, (void**)&matrix);
2089 if ((hr != DXFILE_OK) || (size != sizeof(matrix)))
2090 goto end;
2091
2093 if (FAILED(hr))
2094 goto end;
2095 }
2096 }
2097 else
2098 {
2099 FIXME("Found unknown TID %s\n", debugstr_guid(guid));
2100 }
2101
2102 ret = D3DRM_OK;
2103
2104end:
2105
2106 return ret;
2107}
2108
2109static HRESULT WINAPI d3drm3_Load(IDirect3DRM3 *iface, void *source, void *object_id, IID **iids,
2110 DWORD iid_count, D3DRMLOADOPTIONS flags, D3DRMLOADCALLBACK load_cb, void *load_ctx,
2111 D3DRMLOADTEXTURECALLBACK load_tex_cb, void *load_tex_ctx, IDirect3DRMFrame3 *parent_frame)
2112{
2113 DXFILELOADOPTIONS load_options;
2114 IDirectXFile *file = NULL;
2115 IDirectXFileEnumObject *enum_object = NULL;
2116 IDirectXFileData *data = NULL;
2117 HRESULT hr;
2118 const GUID* pGuid;
2119 DWORD size;
2120 struct d3drm_file_header *header;
2122 DWORD i;
2123
2124 TRACE("iface %p, source %p, object_id %p, iids %p, iid_count %u, flags %#x, "
2125 "load_cb %p, load_ctx %p, load_tex_cb %p, load_tex_ctx %p, parent_frame %p.\n",
2126 iface, source, object_id, iids, iid_count, flags,
2127 load_cb, load_ctx, load_tex_cb, load_tex_ctx, parent_frame);
2128
2129 TRACE("Looking for GUIDs:\n");
2130 for (i = 0; i < iid_count; ++i)
2131 TRACE("- %s (%s)\n", debugstr_guid(iids[i]), get_IID_string(iids[i]));
2132
2134 {
2135 load_options = DXFILELOAD_FROMMEMORY;
2136 }
2137 else if (flags == D3DRMLOAD_FROMFILE)
2138 {
2139 load_options = DXFILELOAD_FROMFILE;
2140 TRACE("Loading from file %s\n", debugstr_a(source));
2141 }
2142 else
2143 {
2144 FIXME("Load options %#x not supported yet.\n", flags);
2145 return E_NOTIMPL;
2146 }
2147
2149 if (hr != DXFILE_OK)
2150 goto end;
2151
2153 if (hr != DXFILE_OK)
2154 goto end;
2155
2156 hr = IDirectXFile_CreateEnumObject(file, source, load_options, &enum_object);
2157 if (hr != DXFILE_OK)
2158 goto end;
2159
2161 if (hr != DXFILE_OK)
2162 goto end;
2163
2164 hr = IDirectXFileData_GetType(data, &pGuid);
2165 if (hr != DXFILE_OK)
2166 goto end;
2167
2168 TRACE("Found object type whose GUID = %s\n", debugstr_guid(pGuid));
2169
2170 if (!IsEqualGUID(pGuid, &TID_DXFILEHeader))
2171 {
2173 goto end;
2174 }
2175
2177 if ((hr != DXFILE_OK) || (size != sizeof(*header)))
2178 goto end;
2179
2180 TRACE("Version is %u.%u, flags %#x.\n", header->major, header->minor, header->flags);
2181
2182 /* Version must be 1.0.x */
2183 if ((header->major != 1) || (header->minor != 0))
2184 {
2186 goto end;
2187 }
2188
2190 data = NULL;
2191
2192 while (1)
2193 {
2196 {
2197 TRACE("No more object\n");
2198 break;
2199 }
2200 else if (hr != DXFILE_OK)
2201 {
2203 goto end;
2204 }
2205
2206 ret = load_data(iface, data, iids, iid_count, load_cb, load_ctx, load_tex_cb, load_tex_ctx, parent_frame);
2207 if (ret != D3DRM_OK)
2208 goto end;
2209
2211 data = NULL;
2212 }
2213
2214 ret = D3DRM_OK;
2215
2216end:
2217 if (data)
2219 if (enum_object)
2220 IDirectXFileEnumObject_Release(enum_object);
2221 if (file)
2223
2224 return ret;
2225}
2226
2227static HRESULT WINAPI d3drm3_Tick(IDirect3DRM3 *iface, D3DVALUE tick)
2228{
2229 FIXME("iface %p, tick %.8e stub!\n", iface, tick);
2230
2231 return E_NOTIMPL;
2232}
2233
2234static HRESULT WINAPI d3drm3_CreateProgressiveMesh(IDirect3DRM3 *iface, IDirect3DRMProgressiveMesh **mesh)
2235{
2236 FIXME("iface %p, mesh %p stub!\n", iface, mesh);
2237
2238 return E_NOTIMPL;
2239}
2240
2241static HRESULT WINAPI d3drm3_RegisterClient(IDirect3DRM3 *iface, REFGUID guid, DWORD *id)
2242{
2243 FIXME("iface %p, guid %s, id %p stub!\n", iface, debugstr_guid(guid), id);
2244
2245 return E_NOTIMPL;
2246}
2247
2249{
2250 FIXME("iface %p, guid %s stub!\n", iface, debugstr_guid(guid));
2251
2252 return E_NOTIMPL;
2253}
2254
2255static HRESULT WINAPI d3drm3_CreateClippedVisual(IDirect3DRM3 *iface,
2256 IDirect3DRMVisual *visual, IDirect3DRMClippedVisual **clipped_visual)
2257{
2258 FIXME("iface %p, visual %p, clipped_visual %p stub!\n", iface, visual, clipped_visual);
2259
2260 return E_NOTIMPL;
2261}
2262
2263static HRESULT WINAPI d3drm3_SetOptions(IDirect3DRM3 *iface, DWORD flags)
2264{
2265 FIXME("iface %p, flags %#x stub!\n", iface, flags);
2266
2267 return E_NOTIMPL;
2268}
2269
2270static HRESULT WINAPI d3drm3_GetOptions(IDirect3DRM3 *iface, DWORD *flags)
2271{
2272 FIXME("iface %p, flags %p stub!\n", iface, flags);
2273
2274 return E_NOTIMPL;
2275}
2276
2277static const struct IDirect3DRM3Vtbl d3drm3_vtbl =
2278{
2320};
2321
2323{
2324 struct d3drm *object;
2325
2326 TRACE("d3drm %p.\n", d3drm);
2327
2328 if (!(object = heap_alloc_zero(sizeof(*object))))
2329 return E_OUTOFMEMORY;
2330
2331 object->IDirect3DRM_iface.lpVtbl = &d3drm1_vtbl;
2332 object->IDirect3DRM2_iface.lpVtbl = &d3drm2_vtbl;
2333 object->IDirect3DRM3_iface.lpVtbl = &d3drm3_vtbl;
2334 object->ref1 = 1;
2335 object->iface_count = 1;
2336
2337 *d3drm = &object->IDirect3DRM_iface;
2338
2339 return S_OK;
2340}
2341
2343{
2344 return S_FALSE;
2345}
2346
2348{
2349 TRACE("(%s, %s, %p): stub\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
2350
2351 if(!ppv)
2352 return E_INVALIDARG;
2353
2355}
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
static BOOL heap_free(void *mem)
Definition: appwiz.h:76
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define ARRAY_SIZE(A)
Definition: main.h:33
const GUID IID_IUnknown
#define FIXME(fmt,...)
Definition: debug.h:114
#define WARN(fmt,...)
Definition: debug.h:115
#define ERR(fmt,...)
Definition: debug.h:113
Definition: _set.h:50
#define IDirect3DRM_CreateFace(p, a)
Definition: d3drm.h:117
#define IDirect3DRM3_Load(p, a, b, c, d, e, f, g, h, i, j)
Definition: d3drm.h:432
#define D3DRM_OK
Definition: d3drm.h:486
#define IDirect3DRM3_CreateViewport(p, a, b, c, d, e, f, g)
Definition: d3drm.h:419
#define IDirect3DRM3_CreateTexture(p, a, b)
Definition: d3drm.h:409
#define D3DRMERR_BADFILE
Definition: d3drm.h:494
#define IDirect3DRM3_CreateMesh(p, a)
Definition: d3drm.h:404
#define IDirect3DRM3_LoadTexture(p, a, b)
Definition: d3drm.h:422
#define IDirect3DRM_CreateAnimation(p, a)
Definition: d3drm.h:118
#define IDirect3DRM2_CreateMeshBuilder(p, a)
Definition: d3drm.h:257
#define IDirect3DRM3_CreateDeviceFromClipper(p, a, b, c, d, e)
Definition: d3drm.h:416
#define IDirect3DRM3_CreateDeviceFromSurface(p, a, b, c, d, e)
Definition: d3drm.h:414
#define IDirect3DRM_CreateWrap(p, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, q)
Definition: d3drm.h:131
#define D3DRMERR_FILENOTFOUND
Definition: d3drm.h:493
#define D3DRMERR_BADVALUE
Definition: d3drm.h:496
#define IDirect3DRM3_CreateMaterial(p, a, b)
Definition: d3drm.h:412
#define IDirect3DRM3_CreateLightRGB(p, a, b, c, d, e)
Definition: d3drm.h:411
#define IDirect3DRM3_CreateFrame(p, a, b)
Definition: d3drm.h:403
#define IDirect3DRM3_CreateLight(p, a, b, c)
Definition: d3drm.h:410
#define D3DRMERR_BADDEVICE
Definition: d3drm.h:495
#define IDirect3DRM3_CreateDeviceFromD3D(p, a, b, c)
Definition: d3drm.h:415
#define D3DRMERR_BADOBJECT
Definition: d3drm.h:487
#define IDirect3DRM3_CreateObject(p, a, b, c, d)
Definition: d3drm.h:402
#define IDirect3DRM3_CreateMeshBuilder(p, a)
Definition: d3drm.h:405
#define IDirect3DRM3_CreateTextureFromSurface(p, a, b)
Definition: d3drm.h:417
HRESULT d3drm_frame_create(struct d3drm_frame **frame, IUnknown *parent_frame, IDirect3DRM *d3drm) DECLSPEC_HIDDEN
Definition: frame.c:3129
HRESULT d3drm_material_create(struct d3drm_material **material, IDirect3DRM *d3drm) DECLSPEC_HIDDEN
Definition: material.c:279
HRESULT d3drm_viewport_create(struct d3drm_viewport **viewport, IDirect3DRM *d3drm) DECLSPEC_HIDDEN
Definition: viewport.c:1123
HRESULT load_mesh_data(IDirect3DRMMeshBuilder3 *iface, IDirectXFileData *data, D3DRMLOADTEXTURECALLBACK load_texture_proc, void *arg) DECLSPEC_HIDDEN
Definition: meshbuilder.c:1019
HRESULT d3drm_face_create(struct d3drm_face **face) DECLSPEC_HIDDEN
Definition: face.c:620
HRESULT d3drm_light_create(struct d3drm_light **light, IDirect3DRM *d3drm) DECLSPEC_HIDDEN
Definition: light.c:371
HRESULT d3drm_device_create(struct d3drm_device **device, IDirect3DRM *d3drm) DECLSPEC_HIDDEN
Definition: device.c:1634
HRESULT d3drm_device_init(struct d3drm_device *device, UINT version, IDirectDraw *ddraw, IDirectDrawSurface *surface, BOOL create_z_surface) DECLSPEC_HIDDEN
Definition: device.c:120
void d3drm_device_destroy(struct d3drm_device *device) DECLSPEC_HIDDEN
Definition: device.c:40
HRESULT d3drm_mesh_builder_create(struct d3drm_mesh_builder **mesh_builder, IDirect3DRM *d3drm) DECLSPEC_HIDDEN
Definition: meshbuilder.c:2334
HRESULT d3drm_texture_create(struct d3drm_texture **texture, IDirect3DRM *d3drm) DECLSPEC_HIDDEN
Definition: texture.c:1412
HRESULT d3drm_wrap_create(struct d3drm_wrap **wrap, IDirect3DRM *d3drm) DECLSPEC_HIDDEN
Definition: meshbuilder.c:3019
HRESULT d3drm_animation_create(struct d3drm_animation **animation, IDirect3DRM *d3drm) DECLSPEC_HIDDEN
Definition: frame.c:3881
HRESULT d3drm_mesh_create(struct d3drm_mesh **mesh, IDirect3DRM *d3drm) DECLSPEC_HIDDEN
Definition: meshbuilder.c:2833
HRESULT d3drm_device_create_surfaces_from_clipper(struct d3drm_device *object, IDirectDraw *ddraw, IDirectDrawClipper *clipper, int width, int height, IDirectDrawSurface **surface) DECLSPEC_HIDDEN
Definition: device.c:69
enum _D3DRMWRAPTYPE D3DRMWRAPTYPE
@ D3DRMCOMBINE_REPLACE
Definition: d3drmdef.h:125
#define D3DRMDEVICE_NOZBUFFER
Definition: d3drmdef.h:271
D3DVALUE D3DRMMATRIX4D[4][4]
Definition: d3drmdef.h:39
enum _D3DRMLIGHTTYPE D3DRMLIGHTTYPE
DWORD D3DRMLOADOPTIONS
Definition: d3drmdef.h:339
#define D3DRMLOAD_FROMFILE
Definition: d3drmdef.h:341
#define D3DRMLOAD_FROMMEMORY
Definition: d3drmdef.h:343
#define IDirect3DRMTexture3_InitFromFile(p, a)
Definition: d3drmobj.h:3487
#define IDirect3DRMTexture_InitFromFile(p, a)
Definition: d3drmobj.h:3243
#define IDirect3DRMFace_Release(p)
Definition: d3drmobj.h:2310
#define IDirect3DRMTexture3_Release(p)
Definition: d3drmobj.h:3476
#define IDirect3DRMFace_QueryInterface(p, a, b)
Definition: d3drmobj.h:2308
#define IDirect3DRMTexture3_InitFromImage(p, a)
Definition: d3drmobj.h:3506
#define IDirect3DRMViewport2_QueryInterface(p, a, b)
Definition: d3drmobj.h:989
#define IDirect3DRMViewport2_Init(p, a, b, c, d, e, f)
Definition: d3drmobj.h:1002
#define IDirect3DRMDevice_InitFromD3D(p, a, b)
Definition: d3drmobj.h:421
#define IDirect3DRMMaterial2_SetPower(p, a)
Definition: d3drmobj.h:3743
#define IDirect3DRMDevice3_QueryInterface(p, a, b)
Definition: d3drmobj.h:691
#define IDirect3DRMFrame3_QueryInterface(p, a, b)
Definition: d3drmobj.h:1706
#define IDirect3DRMMeshBuilder3_Release(p)
Definition: d3drmobj.h:2926
#define IDirect3DRMDevice3_Release(p)
Definition: d3drmobj.h:693
#define IDirect3DRMFrame3_AddTransform(p, a, b)
Definition: d3drmobj.h:1722
#define IDirect3DRMTexture3_QueryInterface(p, a, b)
Definition: d3drmobj.h:3474
#define IDirect3DRMTexture3_InitFromSurface(p, a)
Definition: d3drmobj.h:3488
#define IDirect3DRMFrame_QueryInterface(p, a, b)
Definition: d3drmobj.h:1166
#define IDirect3DRMTexture_Release(p)
Definition: d3drmobj.h:3232
#define IDirect3DRMFrame3_Release(p)
Definition: d3drmobj.h:1708
#define IDirect3DRMMeshBuilder3_QueryInterface(p, a, b)
Definition: d3drmobj.h:2924
int(__cdecl * D3DRMUSERVISUALCALLBACK)(struct IDirect3DRMUserVisual *visual, void *ctx, D3DRMUSERVISUALREASON reason, struct IDirect3DRMDevice *device, struct IDirect3DRMViewport *viewport)
Definition: d3drmobj.h:163
void(__cdecl * D3DRMLOADCALLBACK)(struct IDirect3DRMObject *object, REFIID objectguid, void *arg)
Definition: d3drmobj.h:167
#define IDirect3DRMFrame3_AddVisual(p, a)
Definition: d3drmobj.h:1726
#define IDirect3DRMDevice_QueryInterface(p, a, b)
Definition: d3drmobj.h:407
#define IDirect3DRMViewport2_Release(p)
Definition: d3drmobj.h:991
#define IDirect3DRMLight_SetColorRGB(p, a, b, c)
Definition: d3drmobj.h:3133
#define IDirect3DRMObject_Release(p)
Definition: d3drmobj.h:220
void(__cdecl * D3DRMOBJECTCALLBACK)(struct IDirect3DRMObject *obj, void *arg)
Definition: d3drmobj.h:157
HRESULT(__cdecl * D3DRMLOADTEXTURECALLBACK)(char *tex_name, void *arg, struct IDirect3DRMTexture **texture)
Definition: d3drmobj.h:165
#define IDirect3DRMDevice3_InitFromD3D2(p, a, b)
Definition: d3drmobj.h:728
#define IDirect3DRMLight_SetType(p, a)
Definition: d3drmobj.h:3131
#define IDirect3DRMLight_SetColor(p, a)
Definition: d3drmobj.h:3132
float D3DVALUE
Definition: d3dtypes.h:89
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
HRESULT WINAPI DirectDrawCreate(LPGUID lpGUID, LPDIRECTDRAW *lplpDD, LPUNKNOWN pUnkOuter)
Definition: main.c:86
static HRESULT WINAPI d3drm2_LoadTexture(IDirect3DRM2 *iface, const char *filename, IDirect3DRMTexture2 **texture)
Definition: d3drm.c:1146
static HRESULT WINAPI d3drm2_CreateDevice(IDirect3DRM2 *iface, DWORD width, DWORD height, IDirect3DRMDevice2 **device)
Definition: d3drm.c:967
static ULONG WINAPI d3drm1_AddRef(IDirect3DRM *iface)
Definition: d3drm.c:247
static HRESULT WINAPI d3drm3_CreateFrame(IDirect3DRM3 *iface, IDirect3DRMFrame3 *parent, IDirect3DRMFrame3 **frame)
Definition: d3drm.c:1429
static HRESULT WINAPI d3drm2_CreateDeviceFromClipper(IDirect3DRM2 *iface, IDirectDrawClipper *clipper, GUID *guid, int width, int height, IDirect3DRMDevice2 **device)
Definition: d3drm.c:1025
static HRESULT WINAPI d3drm3_CreateMeshBuilder(IDirect3DRM3 *iface, IDirect3DRMMeshBuilder3 **mesh_builder)
Definition: d3drm.c:1462
static struct d3drm * impl_from_IDirect3DRM(IDirect3DRM *iface)
Definition: d3drm.c:196
static HRESULT WINAPI d3drm3_GetNamedObject(IDirect3DRM3 *iface, const char *name, IDirect3DRMObject **object)
Definition: d3drm.c:1908
static HRESULT WINAPI d3drm2_CreateFrame(IDirect3DRM2 *iface, IDirect3DRMFrame *parent_frame, IDirect3DRMFrame2 **frame)
Definition: d3drm.c:845
static HRESULT WINAPI d3drm2_Tick(IDirect3DRM2 *iface, D3DVALUE tick)
Definition: d3drm.c:1269
static HRESULT WINAPI d3drm3_CreateObject(IDirect3DRM3 *iface, REFCLSID clsid, IUnknown *outer, REFIID iid, void **out)
Definition: d3drm.c:1356
static HRESULT WINAPI d3drm3_CreateAnimationSet(IDirect3DRM3 *iface, IDirect3DRMAnimationSet2 **set)
Definition: d3drm.c:1511
static HRESULT WINAPI d3drm1_Tick(IDirect3DRM *iface, D3DVALUE tick)
Definition: d3drm.c:755
static HRESULT WINAPI d3drm1_CreateMeshBuilder(IDirect3DRM *iface, IDirect3DRMMeshBuilder **mesh_builder)
Definition: d3drm.c:309
static HRESULT WINAPI d3drm3_GetOptions(IDirect3DRM3 *iface, DWORD *flags)
Definition: d3drm.c:2270
static HRESULT WINAPI d3drm3_CreateDeviceFromSurface(IDirect3DRM3 *iface, GUID *guid, IDirectDraw *ddraw, IDirectDrawSurface *backbuffer, DWORD flags, IDirect3DRMDevice3 **device)
Definition: d3drm.c:1615
static HRESULT WINAPI d3drm3_QueryInterface(IDirect3DRM3 *iface, REFIID riid, void **out)
Definition: d3drm.c:1323
static HRESULT WINAPI d3drm1_QueryInterface(IDirect3DRM *iface, REFIID riid, void **out)
Definition: d3drm.c:217
static HRESULT WINAPI d3drm3_CreateDeviceFromD3D(IDirect3DRM3 *iface, IDirect3D2 *d3d, IDirect3DDevice2 *d3d_device, IDirect3DRMDevice3 **device)
Definition: d3drm.c:1646
static HRESULT WINAPI d3drm3_LoadTexture(IDirect3DRM3 *iface, const char *filename, IDirect3DRMTexture3 **texture)
Definition: d3drm.c:1822
static HRESULT d3drm_create_device_object(void **object, IDirect3DRM *d3drm)
Definition: d3drm.c:58
static HRESULT WINAPI d3drm2_SetSearchPath(IDirect3DRM2 *iface, const char *path)
Definition: d3drm.c:1188
static HRESULT WINAPI d3drm1_CreateLightRGB(IDirect3DRM *iface, D3DRMLIGHTTYPE type, D3DVALUE red, D3DVALUE green, D3DVALUE blue, IDirect3DRMLight **light)
Definition: d3drm.c:392
static HRESULT WINAPI d3drm3_CreateWrap(IDirect3DRM3 *iface, D3DRMWRAPTYPE type, IDirect3DRMFrame3 *frame, D3DVALUE ox, D3DVALUE oy, D3DVALUE oz, D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, D3DVALUE ux, D3DVALUE uy, D3DVALUE uz, D3DVALUE ou, D3DVALUE ov, D3DVALUE su, D3DVALUE sv, IDirect3DRMWrap **wrap)
Definition: d3drm.c:1790
static HRESULT WINAPI d3drm2_CreateObject(IDirect3DRM2 *iface, REFCLSID clsid, IUnknown *outer, REFIID iid, void **out)
Definition: d3drm.c:834
static HRESULT WINAPI d3drm2_EnumerateObjects(IDirect3DRM2 *iface, D3DRMOBJECTCALLBACK cb, void *ctx)
Definition: d3drm.c:1238
static HRESULT WINAPI d3drm2_CreateDeviceFromSurface(IDirect3DRM2 *iface, GUID *guid, IDirectDraw *ddraw, IDirectDrawSurface *backbuffer, IDirect3DRMDevice2 **device)
Definition: d3drm.c:979
static HRESULT WINAPI d3drm2_CreateTextureFromSurface(IDirect3DRM2 *iface, IDirectDrawSurface *surface, IDirect3DRMTexture2 **texture)
Definition: d3drm.c:1049
static HRESULT WINAPI d3drm3_UnregisterClient(IDirect3DRM3 *iface, REFGUID guid)
Definition: d3drm.c:2248
static HRESULT d3drm_create_material_object(void **object, IDirect3DRM *d3drm)
Definition: d3drm.c:136
static HRESULT WINAPI d3drm1_CreateLight(IDirect3DRM *iface, D3DRMLIGHTTYPE type, D3DCOLOR color, IDirect3DRMLight **light)
Definition: d3drm.c:382
static HRESULT WINAPI d3drm1_CreateWrap(IDirect3DRM *iface, D3DRMWRAPTYPE type, IDirect3DRMFrame *frame, D3DVALUE ox, D3DVALUE oy, D3DVALUE oz, D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, D3DVALUE ux, D3DVALUE uy, D3DVALUE uz, D3DVALUE ou, D3DVALUE ov, D3DVALUE su, D3DVALUE sv, IDirect3DRMWrap **wrap)
Definition: d3drm.c:599
static HRESULT WINAPI d3drm1_CreateDeviceFromClipper(IDirect3DRM *iface, IDirectDrawClipper *clipper, GUID *guid, int width, int height, IDirect3DRMDevice **device)
Definition: d3drm.c:477
static HRESULT WINAPI d3drm3_RegisterClient(IDirect3DRM3 *iface, REFGUID guid, DWORD *id)
Definition: d3drm.c:2241
static HRESULT WINAPI d3drm3_SetDefaultTextureColors(IDirect3DRM3 *iface, DWORD color_count)
Definition: d3drm.c:1887
static HRESULT WINAPI d3drm1_Load(IDirect3DRM *iface, void *source, void *object_id, IID **iids, DWORD iid_count, D3DRMLOADOPTIONS flags, D3DRMLOADCALLBACK load_cb, void *load_ctx, D3DRMLOADTEXTURECALLBACK load_tex_cb, void *load_tex_ctx, IDirect3DRMFrame *parent_frame)
Definition: d3drm.c:731
static HRESULT WINAPI d3drm2_CreateTexture(IDirect3DRM2 *iface, D3DRMIMAGE *image, IDirect3DRMTexture2 **texture)
Definition: d3drm.c:912
static HRESULT WINAPI d3drm2_CreateMaterial(IDirect3DRM2 *iface, D3DVALUE power, IDirect3DRMMaterial **material)
Definition: d3drm.c:957
static ULONG WINAPI d3drm1_Release(IDirect3DRM *iface)
Definition: d3drm.c:260
static HRESULT WINAPI d3drm3_CreateMesh(IDirect3DRM3 *iface, IDirect3DRMMesh **mesh)
Definition: d3drm.c:1446
static HRESULT WINAPI d3drm3_CreateDevice(IDirect3DRM3 *iface, DWORD width, DWORD height, IDirect3DRMDevice3 **device)
Definition: d3drm.c:1603
static HRESULT WINAPI d3drm1_CreateDeviceFromD3D(IDirect3DRM *iface, IDirect3D *d3d, IDirect3DDevice *d3d_device, IDirect3DRMDevice **device)
Definition: d3drm.c:452
static HRESULT WINAPI d3drm2_CreateMesh(IDirect3DRM2 *iface, IDirect3DRMMesh **mesh)
Definition: d3drm.c:862
static HRESULT d3drm_create_texture_object(void **object, IDirect3DRM *d3drm)
Definition: d3drm.c:45
static const struct IDirect3DRMVtbl d3drm1_vtbl
Definition: d3drm.c:762
static HRESULT WINAPI d3drm2_CreateLightRGB(IDirect3DRM2 *iface, D3DRMLIGHTTYPE type, D3DVALUE red, D3DVALUE green, D3DVALUE blue, IDirect3DRMLight **light)
Definition: d3drm.c:946
static HRESULT WINAPI d3drm1_EnumerateObjects(IDirect3DRM *iface, D3DRMOBJECTCALLBACK cb, void *ctx)
Definition: d3drm.c:724
static struct d3drm * impl_from_IDirect3DRM2(IDirect3DRM2 *iface)
Definition: d3drm.c:201
static HRESULT WINAPI d3drm3_EnumerateObjects(IDirect3DRM3 *iface, D3DRMOBJECTCALLBACK cb, void *ctx)
Definition: d3drm.c:1916
static HRESULT WINAPI d3drm3_LoadTextureFromResource(IDirect3DRM3 *iface, HMODULE module, const char *resource_name, const char *resource_type, IDirect3DRMTexture3 **texture)
Definition: d3drm.c:1848
static HRESULT d3drm_create_light_object(void **object, IDirect3DRM *d3drm)
Definition: d3drm.c:123
static HRESULT WINAPI d3drm2_CreateWrap(IDirect3DRM2 *iface, D3DRMWRAPTYPE type, IDirect3DRMFrame *frame, D3DVALUE ox, D3DVALUE oy, D3DVALUE oz, D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, D3DVALUE ux, D3DVALUE uy, D3DVALUE uz, D3DVALUE ou, D3DVALUE ov, D3DVALUE su, D3DVALUE sv, IDirect3DRMWrap **wrap)
Definition: d3drm.c:1123
static HRESULT WINAPI d3drm3_CreateLight(IDirect3DRM3 *iface, D3DRMLIGHTTYPE type, D3DCOLOR color, IDirect3DRMLight **light)
Definition: d3drm.c:1545
static HRESULT WINAPI d3drm3_CreateLightRGB(IDirect3DRM3 *iface, D3DRMLIGHTTYPE type, D3DVALUE red, D3DVALUE green, D3DVALUE blue, IDirect3DRMLight **light)
Definition: d3drm.c:1565
static HRESULT WINAPI d3drm1_SetDefaultTextureShades(IDirect3DRM *iface, DWORD shade_count)
Definition: d3drm.c:702
static HRESULT WINAPI d3drm1_LoadTexture(IDirect3DRM *iface, const char *filename, IDirect3DRMTexture **texture)
Definition: d3drm.c:630
static HRESULT WINAPI d3drm2_CreateAnimation(IDirect3DRM2 *iface, IDirect3DRMAnimation **animation)
Definition: d3drm.c:896
static HRESULT WINAPI d3drm1_GetDevices(IDirect3DRM *iface, IDirect3DRMDeviceArray **array)
Definition: d3drm.c:709
static HRESULT WINAPI d3drm2_QueryInterface(IDirect3DRM2 *iface, REFIID riid, void **out)
Definition: d3drm.c:801
static const char * get_IID_string(const GUID *guid)
Definition: d3drm.c:27
static HRESULT WINAPI d3drm1_CreateTextureFromSurface(IDirect3DRM *iface, IDirectDrawSurface *surface, IDirect3DRMTexture **texture)
Definition: d3drm.c:525
static HRESULT WINAPI d3drm2_CreateAnimationSet(IDirect3DRM2 *iface, IDirect3DRMAnimationSet **set)
Definition: d3drm.c:905
static HRESULT WINAPI d3drm3_AddSearchPath(IDirect3DRM3 *iface, const char *path)
Definition: d3drm.c:1873
static HRESULT WINAPI d3drm1_CreateMaterial(IDirect3DRM *iface, D3DVALUE power, IDirect3DRMMaterial **material)
Definition: d3drm.c:403
static HRESULT WINAPI d3drm2_CreateLight(IDirect3DRM2 *iface, D3DRMLIGHTTYPE type, D3DCOLOR color, IDirect3DRMLight **light)
Definition: d3drm.c:936
static ULONG WINAPI d3drm3_AddRef(IDirect3DRM3 *iface)
Definition: d3drm.c:1330
static HRESULT WINAPI d3drm3_CreateTextureFromSurface(IDirect3DRM3 *iface, IDirectDrawSurface *surface, IDirect3DRMTexture3 **texture)
Definition: d3drm.c:1731
static HRESULT WINAPI d3drm1_CreateShadow(IDirect3DRM *iface, IDirect3DRMVisual *visual, IDirect3DRMLight *light, D3DVALUE px, D3DVALUE py, D3DVALUE pz, D3DVALUE nx, D3DVALUE ny, D3DVALUE nz, IDirect3DRMVisual **shadow)
Definition: d3drm.c:549
static HRESULT WINAPI d3drm1_CreateUserVisual(IDirect3DRM *iface, D3DRMUSERVISUALCALLBACK cb, void *ctx, IDirect3DRMUserVisual **visual)
Definition: d3drm.c:622
static HRESULT d3drm_create_face_object(void **object, IDirect3DRM *d3drm)
Definition: d3drm.c:84
static HRESULT WINAPI d3drm3_CreateDeviceFromClipper(IDirect3DRM3 *iface, IDirectDrawClipper *clipper, GUID *guid, int width, int height, IDirect3DRMDevice3 **device)
Definition: d3drm.c:1673
static HRESULT WINAPI d3drm1_LoadTextureFromResource(IDirect3DRM *iface, HRSRC resource, IDirect3DRMTexture **texture)
Definition: d3drm.c:658
static HRESULT WINAPI d3drm3_Load(IDirect3DRM3 *iface, void *source, void *object_id, IID **iids, DWORD iid_count, D3DRMLOADOPTIONS flags, D3DRMLOADCALLBACK load_cb, void *load_ctx, D3DRMLOADTEXTURECALLBACK load_tex_cb, void *load_tex_ctx, IDirect3DRMFrame3 *parent_frame)
Definition: d3drm.c:2109
static ULONG WINAPI d3drm2_Release(IDirect3DRM2 *iface)
Definition: d3drm.c:821
static HRESULT WINAPI d3drm2_CreateUserVisual(IDirect3DRM2 *iface, D3DRMUSERVISUALCALLBACK cb, void *ctx, IDirect3DRMUserVisual **visual)
Definition: d3drm.c:1138
static HRESULT WINAPI d3drm1_CreateTexture(IDirect3DRM *iface, D3DRMIMAGE *image, IDirect3DRMTexture **texture)
Definition: d3drm.c:358
static HRESULT WINAPI d3drm1_CreateDevice(IDirect3DRM *iface, DWORD width, DWORD height, IDirect3DRMDevice **device)
Definition: d3drm.c:413
static HRESULT WINAPI d3drm1_CreateViewport(IDirect3DRM *iface, IDirect3DRMDevice *device, IDirect3DRMFrame *camera, DWORD x, DWORD y, DWORD width, DWORD height, IDirect3DRMViewport **viewport)
Definition: d3drm.c:559
static const struct IDirect3DRM3Vtbl d3drm3_vtbl
Definition: d3drm.c:2277
static HRESULT d3drm_create_mesh_builder_object(void **object, IDirect3DRM *d3drm)
Definition: d3drm.c:97
static HRESULT WINAPI d3drm2_CreateViewport(IDirect3DRM2 *iface, IDirect3DRMDevice *device, IDirect3DRMFrame *camera, DWORD x, DWORD y, DWORD width, DWORD height, IDirect3DRMViewport **viewport)
Definition: d3drm.c:1083
static HRESULT d3drm_create_animation_object(void **object, IDirect3DRM *d3drm)
Definition: d3drm.c:162
static HRESULT d3drm_create_frame_object(void **object, IDirect3DRM *d3drm)
Definition: d3drm.c:110
static HRESULT WINAPI d3drm1_CreateAnimation(IDirect3DRM *iface, IDirect3DRMAnimation **animation)
Definition: d3drm.c:333
static HRESULT WINAPI d3drm2_SetDefaultTextureColors(IDirect3DRM2 *iface, DWORD color_count)
Definition: d3drm.c:1209
static HRESULT load_data(IDirect3DRM3 *iface, IDirectXFileData *data_object, IID **GUIDs, DWORD nb_GUIDs, D3DRMLOADCALLBACK LoadProc, void *ArgLP, D3DRMLOADTEXTURECALLBACK LoadTextureProc, void *ArgLTP, IDirect3DRMFrame3 *parent_frame)
Definition: d3drm.c:1923
static HRESULT WINAPI d3drm3_SetSearchPath(IDirect3DRM3 *iface, const char *path)
Definition: d3drm.c:1866
static HRESULT WINAPI d3drm3_CreateUserVisual(IDirect3DRM3 *iface, D3DRMUSERVISUALCALLBACK cb, void *ctx, IDirect3DRMUserVisual **visual)
Definition: d3drm.c:1814
static HRESULT WINAPI d3drm1_AddSearchPath(IDirect3DRM *iface, const char *path)
Definition: d3drm.c:681
static HRESULT d3drm_create_wrap_object(void **object, IDirect3DRM *d3drm)
Definition: d3drm.c:175
static HRESULT WINAPI d3drm1_CreateMesh(IDirect3DRM *iface, IDirect3DRMMesh **mesh)
Definition: d3drm.c:300
static HRESULT WINAPI d3drm1_SetSearchPath(IDirect3DRM *iface, const char *path)
Definition: d3drm.c:674
static HRESULT WINAPI d3drm3_CreateShadow(IDirect3DRM3 *iface, IUnknown *object, IDirect3DRMLight *light, D3DVALUE px, D3DVALUE py, D3DVALUE pz, D3DVALUE nx, D3DVALUE ny, D3DVALUE nz, IDirect3DRMShadow2 **shadow)
Definition: d3drm.c:1722
static HRESULT WINAPI d3drm1_CreateFace(IDirect3DRM *iface, IDirect3DRMFace **face)
Definition: d3drm.c:318
static ULONG WINAPI d3drm2_AddRef(IDirect3DRM2 *iface)
Definition: d3drm.c:808
static struct d3drm * impl_from_IDirect3DRM3(IDirect3DRM3 *iface)
Definition: d3drm.c:206
static HRESULT WINAPI d3drm2_CreateProgressiveMesh(IDirect3DRM2 *iface, IDirect3DRMProgressiveMesh **mesh)
Definition: d3drm.c:1276
static HRESULT WINAPI d3drm3_CreateTexture(IDirect3DRM3 *iface, D3DRMIMAGE *image, IDirect3DRMTexture3 **texture)
Definition: d3drm.c:1518
static HRESULT WINAPI d3drm1_CreateAnimationSet(IDirect3DRM *iface, IDirect3DRMAnimationSet **set)
Definition: d3drm.c:351
static HRESULT WINAPI d3drm3_Tick(IDirect3DRM3 *iface, D3DVALUE tick)
Definition: d3drm.c:2227
static HRESULT WINAPI d3drm2_CreateMeshBuilder(IDirect3DRM2 *iface, IDirect3DRMMeshBuilder2 **mesh_builder)
Definition: d3drm.c:871
HRESULT WINAPI Direct3DRMCreate(IDirect3DRM **d3drm)
Definition: d3drm.c:2322
static HRESULT WINAPI d3drm3_CreateFace(IDirect3DRM3 *iface, IDirect3DRMFace2 **face)
Definition: d3drm.c:1478
static HRESULT WINAPI d3drm2_AddSearchPath(IDirect3DRM2 *iface, const char *path)
Definition: d3drm.c:1195
static HRESULT WINAPI d3drm2_GetSearchPath(IDirect3DRM2 *iface, DWORD *size, char *path)
Definition: d3drm.c:1202
static HRESULT WINAPI d3drm2_CreateDeviceFromD3D(IDirect3DRM2 *iface, IDirect3D2 *d3d, IDirect3DDevice2 *d3d_device, IDirect3DRMDevice2 **device)
Definition: d3drm.c:1001
static HRESULT WINAPI d3drm1_SetDefaultTextureColors(IDirect3DRM *iface, DWORD color_count)
Definition: d3drm.c:695
static HRESULT WINAPI d3drm1_CreateDeviceFromSurface(IDirect3DRM *iface, GUID *guid, IDirectDraw *ddraw, IDirectDrawSurface *backbuffer, IDirect3DRMDevice **device)
Definition: d3drm.c:425
static HRESULT WINAPI d3drm2_LoadTextureFromResource(IDirect3DRM2 *iface, HMODULE module, const char *resource_name, const char *resource_type, IDirect3DRMTexture2 **texture)
Definition: d3drm.c:1170
static void d3drm_destroy(struct d3drm *d3drm)
Definition: d3drm.c:211
static const struct IDirect3DRM2Vtbl d3drm2_vtbl
Definition: d3drm.c:1283
static HRESULT d3drm_create_mesh_object(void **object, IDirect3DRM *d3drm)
Definition: d3drm.c:149
HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, void **ppv)
Definition: d3drm.c:2347
HRESULT WINAPI DllCanUnloadNow(void)
Definition: d3drm.c:2342
static HRESULT WINAPI d3drm2_GetDevices(IDirect3DRM2 *iface, IDirect3DRMDeviceArray **array)
Definition: d3drm.c:1223
static ULONG WINAPI d3drm3_Release(IDirect3DRM3 *iface)
Definition: d3drm.c:1343
static HRESULT WINAPI d3drm3_CreateMaterial(IDirect3DRM3 *iface, D3DVALUE power, IDirect3DRMMaterial2 **material)
Definition: d3drm.c:1586
static HRESULT WINAPI d3drm2_CreateShadow(IDirect3DRM2 *iface, IDirect3DRMVisual *visual, IDirect3DRMLight *light, D3DVALUE px, D3DVALUE py, D3DVALUE pz, D3DVALUE nx, D3DVALUE ny, D3DVALUE nz, IDirect3DRMVisual **shadow)
Definition: d3drm.c:1073
static HRESULT WINAPI d3drm1_CreateFrame(IDirect3DRM *iface, IDirect3DRMFrame *parent_frame, IDirect3DRMFrame **frame)
Definition: d3drm.c:284
static HRESULT WINAPI d3drm1_GetNamedObject(IDirect3DRM *iface, const char *name, IDirect3DRMObject **object)
Definition: d3drm.c:716
static HRESULT WINAPI d3drm3_GetSearchPath(IDirect3DRM3 *iface, DWORD *size, char *path)
Definition: d3drm.c:1880
static HRESULT WINAPI d3drm3_CreateViewport(IDirect3DRM3 *iface, IDirect3DRMDevice3 *device, IDirect3DRMFrame3 *camera, DWORD x, DWORD y, DWORD width, DWORD height, IDirect3DRMViewport2 **viewport)
Definition: d3drm.c:1758
static HRESULT WINAPI d3drm3_GetDevices(IDirect3DRM3 *iface, IDirect3DRMDeviceArray **array)
Definition: d3drm.c:1901
static HRESULT WINAPI d3drm3_SetDefaultTextureShades(IDirect3DRM3 *iface, DWORD shade_count)
Definition: d3drm.c:1894
static HRESULT WINAPI d3drm1_GetSearchPath(IDirect3DRM *iface, DWORD *size, char *path)
Definition: d3drm.c:688
static HRESULT WINAPI d3drm1_CreateObject(IDirect3DRM *iface, REFCLSID clsid, IUnknown *outer, REFIID iid, void **out)
Definition: d3drm.c:273
static HRESULT WINAPI d3drm3_CreateClippedVisual(IDirect3DRM3 *iface, IDirect3DRMVisual *visual, IDirect3DRMClippedVisual **clipped_visual)
Definition: d3drm.c:2255
static HRESULT WINAPI d3drm2_SetDefaultTextureShades(IDirect3DRM2 *iface, DWORD shade_count)
Definition: d3drm.c:1216
static HRESULT WINAPI d3drm2_Load(IDirect3DRM2 *iface, void *source, void *object_id, IID **iids, DWORD iid_count, D3DRMLOADOPTIONS flags, D3DRMLOADCALLBACK load_cb, void *load_ctx, D3DRMLOADTEXTURECALLBACK load_tex_cb, void *load_tex_ctx, IDirect3DRMFrame *parent_frame)
Definition: d3drm.c:1245
static HRESULT WINAPI d3drm3_CreateProgressiveMesh(IDirect3DRM3 *iface, IDirect3DRMProgressiveMesh **mesh)
Definition: d3drm.c:2234
static HRESULT WINAPI d3drm2_CreateFace(IDirect3DRM2 *iface, IDirect3DRMFace **face)
Definition: d3drm.c:887
static HRESULT WINAPI d3drm3_SetOptions(IDirect3DRM3 *iface, DWORD flags)
Definition: d3drm.c:2263
static HRESULT WINAPI d3drm2_GetNamedObject(IDirect3DRM2 *iface, const char *name, IDirect3DRMObject **object)
Definition: d3drm.c:1230
static HRESULT WINAPI d3drm3_CreateAnimation(IDirect3DRM3 *iface, IDirect3DRMAnimation2 **animation)
Definition: d3drm.c:1495
static HRESULT d3drm_create_viewport_object(void **object, IDirect3DRM *d3drm)
Definition: d3drm.c:71
WORD face[3]
Definition: mesh.c:4747
HRESULT WINAPI DirectXFileCreate(LPDIRECTXFILE *lplpDirectXFile)
Definition: main.c:153
r parent
Definition: btrfs.c:3010
#define wrap(journal, var)
Definition: recovery.c:207
#define IDirectXFile_RegisterTemplates(p, a, b)
Definition: dxfile.h:86
DWORD DXFILELOADOPTIONS
Definition: dxfile.h:35
#define IDirectXFile_Release(p)
Definition: dxfile.h:82
#define IDirectXFileEnumObject_GetNextDataObject(p, a)
Definition: dxfile.h:109
#define IDirectXFileObject_Release(p)
Definition: dxfile.h:160
#define IDirectXFileEnumObject_Release(p)
Definition: dxfile.h:107
#define DXFILELOAD_FROMFILE
Definition: dxfile.h:37
#define IDirectXFileDataReference_Release(p)
Definition: dxfile.h:212
#define IDirectXFile_CreateEnumObject(p, a, b, c)
Definition: dxfile.h:84
#define IDirectXFileData_GetType(p, a)
Definition: dxfile.h:191
#define DXFILE_OK
Definition: dxfile.h:268
#define IDirectXFileData_GetData(p, a, b, c)
Definition: dxfile.h:190
#define IDirectXFileObject_QueryInterface(p, a, b)
Definition: dxfile.h:158
#define DXFILEERR_NOMOREOBJECTS
Definition: dxfile.h:291
#define DXFILELOAD_FROMMEMORY
Definition: dxfile.h:39
#define IDirectXFileDataReference_Resolve(p, a)
Definition: dxfile.h:217
#define IDirectXFileData_GetNextObject(p, a)
Definition: dxfile.h:192
#define IDirectXFileData_Release(p)
Definition: dxfile.h:185
#define IDirectXFileBinary_Release(p)
Definition: dxfile.h:236
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLclampf green
Definition: gl.h:1740
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
GLuint GLuint end
Definition: gl.h:1545
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
GLclampf GLclampf blue
Definition: gl.h:1740
GLint GLint GLsizei width
Definition: gl.h:1546
GLsizeiptr size
Definition: glext.h:5919
GLenum GLuint texture
Definition: glext.h:6295
GLfloat GLfloat nz
Definition: glext.h:8896
GLuint color
Definition: glext.h:6243
GLfloat ny
Definition: glext.h:8896
GLenum GLuint GLint GLenum face
Definition: glext.h:7025
GLuint GLenum matrix
Definition: glext.h:9407
GLfloat GLfloat GLfloat GLfloat nx
Definition: glext.h:8898
GLint reference
Definition: glext.h:11729
GLbitfield flags
Definition: glext.h:7161
const GLuint GLenum const GLvoid * binary
Definition: glext.h:7538
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum light
Definition: glfuncs.h:170
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
const char * filename
Definition: ioapi.h:137
HRESULT create_object(script_ctx_t *, jsdisp_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: object.c:731
#define debugstr_guid
Definition: kernel32.h:35
#define debugstr_a
Definition: kernel32.h:31
GLint dy
Definition: linetemp.h:97
GLint dx
Definition: linetemp.h:97
#define red
Definition: linetest.c:67
char templates[]
Definition: meshbuilder.c:39
const GUID * guid
IDirect3DRMMeshBuilder * mesh_builder
Definition: d3drm.c:3330
float power
Definition: d3drm.c:3372
static HMODULE MODULEINFO DWORD cb
Definition: module.c:33
static HWND child
Definition: cursoricon.c:298
REFCLSID clsid
Definition: msctf.c:82
static VOID * LoadProc(LPCWSTR DllName, LPCSTR ProcName, HMODULE *DllHandle)
Definition: msiexec.c:266
long LONG
Definition: pedump.c:60
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define REFIID
Definition: guiddef.h:118
#define REFCLSID
Definition: guiddef.h:117
static FILE * out
Definition: regtests2xml.c:44
HRESULT hr
Definition: shlfolder.c:183
#define TRACE(s)
Definition: solgame.cpp:4
Definition: scsiwmi.h:51
IDirect3DRMAnimation IDirect3DRMAnimation_iface
IDirectDraw * ddraw
IDirectDrawSurface * render_target
IDirectDrawClipper * clipper
IDirect3DDevice * device
IDirect3DRMFrame IDirect3DRMFrame_iface
Definition: d3drm_private.h:72
IDirect3DRMMaterial2 IDirect3DRMMaterial2_iface
IDirectDrawSurface * surface
Definition: d3drm_private.h:66
IDirect3DRMViewport IDirect3DRMViewport_iface
IDirect3DRMFrame * camera
Definition: d3drm.c:189
IDirect3DRM3 IDirect3DRM3_iface
Definition: d3drm.c:192
LONG ref1
Definition: d3drm.c:193
LONG iface_count
Definition: d3drm.c:193
IDirect3DRM2 IDirect3DRM2_iface
Definition: d3drm.c:191
IDirect3DRM IDirect3DRM_iface
Definition: d3drm.c:190
LONG ref3
Definition: d3drm.c:193
LONG ref2
Definition: d3drm.c:193
Definition: devices.h:37
Definition: fci.c:127
Definition: mesh.c:198
Definition: name.c:39
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
int ret
#define HRESULT
Definition: msvc.h:7
#define WINAPI
Definition: msvc.h:6
#define S_FALSE
Definition: winerror.h:2357
#define CLASSFACTORY_E_FIRST
Definition: winerror.h:2661
#define CLASS_E_CLASSNOTAVAILABLE
Definition: winerror.h:2663