ReactOS  0.4.14-dev-554-g2f8d847
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 
27 static 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 
45 static 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 
58 static 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 
71 static 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 
84 static 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 
97 static 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 
110 static 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 
123 static 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 
136 static 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 
149 static HRESULT d3drm_create_mesh_object(void **object, IDirect3DRM *d3drm)
150 {
151  struct d3drm_mesh *mesh;
152  HRESULT hr;
153 
154  if (FAILED(hr = d3drm_mesh_create(&mesh, d3drm)))
155  return hr;
156 
157  *object = &mesh->IDirect3DRMMesh_iface;
158 
159  return hr;
160 }
161 
162 static 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 
175 static 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 
188 struct d3drm
189 {
190  IDirect3DRM IDirect3DRM_iface;
191  IDirect3DRM2 IDirect3DRM2_iface;
192  IDirect3DRM3 IDirect3DRM3_iface;
194 };
195 
196 static inline struct d3drm *impl_from_IDirect3DRM(IDirect3DRM *iface)
197 {
198  return CONTAINING_RECORD(iface, struct d3drm, IDirect3DRM_iface);
199 }
200 
201 static inline struct d3drm *impl_from_IDirect3DRM2(IDirect3DRM2 *iface)
202 {
203  return CONTAINING_RECORD(iface, struct d3drm, IDirect3DRM2_iface);
204 }
205 
206 static inline struct d3drm *impl_from_IDirect3DRM3(IDirect3DRM3 *iface)
207 {
208  return CONTAINING_RECORD(iface, struct d3drm, IDirect3DRM3_iface);
209 }
210 
211 static void d3drm_destroy(struct d3drm *d3drm)
212 {
213  heap_free(d3drm);
214  TRACE("d3drm object %p is being destroyed.\n", d3drm);
215 }
216 
217 static 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 
247 static 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 
260 static 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 
273 static 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 
284 static 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 
300 static 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 
309 static 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 
318 static 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 
333 static 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 
351 static 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 
358 static 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);
377  IDirect3DRMTexture3_Release(texture3);
378 
379  return hr;
380 }
381 
382 static 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 
403 static 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 
413 static 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 
452 static 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 
514  hr = d3drm_device_init(object, 1, ddraw, render_target, TRUE);
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);
544  IDirect3DRMTexture3_Release(texture3);
545 
546  return hr;
547 }
548 
549 static 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 
559 static 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);
589  IDirect3DRMFrame3_Release(camera3);
590  if (FAILED(hr))
591  return hr;
592 
593  hr = IDirect3DRMViewport2_QueryInterface(viewport2, &IID_IDirect3DRMViewport, (void **)viewport);
594  IDirect3DRMViewport2_Release(viewport2);
595 
596  return hr;
597 }
598 
599 static 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 
622 static 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 
630 static 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 
674 static 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 
681 static 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 
688 static 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 
695 static 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 
702 static 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 
709 static 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 
716 static 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 
724 static HRESULT WINAPI d3drm1_EnumerateObjects(IDirect3DRM *iface, D3DRMOBJECTCALLBACK cb, void *ctx)
725 {
726  FIXME("iface %p, cb %p, ctx %p stub!\n", iface, cb, ctx);
727 
728  return E_NOTIMPL;
729 }
730 
731 static 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;
737  HRESULT hr = D3DRM_OK;
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 
755 static 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 
762 static const struct IDirect3DRMVtbl d3drm1_vtbl =
763 {
797  d3drm1_Load,
798  d3drm1_Tick,
799 };
800 
801 static HRESULT WINAPI d3drm2_QueryInterface(IDirect3DRM2 *iface, REFIID riid, void **out)
802 {
803  struct d3drm *d3drm = impl_from_IDirect3DRM2(iface);
804 
806 }
807 
808 static 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 
821 static 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 
834 static 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 
845 static 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 
862 static 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 
871 static HRESULT WINAPI d3drm2_CreateMeshBuilder(IDirect3DRM2 *iface, IDirect3DRMMeshBuilder2 **mesh_builder)
872 {
873  struct d3drm *d3drm = impl_from_IDirect3DRM2(iface);
874  struct d3drm_mesh_builder *object;
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 
887 static 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 
896 static 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 
905 static 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 
912 static 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);
931  IDirect3DRMTexture3_Release(texture3);
932 
933  return hr;
934 }
935 
936 static 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 
957 static 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 
967 static 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 
1001 static 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);
1020  IDirect3DRMDevice3_Release(device3);
1021 
1022  return hr;
1023 }
1024 
1025 static HRESULT WINAPI d3drm2_CreateDeviceFromClipper(IDirect3DRM2 *iface,
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);
1044  IDirect3DRMDevice3_Release(device3);
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);
1068  IDirect3DRMTexture3_Release(texture3);
1069 
1070  return hr;
1071 }
1072 
1073 static 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 
1083 static 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  {
1107  IDirect3DRMDevice3_Release(device3);
1108  return hr;
1109  }
1110 
1111  hr = IDirect3DRM3_CreateViewport(&d3drm->IDirect3DRM3_iface, device3, camera3, x, y, width, height, &viewport2);
1112  IDirect3DRMDevice3_Release(device3);
1113  IDirect3DRMFrame3_Release(camera3);
1114  if (FAILED(hr))
1115  return hr;
1116 
1117  hr = IDirect3DRMViewport2_QueryInterface(viewport2, &IID_IDirect3DRMViewport, (void **)viewport);
1118  IDirect3DRMViewport2_Release(viewport2);
1119 
1120  return hr;
1121 }
1122 
1123 static 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 
1138 static 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 
1146 static 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);
1165  IDirect3DRMTexture3_Release(texture3);
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 
1188 static 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 
1195 static 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 
1202 static 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 
1209 static 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 
1216 static 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 
1223 static 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 
1230 static 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 
1238 static HRESULT WINAPI d3drm2_EnumerateObjects(IDirect3DRM2 *iface, D3DRMOBJECTCALLBACK cb, void *ctx)
1239 {
1240  FIXME("iface %p, cb %p, ctx %p stub!\n", iface, cb, ctx);
1241 
1242  return E_NOTIMPL;
1243 }
1244 
1245 static 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;
1251  HRESULT hr = D3DRM_OK;
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 
1269 static 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 
1276 static 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 
1283 static const struct IDirect3DRM2Vtbl d3drm2_vtbl =
1284 {
1286  d3drm2_AddRef,
1318  d3drm2_Load,
1319  d3drm2_Tick,
1321 };
1322 
1323 static HRESULT WINAPI d3drm3_QueryInterface(IDirect3DRM3 *iface, REFIID riid, void **out)
1324 {
1325  struct d3drm *d3drm = impl_from_IDirect3DRM3(iface);
1326 
1328 }
1329 
1330 static 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 
1343 static 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 
1356 static HRESULT WINAPI d3drm3_CreateObject(IDirect3DRM3 *iface,
1357  REFCLSID clsid, IUnknown *outer, REFIID iid, void **out)
1358 {
1359  struct d3drm *d3drm = impl_from_IDirect3DRM3(iface);
1360  IUnknown *object;
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 
1429 static 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 
1446 static 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 
1454  if (FAILED(hr = d3drm_mesh_create(&object, &d3drm->IDirect3DRM_iface)))
1455  return hr;
1456 
1457  *mesh = &object->IDirect3DRMMesh_iface;
1458 
1459  return S_OK;
1460 }
1461 
1462 static 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 
1478 static 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);
1490  IDirect3DRMFace_Release(face1);
1491 
1492  return hr;
1493 }
1494 
1495 static 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 
1511 static 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 
1518 static 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 
1545 static 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 
1586 static 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 
1603 static 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 
1646 static 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 
1673 static HRESULT WINAPI d3drm3_CreateDeviceFromClipper(IDirect3DRM3 *iface,
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 
1711  hr = d3drm_device_init(object, 3, ddraw, render_target, TRUE);
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 
1722 static 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 
1758 static 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  {
1782  IDirect3DRMViewport2_Release(*viewport);
1783  *viewport = NULL;
1784  return D3DRMERR_BADVALUE;
1785  }
1786 
1787  return D3DRM_OK;
1788 }
1789 
1790 static 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 
1806  if (FAILED(hr = d3drm_wrap_create(&object, &d3drm->IDirect3DRM_iface)))
1807  return hr;
1808 
1809  *wrap = &object->IDirect3DRMWrap_iface;
1810 
1811  return S_OK;
1812 }
1813 
1814 static 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 
1822 static 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 
1866 static 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 
1873 static 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 
1880 static 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 
1887 static 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 
1894 static 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 
1901 static 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 
1908 static 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 
1916 static HRESULT WINAPI d3drm3_EnumerateObjects(IDirect3DRM3 *iface, D3DRMOBJECTCALLBACK cb, void *ctx)
1917 {
1918  FIXME("iface %p, cb %p, ctx %p stub!\n", iface, cb, ctx);
1919 
1920  return E_NOTIMPL;
1921 }
1922 
1923 static 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);
1974  IDirect3DRMObject_Release(object);
1975  }
1976  }
1977  else
1978  {
1979  IDirect3DRMFrame3_AddVisual(parent_frame, (IUnknown*)meshbuilder);
1980  }
1981  }
1982  IDirect3DRMMeshBuilder3_Release(meshbuilder);
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 
2044  if (hr != DXFILEERR_NOMOREOBJECTS)
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);
2060  IDirect3DRMObject_Release(object);
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 
2104 end:
2105 
2106  return ret;
2107 }
2108 
2109 static 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 
2133  if (flags == D3DRMLOAD_FROMMEMORY)
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 
2176  hr = IDirectXFileData_GetData(data, NULL, &size, (void **)&header);
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  {
2195  if (hr == DXFILEERR_NOMOREOBJECTS)
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 
2216 end:
2217  if (data)
2219  if (enum_object)
2220  IDirectXFileEnumObject_Release(enum_object);
2221  if (file)
2223 
2224  return ret;
2225 }
2226 
2227 static 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 
2234 static 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 
2241 static 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 
2248 static HRESULT WINAPI d3drm3_UnregisterClient(IDirect3DRM3 *iface, REFGUID guid)
2249 {
2250  FIXME("iface %p, guid %s stub!\n", iface, debugstr_guid(guid));
2251 
2252  return E_NOTIMPL;
2253 }
2254 
2255 static 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 
2263 static 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 
2270 static 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 
2277 static const struct IDirect3DRM3Vtbl d3drm3_vtbl =
2278 {
2280  d3drm3_AddRef,
2312  d3drm3_Load,
2313  d3drm3_Tick,
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 }
static HRESULT WINAPI d3drm2_LoadTexture(IDirect3DRM2 *iface, const char *filename, IDirect3DRMTexture2 **texture)
Definition: d3drm.c:1146
static HRESULT WINAPI d3drm3_RegisterClient(IDirect3DRM3 *iface, REFGUID guid, DWORD *id)
Definition: d3drm.c:2241
static HRESULT WINAPI d3drm2_CreateAnimation(IDirect3DRM2 *iface, IDirect3DRMAnimation **animation)
Definition: d3drm.c:896
#define IDirect3DRMFrame3_AddTransform(p, a, b)
Definition: d3drmobj.h:1722
static HRESULT WINAPI d3drm1_CreateFrame(IDirect3DRM *iface, IDirect3DRMFrame *parent_frame, IDirect3DRMFrame **frame)
Definition: d3drm.c:284
#define HRESULT
Definition: msvc.h:9
static HRESULT d3drm_create_light_object(void **object, IDirect3DRM *d3drm)
Definition: d3drm.c:123
static HRESULT WINAPI d3drm1_AddSearchPath(IDirect3DRM *iface, const char *path)
Definition: d3drm.c:681
static HRESULT WINAPI d3drm1_SetDefaultTextureShades(IDirect3DRM *iface, DWORD shade_count)
Definition: d3drm.c:702
GLint GLint GLsizei width
Definition: gl.h:1546
#define IDirect3DRMFace_Release(p)
Definition: d3drmobj.h:2310
#define REFIID
Definition: guiddef.h:118
#define TRUE
Definition: types.h:120
#define CLASSFACTORY_E_FIRST
Definition: winerror.h:2661
static HRESULT WINAPI d3drm1_CreateUserVisual(IDirect3DRM *iface, D3DRMUSERVISUALCALLBACK cb, void *ctx, IDirect3DRMUserVisual **visual)
Definition: d3drm.c:622
#define IDirect3DRM3_CreateViewport(p, a, b, c, d, e, f, g)
Definition: d3drm.h:419
#define IDirect3DRMTexture3_InitFromImage(p, a)
Definition: d3drmobj.h:3506
#define IDirect3DRMViewport2_Release(p)
Definition: d3drmobj.h:991
static HRESULT WINAPI d3drm1_CreateAnimationSet(IDirect3DRM *iface, IDirect3DRMAnimationSet **set)
Definition: d3drm.c:351
static HRESULT WINAPI d3drm3_CreateProgressiveMesh(IDirect3DRM3 *iface, IDirect3DRMProgressiveMesh **mesh)
Definition: d3drm.c:2234
static HRESULT WINAPI d3drm3_CreateAnimationSet(IDirect3DRM3 *iface, IDirect3DRMAnimationSet2 **set)
Definition: d3drm.c:1511
static HRESULT WINAPI d3drm2_GetSearchPath(IDirect3DRM2 *iface, DWORD *size, char *path)
Definition: d3drm.c:1202
IDirect3DRMMesh IDirect3DRMMesh_iface
#define IDirectXFileBinary_Release(p)
Definition: dxfile.h:236
#define IDirect3DRMLight_SetColor(p, a)
Definition: d3drmobj.h:3132
static HRESULT WINAPI d3drm1_Tick(IDirect3DRM *iface, D3DVALUE tick)
Definition: d3drm.c:755
static HRESULT WINAPI d3drm3_CreateLightRGB(IDirect3DRM3 *iface, D3DRMLIGHTTYPE type, D3DVALUE red, D3DVALUE green, D3DVALUE blue, IDirect3DRMLight **light)
Definition: d3drm.c:1565
HRESULT hr
Definition: shlfolder.c:183
Definition: scsiwmi.h:51
static HRESULT d3drm_create_frame_object(void **object, IDirect3DRM *d3drm)
Definition: d3drm.c:110
#define IDirectXFileEnumObject_Release(p)
Definition: dxfile.h:107
#define IDirect3DRMTexture3_InitFromFile(p, a)
Definition: d3drmobj.h:3487
HRESULT d3drm_light_create(struct d3drm_light **light, IDirect3DRM *d3drm) DECLSPEC_HIDDEN
Definition: light.c:371
#define IDirect3DRMDevice3_QueryInterface(p, a, b)
Definition: d3drmobj.h:691
#define IDirect3DRM3_Load(p, a, b, c, d, e, f, g, h, i, j)
Definition: d3drm.h:432
static HRESULT d3drm_create_mesh_builder_object(void **object, IDirect3DRM *d3drm)
Definition: d3drm.c:97
#define IDirectXFileObject_Release(p)
Definition: dxfile.h:160
#define IDirect3DRM3_CreateMaterial(p, a, b)
Definition: d3drm.h:412
static ULONG WINAPI d3drm1_Release(IDirect3DRM *iface)
Definition: d3drm.c:260
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
static HRESULT WINAPI d3drm3_CreateObject(IDirect3DRM3 *iface, REFCLSID clsid, IUnknown *outer, REFIID iid, void **out)
Definition: d3drm.c:1356
#define IDirect3DRM3_CreateMeshBuilder(p, a)
Definition: d3drm.h:405
#define IDirectXFileData_Release(p)
Definition: dxfile.h:185
static HRESULT WINAPI d3drm3_SetDefaultTextureShades(IDirect3DRM3 *iface, DWORD shade_count)
Definition: d3drm.c:1894
static struct d3drm * impl_from_IDirect3DRM2(IDirect3DRM2 *iface)
Definition: d3drm.c:201
static HRESULT d3drm_create_material_object(void **object, IDirect3DRM *d3drm)
Definition: d3drm.c:136
#define IDirect3DRMFrame3_QueryInterface(p, a, b)
Definition: d3drmobj.h:1706
REFIID riid
Definition: precomp.h:44
GLuint GLenum matrix
Definition: glext.h:9407
static HRESULT WINAPI d3drm3_SetOptions(IDirect3DRM3 *iface, DWORD flags)
Definition: d3drm.c:2263
#define REFCLSID
Definition: guiddef.h:117
#define IDirect3DRM3_CreateLight(p, a, b, c)
Definition: d3drm.h:410
static HRESULT WINAPI d3drm2_CreateUserVisual(IDirect3DRM2 *iface, D3DRMUSERVISUALCALLBACK cb, void *ctx, IDirect3DRMUserVisual **visual)
Definition: d3drm.c:1138
#define IDirect3DRMLight_SetColorRGB(p, a, b, c)
Definition: d3drmobj.h:3133
#define D3DRMLOAD_FROMMEMORY
Definition: d3drmdef.h:343
static HRESULT WINAPI d3drm1_CreateDeviceFromD3D(IDirect3DRM *iface, IDirect3D *d3d, IDirect3DDevice *d3d_device, IDirect3DRMDevice **device)
Definition: d3drm.c:452
GLint dy
Definition: linetemp.h:97
static const struct IDirect3DRMVtbl d3drm1_vtbl
Definition: d3drm.c:762
static HRESULT WINAPI d3drm3_CreateFrame(IDirect3DRM3 *iface, IDirect3DRMFrame3 *parent, IDirect3DRMFrame3 **frame)
Definition: d3drm.c:1429
#define WARN(fmt,...)
Definition: debug.h:111
static HRESULT WINAPI d3drm3_GetNamedObject(IDirect3DRM3 *iface, const char *name, IDirect3DRMObject **object)
Definition: d3drm.c:1908
static HRESULT WINAPI d3drm1_CreateMaterial(IDirect3DRM *iface, D3DVALUE power, IDirect3DRMMaterial **material)
Definition: d3drm.c:403
static HRESULT WINAPI d3drm1_GetDevices(IDirect3DRM *iface, IDirect3DRMDeviceArray **array)
Definition: d3drm.c:709
#define IDirectXFile_Release(p)
Definition: dxfile.h:82
HRESULT d3drm_animation_create(struct d3drm_animation **animation, IDirect3DRM *d3drm) DECLSPEC_HIDDEN
Definition: frame.c:3881
REFIID LPVOID * ppv
Definition: atlbase.h:39
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_CreateProgressiveMesh(IDirect3DRM2 *iface, IDirect3DRMProgressiveMesh **mesh)
Definition: d3drm.c:1276
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
static HRESULT WINAPI d3drm2_CreateMaterial(IDirect3DRM2 *iface, D3DVALUE power, IDirect3DRMMaterial **material)
Definition: d3drm.c:957
static ULONG WINAPI d3drm1_AddRef(IDirect3DRM *iface)
Definition: d3drm.c:247
static HRESULT WINAPI d3drm1_CreateDeviceFromClipper(IDirect3DRM *iface, IDirectDrawClipper *clipper, GUID *guid, int width, int height, IDirect3DRMDevice **device)
Definition: d3drm.c:477
static HRESULT WINAPI d3drm2_SetSearchPath(IDirect3DRM2 *iface, const char *path)
Definition: d3drm.c:1188
static HRESULT WINAPI d3drm3_CreateLight(IDirect3DRM3 *iface, D3DRMLIGHTTYPE type, D3DCOLOR color, IDirect3DRMLight **light)
Definition: d3drm.c:1545
#define IDirect3DRM3_CreateTextureFromSurface(p, a, b)
Definition: d3drm.h:417
static HRESULT WINAPI d3drm3_CreateDeviceFromD3D(IDirect3DRM3 *iface, IDirect3D2 *d3d, IDirect3DDevice2 *d3d_device, IDirect3DRMDevice3 **device)
Definition: d3drm.c:1646
static HRESULT WINAPI d3drm2_SetDefaultTextureShades(IDirect3DRM2 *iface, DWORD shade_count)
Definition: d3drm.c:1216
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
static HRESULT WINAPI d3drm3_CreateDeviceFromClipper(IDirect3DRM3 *iface, IDirectDrawClipper *clipper, GUID *guid, int width, int height, IDirect3DRMDevice3 **device)
Definition: d3drm.c:1673
static HRESULT d3drm_create_wrap_object(void **object, IDirect3DRM *d3drm)
Definition: d3drm.c:175
GLuint GLuint end
Definition: gl.h:1545
WORD face[3]
Definition: mesh.c:4747
const char * filename
Definition: ioapi.h:135
#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 DXFILEERR_NOMOREOBJECTS
Definition: dxfile.h:291
HRESULT d3drm_material_create(struct d3drm_material **material, IDirect3DRM *d3drm) DECLSPEC_HIDDEN
Definition: material.c:279
static HRESULT WINAPI d3drm3_Tick(IDirect3DRM3 *iface, D3DVALUE tick)
Definition: d3drm.c:2227
#define CLASS_E_CLASSNOTAVAILABLE
Definition: winerror.h:2663
static HWND child
Definition: cursoricon.c:298
static HRESULT d3drm_create_texture_object(void **object, IDirect3DRM *d3drm)
Definition: d3drm.c:45
HRESULT d3drm_device_create(struct d3drm_device **device, IDirect3DRM *d3drm) DECLSPEC_HIDDEN
Definition: device.c:1634
static HRESULT WINAPI d3drm3_CreateMeshBuilder(IDirect3DRM3 *iface, IDirect3DRMMeshBuilder3 **mesh_builder)
Definition: d3drm.c:1462
static HRESULT WINAPI d3drm1_CreateLight(IDirect3DRM *iface, D3DRMLIGHTTYPE type, D3DCOLOR color, IDirect3DRMLight **light)
Definition: d3drm.c:382
HRESULT d3drm_mesh_builder_create(struct d3drm_mesh_builder **mesh_builder, IDirect3DRM *d3drm) DECLSPEC_HIDDEN
Definition: meshbuilder.c:2334
HRESULT WINAPI DllCanUnloadNow(void)
Definition: d3drm.c:2342
HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, void **ppv)
Definition: d3drm.c:2347
#define IDirect3DRMDevice3_Release(p)
Definition: d3drmobj.h:693
HRESULT WINAPI DirectDrawCreate(LPGUID lpGUID, LPDIRECTDRAW *lplpDD, LPUNKNOWN pUnkOuter)
Definition: main.c:86
static ULONG WINAPI d3drm2_Release(IDirect3DRM2 *iface)
Definition: d3drm.c:821
#define DXFILELOAD_FROMFILE
Definition: dxfile.h:37
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
static HRESULT d3drm_create_face_object(void **object, IDirect3DRM *d3drm)
Definition: d3drm.c:84
#define DXFILE_OK
Definition: dxfile.h:268
#define IDirect3DRMViewport2_QueryInterface(p, a, b)
Definition: d3drmobj.h:989
GLfloat GLfloat nz
Definition: glext.h:8896
#define IDirectXFile_RegisterTemplates(p, a, b)
Definition: dxfile.h:86
#define IDirect3DRM3_CreateMesh(p, a)
Definition: d3drm.h:404
static HRESULT WINAPI d3drm2_CreateDeviceFromSurface(IDirect3DRM2 *iface, GUID *guid, IDirectDraw *ddraw, IDirectDrawSurface *backbuffer, IDirect3DRMDevice2 **device)
Definition: d3drm.c:979
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
const GUID * guid
static HRESULT WINAPI d3drm2_EnumerateObjects(IDirect3DRM2 *iface, D3DRMOBJECTCALLBACK cb, void *ctx)
Definition: d3drm.c:1238
static HRESULT WINAPI d3drm2_CreateDeviceFromD3D(IDirect3DRM2 *iface, IDirect3D2 *d3d, IDirect3DDevice2 *d3d_device, IDirect3DRMDevice2 **device)
Definition: d3drm.c:1001
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define D3DRMERR_BADOBJECT
Definition: d3drm.h:487
IDirect3DRMFrame IDirect3DRMFrame_iface
Definition: d3drm_private.h:72
static HRESULT WINAPI d3drm1_SetSearchPath(IDirect3DRM *iface, const char *path)
Definition: d3drm.c:674
#define IDirect3DRM3_CreateTexture(p, a, b)
Definition: d3drm.h:409
static HRESULT WINAPI d3drm1_EnumerateObjects(IDirect3DRM *iface, D3DRMOBJECTCALLBACK cb, void *ctx)
Definition: d3drm.c:724
HRESULT load_mesh_data(IDirect3DRMMeshBuilder3 *iface, IDirectXFileData *data, D3DRMLOADTEXTURECALLBACK load_texture_proc, void *arg) DECLSPEC_HIDDEN
Definition: meshbuilder.c:1019
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
unsigned int BOOL
Definition: ntddk_ex.h:94
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
long LONG
Definition: pedump.c:60
GLuint color
Definition: glext.h:6243
Definition: devices.h:37
static ULONG WINAPI d3drm3_Release(IDirect3DRM3 *iface)
Definition: d3drm.c:1343
void d3drm_device_destroy(struct d3drm_device *device) DECLSPEC_HIDDEN
Definition: device.c:40
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_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
#define IDirect3DRMDevice_QueryInterface(p, a, b)
Definition: d3drmobj.h:407
#define FIXME(fmt,...)
Definition: debug.h:110
static HRESULT WINAPI d3drm2_CreateObject(IDirect3DRM2 *iface, REFCLSID clsid, IUnknown *outer, REFIID iid, void **out)
Definition: d3drm.c:834
static HRESULT WINAPI d3drm1_CreateFace(IDirect3DRM *iface, IDirect3DRMFace **face)
Definition: d3drm.c:318
#define S_FALSE
Definition: winerror.h:2357
#define IDirectXFileEnumObject_GetNextDataObject(p, a)
Definition: dxfile.h:109
#define E_INVALIDARG
Definition: ddrawi.h:101
float D3DVALUE
Definition: d3dtypes.h:89
static HRESULT WINAPI d3drm3_SetSearchPath(IDirect3DRM3 *iface, const char *path)
Definition: d3drm.c:1866
static HRESULT WINAPI d3drm2_CreateAnimationSet(IDirect3DRM2 *iface, IDirect3DRMAnimationSet **set)
Definition: d3drm.c:905
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
smooth NULL
Definition: ftsmooth.c:416
#define IDirect3DRM3_CreateObject(p, a, b, c, d)
Definition: d3drm.h:402
static HRESULT WINAPI d3drm1_CreateTexture(IDirect3DRM *iface, D3DRMIMAGE *image, IDirect3DRMTexture **texture)
Definition: d3drm.c:358
#define IDirect3DRMFrame3_Release(p)
Definition: d3drmobj.h:1708
static HRESULT WINAPI d3drm1_GetNamedObject(IDirect3DRM *iface, const char *name, IDirect3DRMObject **object)
Definition: d3drm.c:716
static HRESULT d3drm_create_viewport_object(void **object, IDirect3DRM *d3drm)
Definition: d3drm.c:71
static HRESULT WINAPI d3drm2_CreateLight(IDirect3DRM2 *iface, D3DRMLIGHTTYPE type, D3DCOLOR color, IDirect3DRMLight **light)
Definition: d3drm.c:936
static HRESULT WINAPI d3drm3_EnumerateObjects(IDirect3DRM3 *iface, D3DRMOBJECTCALLBACK cb, void *ctx)
Definition: d3drm.c:1916
#define IDirect3DRMViewport2_Init(p, a, b, c, d, e, f)
Definition: d3drmobj.h:1002
static HRESULT WINAPI d3drm3_GetOptions(IDirect3DRM3 *iface, DWORD *flags)
Definition: d3drm.c:2270
static HRESULT WINAPI d3drm1_CreateAnimation(IDirect3DRM *iface, IDirect3DRMAnimation **animation)
Definition: d3drm.c:333
#define debugstr_guid
Definition: kernel32.h:35
GLclampf GLclampf blue
Definition: gl.h:1740
static VOID * LoadProc(LPCWSTR DllName, LPCSTR ProcName, HMODULE *DllHandle)
Definition: msiexec.c:275
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
static const struct IDirect3DRM3Vtbl d3drm3_vtbl
Definition: d3drm.c:2277
#define IDirectXFileData_GetNextObject(p, a)
Definition: dxfile.h:192
static HRESULT WINAPI d3drm3_QueryInterface(IDirect3DRM3 *iface, REFIID riid, void **out)
Definition: d3drm.c:1323
HRESULT d3drm_device_init(struct d3drm_device *device, UINT version, IDirectDraw *ddraw, IDirectDrawSurface *surface, BOOL create_z_surface) DECLSPEC_HIDDEN
Definition: device.c:120
static HRESULT WINAPI d3drm3_GetDevices(IDirect3DRM3 *iface, IDirect3DRMDeviceArray **array)
Definition: d3drm.c:1901
IDirect3DRMAnimation IDirect3DRMAnimation_iface
#define IDirect3DRM3_CreateFrame(p, a, b)
Definition: d3drm.h:403
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
HRESULT WINAPI Direct3DRMCreate(IDirect3DRM **d3drm)
Definition: d3drm.c:2322
#define IDirect3DRMLight_SetType(p, a)
Definition: d3drmobj.h:3131
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
#define IDirect3DRMMeshBuilder3_QueryInterface(p, a, b)
Definition: d3drmobj.h:2924
static HRESULT WINAPI d3drm2_AddSearchPath(IDirect3DRM2 *iface, const char *path)
Definition: d3drm.c:1195
IDirect3DRM IDirect3DRM_iface
Definition: d3drm.c:190
r parent
Definition: btrfs.c:2869
static HRESULT WINAPI d3drm2_CreateDevice(IDirect3DRM2 *iface, DWORD width, DWORD height, IDirect3DRMDevice2 **device)
Definition: d3drm.c:967
#define debugstr_a
Definition: kernel32.h:31
GLenum GLuint texture
Definition: glext.h:6295
static HRESULT WINAPI d3drm1_CreateMeshBuilder(IDirect3DRM *iface, IDirect3DRMMeshBuilder **mesh_builder)
Definition: d3drm.c:309
LONG HRESULT
Definition: typedefs.h:77
#define D3DRM_OK
Definition: d3drm.h:486
HRESULT d3drm_face_create(struct d3drm_face **face) DECLSPEC_HIDDEN
Definition: face.c:620
const GUID IID_IUnknown
IDirectDrawClipper * clipper
#define IDirect3DRMDevice_InitFromD3D(p, a, b)
Definition: d3drmobj.h:421
HRESULT d3drm_texture_create(struct d3drm_texture **texture, IDirect3DRM *d3drm) DECLSPEC_HIDDEN
Definition: texture.c:1412
#define WINAPI
Definition: msvc.h:8
static HRESULT WINAPI d3drm3_UnregisterClient(IDirect3DRM3 *iface, REFGUID guid)
Definition: d3drm.c:2248
#define IDirect3DRM_CreateAnimation(p, a)
Definition: d3drm.h:118
static HRESULT WINAPI d3drm2_CreateFrame(IDirect3DRM2 *iface, IDirect3DRMFrame *parent_frame, IDirect3DRMFrame2 **frame)
Definition: d3drm.c:845
static FILE * out
Definition: regtests2xml.c:44
GLclampf green
Definition: gl.h:1740
static struct d3drm * impl_from_IDirect3DRM(IDirect3DRM *iface)
Definition: d3drm.c:196
unsigned long DWORD
Definition: ntddk_ex.h:95
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_CreateMaterial(IDirect3DRM3 *iface, D3DVALUE power, IDirect3DRMMaterial2 **material)
Definition: d3drm.c:1586
HRESULT d3drm_mesh_create(struct d3drm_mesh **mesh, IDirect3DRM *d3drm) DECLSPEC_HIDDEN
Definition: meshbuilder.c:2833
#define red
Definition: linetest.c:67
#define IDirect3DRM3_CreateDeviceFromD3D(p, a, b, c)
Definition: d3drm.h:415
IDirect3DRMViewport IDirect3DRMViewport_iface
const GLuint GLenum const GLvoid * binary
Definition: glext.h:7538
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
void(__cdecl * D3DRMLOADCALLBACK)(struct IDirect3DRMObject *object, REFIID objectguid, void *arg)
Definition: d3drmobj.h:167
static HRESULT d3drm_create_device_object(void **object, IDirect3DRM *d3drm)
Definition: d3drm.c:58
GLbitfield flags
Definition: glext.h:7161
static HRESULT WINAPI d3drm1_CreateObject(IDirect3DRM *iface, REFCLSID clsid, IUnknown *outer, REFIID iid, void **out)
Definition: d3drm.c:273
#define IDirect3DRM3_CreateLightRGB(p, a, b, c, d, e)
Definition: d3drm.h:411
static const char * get_IID_string(const GUID *guid)
Definition: d3drm.c:27
IDirect3DRMMaterial2 IDirect3DRMMaterial2_iface
static HRESULT WINAPI d3drm1_LoadTextureFromResource(IDirect3DRM *iface, HRSRC resource, IDirect3DRMTexture **texture)
Definition: d3drm.c:658
#define IDirectXFile_CreateEnumObject(p, a, b, c)
Definition: dxfile.h:84
void(__cdecl * D3DRMOBJECTCALLBACK)(struct IDirect3DRMObject *obj, void *arg)
Definition: d3drmobj.h:157
#define IDirectXFileObject_QueryInterface(p, a, b)
Definition: dxfile.h:158
DWORD DXFILELOADOPTIONS
Definition: dxfile.h:35
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
int ret
IDirectDrawSurface * surface
Definition: d3drm_private.h:66
#define IDirectXFileData_GetData(p, a, b, c)
Definition: dxfile.h:190
#define IDirect3DRMTexture_InitFromFile(p, a)
Definition: d3drmobj.h:3243
static HRESULT WINAPI d3drm3_CreateClippedVisual(IDirect3DRM3 *iface, IDirect3DRMVisual *visual, IDirect3DRMClippedVisual **clipped_visual)
Definition: d3drm.c:2255
REFCLSID clsid
Definition: msctf.c:82
#define D3DRMERR_BADVALUE
Definition: d3drm.h:496
#define InterlockedDecrement
Definition: armddk.h:52
GLint reference
Definition: glext.h:11729
D3DVALUE D3DRMMATRIX4D[4][4]
Definition: d3drmdef.h:39
static HRESULT WINAPI d3drm1_QueryInterface(IDirect3DRM *iface, REFIID riid, void **out)
Definition: d3drm.c:217
static HRESULT WINAPI d3drm2_QueryInterface(IDirect3DRM2 *iface, REFIID riid, void **out)
Definition: d3drm.c:801
#define IDirectXFileData_GetType(p, a)
Definition: dxfile.h:191
IDirect3DRM2 IDirect3DRM2_iface
Definition: d3drm.c:191
static HRESULT WINAPI d3drm2_CreateMesh(IDirect3DRM2 *iface, IDirect3DRMMesh **mesh)
Definition: d3drm.c:862
#define IDirect3DRM2_CreateMeshBuilder(p, a)
Definition: d3drm.h:257
#define IDirect3DRMTexture3_InitFromSurface(p, a)
Definition: d3drmobj.h:3488
GLfloat GLfloat GLfloat GLfloat nx
Definition: glext.h:8898
WINE_DEFAULT_DEBUG_CHANNEL(d3drm)
static void d3drm_destroy(struct d3drm *d3drm)
Definition: d3drm.c:211
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
LONG iface_count
Definition: d3drm.c:193
IDirect3DRMMeshBuilder * mesh_builder
Definition: d3drm.c:3330
Definition: d3drm.c:188
static HRESULT WINAPI d3drm3_LoadTexture(IDirect3DRM3 *iface, const char *filename, IDirect3DRMTexture3 **texture)
Definition: d3drm.c:1822
int(__cdecl * D3DRMUSERVISUALCALLBACK)(struct IDirect3DRMUserVisual *visual, void *ctx, D3DRMUSERVISUALREASON reason, struct IDirect3DRMDevice *device, struct IDirect3DRMViewport *viewport)
Definition: d3drmobj.h:163
#define IDirectXFileDataReference_Resolve(p, a)
Definition: dxfile.h:217
#define D3DRMERR_BADDEVICE
Definition: d3drm.h:495
#define IDirect3DRMFrame_QueryInterface(p, a, b)
Definition: d3drmobj.h:1166
static HRESULT WINAPI d3drm2_SetDefaultTextureColors(IDirect3DRM2 *iface, DWORD color_count)
Definition: d3drm.c:1209
#define ERR(fmt,...)
Definition: debug.h:109
#define IDirectXFileDataReference_Release(p)
Definition: dxfile.h:212
static HRESULT WINAPI d3drm1_CreateTextureFromSurface(IDirect3DRM *iface, IDirectDrawSurface *surface, IDirect3DRMTexture **texture)
Definition: d3drm.c:525
static HRESULT WINAPI d3drm1_CreateMesh(IDirect3DRM *iface, IDirect3DRMMesh **mesh)
Definition: d3drm.c:300
#define IDirect3DRM3_CreateDeviceFromClipper(p, a, b, c, d, e)
Definition: d3drm.h:416
#define S_OK
Definition: intsafe.h:59
#define IDirect3DRMDevice3_InitFromD3D2(p, a, b)
Definition: d3drmobj.h:728
#define InterlockedIncrement
Definition: armddk.h:53
float power
Definition: d3drm.c:3372
static HRESULT WINAPI d3drm3_CreateAnimation(IDirect3DRM3 *iface, IDirect3DRMAnimation2 **animation)
Definition: d3drm.c:1495
static HRESULT WINAPI d3drm3_AddSearchPath(IDirect3DRM3 *iface, const char *path)
Definition: d3drm.c:1873
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 d3drm_create_mesh_object(void **object, IDirect3DRM *d3drm)
Definition: d3drm.c:149
IDirect3DRMFrame * camera
static HRESULT WINAPI d3drm3_SetDefaultTextureColors(IDirect3DRM3 *iface, DWORD color_count)
Definition: d3drm.c:1887
#define ARRAY_SIZE(a)
Definition: main.h:24
static HRESULT WINAPI d3drm1_CreateDeviceFromSurface(IDirect3DRM *iface, GUID *guid, IDirectDraw *ddraw, IDirectDrawSurface *backbuffer, IDirect3DRMDevice **device)
Definition: d3drm.c:425
static HRESULT WINAPI d3drm2_CreateMeshBuilder(IDirect3DRM2 *iface, IDirect3DRMMeshBuilder2 **mesh_builder)
Definition: d3drm.c:871
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
#define E_NOTIMPL
Definition: ddrawi.h:99
IDirect3DDevice * device
static HRESULT WINAPI d3drm3_CreateFace(IDirect3DRM3 *iface, IDirect3DRMFace2 **face)
Definition: d3drm.c:1478
static HRESULT d3drm_create_animation_object(void **object, IDirect3DRM *d3drm)
Definition: d3drm.c:162
static HRESULT WINAPI d3drm2_CreateDeviceFromClipper(IDirect3DRM2 *iface, IDirectDrawClipper *clipper, GUID *guid, int width, int height, IDirect3DRMDevice2 **device)
Definition: d3drm.c:1025
#define IDirect3DRM_CreateFace(p, a)
Definition: d3drm.h:117
LONG ref2
Definition: d3drm.c:193
static HRESULT WINAPI d3drm1_GetSearchPath(IDirect3DRM *iface, DWORD *size, char *path)
Definition: d3drm.c:688
HRESULT d3drm_wrap_create(struct d3drm_wrap **wrap, IDirect3DRM *d3drm) DECLSPEC_HIDDEN
Definition: meshbuilder.c:3019
static HRESULT WINAPI d3drm2_GetNamedObject(IDirect3DRM2 *iface, const char *name, IDirect3DRMObject **object)
Definition: d3drm.c:1230
static HRESULT WINAPI d3drm2_CreateTextureFromSurface(IDirect3DRM2 *iface, IDirectDrawSurface *surface, IDirect3DRMTexture2 **texture)
Definition: d3drm.c:1049
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
Definition: compobj.c:4112
HRESULT WINAPI DirectXFileCreate(LPDIRECTXFILE *lplpDirectXFile)
Definition: main.c:153
DWORD D3DRMLOADOPTIONS
Definition: d3drmdef.h:339
static HRESULT WINAPI d3drm3_CreateDeviceFromSurface(IDirect3DRM3 *iface, GUID *guid, IDirectDraw *ddraw, IDirectDrawSurface *backbuffer, DWORD flags, IDirect3DRMDevice3 **device)
Definition: d3drm.c:1615
static HRESULT WINAPI d3drm2_GetDevices(IDirect3DRM2 *iface, IDirect3DRMDeviceArray **array)
Definition: d3drm.c:1223
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
GLint dx
Definition: linetemp.h:97
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
#define IDirect3DRMTexture3_QueryInterface(p, a, b)
Definition: d3drmobj.h:3474
static HRESULT WINAPI d3drm3_CreateUserVisual(IDirect3DRM3 *iface, D3DRMUSERVISUALCALLBACK cb, void *ctx, IDirect3DRMUserVisual **visual)
Definition: d3drm.c:1814
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 d3drm2_CreateLightRGB(IDirect3DRM2 *iface, D3DRMLIGHTTYPE type, D3DVALUE red, D3DVALUE green, D3DVALUE blue, IDirect3DRMLight **light)
Definition: d3drm.c:946
IDirectDrawSurface * render_target
static HMODULE MODULEINFO DWORD cb
Definition: module.c:32
Definition: name.c:38
static ULONG WINAPI d3drm3_AddRef(IDirect3DRM3 *iface)
Definition: d3drm.c:1330
#define IDirect3DRMTexture3_Release(p)
Definition: d3drmobj.h:3476
static HRESULT WINAPI d3drm2_CreateTexture(IDirect3DRM2 *iface, D3DRMIMAGE *image, IDirect3DRMTexture2 **texture)
Definition: d3drm.c:912
static HRESULT WINAPI d3drm1_CreateDevice(IDirect3DRM *iface, DWORD width, DWORD height, IDirect3DRMDevice **device)
Definition: d3drm.c:413
GLfloat ny
Definition: glext.h:8896
LONG ref3
Definition: d3drm.c:193
static HRESULT WINAPI d3drm3_LoadTextureFromResource(IDirect3DRM3 *iface, HMODULE module, const char *resource_name, const char *resource_type, IDirect3DRMTexture3 **texture)
Definition: d3drm.c:1848
unsigned int ULONG
Definition: retypes.h:1
HRESULT create_object(script_ctx_t *, jsdisp_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: object.c:731
#define IDirect3DRMObject_Release(p)
Definition: d3drmobj.h:220
#define IDirect3DRM3_CreateDeviceFromSurface(p, a, b, c, d, e)
Definition: d3drm.h:414
static HRESULT WINAPI d3drm3_GetSearchPath(IDirect3DRM3 *iface, DWORD *size, char *path)
Definition: d3drm.c:1880
#define D3DRMERR_BADFILE
Definition: d3drm.h:494
#define wrap(journal, var)
Definition: recovery.c:207
enum _D3DRMWRAPTYPE D3DRMWRAPTYPE
HRESULT(__cdecl * D3DRMLOADTEXTURECALLBACK)(char *tex_name, void *arg, struct IDirect3DRMTexture **texture)
Definition: d3drmobj.h:165
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
#define D3DRMDEVICE_NOZBUFFER
Definition: d3drmdef.h:271
#define IDirect3DRMMeshBuilder3_Release(p)
Definition: d3drmobj.h:2926
LONG ref1
Definition: d3drm.c:193
char templates[]
Definition: meshbuilder.c:39
HRESULT d3drm_viewport_create(struct d3drm_viewport **viewport, IDirect3DRM *d3drm) DECLSPEC_HIDDEN
Definition: viewport.c:1123
HRESULT d3drm_frame_create(struct d3drm_frame **frame, IUnknown *parent_frame, IDirect3DRM *d3drm) DECLSPEC_HIDDEN
Definition: frame.c:3129
IDirectDraw * ddraw
static HRESULT WINAPI d3drm1_SetDefaultTextureColors(IDirect3DRM *iface, DWORD color_count)
Definition: d3drm.c:695
#define IDirect3DRMMaterial2_SetPower(p, a)
Definition: d3drmobj.h:3743
#define IDirect3DRMFace_QueryInterface(p, a, b)
Definition: d3drmobj.h:2308
Definition: _set.h:46
static HRESULT WINAPI d3drm3_CreateTexture(IDirect3DRM3 *iface, D3DRMIMAGE *image, IDirect3DRMTexture3 **texture)
Definition: d3drm.c:1518
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 HRESULT WINAPI d3drm3_CreateTextureFromSurface(IDirect3DRM3 *iface, IDirectDrawSurface *surface, IDirect3DRMTexture3 **texture)
Definition: d3drm.c:1731
#define D3DRMERR_FILENOTFOUND
Definition: d3drm.h:493
static HRESULT WINAPI d3drm1_LoadTexture(IDirect3DRM *iface, const char *filename, IDirect3DRMTexture **texture)
Definition: d3drm.c:630
struct CFHEADER header
Definition: fdi.c:101
static const struct IDirect3DRM2Vtbl d3drm2_vtbl
Definition: d3drm.c:1283
#define D3DRMLOAD_FROMFILE
Definition: d3drmdef.h:341
void * object
Definition: jmemsys.h:48
GLenum GLuint GLint GLenum face
Definition: glext.h:7025
static struct d3drm * impl_from_IDirect3DRM3(IDirect3DRM3 *iface)
Definition: d3drm.c:206
static HRESULT WINAPI d3drm2_LoadTextureFromResource(IDirect3DRM2 *iface, HMODULE module, const char *resource_name, const char *resource_type, IDirect3DRMTexture2 **texture)
Definition: d3drm.c:1170
enum _D3DRMLIGHTTYPE D3DRMLIGHTTYPE
#define SUCCEEDED(hr)
Definition: intsafe.h:57
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 HRESULT WINAPI d3drm2_CreateFace(IDirect3DRM2 *iface, IDirect3DRMFace **face)
Definition: d3drm.c:887
static BOOL heap_free(void *mem)
Definition: appwiz.h:75
IDirect3DRM3 IDirect3DRM3_iface
Definition: d3drm.c:192
#define IDirect3DRMTexture_Release(p)
Definition: d3drmobj.h:3232
static ULONG WINAPI d3drm2_AddRef(IDirect3DRM2 *iface)
Definition: d3drm.c:808
Definition: fci.c:126
static HRESULT WINAPI d3drm2_Tick(IDirect3DRM2 *iface, D3DVALUE tick)
Definition: d3drm.c:1269
#define IDirect3DRM3_LoadTexture(p, a, b)
Definition: d3drm.h:422
#define DXFILELOAD_FROMMEMORY
Definition: dxfile.h:39
#define IDirect3DRMFrame3_AddVisual(p, a)
Definition: d3drmobj.h:1726