d3drm: Make IDirect3DRMx_CreateFrame() more forgiving about the parent frame.
[wine/multimedia.git] / dlls / d3drm / frame.c
blob025c955d9bccd4e58e3637618d1e326a3a4d151f
1 /*
2 * Implementation of IDirect3DRMFrame Interface
4 * Copyright 2011, 2012 André Hentschel
5 * Copyright 2012 Christian Costa
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
22 #include <assert.h>
23 #include "wine/debug.h"
25 #define COBJMACROS
27 #include "winbase.h"
28 #include "wingdi.h"
30 #include "d3drm_private.h"
32 WINE_DEFAULT_DEBUG_CHANNEL(d3drm);
34 static D3DRMMATRIX4D identity = {
35 { 1.0f, 0.0f, 0.0f, 0.0f },
36 { 0.0f, 1.0f, 0.0f, 0.0f },
37 { 0.0f, 0.0f, 1.0f, 0.0f },
38 { 0.0f, 0.0f, 0.0f, 1.0f }
41 typedef struct IDirect3DRMFrameImpl IDirect3DRMFrameImpl;
43 struct IDirect3DRMFrameImpl {
44 IDirect3DRMFrame2 IDirect3DRMFrame2_iface;
45 IDirect3DRMFrame3 IDirect3DRMFrame3_iface;
46 LONG ref;
47 IDirect3DRMFrameImpl* parent;
48 ULONG nb_children;
49 ULONG children_capacity;
50 IDirect3DRMFrame3** children;
51 ULONG nb_visuals;
52 ULONG visuals_capacity;
53 IDirect3DRMVisual** visuals;
54 ULONG nb_lights;
55 ULONG lights_capacity;
56 IDirect3DRMLight** lights;
57 D3DRMMATRIX4D transform;
60 typedef struct {
61 IDirect3DRMFrameArray IDirect3DRMFrameArray_iface;
62 LONG ref;
63 ULONG size;
64 LPDIRECT3DRMFRAME* frames;
65 } IDirect3DRMFrameArrayImpl;
67 typedef struct {
68 IDirect3DRMVisualArray IDirect3DRMVisualArray_iface;
69 LONG ref;
70 ULONG size;
71 LPDIRECT3DRMVISUAL* visuals;
72 } IDirect3DRMVisualArrayImpl;
74 typedef struct {
75 IDirect3DRMLightArray IDirect3DRMLightArray_iface;
76 LONG ref;
77 ULONG size;
78 LPDIRECT3DRMLIGHT* lights;
79 } IDirect3DRMLightArrayImpl;
81 static inline IDirect3DRMFrameImpl *impl_from_IDirect3DRMFrame2(IDirect3DRMFrame2 *iface)
83 return CONTAINING_RECORD(iface, IDirect3DRMFrameImpl, IDirect3DRMFrame2_iface);
86 static inline IDirect3DRMFrameImpl *impl_from_IDirect3DRMFrame3(IDirect3DRMFrame3 *iface)
88 return CONTAINING_RECORD(iface, IDirect3DRMFrameImpl, IDirect3DRMFrame3_iface);
91 static inline IDirect3DRMFrameImpl *unsafe_impl_from_IDirect3DRMFrame3(IDirect3DRMFrame3 *iface);
93 static inline IDirect3DRMLightArrayImpl *impl_from_IDirect3DRMLightArray(IDirect3DRMLightArray *iface)
95 return CONTAINING_RECORD(iface, IDirect3DRMLightArrayImpl, IDirect3DRMLightArray_iface);
98 /*** IUnknown methods ***/
99 static HRESULT WINAPI IDirect3DRMFrameArrayImpl_QueryInterface(IDirect3DRMFrameArray* iface,
100 REFIID riid, void** object)
102 IDirect3DRMFrameArrayImpl *This = (IDirect3DRMFrameArrayImpl*)iface;
104 TRACE("(%p/%p)->(%s, %p)\n", iface, This, debugstr_guid(riid), object);
106 *object = NULL;
108 if (IsEqualGUID(riid, &IID_IUnknown) ||
109 IsEqualGUID(riid, &IID_IDirect3DRMFrameArray))
111 *object = &This->IDirect3DRMFrameArray_iface;
113 else
115 FIXME("interface %s not implemented\n", debugstr_guid(riid));
116 return E_NOINTERFACE;
119 IDirect3DRMFrameArray_AddRef(iface);
120 return S_OK;
123 static ULONG WINAPI IDirect3DRMFrameArrayImpl_AddRef(IDirect3DRMFrameArray* iface)
125 IDirect3DRMFrameArrayImpl *This = (IDirect3DRMFrameArrayImpl*)iface;
126 ULONG ref = InterlockedIncrement(&This->ref);
128 TRACE("(%p)->(): new ref = %u\n", This, ref);
130 return ref;
133 static ULONG WINAPI IDirect3DRMFrameArrayImpl_Release(IDirect3DRMFrameArray* iface)
135 IDirect3DRMFrameArrayImpl *This = (IDirect3DRMFrameArrayImpl*)iface;
136 ULONG ref = InterlockedDecrement(&This->ref);
137 ULONG i;
139 TRACE("(%p)->(): new ref = %u\n", This, ref);
141 if (!ref)
143 for (i = 0; i < This->size; i++)
144 IDirect3DRMFrame_Release(This->frames[i]);
145 HeapFree(GetProcessHeap(), 0, This->frames);
146 HeapFree(GetProcessHeap(), 0, This);
149 return ref;
152 /*** IDirect3DRMArray methods ***/
153 static DWORD WINAPI IDirect3DRMFrameArrayImpl_GetSize(IDirect3DRMFrameArray* iface)
155 IDirect3DRMFrameArrayImpl *This = (IDirect3DRMFrameArrayImpl*)iface;
157 TRACE("(%p)->() = %d\n", This, This->size);
159 return This->size;
162 /*** IDirect3DRMFrameArray methods ***/
163 static HRESULT WINAPI IDirect3DRMFrameArrayImpl_GetElement(IDirect3DRMFrameArray* iface, DWORD index, LPDIRECT3DRMFRAME* frame)
165 IDirect3DRMFrameArrayImpl *This = (IDirect3DRMFrameArrayImpl*)iface;
167 TRACE("(%p)->(%u, %p)\n", This, index, frame);
169 if (!frame)
170 return D3DRMERR_BADVALUE;
172 *frame = NULL;
174 if (index >= This->size)
175 return D3DRMERR_BADVALUE;
177 IDirect3DRMFrame_AddRef(This->frames[index]);
178 *frame = This->frames[index];
180 return D3DRM_OK;
183 static const struct IDirect3DRMFrameArrayVtbl Direct3DRMFrameArray_Vtbl =
185 /*** IUnknown methods ***/
186 IDirect3DRMFrameArrayImpl_QueryInterface,
187 IDirect3DRMFrameArrayImpl_AddRef,
188 IDirect3DRMFrameArrayImpl_Release,
189 /*** IDirect3DRMArray methods ***/
190 IDirect3DRMFrameArrayImpl_GetSize,
191 /*** IDirect3DRMFrameArray methods ***/
192 IDirect3DRMFrameArrayImpl_GetElement
195 static HRESULT Direct3DRMFrameArray_create(IDirect3DRMFrameArray** obj)
197 IDirect3DRMFrameArrayImpl* object;
199 TRACE("(%p)\n", obj);
201 *obj = NULL;
203 object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirect3DRMFrameArrayImpl));
204 if (!object)
206 ERR("Out of memory\n");
207 return E_OUTOFMEMORY;
210 object->IDirect3DRMFrameArray_iface.lpVtbl = &Direct3DRMFrameArray_Vtbl;
211 object->ref = 1;
213 *obj = &object->IDirect3DRMFrameArray_iface;
215 return S_OK;
218 /*** IUnknown methods ***/
219 static HRESULT WINAPI IDirect3DRMVisualArrayImpl_QueryInterface(IDirect3DRMVisualArray* iface,
220 REFIID riid, void** ret_iface)
222 TRACE("(%p)->(%s, %p)\n", iface, debugstr_guid(riid), ret_iface);
224 if (IsEqualGUID(riid, &IID_IUnknown) ||
225 IsEqualGUID(riid, &IID_IDirect3DRMFrameArray))
227 *ret_iface = iface;
228 IDirect3DRMVisualArray_AddRef(iface);
229 return S_OK;
232 *ret_iface = NULL;
234 WARN("Interface %s not implemented\n", debugstr_guid(riid));
236 return E_NOINTERFACE;
239 static ULONG WINAPI IDirect3DRMVisualArrayImpl_AddRef(IDirect3DRMVisualArray* iface)
241 IDirect3DRMVisualArrayImpl *This = (IDirect3DRMVisualArrayImpl*)iface;
242 ULONG ref = InterlockedIncrement(&This->ref);
244 TRACE("(%p)->(): new ref = %u\n", iface, ref);
246 return ref;
249 static ULONG WINAPI IDirect3DRMVisualArrayImpl_Release(IDirect3DRMVisualArray* iface)
251 IDirect3DRMVisualArrayImpl *This = (IDirect3DRMVisualArrayImpl*)iface;
252 ULONG ref = InterlockedDecrement(&This->ref);
253 ULONG i;
255 TRACE("(%p)->(): new ref = %u\n", iface, ref);
257 if (!ref)
259 for (i = 0; i < This->size; i++)
260 IDirect3DRMVisual_Release(This->visuals[i]);
261 HeapFree(GetProcessHeap(), 0, This->visuals);
262 HeapFree(GetProcessHeap(), 0, This);
265 return ref;
268 /*** IDirect3DRMArray methods ***/
269 static DWORD WINAPI IDirect3DRMVisualArrayImpl_GetSize(IDirect3DRMVisualArray* iface)
271 IDirect3DRMVisualArrayImpl *This = (IDirect3DRMVisualArrayImpl*)iface;
273 TRACE("(%p)->() = %d\n", iface, This->size);
275 return This->size;
278 /*** IDirect3DRMVisualArray methods ***/
279 static HRESULT WINAPI IDirect3DRMVisualArrayImpl_GetElement(IDirect3DRMVisualArray* iface, DWORD index, LPDIRECT3DRMVISUAL* visual)
281 IDirect3DRMVisualArrayImpl *This = (IDirect3DRMVisualArrayImpl*)iface;
283 TRACE("(%p)->(%u, %p)\n", iface, index, visual);
285 if (!visual)
286 return D3DRMERR_BADVALUE;
288 *visual = NULL;
290 if (index >= This->size)
291 return D3DRMERR_BADVALUE;
293 IDirect3DRMVisual_AddRef(This->visuals[index]);
294 *visual = This->visuals[index];
296 return D3DRM_OK;
299 static const struct IDirect3DRMVisualArrayVtbl Direct3DRMVisualArray_Vtbl =
301 /*** IUnknown methods ***/
302 IDirect3DRMVisualArrayImpl_QueryInterface,
303 IDirect3DRMVisualArrayImpl_AddRef,
304 IDirect3DRMVisualArrayImpl_Release,
305 /*** IDirect3DRMArray methods ***/
306 IDirect3DRMVisualArrayImpl_GetSize,
307 /*** IDirect3DRMVisualArray methods ***/
308 IDirect3DRMVisualArrayImpl_GetElement
311 static HRESULT Direct3DRMVisualArray_create(IDirect3DRMVisualArray** ret_iface)
313 IDirect3DRMVisualArrayImpl* object;
315 TRACE("(%p)\n", ret_iface);
317 *ret_iface = NULL;
319 object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirect3DRMVisualArrayImpl));
320 if (!object)
322 ERR("Out of memory\n");
323 return E_OUTOFMEMORY;
326 object->IDirect3DRMVisualArray_iface.lpVtbl = &Direct3DRMVisualArray_Vtbl;
327 object->ref = 1;
329 *ret_iface = &object->IDirect3DRMVisualArray_iface;
331 return S_OK;
334 /*** IUnknown methods ***/
335 static HRESULT WINAPI IDirect3DRMLightArrayImpl_QueryInterface(IDirect3DRMLightArray* iface,
336 REFIID riid, void** object)
338 IDirect3DRMLightArrayImpl *This = impl_from_IDirect3DRMLightArray(iface);
340 TRACE("(%p/%p)->(%s, %p)\n", iface, This, debugstr_guid(riid), object);
342 *object = NULL;
344 if (IsEqualGUID(riid, &IID_IUnknown) ||
345 IsEqualGUID(riid, &IID_IDirect3DRMLightArray))
347 *object = &This->IDirect3DRMLightArray_iface;
349 else
351 FIXME("interface %s not implemented\n", debugstr_guid(riid));
352 return E_NOINTERFACE;
355 IDirect3DRMLightArray_AddRef(iface);
356 return S_OK;
359 static ULONG WINAPI IDirect3DRMLightArrayImpl_AddRef(IDirect3DRMLightArray* iface)
361 IDirect3DRMLightArrayImpl *This = impl_from_IDirect3DRMLightArray(iface);
362 ULONG ref = InterlockedIncrement(&This->ref);
364 TRACE("(%p)->(): new ref = %u\n", This, ref);
366 return ref;
369 static ULONG WINAPI IDirect3DRMLightArrayImpl_Release(IDirect3DRMLightArray* iface)
371 IDirect3DRMLightArrayImpl *This = impl_from_IDirect3DRMLightArray(iface);
372 ULONG ref = InterlockedDecrement(&This->ref);
373 ULONG i;
375 TRACE("(%p)->(): new ref = %u\n", This, ref);
377 if (!ref)
379 for (i = 0; i < This->size; i++)
380 IDirect3DRMLight_Release(This->lights[i]);
381 HeapFree(GetProcessHeap(), 0, This->lights);
382 HeapFree(GetProcessHeap(), 0, This);
385 return ref;
388 /*** IDirect3DRMArray methods ***/
389 static DWORD WINAPI IDirect3DRMLightArrayImpl_GetSize(IDirect3DRMLightArray* iface)
391 IDirect3DRMLightArrayImpl *This = impl_from_IDirect3DRMLightArray(iface);
393 TRACE("(%p)->() = %d\n", This, This->size);
395 return This->size;
398 /*** IDirect3DRMLightArray methods ***/
399 static HRESULT WINAPI IDirect3DRMLightArrayImpl_GetElement(IDirect3DRMLightArray* iface, DWORD index, LPDIRECT3DRMLIGHT* light)
401 IDirect3DRMLightArrayImpl *This = impl_from_IDirect3DRMLightArray(iface);
403 TRACE("(%p)->(%u, %p)\n", This, index, light);
405 if (!light)
406 return D3DRMERR_BADVALUE;
408 *light = NULL;
410 if (index >= This->size)
411 return D3DRMERR_BADVALUE;
413 IDirect3DRMLight_AddRef(This->lights[index]);
414 *light = This->lights[index];
416 return D3DRM_OK;
419 static const struct IDirect3DRMLightArrayVtbl Direct3DRMLightArray_Vtbl =
421 /*** IUnknown methods ***/
422 IDirect3DRMLightArrayImpl_QueryInterface,
423 IDirect3DRMLightArrayImpl_AddRef,
424 IDirect3DRMLightArrayImpl_Release,
425 /*** IDirect3DRMArray methods ***/
426 IDirect3DRMLightArrayImpl_GetSize,
427 /*** IDirect3DRMLightArray methods ***/
428 IDirect3DRMLightArrayImpl_GetElement
431 static HRESULT Direct3DRMLightArray_create(IDirect3DRMLightArray** obj)
433 IDirect3DRMLightArrayImpl* object;
435 TRACE("(%p)\n", obj);
437 *obj = NULL;
439 object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirect3DRMLightArrayImpl));
440 if (!object)
442 ERR("Out of memory\n");
443 return E_OUTOFMEMORY;
446 object->IDirect3DRMLightArray_iface.lpVtbl = &Direct3DRMLightArray_Vtbl;
447 object->ref = 1;
449 *obj = &object->IDirect3DRMLightArray_iface;
451 return S_OK;
454 /*** IUnknown methods ***/
455 static HRESULT WINAPI IDirect3DRMFrame2Impl_QueryInterface(IDirect3DRMFrame2* iface,
456 REFIID riid, void** object)
458 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
460 TRACE("(%p/%p)->(%s, %p)\n", iface, This, debugstr_guid(riid), object);
462 *object = NULL;
464 if(IsEqualGUID(riid, &IID_IUnknown) ||
465 IsEqualGUID(riid, &IID_IDirect3DRMFrame) ||
466 IsEqualGUID(riid, &IID_IDirect3DRMFrame2))
468 *object = &This->IDirect3DRMFrame2_iface;
470 else if(IsEqualGUID(riid, &IID_IDirect3DRMFrame3))
472 *object = &This->IDirect3DRMFrame3_iface;
474 else
476 FIXME("interface %s not implemented\n", debugstr_guid(riid));
477 return E_NOINTERFACE;
480 IDirect3DRMFrame2_AddRef(iface);
481 return S_OK;
484 static ULONG WINAPI IDirect3DRMFrame2Impl_AddRef(IDirect3DRMFrame2* iface)
486 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
487 ULONG ref = InterlockedIncrement(&This->ref);
489 TRACE("(%p)->(): new ref = %d\n", This, ref);
491 return ref;
494 static ULONG WINAPI IDirect3DRMFrame2Impl_Release(IDirect3DRMFrame2* iface)
496 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
497 ULONG ref = InterlockedDecrement(&This->ref);
498 ULONG i;
500 TRACE("(%p)->(): new ref = %d\n", This, ref);
502 if (!ref)
504 for (i = 0; i < This->nb_children; i++)
505 IDirect3DRMFrame3_Release(This->children[i]);
506 HeapFree(GetProcessHeap(), 0, This->children);
507 for (i = 0; i < This->nb_visuals; i++)
508 IDirect3DRMVisual_Release(This->visuals[i]);
509 HeapFree(GetProcessHeap(), 0, This->visuals);
510 for (i = 0; i < This->nb_lights; i++)
511 IDirect3DRMLight_Release(This->lights[i]);
512 HeapFree(GetProcessHeap(), 0, This->lights);
513 HeapFree(GetProcessHeap(), 0, This);
516 return ref;
519 /*** IDirect3DRMObject methods ***/
520 static HRESULT WINAPI IDirect3DRMFrame2Impl_Clone(IDirect3DRMFrame2* iface,
521 LPUNKNOWN unkwn, REFIID riid,
522 LPVOID* object)
524 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
526 FIXME("(%p/%p)->(%p, %s, %p): stub\n", iface, This, unkwn, debugstr_guid(riid), object);
528 return E_NOTIMPL;
531 static HRESULT WINAPI IDirect3DRMFrame2Impl_AddDestroyCallback(IDirect3DRMFrame2* iface,
532 D3DRMOBJECTCALLBACK cb,
533 LPVOID argument)
535 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
537 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, argument);
539 return E_NOTIMPL;
542 static HRESULT WINAPI IDirect3DRMFrame2Impl_DeleteDestroyCallback(IDirect3DRMFrame2* iface,
543 D3DRMOBJECTCALLBACK cb,
544 LPVOID argument)
546 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
548 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, argument);
550 return E_NOTIMPL;
553 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetAppData(IDirect3DRMFrame2* iface,
554 DWORD data)
556 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
558 FIXME("(%p/%p)->(%u): stub\n", iface, This, data);
560 return E_NOTIMPL;
563 static DWORD WINAPI IDirect3DRMFrame2Impl_GetAppData(IDirect3DRMFrame2* iface)
565 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
567 FIXME("(%p/%p)->(): stub\n", iface, This);
569 return 0;
572 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetName(IDirect3DRMFrame2* iface, LPCSTR name)
574 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
576 FIXME("(%p/%p)->(%s): stub\n", iface, This, name);
578 return E_NOTIMPL;
581 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetName(IDirect3DRMFrame2* iface,
582 LPDWORD size, LPSTR name)
584 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
586 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, size, name);
588 return E_NOTIMPL;
591 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetClassName(IDirect3DRMFrame2* iface,
592 LPDWORD size, LPSTR name)
594 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
596 TRACE("(%p/%p)->(%p, %p)\n", iface, This, size, name);
598 return IDirect3DRMFrame3_GetClassName(&This->IDirect3DRMFrame3_iface, size, name);
601 /*** IDirect3DRMFrame methods ***/
602 static HRESULT WINAPI IDirect3DRMFrame2Impl_AddChild(IDirect3DRMFrame2* iface,
603 LPDIRECT3DRMFRAME child)
605 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
606 IDirect3DRMFrame3 *frame;
607 HRESULT hr;
609 TRACE("(%p/%p)->(%p)\n", iface, This, child);
611 if (!child)
612 return D3DRMERR_BADOBJECT;
613 hr = IDirect3DRMFrame_QueryInterface(child, &IID_IDirect3DRMFrame3, (void**)&frame);
614 if (hr != S_OK)
615 return D3DRMERR_BADOBJECT;
616 IDirect3DRMFrame_Release(child);
618 return IDirect3DRMFrame3_AddChild(&This->IDirect3DRMFrame3_iface, frame);
621 static HRESULT WINAPI IDirect3DRMFrame2Impl_AddLight(IDirect3DRMFrame2* iface,
622 LPDIRECT3DRMLIGHT light)
624 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
626 TRACE("(%p/%p)->(%p)\n", iface, This, light);
628 return IDirect3DRMFrame3_AddLight(&This->IDirect3DRMFrame3_iface, light);
631 static HRESULT WINAPI IDirect3DRMFrame2Impl_AddMoveCallback(IDirect3DRMFrame2* iface,
632 D3DRMFRAMEMOVECALLBACK cb, VOID *arg)
634 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
636 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, cb, arg);
638 return E_NOTIMPL;
641 static HRESULT WINAPI IDirect3DRMFrame2Impl_AddTransform(IDirect3DRMFrame2* iface,
642 D3DRMCOMBINETYPE type,
643 D3DRMMATRIX4D matrix)
645 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
647 TRACE("(%p/%p)->(%u,%p)\n", iface, This, type, matrix);
649 return IDirect3DRMFrame3_AddTransform(&This->IDirect3DRMFrame3_iface, type, matrix);
652 static HRESULT WINAPI IDirect3DRMFrame2Impl_AddTranslation(IDirect3DRMFrame2* iface,
653 D3DRMCOMBINETYPE type,
654 D3DVALUE x, D3DVALUE y, D3DVALUE z)
656 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
658 FIXME("(%p/%p)->(%u,%f,%f,%f): stub\n", iface, This, type, x, y, z);
660 return E_NOTIMPL;
663 static HRESULT WINAPI IDirect3DRMFrame2Impl_AddScale(IDirect3DRMFrame2* iface,
664 D3DRMCOMBINETYPE type,
665 D3DVALUE sx, D3DVALUE sy, D3DVALUE sz)
667 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
669 FIXME("(%p/%p)->(%u,%f,%f,%f): stub\n", iface, This, type, sx, sy, sz);
671 return E_NOTIMPL;
674 static HRESULT WINAPI IDirect3DRMFrame2Impl_AddRotation(IDirect3DRMFrame2* iface,
675 D3DRMCOMBINETYPE type,
676 D3DVALUE x, D3DVALUE y, D3DVALUE z,
677 D3DVALUE theta)
679 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
681 FIXME("(%p/%p)->(%u,%f,%f,%f,%f): stub\n", iface, This, type, x, y, z, theta);
683 return E_NOTIMPL;
686 static HRESULT WINAPI IDirect3DRMFrame2Impl_AddVisual(IDirect3DRMFrame2* iface,
687 LPDIRECT3DRMVISUAL vis)
689 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
691 TRACE("(%p/%p)->(%p)\n", iface, This, vis);
693 return IDirect3DRMFrame3_AddVisual(&This->IDirect3DRMFrame3_iface, (LPUNKNOWN)vis);
696 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetChildren(IDirect3DRMFrame2* iface,
697 LPDIRECT3DRMFRAMEARRAY *children)
699 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
701 TRACE("(%p/%p)->(%p)\n", iface, This, children);
703 return IDirect3DRMFrame3_GetChildren(&This->IDirect3DRMFrame3_iface, children);
706 static D3DCOLOR WINAPI IDirect3DRMFrame2Impl_GetColor(IDirect3DRMFrame2* iface)
708 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
710 FIXME("(%p/%p)->(): stub\n", iface, This);
712 return 0;
715 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetLights(IDirect3DRMFrame2* iface,
716 LPDIRECT3DRMLIGHTARRAY *lights)
718 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
720 TRACE("(%p/%p)->(%p)\n", iface, This, lights);
722 return IDirect3DRMFrame3_GetLights(&This->IDirect3DRMFrame3_iface, lights);
725 static D3DRMMATERIALMODE WINAPI IDirect3DRMFrame2Impl_GetMaterialMode(IDirect3DRMFrame2* iface)
727 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
729 FIXME("(%p/%p)->(): stub\n", iface, This);
731 return D3DRMMATERIAL_FROMPARENT;
734 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetParent(IDirect3DRMFrame2* iface,
735 LPDIRECT3DRMFRAME * frame)
737 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
739 TRACE("(%p/%p)->(%p)\n", iface, This, frame);
741 if (!frame)
742 return D3DRMERR_BADVALUE;
744 if (This->parent)
746 *frame = (LPDIRECT3DRMFRAME)&This->parent->IDirect3DRMFrame2_iface;
747 IDirect3DRMFrame_AddRef(*frame);
749 else
751 *frame = NULL;
754 return D3DRM_OK;
757 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetPosition(IDirect3DRMFrame2* iface,
758 LPDIRECT3DRMFRAME reference,
759 LPD3DVECTOR return_position)
761 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
763 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, reference, return_position);
765 return E_NOTIMPL;
768 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetRotation(IDirect3DRMFrame2* iface,
769 LPDIRECT3DRMFRAME reference,
770 LPD3DVECTOR axis, LPD3DVALUE return_theta)
772 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
774 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, reference, axis, return_theta);
776 return E_NOTIMPL;
779 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetScene(IDirect3DRMFrame2* iface,
780 LPDIRECT3DRMFRAME * frame)
782 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
784 FIXME("(%p/%p)->(%p): stub\n", iface, This, frame);
786 return E_NOTIMPL;
789 static D3DRMSORTMODE WINAPI IDirect3DRMFrame2Impl_GetSortMode(IDirect3DRMFrame2* iface)
791 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
793 FIXME("(%p/%p)->(): stub\n", iface, This);
795 return D3DRMSORT_FROMPARENT;
798 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetTexture(IDirect3DRMFrame2* iface,
799 LPDIRECT3DRMTEXTURE * tex)
801 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
803 FIXME("(%p/%p)->(%p): stub\n", iface, This, tex);
805 return E_NOTIMPL;
808 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetTransform(IDirect3DRMFrame2* iface,
809 D3DRMMATRIX4D return_matrix)
811 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
813 TRACE("(%p/%p)->(%p)\n", iface, This, return_matrix);
815 memcpy(&return_matrix[0][0], &This->transform[0][0], sizeof(D3DRMMATRIX4D));
817 return D3DRM_OK;
820 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetVelocity(IDirect3DRMFrame2* iface,
821 LPDIRECT3DRMFRAME reference,
822 LPD3DVECTOR return_velocity,
823 BOOL with_rotation)
825 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
827 FIXME("(%p/%p)->(%p,%p,%d): stub\n", iface, This, reference, return_velocity, with_rotation);
829 return E_NOTIMPL;
832 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetOrientation(IDirect3DRMFrame2* iface,
833 LPDIRECT3DRMFRAME reference,
834 LPD3DVECTOR dir, LPD3DVECTOR up)
836 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
838 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, reference, dir, up);
840 return E_NOTIMPL;
843 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetVisuals(IDirect3DRMFrame2* iface,
844 LPDIRECT3DRMVISUALARRAY *visuals)
846 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
847 IDirect3DRMVisualArrayImpl* obj;
848 HRESULT hr;
850 TRACE("(%p/%p)->(%p)\n", iface, This, visuals);
852 if (!visuals)
853 return D3DRMERR_BADVALUE;
855 hr = Direct3DRMVisualArray_create(visuals);
857 if (hr != D3DRM_OK)
858 return hr;
860 obj = (IDirect3DRMVisualArrayImpl*)*visuals;
862 obj->size = This->nb_visuals;
863 if (This->nb_visuals)
865 ULONG i;
866 obj->visuals = HeapAlloc(GetProcessHeap(), 0, This->nb_visuals * sizeof(LPDIRECT3DRMVISUAL));
867 if (!obj->visuals)
868 return E_OUTOFMEMORY;
869 for (i = 0; i < This->nb_visuals; i++)
871 obj->visuals[i] = This->visuals[i];
872 IDirect3DRMVisual_AddRef(This->visuals[i]);
876 return D3DRM_OK;
879 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetTextureTopology(IDirect3DRMFrame2* iface,
880 BOOL *wrap_u, BOOL *wrap_v)
882 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
884 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, wrap_u, wrap_v);
886 return E_NOTIMPL;
889 static HRESULT WINAPI IDirect3DRMFrame2Impl_InverseTransform(IDirect3DRMFrame2* iface,
890 D3DVECTOR *d, D3DVECTOR *s)
892 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
894 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, d, s);
896 return E_NOTIMPL;
899 static HRESULT WINAPI IDirect3DRMFrame2Impl_Load(IDirect3DRMFrame2* iface, LPVOID filename,
900 LPVOID name, D3DRMLOADOPTIONS loadflags,
901 D3DRMLOADTEXTURECALLBACK cb, LPVOID lpArg)
903 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
905 FIXME("(%p/%p)->(%p,%p,%u,%p,%p): stub\n", iface, This, filename, name, loadflags, cb, lpArg);
907 return E_NOTIMPL;
910 static HRESULT WINAPI IDirect3DRMFrame2Impl_LookAt(IDirect3DRMFrame2* iface,
911 LPDIRECT3DRMFRAME target,
912 LPDIRECT3DRMFRAME reference,
913 D3DRMFRAMECONSTRAINT constraint)
915 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
917 FIXME("(%p/%p)->(%p,%p,%u): stub\n", iface, This, target, reference, constraint);
919 return E_NOTIMPL;
922 static HRESULT WINAPI IDirect3DRMFrame2Impl_Move(IDirect3DRMFrame2* iface, D3DVALUE delta)
924 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
926 FIXME("(%p/%p)->(%f): stub\n", iface, This, delta);
928 return E_NOTIMPL;
931 static HRESULT WINAPI IDirect3DRMFrame2Impl_DeleteChild(IDirect3DRMFrame2* iface,
932 LPDIRECT3DRMFRAME frame)
934 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
935 IDirect3DRMFrame3 *child;
936 HRESULT hr;
938 TRACE("(%p/%p)->(%p)\n", iface, This, frame);
940 if (!frame)
941 return D3DRMERR_BADOBJECT;
942 hr = IDirect3DRMFrame_QueryInterface(frame, &IID_IDirect3DRMFrame3, (void**)&child);
943 if (hr != S_OK)
944 return D3DRMERR_BADOBJECT;
945 IDirect3DRMFrame_Release(frame);
947 return IDirect3DRMFrame3_DeleteChild(&This->IDirect3DRMFrame3_iface, child);
950 static HRESULT WINAPI IDirect3DRMFrame2Impl_DeleteLight(IDirect3DRMFrame2* iface,
951 LPDIRECT3DRMLIGHT light)
953 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
955 TRACE("(%p/%p)->(%p)\n", iface, This, light);
957 return IDirect3DRMFrame3_DeleteLight(&This->IDirect3DRMFrame3_iface, light);
960 static HRESULT WINAPI IDirect3DRMFrame2Impl_DeleteMoveCallback(IDirect3DRMFrame2* iface,
961 D3DRMFRAMEMOVECALLBACK cb, VOID *arg)
963 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
965 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, cb, arg);
967 return E_NOTIMPL;
970 static HRESULT WINAPI IDirect3DRMFrame2Impl_DeleteVisual(IDirect3DRMFrame2* iface,
971 LPDIRECT3DRMVISUAL vis)
973 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
975 TRACE("(%p/%p)->(%p)\n", iface, This, vis);
977 return IDirect3DRMFrame3_DeleteVisual(&This->IDirect3DRMFrame3_iface, (LPUNKNOWN)vis);
980 static D3DCOLOR WINAPI IDirect3DRMFrame2Impl_GetSceneBackground(IDirect3DRMFrame2* iface)
982 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
984 FIXME("(%p/%p)->(): stub\n", iface, This);
986 return 0;
989 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetSceneBackgroundDepth(IDirect3DRMFrame2* iface,
990 LPDIRECTDRAWSURFACE * surface)
992 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
994 FIXME("(%p/%p)->(%p): stub\n", iface, This, surface);
996 return E_NOTIMPL;
999 static D3DCOLOR WINAPI IDirect3DRMFrame2Impl_GetSceneFogColor(IDirect3DRMFrame2* iface)
1001 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
1003 FIXME("(%p/%p)->(): stub\n", iface, This);
1005 return 0;
1008 static BOOL WINAPI IDirect3DRMFrame2Impl_GetSceneFogEnable(IDirect3DRMFrame2* iface)
1010 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
1012 FIXME("(%p/%p)->(): stub\n", iface, This);
1014 return FALSE;
1017 static D3DRMFOGMODE WINAPI IDirect3DRMFrame2Impl_GetSceneFogMode(IDirect3DRMFrame2* iface)
1019 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
1021 FIXME("(%p/%p)->(): stub\n", iface, This);
1023 return D3DRMFOG_LINEAR;
1026 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetSceneFogParams(IDirect3DRMFrame2* iface,
1027 D3DVALUE *return_start,
1028 D3DVALUE *return_end,
1029 D3DVALUE *return_density)
1031 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
1033 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, return_start, return_end, return_density);
1035 return E_NOTIMPL;
1038 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetSceneBackground(IDirect3DRMFrame2* iface,
1039 D3DCOLOR color)
1041 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
1043 FIXME("(%p/%p)->(%u): stub\n", iface, This, color);
1045 return E_NOTIMPL;
1048 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetSceneBackgroundRGB(IDirect3DRMFrame2* iface,
1049 D3DVALUE red, D3DVALUE green,
1050 D3DVALUE blue)
1052 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
1054 FIXME("(%p/%p)->(%f,%f,%f): stub\n", iface, This, red, green, blue);
1056 return E_NOTIMPL;
1059 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetSceneBackgroundDepth(IDirect3DRMFrame2* iface,
1060 LPDIRECTDRAWSURFACE surface)
1062 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
1064 FIXME("(%p/%p)->(%p): stub\n", iface, This, surface);
1066 return E_NOTIMPL;
1069 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetSceneBackgroundImage(IDirect3DRMFrame2* iface,
1070 LPDIRECT3DRMTEXTURE texture)
1072 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
1074 FIXME("(%p/%p)->(%p): stub\n", iface, This, texture);
1076 return E_NOTIMPL;
1079 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetSceneFogEnable(IDirect3DRMFrame2* iface, BOOL enable)
1081 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
1083 FIXME("(%p/%p)->(%d): stub\n", iface, This, enable);
1085 return E_NOTIMPL;
1088 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetSceneFogColor(IDirect3DRMFrame2* iface,
1089 D3DCOLOR color)
1091 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
1093 FIXME("(%p/%p)->(%u): stub\n", iface, This, color);
1095 return E_NOTIMPL;
1098 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetSceneFogMode(IDirect3DRMFrame2* iface,
1099 D3DRMFOGMODE mode)
1101 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
1103 FIXME("(%p/%p)->(%u): stub\n", iface, This, mode);
1105 return E_NOTIMPL;
1108 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetSceneFogParams(IDirect3DRMFrame2* iface,
1109 D3DVALUE start, D3DVALUE end,
1110 D3DVALUE density)
1112 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
1114 FIXME("(%p/%p)->(%f,%f,%f): stub\n", iface, This, start, end, density);
1116 return E_NOTIMPL;
1119 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetColor(IDirect3DRMFrame2* iface, D3DCOLOR color)
1121 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
1123 FIXME("(%p/%p)->(%u): stub\n", iface, This, color);
1125 return E_NOTIMPL;
1128 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetColorRGB(IDirect3DRMFrame2* iface, D3DVALUE red,
1129 D3DVALUE green, D3DVALUE blue)
1131 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
1133 FIXME("(%p/%p)->(%f,%f,%f): stub\n", iface, This, red, green, blue);
1135 return E_NOTIMPL;
1138 static D3DRMZBUFFERMODE WINAPI IDirect3DRMFrame2Impl_GetZbufferMode(IDirect3DRMFrame2* iface)
1140 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
1142 FIXME("(%p/%p)->(): stub\n", iface, This);
1144 return D3DRMZBUFFER_FROMPARENT;
1147 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetMaterialMode(IDirect3DRMFrame2* iface,
1148 D3DRMMATERIALMODE mode)
1150 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
1152 FIXME("(%p/%p)->(%u): stub\n", iface, This, mode);
1154 return E_NOTIMPL;
1157 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetOrientation(IDirect3DRMFrame2* iface,
1158 LPDIRECT3DRMFRAME reference,
1159 D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
1160 D3DVALUE ux, D3DVALUE uy, D3DVALUE uz )
1162 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
1164 FIXME("(%p/%p)->(%p,%f,%f,%f,%f,%f,%f): stub\n", iface, This, reference,
1165 dx, dy, dz, ux, uy, uz);
1167 return E_NOTIMPL;
1170 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetPosition(IDirect3DRMFrame2* iface,
1171 LPDIRECT3DRMFRAME reference,
1172 D3DVALUE x, D3DVALUE y, D3DVALUE z)
1174 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
1176 FIXME("(%p/%p)->(%p,%f,%f,%f): stub\n", iface, This, reference, x, y, z);
1178 return E_NOTIMPL;
1181 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetRotation(IDirect3DRMFrame2* iface,
1182 LPDIRECT3DRMFRAME reference,
1183 D3DVALUE x, D3DVALUE y, D3DVALUE z,
1184 D3DVALUE theta)
1186 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
1188 FIXME("(%p/%p)->(%p,%f,%f,%f,%f): stub\n", iface, This, reference, x, y, z, theta);
1190 return E_NOTIMPL;
1193 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetSortMode(IDirect3DRMFrame2* iface,
1194 D3DRMSORTMODE mode)
1196 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
1198 FIXME("(%p/%p)->(%u): stub\n", iface, This, mode);
1200 return E_NOTIMPL;
1203 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetTexture(IDirect3DRMFrame2* iface,
1204 LPDIRECT3DRMTEXTURE texture)
1206 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
1208 FIXME("(%p/%p)->(%p): stub\n", iface, This, texture);
1210 return E_NOTIMPL;
1213 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetTextureTopology(IDirect3DRMFrame2* iface,
1214 BOOL wrap_u, BOOL wrap_v)
1216 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
1218 FIXME("(%p/%p)->(%d,%d): stub\n", iface, This, wrap_u, wrap_v);
1220 return E_NOTIMPL;
1223 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetVelocity(IDirect3DRMFrame2* iface,
1224 LPDIRECT3DRMFRAME reference,
1225 D3DVALUE x, D3DVALUE y, D3DVALUE z,
1226 BOOL with_rotation)
1228 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
1230 FIXME("(%p/%p)->(%p,%f,%f,%f,%d): stub\n", iface, This, reference, x, y, z, with_rotation);
1232 return E_NOTIMPL;
1235 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetZbufferMode(IDirect3DRMFrame2* iface,
1236 D3DRMZBUFFERMODE mode)
1238 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
1240 FIXME("(%p/%p)->(%u): stub\n", iface, This, mode);
1242 return E_NOTIMPL;
1245 static HRESULT WINAPI IDirect3DRMFrame2Impl_Transform(IDirect3DRMFrame2* iface, D3DVECTOR *d,
1246 D3DVECTOR *s)
1248 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
1250 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, d, s);
1252 return E_NOTIMPL;
1255 /*** IDirect3DRMFrame2 methods ***/
1256 static HRESULT WINAPI IDirect3DRMFrame2Impl_AddMoveCallback2(IDirect3DRMFrame2* iface,
1257 D3DRMFRAMEMOVECALLBACK cb, VOID *arg,
1258 DWORD flags)
1260 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
1262 FIXME("(%p/%p)->(%p,%p,%u): stub\n", iface, This, cb, arg, flags);
1264 return E_NOTIMPL;
1267 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetBox(IDirect3DRMFrame2* iface, LPD3DRMBOX box)
1269 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
1271 FIXME("(%p/%p)->(%p): stub\n", iface, This, box);
1273 return E_NOTIMPL;
1276 static BOOL WINAPI IDirect3DRMFrame2Impl_GetBoxEnable(IDirect3DRMFrame2* iface)
1278 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
1280 FIXME("(%p/%p)->(): stub\n", iface, This);
1282 return E_NOTIMPL;
1285 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetAxes(IDirect3DRMFrame2* iface,
1286 LPD3DVECTOR dir, LPD3DVECTOR up)
1288 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
1290 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, dir, up);
1292 return E_NOTIMPL;
1295 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetMaterial(IDirect3DRMFrame2* iface,
1296 LPDIRECT3DRMMATERIAL *material)
1298 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
1300 FIXME("(%p/%p)->(%p): stub\n", iface, This, material);
1302 return E_NOTIMPL;
1305 static BOOL WINAPI IDirect3DRMFrame2Impl_GetInheritAxes(IDirect3DRMFrame2* iface)
1307 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
1309 FIXME("(%p/%p)->(): stub\n", iface, This);
1311 return E_NOTIMPL;
1314 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetHierarchyBox(IDirect3DRMFrame2* iface,
1315 LPD3DRMBOX box)
1317 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
1319 FIXME("(%p/%p)->(%p): stub\n", iface, This, box);
1321 return E_NOTIMPL;
1324 static const struct IDirect3DRMFrame2Vtbl Direct3DRMFrame2_Vtbl =
1326 /*** IUnknown methods ***/
1327 IDirect3DRMFrame2Impl_QueryInterface,
1328 IDirect3DRMFrame2Impl_AddRef,
1329 IDirect3DRMFrame2Impl_Release,
1330 /*** IDirect3DRMObject methods ***/
1331 IDirect3DRMFrame2Impl_Clone,
1332 IDirect3DRMFrame2Impl_AddDestroyCallback,
1333 IDirect3DRMFrame2Impl_DeleteDestroyCallback,
1334 IDirect3DRMFrame2Impl_SetAppData,
1335 IDirect3DRMFrame2Impl_GetAppData,
1336 IDirect3DRMFrame2Impl_SetName,
1337 IDirect3DRMFrame2Impl_GetName,
1338 IDirect3DRMFrame2Impl_GetClassName,
1339 /*** IDirect3DRMFrame methods ***/
1340 IDirect3DRMFrame2Impl_AddChild,
1341 IDirect3DRMFrame2Impl_AddLight,
1342 IDirect3DRMFrame2Impl_AddMoveCallback,
1343 IDirect3DRMFrame2Impl_AddTransform,
1344 IDirect3DRMFrame2Impl_AddTranslation,
1345 IDirect3DRMFrame2Impl_AddScale,
1346 IDirect3DRMFrame2Impl_AddRotation,
1347 IDirect3DRMFrame2Impl_AddVisual,
1348 IDirect3DRMFrame2Impl_GetChildren,
1349 IDirect3DRMFrame2Impl_GetColor,
1350 IDirect3DRMFrame2Impl_GetLights,
1351 IDirect3DRMFrame2Impl_GetMaterialMode,
1352 IDirect3DRMFrame2Impl_GetParent,
1353 IDirect3DRMFrame2Impl_GetPosition,
1354 IDirect3DRMFrame2Impl_GetRotation,
1355 IDirect3DRMFrame2Impl_GetScene,
1356 IDirect3DRMFrame2Impl_GetSortMode,
1357 IDirect3DRMFrame2Impl_GetTexture,
1358 IDirect3DRMFrame2Impl_GetTransform,
1359 IDirect3DRMFrame2Impl_GetVelocity,
1360 IDirect3DRMFrame2Impl_GetOrientation,
1361 IDirect3DRMFrame2Impl_GetVisuals,
1362 IDirect3DRMFrame2Impl_GetTextureTopology,
1363 IDirect3DRMFrame2Impl_InverseTransform,
1364 IDirect3DRMFrame2Impl_Load,
1365 IDirect3DRMFrame2Impl_LookAt,
1366 IDirect3DRMFrame2Impl_Move,
1367 IDirect3DRMFrame2Impl_DeleteChild,
1368 IDirect3DRMFrame2Impl_DeleteLight,
1369 IDirect3DRMFrame2Impl_DeleteMoveCallback,
1370 IDirect3DRMFrame2Impl_DeleteVisual,
1371 IDirect3DRMFrame2Impl_GetSceneBackground,
1372 IDirect3DRMFrame2Impl_GetSceneBackgroundDepth,
1373 IDirect3DRMFrame2Impl_GetSceneFogColor,
1374 IDirect3DRMFrame2Impl_GetSceneFogEnable,
1375 IDirect3DRMFrame2Impl_GetSceneFogMode,
1376 IDirect3DRMFrame2Impl_GetSceneFogParams,
1377 IDirect3DRMFrame2Impl_SetSceneBackground,
1378 IDirect3DRMFrame2Impl_SetSceneBackgroundRGB,
1379 IDirect3DRMFrame2Impl_SetSceneBackgroundDepth,
1380 IDirect3DRMFrame2Impl_SetSceneBackgroundImage,
1381 IDirect3DRMFrame2Impl_SetSceneFogEnable,
1382 IDirect3DRMFrame2Impl_SetSceneFogColor,
1383 IDirect3DRMFrame2Impl_SetSceneFogMode,
1384 IDirect3DRMFrame2Impl_SetSceneFogParams,
1385 IDirect3DRMFrame2Impl_SetColor,
1386 IDirect3DRMFrame2Impl_SetColorRGB,
1387 IDirect3DRMFrame2Impl_GetZbufferMode,
1388 IDirect3DRMFrame2Impl_SetMaterialMode,
1389 IDirect3DRMFrame2Impl_SetOrientation,
1390 IDirect3DRMFrame2Impl_SetPosition,
1391 IDirect3DRMFrame2Impl_SetRotation,
1392 IDirect3DRMFrame2Impl_SetSortMode,
1393 IDirect3DRMFrame2Impl_SetTexture,
1394 IDirect3DRMFrame2Impl_SetTextureTopology,
1395 IDirect3DRMFrame2Impl_SetVelocity,
1396 IDirect3DRMFrame2Impl_SetZbufferMode,
1397 IDirect3DRMFrame2Impl_Transform,
1398 /*** IDirect3DRMFrame2 methods ***/
1399 IDirect3DRMFrame2Impl_AddMoveCallback2,
1400 IDirect3DRMFrame2Impl_GetBox,
1401 IDirect3DRMFrame2Impl_GetBoxEnable,
1402 IDirect3DRMFrame2Impl_GetAxes,
1403 IDirect3DRMFrame2Impl_GetMaterial,
1404 IDirect3DRMFrame2Impl_GetInheritAxes,
1405 IDirect3DRMFrame2Impl_GetHierarchyBox
1408 /*** IUnknown methods ***/
1409 static HRESULT WINAPI IDirect3DRMFrame3Impl_QueryInterface(IDirect3DRMFrame3* iface,
1410 REFIID riid, void** object)
1412 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1413 return IDirect3DRMFrame_QueryInterface(&This->IDirect3DRMFrame2_iface, riid, object);
1416 static ULONG WINAPI IDirect3DRMFrame3Impl_AddRef(IDirect3DRMFrame3* iface)
1418 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1419 return IDirect3DRMFrame2_AddRef(&This->IDirect3DRMFrame2_iface);
1422 static ULONG WINAPI IDirect3DRMFrame3Impl_Release(IDirect3DRMFrame3* iface)
1424 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1425 return IDirect3DRMFrame2_Release(&This->IDirect3DRMFrame2_iface);
1428 /*** IDirect3DRMObject methods ***/
1429 static HRESULT WINAPI IDirect3DRMFrame3Impl_Clone(IDirect3DRMFrame3* iface,
1430 LPUNKNOWN unkwn, REFIID riid,
1431 LPVOID* object)
1433 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1435 FIXME("(%p/%p)->(%p, %s, %p): stub\n", iface, This, unkwn, debugstr_guid(riid), object);
1437 return E_NOTIMPL;
1440 static HRESULT WINAPI IDirect3DRMFrame3Impl_AddDestroyCallback(IDirect3DRMFrame3* iface,
1441 D3DRMOBJECTCALLBACK cb,
1442 LPVOID argument)
1444 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1446 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, argument);
1448 return E_NOTIMPL;
1451 static HRESULT WINAPI IDirect3DRMFrame3Impl_DeleteDestroyCallback(IDirect3DRMFrame3* iface,
1452 D3DRMOBJECTCALLBACK cb,
1453 LPVOID argument)
1455 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1457 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, argument);
1459 return E_NOTIMPL;
1462 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetAppData(IDirect3DRMFrame3* iface,
1463 DWORD data)
1465 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1467 FIXME("(%p/%p)->(%u): stub\n", iface, This, data);
1469 return E_NOTIMPL;
1472 static DWORD WINAPI IDirect3DRMFrame3Impl_GetAppData(IDirect3DRMFrame3* iface)
1474 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1476 FIXME("(%p/%p)->(): stub\n", iface, This);
1478 return 0;
1481 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetName(IDirect3DRMFrame3* iface, LPCSTR name)
1483 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1485 FIXME("(%p/%p)->(%s): stub\n", iface, This, name);
1487 return E_NOTIMPL;
1490 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetName(IDirect3DRMFrame3* iface,
1491 LPDWORD size, LPSTR name)
1493 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1495 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, size, name);
1497 return E_NOTIMPL;
1500 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetClassName(IDirect3DRMFrame3* iface,
1501 LPDWORD size, LPSTR name)
1503 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1505 TRACE("(%p/%p)->(%p, %p)\n", iface, This, size, name);
1507 if (!size || *size < strlen("Frame") || !name)
1508 return E_INVALIDARG;
1510 strcpy(name, "Frame");
1511 *size = sizeof("Frame");
1513 return D3DRM_OK;
1516 /*** IDirect3DRMFrame methods ***/
1517 static HRESULT WINAPI IDirect3DRMFrame3Impl_AddChild(IDirect3DRMFrame3* iface,
1518 LPDIRECT3DRMFRAME3 child)
1520 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1521 IDirect3DRMFrameImpl *child_obj = unsafe_impl_from_IDirect3DRMFrame3(child);
1523 TRACE("(%p/%p)->(%p)\n", iface, This, child);
1525 if (!child_obj)
1526 return D3DRMERR_BADOBJECT;
1528 if (child_obj->parent)
1530 IDirect3DRMFrame3* parent = &child_obj->parent->IDirect3DRMFrame3_iface;
1532 if (parent == iface)
1534 /* Passed frame is already a child so return success */
1535 return D3DRM_OK;
1537 else
1539 /* Remove parent and continue */
1540 IDirect3DRMFrame3_DeleteChild(parent, child);
1544 if ((This->nb_children + 1) > This->children_capacity)
1546 ULONG new_capacity;
1547 IDirect3DRMFrame3** children;
1549 if (!This->children_capacity)
1551 new_capacity = 16;
1552 children = HeapAlloc(GetProcessHeap(), 0, new_capacity * sizeof(IDirect3DRMFrame3*));
1554 else
1556 new_capacity = This->children_capacity * 2;
1557 children = HeapReAlloc(GetProcessHeap(), 0, This->children, new_capacity * sizeof(IDirect3DRMFrame3*));
1560 if (!children)
1561 return E_OUTOFMEMORY;
1563 This->children_capacity = new_capacity;
1564 This->children = children;
1567 This->children[This->nb_children++] = child;
1568 IDirect3DRMFrame3_AddRef(child);
1569 child_obj->parent = This;
1571 return D3DRM_OK;
1574 static HRESULT WINAPI IDirect3DRMFrame3Impl_AddLight(IDirect3DRMFrame3* iface,
1575 LPDIRECT3DRMLIGHT light)
1577 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1578 ULONG i;
1579 IDirect3DRMLight** lights;
1581 TRACE("(%p/%p)->(%p)\n", iface, This, light);
1583 if (!light)
1584 return D3DRMERR_BADOBJECT;
1586 /* Check if already existing and return gracefully without increasing ref count */
1587 for (i = 0; i < This->nb_lights; i++)
1588 if (This->lights[i] == light)
1589 return D3DRM_OK;
1591 if ((This->nb_lights + 1) > This->lights_capacity)
1593 ULONG new_capacity;
1595 if (!This->lights_capacity)
1597 new_capacity = 16;
1598 lights = HeapAlloc(GetProcessHeap(), 0, new_capacity * sizeof(IDirect3DRMLight*));
1600 else
1602 new_capacity = This->lights_capacity * 2;
1603 lights = HeapReAlloc(GetProcessHeap(), 0, This->lights, new_capacity * sizeof(IDirect3DRMLight*));
1606 if (!lights)
1607 return E_OUTOFMEMORY;
1609 This->lights_capacity = new_capacity;
1610 This->lights = lights;
1613 This->lights[This->nb_lights++] = light;
1614 IDirect3DRMLight_AddRef(light);
1616 return D3DRM_OK;
1619 static HRESULT WINAPI IDirect3DRMFrame3Impl_AddMoveCallback(IDirect3DRMFrame3* iface,
1620 D3DRMFRAME3MOVECALLBACK cb, VOID *arg,
1621 DWORD flags)
1623 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1625 FIXME("(%p/%p)->(%p,%p,%u): stub\n", iface, This, cb, arg, flags);
1627 return E_NOTIMPL;
1630 static HRESULT WINAPI IDirect3DRMFrame3Impl_AddTransform(IDirect3DRMFrame3* iface,
1631 D3DRMCOMBINETYPE type,
1632 D3DRMMATRIX4D matrix)
1634 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1636 TRACE("(%p/%p)->(%u,%p)\n", iface, This, type, matrix);
1638 switch (type)
1640 case D3DRMCOMBINE_REPLACE:
1641 memcpy(&This->transform[0][0], &matrix[0][0], sizeof(D3DRMMATRIX4D));
1642 break;
1644 case D3DRMCOMBINE_BEFORE:
1645 FIXME("D3DRMCOMBINE_BEFORE not supported yed\n");
1646 break;
1648 case D3DRMCOMBINE_AFTER:
1649 FIXME("D3DRMCOMBINE_AFTER not supported yed\n");
1650 break;
1652 default:
1653 WARN("Unknown Combine Type %u\n", type);
1654 return D3DRMERR_BADVALUE;
1657 return S_OK;
1660 static HRESULT WINAPI IDirect3DRMFrame3Impl_AddTranslation(IDirect3DRMFrame3* iface,
1661 D3DRMCOMBINETYPE type,
1662 D3DVALUE x, D3DVALUE y, D3DVALUE z)
1664 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1666 FIXME("(%p/%p)->(%u,%f,%f,%f): stub\n", iface, This, type, x, y, z);
1668 return E_NOTIMPL;
1671 static HRESULT WINAPI IDirect3DRMFrame3Impl_AddScale(IDirect3DRMFrame3* iface,
1672 D3DRMCOMBINETYPE type,
1673 D3DVALUE sx, D3DVALUE sy, D3DVALUE sz)
1675 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1677 FIXME("(%p/%p)->(%u,%f,%f,%f): stub\n", iface, This, type, sx, sy, sz);
1679 return E_NOTIMPL;
1682 static HRESULT WINAPI IDirect3DRMFrame3Impl_AddRotation(IDirect3DRMFrame3* iface,
1683 D3DRMCOMBINETYPE type,
1684 D3DVALUE x, D3DVALUE y, D3DVALUE z,
1685 D3DVALUE theta)
1687 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1689 FIXME("(%p/%p)->(%u,%f,%f,%f,%f): stub\n", iface, This, type, x, y, z, theta);
1691 return E_NOTIMPL;
1694 static HRESULT WINAPI IDirect3DRMFrame3Impl_AddVisual(IDirect3DRMFrame3* iface, LPUNKNOWN vis)
1696 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1697 ULONG i;
1698 IDirect3DRMVisual** visuals;
1700 TRACE("(%p/%p)->(%p)\n", iface, This, vis);
1702 if (!vis)
1703 return D3DRMERR_BADOBJECT;
1705 /* Check if already existing and return gracefully without increasing ref count */
1706 for (i = 0; i < This->nb_visuals; i++)
1707 if (This->visuals[i] == (IDirect3DRMVisual*)vis)
1708 return D3DRM_OK;
1710 if ((This->nb_visuals + 1) > This->visuals_capacity)
1712 ULONG new_capacity;
1714 if (!This->visuals_capacity)
1716 new_capacity = 16;
1717 visuals = HeapAlloc(GetProcessHeap(), 0, new_capacity * sizeof(IDirect3DRMVisual*));
1719 else
1721 new_capacity = This->visuals_capacity * 2;
1722 visuals = HeapReAlloc(GetProcessHeap(), 0, This->visuals, new_capacity * sizeof(IDirect3DRMVisual*));
1725 if (!visuals)
1726 return E_OUTOFMEMORY;
1728 This->visuals_capacity = new_capacity;
1729 This->visuals = visuals;
1732 This->visuals[This->nb_visuals++] = (IDirect3DRMVisual*)vis;
1733 IDirect3DRMVisual_AddRef(vis);
1735 return D3DRM_OK;
1738 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetChildren(IDirect3DRMFrame3* iface,
1739 LPDIRECT3DRMFRAMEARRAY *children)
1741 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1742 IDirect3DRMFrameArrayImpl* obj;
1743 HRESULT hr;
1745 TRACE("(%p/%p)->(%p)\n", iface, This, children);
1747 if (!children)
1748 return D3DRMERR_BADVALUE;
1750 hr = Direct3DRMFrameArray_create(children);
1752 if (hr != D3DRM_OK)
1753 return hr;
1755 obj = (IDirect3DRMFrameArrayImpl*)*children;
1757 obj->size = This->nb_children;
1758 if (This->nb_children)
1760 ULONG i;
1761 obj->frames = HeapAlloc(GetProcessHeap(), 0, This->nb_children * sizeof(LPDIRECT3DRMFRAME));
1762 if (!obj->frames)
1763 return E_OUTOFMEMORY;
1764 for (i = 0; i < This->nb_children; i++)
1765 IDirect3DRMFrame3_QueryInterface(This->children[i], &IID_IDirect3DRMFrame, (void**)&obj->frames[i]);
1768 return D3DRM_OK;
1771 static D3DCOLOR WINAPI IDirect3DRMFrame3Impl_GetColor(IDirect3DRMFrame3* iface)
1773 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1775 FIXME("(%p/%p)->(): stub\n", iface, This);
1777 return 0;
1780 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetLights(IDirect3DRMFrame3* iface,
1781 LPDIRECT3DRMLIGHTARRAY *lights)
1783 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1784 IDirect3DRMLightArrayImpl* obj;
1785 HRESULT hr;
1787 TRACE("(%p/%p)->(%p)\n", iface, This, lights);
1789 if (!lights)
1790 return D3DRMERR_BADVALUE;
1792 hr = Direct3DRMLightArray_create(lights);
1794 if (hr != D3DRM_OK)
1795 return hr;
1797 obj = (IDirect3DRMLightArrayImpl*)*lights;
1799 obj->size = This->nb_lights;
1800 if (This->nb_lights)
1802 ULONG i;
1803 obj->lights = HeapAlloc(GetProcessHeap(), 0, This->nb_lights * sizeof(LPDIRECT3DRMLIGHT));
1804 if (!obj->lights)
1805 return E_OUTOFMEMORY;
1806 for (i = 0; i < This->nb_lights; i++)
1807 IDirect3DRMLight_QueryInterface(This->lights[i], &IID_IDirect3DRMLight, (void**)&obj->lights[i]);
1810 return D3DRM_OK;
1813 static D3DRMMATERIALMODE WINAPI IDirect3DRMFrame3Impl_GetMaterialMode(IDirect3DRMFrame3* iface)
1815 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1817 FIXME("(%p/%p)->(): stub\n", iface, This);
1819 return D3DRMMATERIAL_FROMPARENT;
1822 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetParent(IDirect3DRMFrame3* iface,
1823 LPDIRECT3DRMFRAME3 * frame)
1825 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1827 TRACE("(%p/%p)->(%p)\n", iface, This, frame);
1829 if (!frame)
1830 return D3DRMERR_BADVALUE;
1832 if (This->parent)
1834 *frame = &This->parent->IDirect3DRMFrame3_iface;
1835 IDirect3DRMFrame_AddRef(*frame);
1837 else
1839 *frame = NULL;
1842 return D3DRM_OK;
1845 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetPosition(IDirect3DRMFrame3* iface,
1846 LPDIRECT3DRMFRAME3 reference,
1847 LPD3DVECTOR return_position)
1849 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1851 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, reference, return_position);
1853 return E_NOTIMPL;
1856 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetRotation(IDirect3DRMFrame3* iface,
1857 LPDIRECT3DRMFRAME3 reference,
1858 LPD3DVECTOR axis, LPD3DVALUE return_theta)
1860 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1862 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, reference, axis, return_theta);
1864 return E_NOTIMPL;
1867 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetScene(IDirect3DRMFrame3* iface,
1868 LPDIRECT3DRMFRAME3 * frame)
1870 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1872 FIXME("(%p/%p)->(%p): stub\n", iface, This, frame);
1874 return E_NOTIMPL;
1877 static D3DRMSORTMODE WINAPI IDirect3DRMFrame3Impl_GetSortMode(IDirect3DRMFrame3* iface)
1879 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1881 FIXME("(%p/%p)->(): stub\n", iface, This);
1883 return D3DRMSORT_FROMPARENT;
1886 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetTexture(IDirect3DRMFrame3* iface,
1887 LPDIRECT3DRMTEXTURE3 * tex)
1889 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1891 FIXME("(%p/%p)->(%p): stub\n", iface, This, tex);
1893 return E_NOTIMPL;
1896 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetTransform(IDirect3DRMFrame3* iface,
1897 LPDIRECT3DRMFRAME3 reference,
1898 D3DRMMATRIX4D return_matrix)
1900 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1902 TRACE("(%p/%p)->(%p,%p)\n", iface, This, reference, return_matrix);
1904 if (reference)
1905 FIXME("Specifying a frame as the root of the scene different from the current root frame is not supported yet\n");
1907 memcpy(&return_matrix[0][0], &This->transform[0][0], sizeof(D3DRMMATRIX4D));
1909 return D3DRM_OK;
1912 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetVelocity(IDirect3DRMFrame3* iface,
1913 LPDIRECT3DRMFRAME3 reference,
1914 LPD3DVECTOR return_velocity,
1915 BOOL with_rotation)
1917 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1919 FIXME("(%p/%p)->(%p,%p,%d): stub\n", iface, This, reference, return_velocity, with_rotation);
1921 return E_NOTIMPL;
1924 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetOrientation(IDirect3DRMFrame3* iface,
1925 LPDIRECT3DRMFRAME3 reference,
1926 LPD3DVECTOR dir, LPD3DVECTOR up)
1928 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1930 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, reference, dir, up);
1932 return E_NOTIMPL;
1935 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetVisuals(IDirect3DRMFrame3* iface, LPDWORD num,
1936 LPUNKNOWN *visuals)
1938 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1940 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, num, visuals);
1942 return E_NOTIMPL;
1945 static HRESULT WINAPI IDirect3DRMFrame3Impl_InverseTransform(IDirect3DRMFrame3* iface,
1946 D3DVECTOR *d, D3DVECTOR *s)
1948 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1950 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, d, s);
1952 return E_NOTIMPL;
1955 static HRESULT WINAPI IDirect3DRMFrame3Impl_Load(IDirect3DRMFrame3* iface, LPVOID filename,
1956 LPVOID name, D3DRMLOADOPTIONS loadflags,
1957 D3DRMLOADTEXTURE3CALLBACK cb, LPVOID lpArg)
1959 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1961 FIXME("(%p/%p)->(%p,%p,%u,%p,%p): stub\n", iface, This, filename, name, loadflags, cb, lpArg);
1963 return E_NOTIMPL;
1966 static HRESULT WINAPI IDirect3DRMFrame3Impl_LookAt(IDirect3DRMFrame3* iface,
1967 LPDIRECT3DRMFRAME3 target,
1968 LPDIRECT3DRMFRAME3 reference,
1969 D3DRMFRAMECONSTRAINT constraint)
1971 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1973 FIXME("(%p/%p)->(%p,%p,%u): stub\n", iface, This, target, reference, constraint);
1975 return E_NOTIMPL;
1978 static HRESULT WINAPI IDirect3DRMFrame3Impl_Move(IDirect3DRMFrame3* iface, D3DVALUE delta)
1980 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1982 FIXME("(%p/%p)->(%f): stub\n", iface, This, delta);
1984 return E_NOTIMPL;
1987 static HRESULT WINAPI IDirect3DRMFrame3Impl_DeleteChild(IDirect3DRMFrame3* iface,
1988 LPDIRECT3DRMFRAME3 frame)
1990 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1991 IDirect3DRMFrameImpl *frame_obj = unsafe_impl_from_IDirect3DRMFrame3(frame);
1992 ULONG i;
1994 TRACE("(%p/%p)->(%p)\n", iface, This, frame);
1996 if (!frame_obj)
1997 return D3DRMERR_BADOBJECT;
1999 /* Check if child exists */
2000 for (i = 0; i < This->nb_children; i++)
2001 if (This->children[i] == frame)
2002 break;
2004 if (i == This->nb_children)
2005 return D3DRMERR_BADVALUE;
2007 memmove(This->children + i, This->children + i + 1, sizeof(IDirect3DRMFrame3*) * (This->nb_children - 1 - i));
2008 IDirect3DRMFrame3_Release(frame);
2009 frame_obj->parent = NULL;
2010 This->nb_children--;
2012 return D3DRM_OK;
2015 static HRESULT WINAPI IDirect3DRMFrame3Impl_DeleteLight(IDirect3DRMFrame3* iface,
2016 LPDIRECT3DRMLIGHT light)
2018 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2019 ULONG i;
2021 TRACE("(%p/%p)->(%p)\n", iface, This, light);
2023 if (!light)
2024 return D3DRMERR_BADOBJECT;
2026 /* Check if visual exists */
2027 for (i = 0; i < This->nb_lights; i++)
2028 if (This->lights[i] == light)
2029 break;
2031 if (i == This->nb_lights)
2032 return D3DRMERR_BADVALUE;
2034 memmove(This->lights + i, This->lights + i + 1, sizeof(IDirect3DRMLight*) * (This->nb_lights - 1 - i));
2035 IDirect3DRMLight_Release(light);
2036 This->nb_lights--;
2038 return D3DRM_OK;
2041 static HRESULT WINAPI IDirect3DRMFrame3Impl_DeleteMoveCallback(IDirect3DRMFrame3* iface,
2042 D3DRMFRAME3MOVECALLBACK cb,
2043 VOID *arg)
2045 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2047 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, cb, arg);
2049 return E_NOTIMPL;
2052 static HRESULT WINAPI IDirect3DRMFrame3Impl_DeleteVisual(IDirect3DRMFrame3* iface, LPUNKNOWN vis)
2054 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2055 ULONG i;
2057 TRACE("(%p/%p)->(%p)\n", iface, This, vis);
2059 if (!vis)
2060 return D3DRMERR_BADOBJECT;
2062 /* Check if visual exists */
2063 for (i = 0; i < This->nb_visuals; i++)
2064 if (This->visuals[i] == (IDirect3DRMVisual*)vis)
2065 break;
2067 if (i == This->nb_visuals)
2068 return D3DRMERR_BADVALUE;
2070 memmove(This->visuals + i, This->visuals + i + 1, sizeof(IDirect3DRMVisual*) * (This->nb_visuals - 1 - i));
2071 IDirect3DRMVisual_Release(vis);
2072 This->nb_visuals--;
2074 return D3DRM_OK;
2077 static D3DCOLOR WINAPI IDirect3DRMFrame3Impl_GetSceneBackground(IDirect3DRMFrame3* iface)
2079 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2081 FIXME("(%p/%p)->(): stub\n", iface, This);
2083 return 0;
2086 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetSceneBackgroundDepth(IDirect3DRMFrame3* iface,
2087 LPDIRECTDRAWSURFACE * surface)
2089 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2091 FIXME("(%p/%p)->(%p): stub\n", iface, This, surface);
2093 return E_NOTIMPL;
2096 static D3DCOLOR WINAPI IDirect3DRMFrame3Impl_GetSceneFogColor(IDirect3DRMFrame3* iface)
2098 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2100 FIXME("(%p/%p)->(): stub\n", iface, This);
2102 return 0;
2105 static BOOL WINAPI IDirect3DRMFrame3Impl_GetSceneFogEnable(IDirect3DRMFrame3* iface)
2107 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2109 FIXME("(%p/%p)->(): stub\n", iface, This);
2111 return FALSE;
2114 static D3DRMFOGMODE WINAPI IDirect3DRMFrame3Impl_GetSceneFogMode(IDirect3DRMFrame3* iface)
2116 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2118 FIXME("(%p/%p)->(): stub\n", iface, This);
2120 return D3DRMFOG_LINEAR;
2123 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetSceneFogParams(IDirect3DRMFrame3* iface,
2124 D3DVALUE *return_start,
2125 D3DVALUE *return_end,
2126 D3DVALUE *return_density)
2128 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2130 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, return_start, return_end, return_density);
2132 return E_NOTIMPL;
2135 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetSceneBackground(IDirect3DRMFrame3* iface,
2136 D3DCOLOR color)
2138 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2140 FIXME("(%p/%p)->(%u): stub\n", iface, This, color);
2142 return E_NOTIMPL;
2145 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetSceneBackgroundRGB(IDirect3DRMFrame3* iface,
2146 D3DVALUE red, D3DVALUE green,
2147 D3DVALUE blue)
2149 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2151 FIXME("(%p/%p)->(%f,%f,%f): stub\n", iface, This, red, green, blue);
2153 return E_NOTIMPL;
2156 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetSceneBackgroundDepth(IDirect3DRMFrame3* iface,
2157 LPDIRECTDRAWSURFACE surface)
2159 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2161 FIXME("(%p/%p)->(%p): stub\n", iface, This, surface);
2163 return E_NOTIMPL;
2166 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetSceneBackgroundImage(IDirect3DRMFrame3* iface,
2167 LPDIRECT3DRMTEXTURE3 texture)
2169 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2171 FIXME("(%p/%p)->(%p): stub\n", iface, This, texture);
2173 return E_NOTIMPL;
2176 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetSceneFogEnable(IDirect3DRMFrame3* iface, BOOL enable)
2178 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2180 FIXME("(%p/%p)->(%d): stub\n", iface, This, enable);
2182 return E_NOTIMPL;
2185 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetSceneFogColor(IDirect3DRMFrame3* iface,
2186 D3DCOLOR color)
2188 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2190 FIXME("(%p/%p)->(%u): stub\n", iface, This, color);
2192 return E_NOTIMPL;
2195 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetSceneFogMode(IDirect3DRMFrame3* iface,
2196 D3DRMFOGMODE mode)
2198 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2200 FIXME("(%p/%p)->(%u): stub\n", iface, This, mode);
2202 return E_NOTIMPL;
2205 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetSceneFogParams(IDirect3DRMFrame3* iface,
2206 D3DVALUE start, D3DVALUE end,
2207 D3DVALUE density)
2209 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2211 FIXME("(%p/%p)->(%f,%f,%f): stub\n", iface, This, start, end, density);
2213 return E_NOTIMPL;
2216 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetColor(IDirect3DRMFrame3* iface, D3DCOLOR color)
2218 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2220 FIXME("(%p/%p)->(%u): stub\n", iface, This, color);
2222 return E_NOTIMPL;
2225 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetColorRGB(IDirect3DRMFrame3* iface, D3DVALUE red,
2226 D3DVALUE green, D3DVALUE blue)
2228 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2230 FIXME("(%p/%p)->(%f,%f,%f): stub\n", iface, This, red, green, blue);
2232 return E_NOTIMPL;
2235 static D3DRMZBUFFERMODE WINAPI IDirect3DRMFrame3Impl_GetZbufferMode(IDirect3DRMFrame3* iface)
2237 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2239 FIXME("(%p/%p)->(): stub\n", iface, This);
2241 return D3DRMZBUFFER_FROMPARENT;
2244 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetMaterialMode(IDirect3DRMFrame3* iface,
2245 D3DRMMATERIALMODE mode)
2247 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2249 FIXME("(%p/%p)->(%u): stub\n", iface, This, mode);
2251 return E_NOTIMPL;
2254 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetOrientation(IDirect3DRMFrame3* iface,
2255 LPDIRECT3DRMFRAME3 reference,
2256 D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
2257 D3DVALUE ux, D3DVALUE uy, D3DVALUE uz )
2259 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2261 FIXME("(%p/%p)->(%p,%f,%f,%f,%f,%f,%f): stub\n", iface, This, reference,
2262 dx, dy, dz, ux, uy, uz);
2264 return E_NOTIMPL;
2267 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetPosition(IDirect3DRMFrame3* iface,
2268 LPDIRECT3DRMFRAME3 reference,
2269 D3DVALUE x, D3DVALUE y, D3DVALUE z)
2271 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2273 FIXME("(%p/%p)->(%p,%f,%f,%f): stub\n", iface, This, reference, x, y, z);
2275 return E_NOTIMPL;
2278 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetRotation(IDirect3DRMFrame3* iface,
2279 LPDIRECT3DRMFRAME3 reference,
2280 D3DVALUE x, D3DVALUE y, D3DVALUE z,
2281 D3DVALUE theta)
2283 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2285 FIXME("(%p/%p)->(%p,%f,%f,%f,%f): stub\n", iface, This, reference, x, y, z, theta);
2287 return E_NOTIMPL;
2290 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetSortMode(IDirect3DRMFrame3* iface,
2291 D3DRMSORTMODE mode)
2293 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2295 FIXME("(%p/%p)->(%u): stub\n", iface, This, mode);
2297 return E_NOTIMPL;
2300 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetTexture(IDirect3DRMFrame3* iface,
2301 LPDIRECT3DRMTEXTURE3 texture)
2303 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2305 FIXME("(%p/%p)->(%p): stub\n", iface, This, texture);
2307 return E_NOTIMPL;
2310 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetVelocity(IDirect3DRMFrame3* iface,
2311 LPDIRECT3DRMFRAME3 reference,
2312 D3DVALUE x, D3DVALUE y, D3DVALUE z,
2313 BOOL with_rotation)
2315 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2317 FIXME("(%p/%p)->(%p,%f,%f,%f,%d): stub\n", iface, This, reference, x, y, z, with_rotation);
2319 return E_NOTIMPL;
2322 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetZbufferMode(IDirect3DRMFrame3* iface,
2323 D3DRMZBUFFERMODE mode)
2325 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2327 FIXME("(%p/%p)->(%u): stub\n", iface, This, mode);
2329 return E_NOTIMPL;
2332 static HRESULT WINAPI IDirect3DRMFrame3Impl_Transform(IDirect3DRMFrame3* iface, D3DVECTOR *d,
2333 D3DVECTOR *s)
2335 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2337 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, d, s);
2339 return E_NOTIMPL;
2342 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetBox(IDirect3DRMFrame3* iface, LPD3DRMBOX box)
2344 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2346 FIXME("(%p/%p)->(%p): stub\n", iface, This, box);
2348 return E_NOTIMPL;
2351 static BOOL WINAPI IDirect3DRMFrame3Impl_GetBoxEnable(IDirect3DRMFrame3* iface)
2353 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2355 FIXME("(%p/%p)->(): stub\n", iface, This);
2357 return E_NOTIMPL;
2360 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetAxes(IDirect3DRMFrame3* iface,
2361 LPD3DVECTOR dir, LPD3DVECTOR up)
2363 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2365 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, dir, up);
2367 return E_NOTIMPL;
2370 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetMaterial(IDirect3DRMFrame3* iface,
2371 LPDIRECT3DRMMATERIAL2 *material)
2373 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2375 FIXME("(%p/%p)->(%p): stub\n", iface, This, material);
2377 return E_NOTIMPL;
2380 static BOOL WINAPI IDirect3DRMFrame3Impl_GetInheritAxes(IDirect3DRMFrame3* iface)
2382 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2384 FIXME("(%p/%p)->(): stub\n", iface, This);
2386 return E_NOTIMPL;
2389 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetHierarchyBox(IDirect3DRMFrame3* iface,
2390 LPD3DRMBOX box)
2392 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2394 FIXME("(%p/%p)->(%p): stub\n", iface, This, box);
2396 return E_NOTIMPL;
2399 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetBox(IDirect3DRMFrame3* iface, LPD3DRMBOX box)
2401 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2403 FIXME("(%p/%p)->(%p): stub\n", iface, This, box);
2405 return E_NOTIMPL;
2408 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetBoxEnable(IDirect3DRMFrame3* iface, BOOL enable)
2410 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2412 FIXME("(%p/%p)->(%u): stub\n", iface, This, enable);
2414 return E_NOTIMPL;
2417 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetAxes(IDirect3DRMFrame3* iface,
2418 D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
2419 D3DVALUE ux, D3DVALUE uy, D3DVALUE uz)
2421 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2423 FIXME("(%p/%p)->(%f,%f,%f,%f,%f,%f): stub\n", iface, This, dx, dy, dz, ux, uy, uz);
2425 return E_NOTIMPL;
2428 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetInheritAxes(IDirect3DRMFrame3* iface,
2429 BOOL inherit_from_parent)
2431 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2433 FIXME("(%p/%p)->(%u): stub\n", iface, This, inherit_from_parent);
2435 return E_NOTIMPL;
2438 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetMaterial(IDirect3DRMFrame3* iface,
2439 LPDIRECT3DRMMATERIAL2 material)
2441 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2443 FIXME("(%p/%p)->(%p): stub\n", iface, This, material);
2445 return E_NOTIMPL;
2448 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetQuaternion(IDirect3DRMFrame3* iface,
2449 LPDIRECT3DRMFRAME3 reference,
2450 D3DRMQUATERNION *q)
2452 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2454 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, reference, q);
2456 return E_NOTIMPL;
2459 static HRESULT WINAPI IDirect3DRMFrame3Impl_RayPick(IDirect3DRMFrame3* iface,
2460 LPDIRECT3DRMFRAME3 reference, LPD3DRMRAY ray,
2461 DWORD flags,
2462 LPDIRECT3DRMPICKED2ARRAY *return_visuals)
2464 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2466 FIXME("(%p/%p)->(%p,%p,%u,%p): stub\n", iface, This, reference, ray, flags, return_visuals);
2468 return E_NOTIMPL;
2471 static HRESULT WINAPI IDirect3DRMFrame3Impl_Save(IDirect3DRMFrame3* iface, LPCSTR filename,
2472 D3DRMXOFFORMAT d3dFormat,
2473 D3DRMSAVEOPTIONS d3dSaveFlags)
2475 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2477 FIXME("(%p/%p)->(%p,%u,%u): stub\n", iface, This, filename, d3dFormat, d3dSaveFlags);
2479 return E_NOTIMPL;
2482 static HRESULT WINAPI IDirect3DRMFrame3Impl_TransformVectors(IDirect3DRMFrame3* iface,
2483 LPDIRECT3DRMFRAME3 reference,
2484 DWORD num, LPD3DVECTOR dst,
2485 LPD3DVECTOR src)
2487 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2489 FIXME("(%p/%p)->(%p,%u,%p,%p): stub\n", iface, This, reference, num, dst, src);
2491 return E_NOTIMPL;
2494 static HRESULT WINAPI IDirect3DRMFrame3Impl_InverseTransformVectors(IDirect3DRMFrame3* iface,
2495 LPDIRECT3DRMFRAME3 reference,
2496 DWORD num, LPD3DVECTOR dst,
2497 LPD3DVECTOR src)
2499 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2501 FIXME("(%p/%p)->(%p,%u,%p,%p): stub\n", iface, This, reference, num, dst, src);
2503 return E_NOTIMPL;
2506 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetTraversalOptions(IDirect3DRMFrame3* iface,
2507 DWORD flags)
2509 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2511 FIXME("(%p/%p)->(%u): stub\n", iface, This, flags);
2513 return E_NOTIMPL;
2516 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetTraversalOptions(IDirect3DRMFrame3* iface,
2517 LPDWORD flags)
2519 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2521 FIXME("(%p/%p)->(%p): stub\n", iface, This, flags);
2523 return E_NOTIMPL;
2526 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetSceneFogMethod(IDirect3DRMFrame3* iface,
2527 DWORD flags)
2529 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2531 FIXME("(%p/%p)->(%u): stub\n", iface, This, flags);
2533 return E_NOTIMPL;
2536 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetSceneFogMethod(IDirect3DRMFrame3* iface,
2537 LPDWORD flags)
2539 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2541 FIXME("(%p/%p)->(%p): stub\n", iface, This, flags);
2543 return E_NOTIMPL;
2546 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetMaterialOverride(IDirect3DRMFrame3* iface,
2547 LPD3DRMMATERIALOVERRIDE override)
2549 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2551 FIXME("(%p/%p)->(%p): stub\n", iface, This, override);
2553 return E_NOTIMPL;
2556 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetMaterialOverride(IDirect3DRMFrame3* iface,
2557 LPD3DRMMATERIALOVERRIDE override)
2559 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2561 FIXME("(%p/%p)->(%p): stub\n", iface, This, override);
2563 return E_NOTIMPL;
2566 static const struct IDirect3DRMFrame3Vtbl Direct3DRMFrame3_Vtbl =
2568 /*** IUnknown methods ***/
2569 IDirect3DRMFrame3Impl_QueryInterface,
2570 IDirect3DRMFrame3Impl_AddRef,
2571 IDirect3DRMFrame3Impl_Release,
2572 /*** IDirect3DRMObject methods ***/
2573 IDirect3DRMFrame3Impl_Clone,
2574 IDirect3DRMFrame3Impl_AddDestroyCallback,
2575 IDirect3DRMFrame3Impl_DeleteDestroyCallback,
2576 IDirect3DRMFrame3Impl_SetAppData,
2577 IDirect3DRMFrame3Impl_GetAppData,
2578 IDirect3DRMFrame3Impl_SetName,
2579 IDirect3DRMFrame3Impl_GetName,
2580 IDirect3DRMFrame3Impl_GetClassName,
2581 /*** IDirect3DRMFrame3 methods ***/
2582 IDirect3DRMFrame3Impl_AddChild,
2583 IDirect3DRMFrame3Impl_AddLight,
2584 IDirect3DRMFrame3Impl_AddMoveCallback,
2585 IDirect3DRMFrame3Impl_AddTransform,
2586 IDirect3DRMFrame3Impl_AddTranslation,
2587 IDirect3DRMFrame3Impl_AddScale,
2588 IDirect3DRMFrame3Impl_AddRotation,
2589 IDirect3DRMFrame3Impl_AddVisual,
2590 IDirect3DRMFrame3Impl_GetChildren,
2591 IDirect3DRMFrame3Impl_GetColor,
2592 IDirect3DRMFrame3Impl_GetLights,
2593 IDirect3DRMFrame3Impl_GetMaterialMode,
2594 IDirect3DRMFrame3Impl_GetParent,
2595 IDirect3DRMFrame3Impl_GetPosition,
2596 IDirect3DRMFrame3Impl_GetRotation,
2597 IDirect3DRMFrame3Impl_GetScene,
2598 IDirect3DRMFrame3Impl_GetSortMode,
2599 IDirect3DRMFrame3Impl_GetTexture,
2600 IDirect3DRMFrame3Impl_GetTransform,
2601 IDirect3DRMFrame3Impl_GetVelocity,
2602 IDirect3DRMFrame3Impl_GetOrientation,
2603 IDirect3DRMFrame3Impl_GetVisuals,
2604 IDirect3DRMFrame3Impl_InverseTransform,
2605 IDirect3DRMFrame3Impl_Load,
2606 IDirect3DRMFrame3Impl_LookAt,
2607 IDirect3DRMFrame3Impl_Move,
2608 IDirect3DRMFrame3Impl_DeleteChild,
2609 IDirect3DRMFrame3Impl_DeleteLight,
2610 IDirect3DRMFrame3Impl_DeleteMoveCallback,
2611 IDirect3DRMFrame3Impl_DeleteVisual,
2612 IDirect3DRMFrame3Impl_GetSceneBackground,
2613 IDirect3DRMFrame3Impl_GetSceneBackgroundDepth,
2614 IDirect3DRMFrame3Impl_GetSceneFogColor,
2615 IDirect3DRMFrame3Impl_GetSceneFogEnable,
2616 IDirect3DRMFrame3Impl_GetSceneFogMode,
2617 IDirect3DRMFrame3Impl_GetSceneFogParams,
2618 IDirect3DRMFrame3Impl_SetSceneBackground,
2619 IDirect3DRMFrame3Impl_SetSceneBackgroundRGB,
2620 IDirect3DRMFrame3Impl_SetSceneBackgroundDepth,
2621 IDirect3DRMFrame3Impl_SetSceneBackgroundImage,
2622 IDirect3DRMFrame3Impl_SetSceneFogEnable,
2623 IDirect3DRMFrame3Impl_SetSceneFogColor,
2624 IDirect3DRMFrame3Impl_SetSceneFogMode,
2625 IDirect3DRMFrame3Impl_SetSceneFogParams,
2626 IDirect3DRMFrame3Impl_SetColor,
2627 IDirect3DRMFrame3Impl_SetColorRGB,
2628 IDirect3DRMFrame3Impl_GetZbufferMode,
2629 IDirect3DRMFrame3Impl_SetMaterialMode,
2630 IDirect3DRMFrame3Impl_SetOrientation,
2631 IDirect3DRMFrame3Impl_SetPosition,
2632 IDirect3DRMFrame3Impl_SetRotation,
2633 IDirect3DRMFrame3Impl_SetSortMode,
2634 IDirect3DRMFrame3Impl_SetTexture,
2635 IDirect3DRMFrame3Impl_SetVelocity,
2636 IDirect3DRMFrame3Impl_SetZbufferMode,
2637 IDirect3DRMFrame3Impl_Transform,
2638 IDirect3DRMFrame3Impl_GetBox,
2639 IDirect3DRMFrame3Impl_GetBoxEnable,
2640 IDirect3DRMFrame3Impl_GetAxes,
2641 IDirect3DRMFrame3Impl_GetMaterial,
2642 IDirect3DRMFrame3Impl_GetInheritAxes,
2643 IDirect3DRMFrame3Impl_GetHierarchyBox,
2644 IDirect3DRMFrame3Impl_SetBox,
2645 IDirect3DRMFrame3Impl_SetBoxEnable,
2646 IDirect3DRMFrame3Impl_SetAxes,
2647 IDirect3DRMFrame3Impl_SetInheritAxes,
2648 IDirect3DRMFrame3Impl_SetMaterial,
2649 IDirect3DRMFrame3Impl_SetQuaternion,
2650 IDirect3DRMFrame3Impl_RayPick,
2651 IDirect3DRMFrame3Impl_Save,
2652 IDirect3DRMFrame3Impl_TransformVectors,
2653 IDirect3DRMFrame3Impl_InverseTransformVectors,
2654 IDirect3DRMFrame3Impl_SetTraversalOptions,
2655 IDirect3DRMFrame3Impl_GetTraversalOptions,
2656 IDirect3DRMFrame3Impl_SetSceneFogMethod,
2657 IDirect3DRMFrame3Impl_GetSceneFogMethod,
2658 IDirect3DRMFrame3Impl_SetMaterialOverride,
2659 IDirect3DRMFrame3Impl_GetMaterialOverride
2662 static inline IDirect3DRMFrameImpl *unsafe_impl_from_IDirect3DRMFrame3(IDirect3DRMFrame3 *iface)
2664 if (!iface)
2665 return NULL;
2666 assert(iface->lpVtbl == &Direct3DRMFrame3_Vtbl);
2668 return impl_from_IDirect3DRMFrame3(iface);
2671 HRESULT Direct3DRMFrame_create(REFIID riid, IUnknown* parent, IUnknown** ret_iface)
2673 IDirect3DRMFrameImpl* object;
2674 HRESULT hr;
2676 TRACE("(%s, %p, %p)\n", wine_dbgstr_guid(riid), parent, ret_iface);
2678 object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirect3DRMFrameImpl));
2679 if (!object)
2681 ERR("Out of memory\n");
2682 return E_OUTOFMEMORY;
2685 object->IDirect3DRMFrame2_iface.lpVtbl = &Direct3DRMFrame2_Vtbl;
2686 object->IDirect3DRMFrame3_iface.lpVtbl = &Direct3DRMFrame3_Vtbl;
2687 object->ref = 1;
2689 memcpy(&object->transform[0][0], &identity[0][0], sizeof(D3DRMMATRIX4D));
2691 if (parent)
2693 IDirect3DRMFrame3 *p;
2695 hr = IDirect3DRMFrame_QueryInterface(parent, &IID_IDirect3DRMFrame3, (void**)&p);
2696 if (hr != S_OK)
2697 return hr;
2698 IDirect3DRMFrame_Release(parent);
2699 IDirect3DRMFrame3_AddChild(p, &object->IDirect3DRMFrame3_iface);
2702 hr = IDirect3DRMFrame3_QueryInterface(&object->IDirect3DRMFrame3_iface, riid, (void**)ret_iface);
2703 IDirect3DRMFrame3_Release(&object->IDirect3DRMFrame3_iface);
2704 return S_OK;