d3drm: Hande parent when creating a new frame.
[wine/multimedia.git] / dlls / d3drm / frame.c
blob574e2f8398a21bf1c4c047518e17b0992afc36e1
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 HRESULT Direct3DRMFrameArray_create(IDirect3DRMFrameArray** obj);
75 HRESULT Direct3DRMVisualArray_create(IDirect3DRMVisualArray** ret_iface);
77 static inline IDirect3DRMFrameImpl *impl_from_IDirect3DRMFrame2(IDirect3DRMFrame2 *iface)
79 return CONTAINING_RECORD(iface, IDirect3DRMFrameImpl, IDirect3DRMFrame2_iface);
82 static inline IDirect3DRMFrameImpl *impl_from_IDirect3DRMFrame3(IDirect3DRMFrame3 *iface)
84 return CONTAINING_RECORD(iface, IDirect3DRMFrameImpl, IDirect3DRMFrame3_iface);
87 static inline IDirect3DRMFrameImpl *unsafe_impl_from_IDirect3DRMFrame2(IDirect3DRMFrame2 *iface);
88 static inline IDirect3DRMFrameImpl *unsafe_impl_from_IDirect3DRMFrame3(IDirect3DRMFrame3 *iface);
90 /*** IUnknown methods ***/
91 static HRESULT WINAPI IDirect3DRMFrame2Impl_QueryInterface(IDirect3DRMFrame2* iface,
92 REFIID riid, void** object)
94 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
96 TRACE("(%p/%p)->(%s, %p)\n", iface, This, debugstr_guid(riid), object);
98 *object = NULL;
100 if(IsEqualGUID(riid, &IID_IUnknown) ||
101 IsEqualGUID(riid, &IID_IDirect3DRMFrame) ||
102 IsEqualGUID(riid, &IID_IDirect3DRMFrame2))
104 *object = &This->IDirect3DRMFrame2_iface;
106 else if(IsEqualGUID(riid, &IID_IDirect3DRMFrame3))
108 *object = &This->IDirect3DRMFrame3_iface;
110 else
112 FIXME("interface %s not implemented\n", debugstr_guid(riid));
113 return E_NOINTERFACE;
116 IDirect3DRMFrame2_AddRef(iface);
117 return S_OK;
120 static ULONG WINAPI IDirect3DRMFrame2Impl_AddRef(IDirect3DRMFrame2* iface)
122 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
123 ULONG ref = InterlockedIncrement(&This->ref);
125 TRACE("(%p)->(): new ref = %d\n", This, ref);
127 return ref;
130 static ULONG WINAPI IDirect3DRMFrame2Impl_Release(IDirect3DRMFrame2* iface)
132 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
133 ULONG ref = InterlockedDecrement(&This->ref);
134 ULONG i;
136 TRACE("(%p)->(): new ref = %d\n", This, ref);
138 if (!ref)
140 for (i = 0; i < This->nb_children; i++)
141 IDirect3DRMFrame3_Release(This->children[i]);
142 HeapFree(GetProcessHeap(), 0, This->children);
143 for (i = 0; i < This->nb_visuals; i++)
144 IDirect3DRMVisual_Release(This->visuals[i]);
145 HeapFree(GetProcessHeap(), 0, This->visuals);
146 for (i = 0; i < This->nb_lights; i++)
147 IDirect3DRMLight_Release(This->lights[i]);
148 HeapFree(GetProcessHeap(), 0, This->lights);
149 HeapFree(GetProcessHeap(), 0, This);
152 return ref;
155 /*** IDirect3DRMObject methods ***/
156 static HRESULT WINAPI IDirect3DRMFrame2Impl_Clone(IDirect3DRMFrame2* iface,
157 LPUNKNOWN unkwn, REFIID riid,
158 LPVOID* object)
160 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
162 FIXME("(%p/%p)->(%p, %s, %p): stub\n", iface, This, unkwn, debugstr_guid(riid), object);
164 return E_NOTIMPL;
167 static HRESULT WINAPI IDirect3DRMFrame2Impl_AddDestroyCallback(IDirect3DRMFrame2* iface,
168 D3DRMOBJECTCALLBACK cb,
169 LPVOID argument)
171 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
173 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, argument);
175 return E_NOTIMPL;
178 static HRESULT WINAPI IDirect3DRMFrame2Impl_DeleteDestroyCallback(IDirect3DRMFrame2* iface,
179 D3DRMOBJECTCALLBACK cb,
180 LPVOID argument)
182 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
184 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, argument);
186 return E_NOTIMPL;
189 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetAppData(IDirect3DRMFrame2* iface,
190 DWORD data)
192 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
194 FIXME("(%p/%p)->(%u): stub\n", iface, This, data);
196 return E_NOTIMPL;
199 static DWORD WINAPI IDirect3DRMFrame2Impl_GetAppData(IDirect3DRMFrame2* iface)
201 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
203 FIXME("(%p/%p)->(): stub\n", iface, This);
205 return 0;
208 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetName(IDirect3DRMFrame2* iface, LPCSTR name)
210 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
212 FIXME("(%p/%p)->(%s): stub\n", iface, This, name);
214 return E_NOTIMPL;
217 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetName(IDirect3DRMFrame2* iface,
218 LPDWORD size, LPSTR name)
220 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
222 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, size, name);
224 return E_NOTIMPL;
227 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetClassName(IDirect3DRMFrame2* iface,
228 LPDWORD size, LPSTR name)
230 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
232 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, size, name);
234 return E_NOTIMPL;
237 /*** IDirect3DRMFrame methods ***/
238 static HRESULT WINAPI IDirect3DRMFrame2Impl_AddChild(IDirect3DRMFrame2* iface,
239 LPDIRECT3DRMFRAME child)
241 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
242 IDirect3DRMFrameImpl *frame = unsafe_impl_from_IDirect3DRMFrame2((LPDIRECT3DRMFRAME2)child);
244 TRACE("(%p/%p)->(%p)\n", iface, This, child);
246 if (!frame)
247 return D3DRMERR_BADOBJECT;
249 return IDirect3DRMFrame3_AddChild(&This->IDirect3DRMFrame3_iface, &frame->IDirect3DRMFrame3_iface);
252 static HRESULT WINAPI IDirect3DRMFrame2Impl_AddLight(IDirect3DRMFrame2* iface,
253 LPDIRECT3DRMLIGHT light)
255 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
257 TRACE("(%p/%p)->(%p)\n", iface, This, light);
259 return IDirect3DRMFrame3_AddLight(&This->IDirect3DRMFrame3_iface, light);
262 static HRESULT WINAPI IDirect3DRMFrame2Impl_AddMoveCallback(IDirect3DRMFrame2* iface,
263 D3DRMFRAMEMOVECALLBACK cb, VOID *arg)
265 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
267 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, cb, arg);
269 return E_NOTIMPL;
272 static HRESULT WINAPI IDirect3DRMFrame2Impl_AddTransform(IDirect3DRMFrame2* iface,
273 D3DRMCOMBINETYPE type,
274 D3DRMMATRIX4D matrix)
276 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
278 TRACE("(%p/%p)->(%u,%p)\n", iface, This, type, matrix);
280 return IDirect3DRMFrame3_AddTransform(&This->IDirect3DRMFrame3_iface, type, matrix);
283 static HRESULT WINAPI IDirect3DRMFrame2Impl_AddTranslation(IDirect3DRMFrame2* iface,
284 D3DRMCOMBINETYPE type,
285 D3DVALUE x, D3DVALUE y, D3DVALUE z)
287 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
289 FIXME("(%p/%p)->(%u,%f,%f,%f): stub\n", iface, This, type, x, y, z);
291 return E_NOTIMPL;
294 static HRESULT WINAPI IDirect3DRMFrame2Impl_AddScale(IDirect3DRMFrame2* iface,
295 D3DRMCOMBINETYPE type,
296 D3DVALUE sx, D3DVALUE sy, D3DVALUE sz)
298 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
300 FIXME("(%p/%p)->(%u,%f,%f,%f): stub\n", iface, This, type, sx, sy, sz);
302 return E_NOTIMPL;
305 static HRESULT WINAPI IDirect3DRMFrame2Impl_AddRotation(IDirect3DRMFrame2* iface,
306 D3DRMCOMBINETYPE type,
307 D3DVALUE x, D3DVALUE y, D3DVALUE z,
308 D3DVALUE theta)
310 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
312 FIXME("(%p/%p)->(%u,%f,%f,%f,%f): stub\n", iface, This, type, x, y, z, theta);
314 return E_NOTIMPL;
317 static HRESULT WINAPI IDirect3DRMFrame2Impl_AddVisual(IDirect3DRMFrame2* iface,
318 LPDIRECT3DRMVISUAL vis)
320 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
322 TRACE("(%p/%p)->(%p)\n", iface, This, vis);
324 return IDirect3DRMFrame3_AddVisual(&This->IDirect3DRMFrame3_iface, (LPUNKNOWN)vis);
327 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetChildren(IDirect3DRMFrame2* iface,
328 LPDIRECT3DRMFRAMEARRAY *children)
330 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
332 TRACE("(%p/%p)->(%p)\n", iface, This, children);
334 return IDirect3DRMFrame3_GetChildren(&This->IDirect3DRMFrame3_iface, children);
337 static D3DCOLOR WINAPI IDirect3DRMFrame2Impl_GetColor(IDirect3DRMFrame2* iface)
339 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
341 FIXME("(%p/%p)->(): stub\n", iface, This);
343 return 0;
346 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetLights(IDirect3DRMFrame2* iface,
347 LPDIRECT3DRMLIGHTARRAY *lights)
349 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
351 FIXME("(%p/%p)->(%p): stub\n", iface, This, lights);
353 return E_NOTIMPL;
356 static D3DRMMATERIALMODE WINAPI IDirect3DRMFrame2Impl_GetMaterialMode(IDirect3DRMFrame2* iface)
358 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
360 FIXME("(%p/%p)->(): stub\n", iface, This);
362 return D3DRMMATERIAL_FROMPARENT;
365 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetParent(IDirect3DRMFrame2* iface,
366 LPDIRECT3DRMFRAME * frame)
368 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
370 TRACE("(%p/%p)->(%p)\n", iface, This, frame);
372 if (!frame)
373 return D3DRMERR_BADVALUE;
375 if (This->parent)
377 *frame = (LPDIRECT3DRMFRAME)&This->parent->IDirect3DRMFrame2_iface;
378 IDirect3DRMFrame_AddRef(*frame);
380 else
382 *frame = NULL;
385 return D3DRM_OK;
388 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetPosition(IDirect3DRMFrame2* iface,
389 LPDIRECT3DRMFRAME reference,
390 LPD3DVECTOR return_position)
392 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
394 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, reference, return_position);
396 return E_NOTIMPL;
399 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetRotation(IDirect3DRMFrame2* iface,
400 LPDIRECT3DRMFRAME reference,
401 LPD3DVECTOR axis, LPD3DVALUE return_theta)
403 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
405 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, reference, axis, return_theta);
407 return E_NOTIMPL;
410 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetScene(IDirect3DRMFrame2* iface,
411 LPDIRECT3DRMFRAME * frame)
413 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
415 FIXME("(%p/%p)->(%p): stub\n", iface, This, frame);
417 return E_NOTIMPL;
420 static D3DRMSORTMODE WINAPI IDirect3DRMFrame2Impl_GetSortMode(IDirect3DRMFrame2* iface)
422 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
424 FIXME("(%p/%p)->(): stub\n", iface, This);
426 return D3DRMSORT_FROMPARENT;
429 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetTexture(IDirect3DRMFrame2* iface,
430 LPDIRECT3DRMTEXTURE * tex)
432 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
434 FIXME("(%p/%p)->(%p): stub\n", iface, This, tex);
436 return E_NOTIMPL;
439 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetTransform(IDirect3DRMFrame2* iface,
440 D3DRMMATRIX4D return_matrix)
442 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
444 TRACE("(%p/%p)->(%p)\n", iface, This, return_matrix);
446 memcpy(&return_matrix[0][0], &This->transform[0][0], sizeof(D3DRMMATRIX4D));
448 return D3DRM_OK;
451 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetVelocity(IDirect3DRMFrame2* iface,
452 LPDIRECT3DRMFRAME reference,
453 LPD3DVECTOR return_velocity,
454 BOOL with_rotation)
456 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
458 FIXME("(%p/%p)->(%p,%p,%d): stub\n", iface, This, reference, return_velocity, with_rotation);
460 return E_NOTIMPL;
463 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetOrientation(IDirect3DRMFrame2* iface,
464 LPDIRECT3DRMFRAME reference,
465 LPD3DVECTOR dir, LPD3DVECTOR up)
467 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
469 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, reference, dir, up);
471 return E_NOTIMPL;
474 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetVisuals(IDirect3DRMFrame2* iface,
475 LPDIRECT3DRMVISUALARRAY *visuals)
477 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
478 IDirect3DRMVisualArrayImpl* obj;
479 HRESULT hr;
481 TRACE("(%p/%p)->(%p)\n", iface, This, visuals);
483 if (!visuals)
484 return D3DRMERR_BADVALUE;
486 hr = Direct3DRMVisualArray_create(visuals);
488 if (hr != D3DRM_OK)
489 return hr;
491 obj = (IDirect3DRMVisualArrayImpl*)*visuals;
493 obj->size = This->nb_visuals;
494 if (This->nb_visuals)
496 ULONG i;
497 obj->visuals = HeapAlloc(GetProcessHeap(), 0, This->nb_visuals * sizeof(LPDIRECT3DRMVISUAL));
498 if (!obj->visuals)
499 return E_OUTOFMEMORY;
500 for (i = 0; i < This->nb_visuals; i++)
502 obj->visuals[i] = This->visuals[i];
503 IDirect3DRMVisual_AddRef(This->visuals[i]);
507 return D3DRM_OK;
510 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetTextureTopology(IDirect3DRMFrame2* iface,
511 BOOL *wrap_u, BOOL *wrap_v)
513 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
515 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, wrap_u, wrap_v);
517 return E_NOTIMPL;
520 static HRESULT WINAPI IDirect3DRMFrame2Impl_InverseTransform(IDirect3DRMFrame2* iface,
521 D3DVECTOR *d, D3DVECTOR *s)
523 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
525 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, d, s);
527 return E_NOTIMPL;
530 static HRESULT WINAPI IDirect3DRMFrame2Impl_Load(IDirect3DRMFrame2* iface, LPVOID filename,
531 LPVOID name, D3DRMLOADOPTIONS loadflags,
532 D3DRMLOADTEXTURECALLBACK cb, LPVOID lpArg)
534 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
536 FIXME("(%p/%p)->(%p,%p,%u,%p,%p): stub\n", iface, This, filename, name, loadflags, cb, lpArg);
538 return E_NOTIMPL;
541 static HRESULT WINAPI IDirect3DRMFrame2Impl_LookAt(IDirect3DRMFrame2* iface,
542 LPDIRECT3DRMFRAME target,
543 LPDIRECT3DRMFRAME reference,
544 D3DRMFRAMECONSTRAINT constraint)
546 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
548 FIXME("(%p/%p)->(%p,%p,%u): stub\n", iface, This, target, reference, constraint);
550 return E_NOTIMPL;
553 static HRESULT WINAPI IDirect3DRMFrame2Impl_Move(IDirect3DRMFrame2* iface, D3DVALUE delta)
555 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
557 FIXME("(%p/%p)->(%f): stub\n", iface, This, delta);
559 return E_NOTIMPL;
562 static HRESULT WINAPI IDirect3DRMFrame2Impl_DeleteChild(IDirect3DRMFrame2* iface,
563 LPDIRECT3DRMFRAME frame)
565 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
566 IDirect3DRMFrameImpl *child = unsafe_impl_from_IDirect3DRMFrame2((LPDIRECT3DRMFRAME2)frame);
568 TRACE("(%p/%p)->(%p)\n", iface, This, frame);
570 if (!child)
571 return D3DRMERR_BADOBJECT;
573 return IDirect3DRMFrame3_DeleteChild(&This->IDirect3DRMFrame3_iface, &child->IDirect3DRMFrame3_iface);
576 static HRESULT WINAPI IDirect3DRMFrame2Impl_DeleteLight(IDirect3DRMFrame2* iface,
577 LPDIRECT3DRMLIGHT light)
579 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
581 TRACE("(%p/%p)->(%p)\n", iface, This, light);
583 return IDirect3DRMFrame3_DeleteLight(&This->IDirect3DRMFrame3_iface, light);
586 static HRESULT WINAPI IDirect3DRMFrame2Impl_DeleteMoveCallback(IDirect3DRMFrame2* iface,
587 D3DRMFRAMEMOVECALLBACK cb, VOID *arg)
589 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
591 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, cb, arg);
593 return E_NOTIMPL;
596 static HRESULT WINAPI IDirect3DRMFrame2Impl_DeleteVisual(IDirect3DRMFrame2* iface,
597 LPDIRECT3DRMVISUAL vis)
599 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
601 TRACE("(%p/%p)->(%p)\n", iface, This, vis);
603 return IDirect3DRMFrame3_DeleteVisual(&This->IDirect3DRMFrame3_iface, (LPUNKNOWN)vis);
606 static D3DCOLOR WINAPI IDirect3DRMFrame2Impl_GetSceneBackground(IDirect3DRMFrame2* iface)
608 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
610 FIXME("(%p/%p)->(): stub\n", iface, This);
612 return 0;
615 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetSceneBackgroundDepth(IDirect3DRMFrame2* iface,
616 LPDIRECTDRAWSURFACE * surface)
618 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
620 FIXME("(%p/%p)->(%p): stub\n", iface, This, surface);
622 return E_NOTIMPL;
625 static D3DCOLOR WINAPI IDirect3DRMFrame2Impl_GetSceneFogColor(IDirect3DRMFrame2* iface)
627 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
629 FIXME("(%p/%p)->(): stub\n", iface, This);
631 return 0;
634 static BOOL WINAPI IDirect3DRMFrame2Impl_GetSceneFogEnable(IDirect3DRMFrame2* iface)
636 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
638 FIXME("(%p/%p)->(): stub\n", iface, This);
640 return FALSE;
643 static D3DRMFOGMODE WINAPI IDirect3DRMFrame2Impl_GetSceneFogMode(IDirect3DRMFrame2* iface)
645 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
647 FIXME("(%p/%p)->(): stub\n", iface, This);
649 return D3DRMFOG_LINEAR;
652 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetSceneFogParams(IDirect3DRMFrame2* iface,
653 D3DVALUE *return_start,
654 D3DVALUE *return_end,
655 D3DVALUE *return_density)
657 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
659 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, return_start, return_end, return_density);
661 return E_NOTIMPL;
664 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetSceneBackground(IDirect3DRMFrame2* iface,
665 D3DCOLOR color)
667 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
669 FIXME("(%p/%p)->(%u): stub\n", iface, This, color);
671 return E_NOTIMPL;
674 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetSceneBackgroundRGB(IDirect3DRMFrame2* iface,
675 D3DVALUE red, D3DVALUE green,
676 D3DVALUE blue)
678 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
680 FIXME("(%p/%p)->(%f,%f,%f): stub\n", iface, This, red, green, blue);
682 return E_NOTIMPL;
685 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetSceneBackgroundDepth(IDirect3DRMFrame2* iface,
686 LPDIRECTDRAWSURFACE surface)
688 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
690 FIXME("(%p/%p)->(%p): stub\n", iface, This, surface);
692 return E_NOTIMPL;
695 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetSceneBackgroundImage(IDirect3DRMFrame2* iface,
696 LPDIRECT3DRMTEXTURE texture)
698 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
700 FIXME("(%p/%p)->(%p): stub\n", iface, This, texture);
702 return E_NOTIMPL;
705 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetSceneFogEnable(IDirect3DRMFrame2* iface, BOOL enable)
707 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
709 FIXME("(%p/%p)->(%d): stub\n", iface, This, enable);
711 return E_NOTIMPL;
714 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetSceneFogColor(IDirect3DRMFrame2* iface,
715 D3DCOLOR color)
717 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
719 FIXME("(%p/%p)->(%u): stub\n", iface, This, color);
721 return E_NOTIMPL;
724 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetSceneFogMode(IDirect3DRMFrame2* iface,
725 D3DRMFOGMODE mode)
727 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
729 FIXME("(%p/%p)->(%u): stub\n", iface, This, mode);
731 return E_NOTIMPL;
734 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetSceneFogParams(IDirect3DRMFrame2* iface,
735 D3DVALUE start, D3DVALUE end,
736 D3DVALUE density)
738 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
740 FIXME("(%p/%p)->(%f,%f,%f): stub\n", iface, This, start, end, density);
742 return E_NOTIMPL;
745 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetColor(IDirect3DRMFrame2* iface, D3DCOLOR color)
747 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
749 FIXME("(%p/%p)->(%u): stub\n", iface, This, color);
751 return E_NOTIMPL;
754 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetColorRGB(IDirect3DRMFrame2* iface, D3DVALUE red,
755 D3DVALUE green, D3DVALUE blue)
757 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
759 FIXME("(%p/%p)->(%f,%f,%f): stub\n", iface, This, red, green, blue);
761 return E_NOTIMPL;
764 static D3DRMZBUFFERMODE WINAPI IDirect3DRMFrame2Impl_GetZbufferMode(IDirect3DRMFrame2* iface)
766 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
768 FIXME("(%p/%p)->(): stub\n", iface, This);
770 return D3DRMZBUFFER_FROMPARENT;
773 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetMaterialMode(IDirect3DRMFrame2* iface,
774 D3DRMMATERIALMODE mode)
776 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
778 FIXME("(%p/%p)->(%u): stub\n", iface, This, mode);
780 return E_NOTIMPL;
783 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetOrientation(IDirect3DRMFrame2* iface,
784 LPDIRECT3DRMFRAME reference,
785 D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
786 D3DVALUE ux, D3DVALUE uy, D3DVALUE uz )
788 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
790 FIXME("(%p/%p)->(%p,%f,%f,%f,%f,%f,%f): stub\n", iface, This, reference,
791 dx, dy, dz, ux, uy, uz);
793 return E_NOTIMPL;
796 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetPosition(IDirect3DRMFrame2* iface,
797 LPDIRECT3DRMFRAME reference,
798 D3DVALUE x, D3DVALUE y, D3DVALUE z)
800 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
802 FIXME("(%p/%p)->(%p,%f,%f,%f): stub\n", iface, This, reference, x, y, z);
804 return E_NOTIMPL;
807 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetRotation(IDirect3DRMFrame2* iface,
808 LPDIRECT3DRMFRAME reference,
809 D3DVALUE x, D3DVALUE y, D3DVALUE z,
810 D3DVALUE theta)
812 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
814 FIXME("(%p/%p)->(%p,%f,%f,%f,%f): stub\n", iface, This, reference, x, y, z, theta);
816 return E_NOTIMPL;
819 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetSortMode(IDirect3DRMFrame2* iface,
820 D3DRMSORTMODE mode)
822 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
824 FIXME("(%p/%p)->(%u): stub\n", iface, This, mode);
826 return E_NOTIMPL;
829 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetTexture(IDirect3DRMFrame2* iface,
830 LPDIRECT3DRMTEXTURE texture)
832 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
834 FIXME("(%p/%p)->(%p): stub\n", iface, This, texture);
836 return E_NOTIMPL;
839 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetTextureTopology(IDirect3DRMFrame2* iface,
840 BOOL wrap_u, BOOL wrap_v)
842 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
844 FIXME("(%p/%p)->(%d,%d): stub\n", iface, This, wrap_u, wrap_v);
846 return E_NOTIMPL;
849 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetVelocity(IDirect3DRMFrame2* iface,
850 LPDIRECT3DRMFRAME reference,
851 D3DVALUE x, D3DVALUE y, D3DVALUE z,
852 BOOL with_rotation)
854 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
856 FIXME("(%p/%p)->(%p,%f,%f,%f,%d): stub\n", iface, This, reference, x, y, z, with_rotation);
858 return E_NOTIMPL;
861 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetZbufferMode(IDirect3DRMFrame2* iface,
862 D3DRMZBUFFERMODE mode)
864 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
866 FIXME("(%p/%p)->(%u): stub\n", iface, This, mode);
868 return E_NOTIMPL;
871 static HRESULT WINAPI IDirect3DRMFrame2Impl_Transform(IDirect3DRMFrame2* iface, D3DVECTOR *d,
872 D3DVECTOR *s)
874 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
876 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, d, s);
878 return E_NOTIMPL;
881 /*** IDirect3DRMFrame2 methods ***/
882 static HRESULT WINAPI IDirect3DRMFrame2Impl_AddMoveCallback2(IDirect3DRMFrame2* iface,
883 D3DRMFRAMEMOVECALLBACK cb, VOID *arg,
884 DWORD flags)
886 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
888 FIXME("(%p/%p)->(%p,%p,%u): stub\n", iface, This, cb, arg, flags);
890 return E_NOTIMPL;
893 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetBox(IDirect3DRMFrame2* iface, LPD3DRMBOX box)
895 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
897 FIXME("(%p/%p)->(%p): stub\n", iface, This, box);
899 return E_NOTIMPL;
902 static BOOL WINAPI IDirect3DRMFrame2Impl_GetBoxEnable(IDirect3DRMFrame2* iface)
904 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
906 FIXME("(%p/%p)->(): stub\n", iface, This);
908 return E_NOTIMPL;
911 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetAxes(IDirect3DRMFrame2* iface,
912 LPD3DVECTOR dir, LPD3DVECTOR up)
914 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
916 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, dir, up);
918 return E_NOTIMPL;
921 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetMaterial(IDirect3DRMFrame2* iface,
922 LPDIRECT3DRMMATERIAL *material)
924 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
926 FIXME("(%p/%p)->(%p): stub\n", iface, This, material);
928 return E_NOTIMPL;
931 static BOOL WINAPI IDirect3DRMFrame2Impl_GetInheritAxes(IDirect3DRMFrame2* iface)
933 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
935 FIXME("(%p/%p)->(): stub\n", iface, This);
937 return E_NOTIMPL;
940 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetHierarchyBox(IDirect3DRMFrame2* iface,
941 LPD3DRMBOX box)
943 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
945 FIXME("(%p/%p)->(%p): stub\n", iface, This, box);
947 return E_NOTIMPL;
950 static const struct IDirect3DRMFrame2Vtbl Direct3DRMFrame2_Vtbl =
952 /*** IUnknown methods ***/
953 IDirect3DRMFrame2Impl_QueryInterface,
954 IDirect3DRMFrame2Impl_AddRef,
955 IDirect3DRMFrame2Impl_Release,
956 /*** IDirect3DRMObject methods ***/
957 IDirect3DRMFrame2Impl_Clone,
958 IDirect3DRMFrame2Impl_AddDestroyCallback,
959 IDirect3DRMFrame2Impl_DeleteDestroyCallback,
960 IDirect3DRMFrame2Impl_SetAppData,
961 IDirect3DRMFrame2Impl_GetAppData,
962 IDirect3DRMFrame2Impl_SetName,
963 IDirect3DRMFrame2Impl_GetName,
964 IDirect3DRMFrame2Impl_GetClassName,
965 /*** IDirect3DRMFrame methods ***/
966 IDirect3DRMFrame2Impl_AddChild,
967 IDirect3DRMFrame2Impl_AddLight,
968 IDirect3DRMFrame2Impl_AddMoveCallback,
969 IDirect3DRMFrame2Impl_AddTransform,
970 IDirect3DRMFrame2Impl_AddTranslation,
971 IDirect3DRMFrame2Impl_AddScale,
972 IDirect3DRMFrame2Impl_AddRotation,
973 IDirect3DRMFrame2Impl_AddVisual,
974 IDirect3DRMFrame2Impl_GetChildren,
975 IDirect3DRMFrame2Impl_GetColor,
976 IDirect3DRMFrame2Impl_GetLights,
977 IDirect3DRMFrame2Impl_GetMaterialMode,
978 IDirect3DRMFrame2Impl_GetParent,
979 IDirect3DRMFrame2Impl_GetPosition,
980 IDirect3DRMFrame2Impl_GetRotation,
981 IDirect3DRMFrame2Impl_GetScene,
982 IDirect3DRMFrame2Impl_GetSortMode,
983 IDirect3DRMFrame2Impl_GetTexture,
984 IDirect3DRMFrame2Impl_GetTransform,
985 IDirect3DRMFrame2Impl_GetVelocity,
986 IDirect3DRMFrame2Impl_GetOrientation,
987 IDirect3DRMFrame2Impl_GetVisuals,
988 IDirect3DRMFrame2Impl_GetTextureTopology,
989 IDirect3DRMFrame2Impl_InverseTransform,
990 IDirect3DRMFrame2Impl_Load,
991 IDirect3DRMFrame2Impl_LookAt,
992 IDirect3DRMFrame2Impl_Move,
993 IDirect3DRMFrame2Impl_DeleteChild,
994 IDirect3DRMFrame2Impl_DeleteLight,
995 IDirect3DRMFrame2Impl_DeleteMoveCallback,
996 IDirect3DRMFrame2Impl_DeleteVisual,
997 IDirect3DRMFrame2Impl_GetSceneBackground,
998 IDirect3DRMFrame2Impl_GetSceneBackgroundDepth,
999 IDirect3DRMFrame2Impl_GetSceneFogColor,
1000 IDirect3DRMFrame2Impl_GetSceneFogEnable,
1001 IDirect3DRMFrame2Impl_GetSceneFogMode,
1002 IDirect3DRMFrame2Impl_GetSceneFogParams,
1003 IDirect3DRMFrame2Impl_SetSceneBackground,
1004 IDirect3DRMFrame2Impl_SetSceneBackgroundRGB,
1005 IDirect3DRMFrame2Impl_SetSceneBackgroundDepth,
1006 IDirect3DRMFrame2Impl_SetSceneBackgroundImage,
1007 IDirect3DRMFrame2Impl_SetSceneFogEnable,
1008 IDirect3DRMFrame2Impl_SetSceneFogColor,
1009 IDirect3DRMFrame2Impl_SetSceneFogMode,
1010 IDirect3DRMFrame2Impl_SetSceneFogParams,
1011 IDirect3DRMFrame2Impl_SetColor,
1012 IDirect3DRMFrame2Impl_SetColorRGB,
1013 IDirect3DRMFrame2Impl_GetZbufferMode,
1014 IDirect3DRMFrame2Impl_SetMaterialMode,
1015 IDirect3DRMFrame2Impl_SetOrientation,
1016 IDirect3DRMFrame2Impl_SetPosition,
1017 IDirect3DRMFrame2Impl_SetRotation,
1018 IDirect3DRMFrame2Impl_SetSortMode,
1019 IDirect3DRMFrame2Impl_SetTexture,
1020 IDirect3DRMFrame2Impl_SetTextureTopology,
1021 IDirect3DRMFrame2Impl_SetVelocity,
1022 IDirect3DRMFrame2Impl_SetZbufferMode,
1023 IDirect3DRMFrame2Impl_Transform,
1024 /*** IDirect3DRMFrame2 methods ***/
1025 IDirect3DRMFrame2Impl_AddMoveCallback2,
1026 IDirect3DRMFrame2Impl_GetBox,
1027 IDirect3DRMFrame2Impl_GetBoxEnable,
1028 IDirect3DRMFrame2Impl_GetAxes,
1029 IDirect3DRMFrame2Impl_GetMaterial,
1030 IDirect3DRMFrame2Impl_GetInheritAxes,
1031 IDirect3DRMFrame2Impl_GetHierarchyBox
1034 /*** IUnknown methods ***/
1035 static HRESULT WINAPI IDirect3DRMFrame3Impl_QueryInterface(IDirect3DRMFrame3* iface,
1036 REFIID riid, void** object)
1038 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1039 return IDirect3DRMFrame_QueryInterface(&This->IDirect3DRMFrame2_iface, riid, object);
1042 static ULONG WINAPI IDirect3DRMFrame3Impl_AddRef(IDirect3DRMFrame3* iface)
1044 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1045 return IDirect3DRMFrame2_AddRef(&This->IDirect3DRMFrame2_iface);
1048 static ULONG WINAPI IDirect3DRMFrame3Impl_Release(IDirect3DRMFrame3* iface)
1050 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1051 return IDirect3DRMFrame2_Release(&This->IDirect3DRMFrame2_iface);
1054 /*** IDirect3DRMObject methods ***/
1055 static HRESULT WINAPI IDirect3DRMFrame3Impl_Clone(IDirect3DRMFrame3* iface,
1056 LPUNKNOWN unkwn, REFIID riid,
1057 LPVOID* object)
1059 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1061 FIXME("(%p/%p)->(%p, %s, %p): stub\n", iface, This, unkwn, debugstr_guid(riid), object);
1063 return E_NOTIMPL;
1066 static HRESULT WINAPI IDirect3DRMFrame3Impl_AddDestroyCallback(IDirect3DRMFrame3* iface,
1067 D3DRMOBJECTCALLBACK cb,
1068 LPVOID argument)
1070 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1072 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, argument);
1074 return E_NOTIMPL;
1077 static HRESULT WINAPI IDirect3DRMFrame3Impl_DeleteDestroyCallback(IDirect3DRMFrame3* iface,
1078 D3DRMOBJECTCALLBACK cb,
1079 LPVOID argument)
1081 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1083 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, argument);
1085 return E_NOTIMPL;
1088 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetAppData(IDirect3DRMFrame3* iface,
1089 DWORD data)
1091 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1093 FIXME("(%p/%p)->(%u): stub\n", iface, This, data);
1095 return E_NOTIMPL;
1098 static DWORD WINAPI IDirect3DRMFrame3Impl_GetAppData(IDirect3DRMFrame3* iface)
1100 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1102 FIXME("(%p/%p)->(): stub\n", iface, This);
1104 return 0;
1107 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetName(IDirect3DRMFrame3* iface, LPCSTR name)
1109 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1111 FIXME("(%p/%p)->(%s): stub\n", iface, This, name);
1113 return E_NOTIMPL;
1116 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetName(IDirect3DRMFrame3* iface,
1117 LPDWORD size, LPSTR name)
1119 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1121 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, size, name);
1123 return E_NOTIMPL;
1126 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetClassName(IDirect3DRMFrame3* iface,
1127 LPDWORD size, LPSTR name)
1129 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1131 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, size, name);
1133 return E_NOTIMPL;
1136 /*** IDirect3DRMFrame methods ***/
1137 static HRESULT WINAPI IDirect3DRMFrame3Impl_AddChild(IDirect3DRMFrame3* iface,
1138 LPDIRECT3DRMFRAME3 child)
1140 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1141 IDirect3DRMFrameImpl *child_obj = unsafe_impl_from_IDirect3DRMFrame3(child);
1143 TRACE("(%p/%p)->(%p)\n", iface, This, child);
1145 if (!child_obj)
1146 return D3DRMERR_BADOBJECT;
1148 if (child_obj->parent)
1150 IDirect3DRMFrame3* parent = &child_obj->parent->IDirect3DRMFrame3_iface;
1152 if (parent == iface)
1154 /* Passed frame is already a child so return success */
1155 return D3DRM_OK;
1157 else
1159 /* Remove parent and continue */
1160 IDirect3DRMFrame3_DeleteChild(parent, child);
1164 if ((This->nb_children + 1) > This->children_capacity)
1166 ULONG new_capacity;
1167 IDirect3DRMFrame3** children;
1169 if (!This->children_capacity)
1171 new_capacity = 16;
1172 children = HeapAlloc(GetProcessHeap(), 0, new_capacity * sizeof(IDirect3DRMFrame3*));
1174 else
1176 new_capacity = This->children_capacity * 2;
1177 children = HeapReAlloc(GetProcessHeap(), 0, This->children, new_capacity * sizeof(IDirect3DRMFrame3*));
1180 if (!children)
1181 return E_OUTOFMEMORY;
1183 This->children_capacity = new_capacity;
1184 This->children = children;
1187 This->children[This->nb_children++] = child;
1188 IDirect3DRMFrame3_AddRef(child);
1189 child_obj->parent = This;
1191 return D3DRM_OK;
1194 static HRESULT WINAPI IDirect3DRMFrame3Impl_AddLight(IDirect3DRMFrame3* iface,
1195 LPDIRECT3DRMLIGHT light)
1197 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1198 ULONG i;
1199 IDirect3DRMLight** lights;
1201 TRACE("(%p/%p)->(%p)\n", iface, This, light);
1203 if (!light)
1204 return D3DRMERR_BADOBJECT;
1206 /* Check if already existing and return gracefully without increasing ref count */
1207 for (i = 0; i < This->nb_lights; i++)
1208 if (This->lights[i] == light)
1209 return D3DRM_OK;
1211 if ((This->nb_lights + 1) > This->lights_capacity)
1213 ULONG new_capacity;
1215 if (!This->lights_capacity)
1217 new_capacity = 16;
1218 lights = HeapAlloc(GetProcessHeap(), 0, new_capacity * sizeof(IDirect3DRMLight*));
1220 else
1222 new_capacity = This->lights_capacity * 2;
1223 lights = HeapReAlloc(GetProcessHeap(), 0, This->lights, new_capacity * sizeof(IDirect3DRMLight*));
1226 if (!lights)
1227 return E_OUTOFMEMORY;
1229 This->lights_capacity = new_capacity;
1230 This->lights = lights;
1233 This->lights[This->nb_lights++] = light;
1234 IDirect3DRMLight_AddRef(light);
1236 return D3DRM_OK;
1239 static HRESULT WINAPI IDirect3DRMFrame3Impl_AddMoveCallback(IDirect3DRMFrame3* iface,
1240 D3DRMFRAME3MOVECALLBACK cb, VOID *arg,
1241 DWORD flags)
1243 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1245 FIXME("(%p/%p)->(%p,%p,%u): stub\n", iface, This, cb, arg, flags);
1247 return E_NOTIMPL;
1250 static HRESULT WINAPI IDirect3DRMFrame3Impl_AddTransform(IDirect3DRMFrame3* iface,
1251 D3DRMCOMBINETYPE type,
1252 D3DRMMATRIX4D matrix)
1254 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1256 TRACE("(%p/%p)->(%u,%p)\n", iface, This, type, matrix);
1258 switch (type)
1260 case D3DRMCOMBINE_REPLACE:
1261 memcpy(&This->transform[0][0], &matrix[0][0], sizeof(D3DRMMATRIX4D));
1262 break;
1264 case D3DRMCOMBINE_BEFORE:
1265 FIXME("D3DRMCOMBINE_BEFORE not supported yed\n");
1266 break;
1268 case D3DRMCOMBINE_AFTER:
1269 FIXME("D3DRMCOMBINE_AFTER not supported yed\n");
1270 break;
1272 default:
1273 WARN("Unknown Combine Type %u\n", type);
1274 return D3DRMERR_BADVALUE;
1277 return S_OK;
1280 static HRESULT WINAPI IDirect3DRMFrame3Impl_AddTranslation(IDirect3DRMFrame3* iface,
1281 D3DRMCOMBINETYPE type,
1282 D3DVALUE x, D3DVALUE y, D3DVALUE z)
1284 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1286 FIXME("(%p/%p)->(%u,%f,%f,%f): stub\n", iface, This, type, x, y, z);
1288 return E_NOTIMPL;
1291 static HRESULT WINAPI IDirect3DRMFrame3Impl_AddScale(IDirect3DRMFrame3* iface,
1292 D3DRMCOMBINETYPE type,
1293 D3DVALUE sx, D3DVALUE sy, D3DVALUE sz)
1295 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1297 FIXME("(%p/%p)->(%u,%f,%f,%f): stub\n", iface, This, type, sx, sy, sz);
1299 return E_NOTIMPL;
1302 static HRESULT WINAPI IDirect3DRMFrame3Impl_AddRotation(IDirect3DRMFrame3* iface,
1303 D3DRMCOMBINETYPE type,
1304 D3DVALUE x, D3DVALUE y, D3DVALUE z,
1305 D3DVALUE theta)
1307 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1309 FIXME("(%p/%p)->(%u,%f,%f,%f,%f): stub\n", iface, This, type, x, y, z, theta);
1311 return E_NOTIMPL;
1314 static HRESULT WINAPI IDirect3DRMFrame3Impl_AddVisual(IDirect3DRMFrame3* iface, LPUNKNOWN vis)
1316 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1317 ULONG i;
1318 IDirect3DRMVisual** visuals;
1320 TRACE("(%p/%p)->(%p)\n", iface, This, vis);
1322 if (!vis)
1323 return D3DRMERR_BADOBJECT;
1325 /* Check if already existing and return gracefully without increasing ref count */
1326 for (i = 0; i < This->nb_visuals; i++)
1327 if (This->visuals[i] == (IDirect3DRMVisual*)vis)
1328 return D3DRM_OK;
1330 if ((This->nb_visuals + 1) > This->visuals_capacity)
1332 ULONG new_capacity;
1334 if (!This->visuals_capacity)
1336 new_capacity = 16;
1337 visuals = HeapAlloc(GetProcessHeap(), 0, new_capacity * sizeof(IDirect3DRMVisual*));
1339 else
1341 new_capacity = This->visuals_capacity * 2;
1342 visuals = HeapReAlloc(GetProcessHeap(), 0, This->visuals, new_capacity * sizeof(IDirect3DRMVisual*));
1345 if (!visuals)
1346 return E_OUTOFMEMORY;
1348 This->visuals_capacity = new_capacity;
1349 This->visuals = visuals;
1352 This->visuals[This->nb_visuals++] = (IDirect3DRMVisual*)vis;
1353 IDirect3DRMVisual_AddRef(vis);
1355 return D3DRM_OK;
1358 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetChildren(IDirect3DRMFrame3* iface,
1359 LPDIRECT3DRMFRAMEARRAY *children)
1361 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1362 IDirect3DRMFrameArrayImpl* obj;
1363 HRESULT hr;
1365 TRACE("(%p/%p)->(%p)\n", iface, This, children);
1367 if (!children)
1368 return D3DRMERR_BADVALUE;
1370 hr = Direct3DRMFrameArray_create(children);
1372 if (hr != D3DRM_OK)
1373 return hr;
1375 obj = (IDirect3DRMFrameArrayImpl*)*children;
1377 obj->size = This->nb_children;
1378 if (This->nb_children)
1380 ULONG i;
1381 obj->frames = HeapAlloc(GetProcessHeap(), 0, This->nb_children * sizeof(LPDIRECT3DRMFRAME));
1382 if (!obj->frames)
1383 return E_OUTOFMEMORY;
1384 for (i = 0; i < This->nb_children; i++)
1385 IDirect3DRMFrame3_QueryInterface(This->children[i], &IID_IDirect3DRMFrame, (void**)&obj->frames[i]);
1388 return D3DRM_OK;
1391 static D3DCOLOR WINAPI IDirect3DRMFrame3Impl_GetColor(IDirect3DRMFrame3* iface)
1393 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1395 FIXME("(%p/%p)->(): stub\n", iface, This);
1397 return 0;
1400 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetLights(IDirect3DRMFrame3* iface,
1401 LPDIRECT3DRMLIGHTARRAY *lights)
1403 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1405 FIXME("(%p/%p)->(%p): stub\n", iface, This, lights);
1407 return E_NOTIMPL;
1410 static D3DRMMATERIALMODE WINAPI IDirect3DRMFrame3Impl_GetMaterialMode(IDirect3DRMFrame3* iface)
1412 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1414 FIXME("(%p/%p)->(): stub\n", iface, This);
1416 return D3DRMMATERIAL_FROMPARENT;
1419 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetParent(IDirect3DRMFrame3* iface,
1420 LPDIRECT3DRMFRAME3 * frame)
1422 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1424 TRACE("(%p/%p)->(%p)\n", iface, This, frame);
1426 if (!frame)
1427 return D3DRMERR_BADVALUE;
1429 if (This->parent)
1431 *frame = &This->parent->IDirect3DRMFrame3_iface;
1432 IDirect3DRMFrame_AddRef(*frame);
1434 else
1436 *frame = NULL;
1439 return D3DRM_OK;
1442 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetPosition(IDirect3DRMFrame3* iface,
1443 LPDIRECT3DRMFRAME3 reference,
1444 LPD3DVECTOR return_position)
1446 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1448 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, reference, return_position);
1450 return E_NOTIMPL;
1453 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetRotation(IDirect3DRMFrame3* iface,
1454 LPDIRECT3DRMFRAME3 reference,
1455 LPD3DVECTOR axis, LPD3DVALUE return_theta)
1457 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1459 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, reference, axis, return_theta);
1461 return E_NOTIMPL;
1464 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetScene(IDirect3DRMFrame3* iface,
1465 LPDIRECT3DRMFRAME3 * frame)
1467 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1469 FIXME("(%p/%p)->(%p): stub\n", iface, This, frame);
1471 return E_NOTIMPL;
1474 static D3DRMSORTMODE WINAPI IDirect3DRMFrame3Impl_GetSortMode(IDirect3DRMFrame3* iface)
1476 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1478 FIXME("(%p/%p)->(): stub\n", iface, This);
1480 return D3DRMSORT_FROMPARENT;
1483 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetTexture(IDirect3DRMFrame3* iface,
1484 LPDIRECT3DRMTEXTURE3 * tex)
1486 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1488 FIXME("(%p/%p)->(%p): stub\n", iface, This, tex);
1490 return E_NOTIMPL;
1493 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetTransform(IDirect3DRMFrame3* iface,
1494 LPDIRECT3DRMFRAME3 reference,
1495 D3DRMMATRIX4D return_matrix)
1497 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1499 TRACE("(%p/%p)->(%p,%p)\n", iface, This, reference, return_matrix);
1501 if (reference)
1502 FIXME("Specifying a frame as the root of the scene different from the current root frame is not supported yet\n");
1504 memcpy(&return_matrix[0][0], &This->transform[0][0], sizeof(D3DRMMATRIX4D));
1506 return D3DRM_OK;
1509 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetVelocity(IDirect3DRMFrame3* iface,
1510 LPDIRECT3DRMFRAME3 reference,
1511 LPD3DVECTOR return_velocity,
1512 BOOL with_rotation)
1514 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1516 FIXME("(%p/%p)->(%p,%p,%d): stub\n", iface, This, reference, return_velocity, with_rotation);
1518 return E_NOTIMPL;
1521 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetOrientation(IDirect3DRMFrame3* iface,
1522 LPDIRECT3DRMFRAME3 reference,
1523 LPD3DVECTOR dir, LPD3DVECTOR up)
1525 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1527 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, reference, dir, up);
1529 return E_NOTIMPL;
1532 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetVisuals(IDirect3DRMFrame3* iface, LPDWORD num,
1533 LPUNKNOWN *visuals)
1535 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1537 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, num, visuals);
1539 return E_NOTIMPL;
1542 static HRESULT WINAPI IDirect3DRMFrame3Impl_InverseTransform(IDirect3DRMFrame3* iface,
1543 D3DVECTOR *d, D3DVECTOR *s)
1545 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1547 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, d, s);
1549 return E_NOTIMPL;
1552 static HRESULT WINAPI IDirect3DRMFrame3Impl_Load(IDirect3DRMFrame3* iface, LPVOID filename,
1553 LPVOID name, D3DRMLOADOPTIONS loadflags,
1554 D3DRMLOADTEXTURE3CALLBACK cb, LPVOID lpArg)
1556 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1558 FIXME("(%p/%p)->(%p,%p,%u,%p,%p): stub\n", iface, This, filename, name, loadflags, cb, lpArg);
1560 return E_NOTIMPL;
1563 static HRESULT WINAPI IDirect3DRMFrame3Impl_LookAt(IDirect3DRMFrame3* iface,
1564 LPDIRECT3DRMFRAME3 target,
1565 LPDIRECT3DRMFRAME3 reference,
1566 D3DRMFRAMECONSTRAINT constraint)
1568 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1570 FIXME("(%p/%p)->(%p,%p,%u): stub\n", iface, This, target, reference, constraint);
1572 return E_NOTIMPL;
1575 static HRESULT WINAPI IDirect3DRMFrame3Impl_Move(IDirect3DRMFrame3* iface, D3DVALUE delta)
1577 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1579 FIXME("(%p/%p)->(%f): stub\n", iface, This, delta);
1581 return E_NOTIMPL;
1584 static HRESULT WINAPI IDirect3DRMFrame3Impl_DeleteChild(IDirect3DRMFrame3* iface,
1585 LPDIRECT3DRMFRAME3 frame)
1587 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1588 IDirect3DRMFrameImpl *frame_obj = unsafe_impl_from_IDirect3DRMFrame3(frame);
1589 ULONG i;
1591 TRACE("(%p/%p)->(%p)\n", iface, This, frame);
1593 if (!frame_obj)
1594 return D3DRMERR_BADOBJECT;
1596 /* Check if child exists */
1597 for (i = 0; i < This->nb_children; i++)
1598 if (This->children[i] == frame)
1599 break;
1601 if (i == This->nb_children)
1602 return D3DRMERR_BADVALUE;
1604 memmove(This->children + i, This->children + i + 1, sizeof(IDirect3DRMFrame3*) * (This->nb_children - 1 - i));
1605 IDirect3DRMFrame3_Release(frame);
1606 frame_obj->parent = NULL;
1607 This->nb_children--;
1609 return D3DRM_OK;
1612 static HRESULT WINAPI IDirect3DRMFrame3Impl_DeleteLight(IDirect3DRMFrame3* iface,
1613 LPDIRECT3DRMLIGHT light)
1615 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1616 ULONG i;
1618 TRACE("(%p/%p)->(%p)\n", iface, This, light);
1620 if (!light)
1621 return D3DRMERR_BADOBJECT;
1623 /* Check if visual exists */
1624 for (i = 0; i < This->nb_lights; i++)
1625 if (This->lights[i] == light)
1626 break;
1628 if (i == This->nb_lights)
1629 return D3DRMERR_BADVALUE;
1631 memmove(This->lights + i, This->lights + i + 1, sizeof(IDirect3DRMLight*) * (This->nb_lights - 1 - i));
1632 IDirect3DRMLight_Release(light);
1633 This->nb_lights--;
1635 return D3DRM_OK;
1638 static HRESULT WINAPI IDirect3DRMFrame3Impl_DeleteMoveCallback(IDirect3DRMFrame3* iface,
1639 D3DRMFRAME3MOVECALLBACK cb,
1640 VOID *arg)
1642 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1644 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, cb, arg);
1646 return E_NOTIMPL;
1649 static HRESULT WINAPI IDirect3DRMFrame3Impl_DeleteVisual(IDirect3DRMFrame3* iface, LPUNKNOWN vis)
1651 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1652 ULONG i;
1654 TRACE("(%p/%p)->(%p)\n", iface, This, vis);
1656 if (!vis)
1657 return D3DRMERR_BADOBJECT;
1659 /* Check if visual exists */
1660 for (i = 0; i < This->nb_visuals; i++)
1661 if (This->visuals[i] == (IDirect3DRMVisual*)vis)
1662 break;
1664 if (i == This->nb_visuals)
1665 return D3DRMERR_BADVALUE;
1667 memmove(This->visuals + i, This->visuals + i + 1, sizeof(IDirect3DRMVisual*) * (This->nb_visuals - 1 - i));
1668 IDirect3DRMVisual_Release(vis);
1669 This->nb_visuals--;
1671 return D3DRM_OK;
1674 static D3DCOLOR WINAPI IDirect3DRMFrame3Impl_GetSceneBackground(IDirect3DRMFrame3* iface)
1676 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1678 FIXME("(%p/%p)->(): stub\n", iface, This);
1680 return 0;
1683 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetSceneBackgroundDepth(IDirect3DRMFrame3* iface,
1684 LPDIRECTDRAWSURFACE * surface)
1686 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1688 FIXME("(%p/%p)->(%p): stub\n", iface, This, surface);
1690 return E_NOTIMPL;
1693 static D3DCOLOR WINAPI IDirect3DRMFrame3Impl_GetSceneFogColor(IDirect3DRMFrame3* iface)
1695 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1697 FIXME("(%p/%p)->(): stub\n", iface, This);
1699 return 0;
1702 static BOOL WINAPI IDirect3DRMFrame3Impl_GetSceneFogEnable(IDirect3DRMFrame3* iface)
1704 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1706 FIXME("(%p/%p)->(): stub\n", iface, This);
1708 return FALSE;
1711 static D3DRMFOGMODE WINAPI IDirect3DRMFrame3Impl_GetSceneFogMode(IDirect3DRMFrame3* iface)
1713 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1715 FIXME("(%p/%p)->(): stub\n", iface, This);
1717 return D3DRMFOG_LINEAR;
1720 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetSceneFogParams(IDirect3DRMFrame3* iface,
1721 D3DVALUE *return_start,
1722 D3DVALUE *return_end,
1723 D3DVALUE *return_density)
1725 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1727 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, return_start, return_end, return_density);
1729 return E_NOTIMPL;
1732 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetSceneBackground(IDirect3DRMFrame3* iface,
1733 D3DCOLOR color)
1735 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1737 FIXME("(%p/%p)->(%u): stub\n", iface, This, color);
1739 return E_NOTIMPL;
1742 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetSceneBackgroundRGB(IDirect3DRMFrame3* iface,
1743 D3DVALUE red, D3DVALUE green,
1744 D3DVALUE blue)
1746 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1748 FIXME("(%p/%p)->(%f,%f,%f): stub\n", iface, This, red, green, blue);
1750 return E_NOTIMPL;
1753 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetSceneBackgroundDepth(IDirect3DRMFrame3* iface,
1754 LPDIRECTDRAWSURFACE surface)
1756 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1758 FIXME("(%p/%p)->(%p): stub\n", iface, This, surface);
1760 return E_NOTIMPL;
1763 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetSceneBackgroundImage(IDirect3DRMFrame3* iface,
1764 LPDIRECT3DRMTEXTURE3 texture)
1766 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1768 FIXME("(%p/%p)->(%p): stub\n", iface, This, texture);
1770 return E_NOTIMPL;
1773 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetSceneFogEnable(IDirect3DRMFrame3* iface, BOOL enable)
1775 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1777 FIXME("(%p/%p)->(%d): stub\n", iface, This, enable);
1779 return E_NOTIMPL;
1782 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetSceneFogColor(IDirect3DRMFrame3* iface,
1783 D3DCOLOR color)
1785 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1787 FIXME("(%p/%p)->(%u): stub\n", iface, This, color);
1789 return E_NOTIMPL;
1792 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetSceneFogMode(IDirect3DRMFrame3* iface,
1793 D3DRMFOGMODE mode)
1795 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1797 FIXME("(%p/%p)->(%u): stub\n", iface, This, mode);
1799 return E_NOTIMPL;
1802 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetSceneFogParams(IDirect3DRMFrame3* iface,
1803 D3DVALUE start, D3DVALUE end,
1804 D3DVALUE density)
1806 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1808 FIXME("(%p/%p)->(%f,%f,%f): stub\n", iface, This, start, end, density);
1810 return E_NOTIMPL;
1813 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetColor(IDirect3DRMFrame3* iface, D3DCOLOR color)
1815 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1817 FIXME("(%p/%p)->(%u): stub\n", iface, This, color);
1819 return E_NOTIMPL;
1822 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetColorRGB(IDirect3DRMFrame3* iface, D3DVALUE red,
1823 D3DVALUE green, D3DVALUE blue)
1825 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1827 FIXME("(%p/%p)->(%f,%f,%f): stub\n", iface, This, red, green, blue);
1829 return E_NOTIMPL;
1832 static D3DRMZBUFFERMODE WINAPI IDirect3DRMFrame3Impl_GetZbufferMode(IDirect3DRMFrame3* iface)
1834 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1836 FIXME("(%p/%p)->(): stub\n", iface, This);
1838 return D3DRMZBUFFER_FROMPARENT;
1841 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetMaterialMode(IDirect3DRMFrame3* iface,
1842 D3DRMMATERIALMODE mode)
1844 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1846 FIXME("(%p/%p)->(%u): stub\n", iface, This, mode);
1848 return E_NOTIMPL;
1851 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetOrientation(IDirect3DRMFrame3* iface,
1852 LPDIRECT3DRMFRAME3 reference,
1853 D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
1854 D3DVALUE ux, D3DVALUE uy, D3DVALUE uz )
1856 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1858 FIXME("(%p/%p)->(%p,%f,%f,%f,%f,%f,%f): stub\n", iface, This, reference,
1859 dx, dy, dz, ux, uy, uz);
1861 return E_NOTIMPL;
1864 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetPosition(IDirect3DRMFrame3* iface,
1865 LPDIRECT3DRMFRAME3 reference,
1866 D3DVALUE x, D3DVALUE y, D3DVALUE z)
1868 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1870 FIXME("(%p/%p)->(%p,%f,%f,%f): stub\n", iface, This, reference, x, y, z);
1872 return E_NOTIMPL;
1875 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetRotation(IDirect3DRMFrame3* iface,
1876 LPDIRECT3DRMFRAME3 reference,
1877 D3DVALUE x, D3DVALUE y, D3DVALUE z,
1878 D3DVALUE theta)
1880 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1882 FIXME("(%p/%p)->(%p,%f,%f,%f,%f): stub\n", iface, This, reference, x, y, z, theta);
1884 return E_NOTIMPL;
1887 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetSortMode(IDirect3DRMFrame3* iface,
1888 D3DRMSORTMODE mode)
1890 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1892 FIXME("(%p/%p)->(%u): stub\n", iface, This, mode);
1894 return E_NOTIMPL;
1897 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetTexture(IDirect3DRMFrame3* iface,
1898 LPDIRECT3DRMTEXTURE3 texture)
1900 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1902 FIXME("(%p/%p)->(%p): stub\n", iface, This, texture);
1904 return E_NOTIMPL;
1907 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetVelocity(IDirect3DRMFrame3* iface,
1908 LPDIRECT3DRMFRAME3 reference,
1909 D3DVALUE x, D3DVALUE y, D3DVALUE z,
1910 BOOL with_rotation)
1912 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1914 FIXME("(%p/%p)->(%p,%f,%f,%f,%d): stub\n", iface, This, reference, x, y, z, with_rotation);
1916 return E_NOTIMPL;
1919 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetZbufferMode(IDirect3DRMFrame3* iface,
1920 D3DRMZBUFFERMODE mode)
1922 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1924 FIXME("(%p/%p)->(%u): stub\n", iface, This, mode);
1926 return E_NOTIMPL;
1929 static HRESULT WINAPI IDirect3DRMFrame3Impl_Transform(IDirect3DRMFrame3* iface, D3DVECTOR *d,
1930 D3DVECTOR *s)
1932 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1934 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, d, s);
1936 return E_NOTIMPL;
1939 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetBox(IDirect3DRMFrame3* iface, LPD3DRMBOX box)
1941 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1943 FIXME("(%p/%p)->(%p): stub\n", iface, This, box);
1945 return E_NOTIMPL;
1948 static BOOL WINAPI IDirect3DRMFrame3Impl_GetBoxEnable(IDirect3DRMFrame3* iface)
1950 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1952 FIXME("(%p/%p)->(): stub\n", iface, This);
1954 return E_NOTIMPL;
1957 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetAxes(IDirect3DRMFrame3* iface,
1958 LPD3DVECTOR dir, LPD3DVECTOR up)
1960 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1962 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, dir, up);
1964 return E_NOTIMPL;
1967 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetMaterial(IDirect3DRMFrame3* iface,
1968 LPDIRECT3DRMMATERIAL2 *material)
1970 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1972 FIXME("(%p/%p)->(%p): stub\n", iface, This, material);
1974 return E_NOTIMPL;
1977 static BOOL WINAPI IDirect3DRMFrame3Impl_GetInheritAxes(IDirect3DRMFrame3* iface)
1979 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1981 FIXME("(%p/%p)->(): stub\n", iface, This);
1983 return E_NOTIMPL;
1986 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetHierarchyBox(IDirect3DRMFrame3* iface,
1987 LPD3DRMBOX box)
1989 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1991 FIXME("(%p/%p)->(%p): stub\n", iface, This, box);
1993 return E_NOTIMPL;
1996 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetBox(IDirect3DRMFrame3* iface, LPD3DRMBOX box)
1998 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2000 FIXME("(%p/%p)->(%p): stub\n", iface, This, box);
2002 return E_NOTIMPL;
2005 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetBoxEnable(IDirect3DRMFrame3* iface, BOOL enable)
2007 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2009 FIXME("(%p/%p)->(%u): stub\n", iface, This, enable);
2011 return E_NOTIMPL;
2014 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetAxes(IDirect3DRMFrame3* iface,
2015 D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
2016 D3DVALUE ux, D3DVALUE uy, D3DVALUE uz)
2018 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2020 FIXME("(%p/%p)->(%f,%f,%f,%f,%f,%f): stub\n", iface, This, dx, dy, dz, ux, uy, uz);
2022 return E_NOTIMPL;
2025 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetInheritAxes(IDirect3DRMFrame3* iface,
2026 BOOL inherit_from_parent)
2028 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2030 FIXME("(%p/%p)->(%u): stub\n", iface, This, inherit_from_parent);
2032 return E_NOTIMPL;
2035 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetMaterial(IDirect3DRMFrame3* iface,
2036 LPDIRECT3DRMMATERIAL2 material)
2038 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2040 FIXME("(%p/%p)->(%p): stub\n", iface, This, material);
2042 return E_NOTIMPL;
2045 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetQuaternion(IDirect3DRMFrame3* iface,
2046 LPDIRECT3DRMFRAME3 reference,
2047 D3DRMQUATERNION *q)
2049 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2051 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, reference, q);
2053 return E_NOTIMPL;
2056 static HRESULT WINAPI IDirect3DRMFrame3Impl_RayPick(IDirect3DRMFrame3* iface,
2057 LPDIRECT3DRMFRAME3 reference, LPD3DRMRAY ray,
2058 DWORD flags,
2059 LPDIRECT3DRMPICKED2ARRAY *return_visuals)
2061 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2063 FIXME("(%p/%p)->(%p,%p,%u,%p): stub\n", iface, This, reference, ray, flags, return_visuals);
2065 return E_NOTIMPL;
2068 static HRESULT WINAPI IDirect3DRMFrame3Impl_Save(IDirect3DRMFrame3* iface, LPCSTR filename,
2069 D3DRMXOFFORMAT d3dFormat,
2070 D3DRMSAVEOPTIONS d3dSaveFlags)
2072 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2074 FIXME("(%p/%p)->(%p,%u,%u): stub\n", iface, This, filename, d3dFormat, d3dSaveFlags);
2076 return E_NOTIMPL;
2079 static HRESULT WINAPI IDirect3DRMFrame3Impl_TransformVectors(IDirect3DRMFrame3* iface,
2080 LPDIRECT3DRMFRAME3 reference,
2081 DWORD num, LPD3DVECTOR dst,
2082 LPD3DVECTOR src)
2084 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2086 FIXME("(%p/%p)->(%p,%u,%p,%p): stub\n", iface, This, reference, num, dst, src);
2088 return E_NOTIMPL;
2091 static HRESULT WINAPI IDirect3DRMFrame3Impl_InverseTransformVectors(IDirect3DRMFrame3* iface,
2092 LPDIRECT3DRMFRAME3 reference,
2093 DWORD num, LPD3DVECTOR dst,
2094 LPD3DVECTOR src)
2096 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2098 FIXME("(%p/%p)->(%p,%u,%p,%p): stub\n", iface, This, reference, num, dst, src);
2100 return E_NOTIMPL;
2103 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetTraversalOptions(IDirect3DRMFrame3* iface,
2104 DWORD flags)
2106 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2108 FIXME("(%p/%p)->(%u): stub\n", iface, This, flags);
2110 return E_NOTIMPL;
2113 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetTraversalOptions(IDirect3DRMFrame3* iface,
2114 LPDWORD flags)
2116 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2118 FIXME("(%p/%p)->(%p): stub\n", iface, This, flags);
2120 return E_NOTIMPL;
2123 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetSceneFogMethod(IDirect3DRMFrame3* iface,
2124 DWORD flags)
2126 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2128 FIXME("(%p/%p)->(%u): stub\n", iface, This, flags);
2130 return E_NOTIMPL;
2133 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetSceneFogMethod(IDirect3DRMFrame3* iface,
2134 LPDWORD flags)
2136 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2138 FIXME("(%p/%p)->(%p): stub\n", iface, This, flags);
2140 return E_NOTIMPL;
2143 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetMaterialOverride(IDirect3DRMFrame3* iface,
2144 LPD3DRMMATERIALOVERRIDE override)
2146 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2148 FIXME("(%p/%p)->(%p): stub\n", iface, This, override);
2150 return E_NOTIMPL;
2153 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetMaterialOverride(IDirect3DRMFrame3* iface,
2154 LPD3DRMMATERIALOVERRIDE override)
2156 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2158 FIXME("(%p/%p)->(%p): stub\n", iface, This, override);
2160 return E_NOTIMPL;
2163 static const struct IDirect3DRMFrame3Vtbl Direct3DRMFrame3_Vtbl =
2165 /*** IUnknown methods ***/
2166 IDirect3DRMFrame3Impl_QueryInterface,
2167 IDirect3DRMFrame3Impl_AddRef,
2168 IDirect3DRMFrame3Impl_Release,
2169 /*** IDirect3DRMObject methods ***/
2170 IDirect3DRMFrame3Impl_Clone,
2171 IDirect3DRMFrame3Impl_AddDestroyCallback,
2172 IDirect3DRMFrame3Impl_DeleteDestroyCallback,
2173 IDirect3DRMFrame3Impl_SetAppData,
2174 IDirect3DRMFrame3Impl_GetAppData,
2175 IDirect3DRMFrame3Impl_SetName,
2176 IDirect3DRMFrame3Impl_GetName,
2177 IDirect3DRMFrame3Impl_GetClassName,
2178 /*** IDirect3DRMFrame3 methods ***/
2179 IDirect3DRMFrame3Impl_AddChild,
2180 IDirect3DRMFrame3Impl_AddLight,
2181 IDirect3DRMFrame3Impl_AddMoveCallback,
2182 IDirect3DRMFrame3Impl_AddTransform,
2183 IDirect3DRMFrame3Impl_AddTranslation,
2184 IDirect3DRMFrame3Impl_AddScale,
2185 IDirect3DRMFrame3Impl_AddRotation,
2186 IDirect3DRMFrame3Impl_AddVisual,
2187 IDirect3DRMFrame3Impl_GetChildren,
2188 IDirect3DRMFrame3Impl_GetColor,
2189 IDirect3DRMFrame3Impl_GetLights,
2190 IDirect3DRMFrame3Impl_GetMaterialMode,
2191 IDirect3DRMFrame3Impl_GetParent,
2192 IDirect3DRMFrame3Impl_GetPosition,
2193 IDirect3DRMFrame3Impl_GetRotation,
2194 IDirect3DRMFrame3Impl_GetScene,
2195 IDirect3DRMFrame3Impl_GetSortMode,
2196 IDirect3DRMFrame3Impl_GetTexture,
2197 IDirect3DRMFrame3Impl_GetTransform,
2198 IDirect3DRMFrame3Impl_GetVelocity,
2199 IDirect3DRMFrame3Impl_GetOrientation,
2200 IDirect3DRMFrame3Impl_GetVisuals,
2201 IDirect3DRMFrame3Impl_InverseTransform,
2202 IDirect3DRMFrame3Impl_Load,
2203 IDirect3DRMFrame3Impl_LookAt,
2204 IDirect3DRMFrame3Impl_Move,
2205 IDirect3DRMFrame3Impl_DeleteChild,
2206 IDirect3DRMFrame3Impl_DeleteLight,
2207 IDirect3DRMFrame3Impl_DeleteMoveCallback,
2208 IDirect3DRMFrame3Impl_DeleteVisual,
2209 IDirect3DRMFrame3Impl_GetSceneBackground,
2210 IDirect3DRMFrame3Impl_GetSceneBackgroundDepth,
2211 IDirect3DRMFrame3Impl_GetSceneFogColor,
2212 IDirect3DRMFrame3Impl_GetSceneFogEnable,
2213 IDirect3DRMFrame3Impl_GetSceneFogMode,
2214 IDirect3DRMFrame3Impl_GetSceneFogParams,
2215 IDirect3DRMFrame3Impl_SetSceneBackground,
2216 IDirect3DRMFrame3Impl_SetSceneBackgroundRGB,
2217 IDirect3DRMFrame3Impl_SetSceneBackgroundDepth,
2218 IDirect3DRMFrame3Impl_SetSceneBackgroundImage,
2219 IDirect3DRMFrame3Impl_SetSceneFogEnable,
2220 IDirect3DRMFrame3Impl_SetSceneFogColor,
2221 IDirect3DRMFrame3Impl_SetSceneFogMode,
2222 IDirect3DRMFrame3Impl_SetSceneFogParams,
2223 IDirect3DRMFrame3Impl_SetColor,
2224 IDirect3DRMFrame3Impl_SetColorRGB,
2225 IDirect3DRMFrame3Impl_GetZbufferMode,
2226 IDirect3DRMFrame3Impl_SetMaterialMode,
2227 IDirect3DRMFrame3Impl_SetOrientation,
2228 IDirect3DRMFrame3Impl_SetPosition,
2229 IDirect3DRMFrame3Impl_SetRotation,
2230 IDirect3DRMFrame3Impl_SetSortMode,
2231 IDirect3DRMFrame3Impl_SetTexture,
2232 IDirect3DRMFrame3Impl_SetVelocity,
2233 IDirect3DRMFrame3Impl_SetZbufferMode,
2234 IDirect3DRMFrame3Impl_Transform,
2235 IDirect3DRMFrame3Impl_GetBox,
2236 IDirect3DRMFrame3Impl_GetBoxEnable,
2237 IDirect3DRMFrame3Impl_GetAxes,
2238 IDirect3DRMFrame3Impl_GetMaterial,
2239 IDirect3DRMFrame3Impl_GetInheritAxes,
2240 IDirect3DRMFrame3Impl_GetHierarchyBox,
2241 IDirect3DRMFrame3Impl_SetBox,
2242 IDirect3DRMFrame3Impl_SetBoxEnable,
2243 IDirect3DRMFrame3Impl_SetAxes,
2244 IDirect3DRMFrame3Impl_SetInheritAxes,
2245 IDirect3DRMFrame3Impl_SetMaterial,
2246 IDirect3DRMFrame3Impl_SetQuaternion,
2247 IDirect3DRMFrame3Impl_RayPick,
2248 IDirect3DRMFrame3Impl_Save,
2249 IDirect3DRMFrame3Impl_TransformVectors,
2250 IDirect3DRMFrame3Impl_InverseTransformVectors,
2251 IDirect3DRMFrame3Impl_SetTraversalOptions,
2252 IDirect3DRMFrame3Impl_GetTraversalOptions,
2253 IDirect3DRMFrame3Impl_SetSceneFogMethod,
2254 IDirect3DRMFrame3Impl_GetSceneFogMethod,
2255 IDirect3DRMFrame3Impl_SetMaterialOverride,
2256 IDirect3DRMFrame3Impl_GetMaterialOverride
2259 static inline IDirect3DRMFrameImpl *unsafe_impl_from_IDirect3DRMFrame2(IDirect3DRMFrame2 *iface)
2261 if (!iface)
2262 return NULL;
2263 assert(iface->lpVtbl == &Direct3DRMFrame2_Vtbl);
2265 return impl_from_IDirect3DRMFrame2(iface);
2268 static inline IDirect3DRMFrameImpl *unsafe_impl_from_IDirect3DRMFrame3(IDirect3DRMFrame3 *iface)
2270 if (!iface)
2271 return NULL;
2272 assert(iface->lpVtbl == &Direct3DRMFrame3_Vtbl);
2274 return impl_from_IDirect3DRMFrame3(iface);
2277 HRESULT Direct3DRMFrame_create(REFIID riid, IUnknown* parent, IUnknown** ret_iface)
2279 IDirect3DRMFrameImpl* object;
2281 TRACE("(%s, %p, %p)\n", wine_dbgstr_guid(riid), parent, ret_iface);
2283 object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirect3DRMFrameImpl));
2284 if (!object)
2286 ERR("Out of memory\n");
2287 return E_OUTOFMEMORY;
2290 object->IDirect3DRMFrame2_iface.lpVtbl = &Direct3DRMFrame2_Vtbl;
2291 object->IDirect3DRMFrame3_iface.lpVtbl = &Direct3DRMFrame3_Vtbl;
2292 object->ref = 1;
2294 memcpy(&object->transform[0][0], &identity[0][0], sizeof(D3DRMMATRIX4D));
2296 if (IsEqualGUID(riid, &IID_IDirect3DRMFrame3))
2298 if (parent)
2299 IDirect3DRMFrame3_AddChild((IDirect3DRMFrame3*)parent, &object->IDirect3DRMFrame3_iface);
2300 *ret_iface = (IUnknown*)&object->IDirect3DRMFrame3_iface;
2302 else
2304 if (parent)
2305 IDirect3DRMFrame2_AddChild((IDirect3DRMFrame2*)parent, (IDirect3DRMFrame*)&object->IDirect3DRMFrame2_iface);
2306 *ret_iface = (IUnknown*)&object->IDirect3DRMFrame2_iface;
2309 return S_OK;
2312 /*** IUnknown methods ***/
2313 static HRESULT WINAPI IDirect3DRMFrameArrayImpl_QueryInterface(IDirect3DRMFrameArray* iface,
2314 REFIID riid, void** object)
2316 IDirect3DRMFrameArrayImpl *This = (IDirect3DRMFrameArrayImpl*)iface;
2318 TRACE("(%p/%p)->(%s, %p)\n", iface, This, debugstr_guid(riid), object);
2320 *object = NULL;
2322 if (IsEqualGUID(riid, &IID_IUnknown) ||
2323 IsEqualGUID(riid, &IID_IDirect3DRMFrameArray))
2325 *object = &This->IDirect3DRMFrameArray_iface;
2327 else
2329 FIXME("interface %s not implemented\n", debugstr_guid(riid));
2330 return E_NOINTERFACE;
2333 IDirect3DRMFrameArray_AddRef(iface);
2334 return S_OK;
2337 static ULONG WINAPI IDirect3DRMFrameArrayImpl_AddRef(IDirect3DRMFrameArray* iface)
2339 IDirect3DRMFrameArrayImpl *This = (IDirect3DRMFrameArrayImpl*)iface;
2340 ULONG ref = InterlockedIncrement(&This->ref);
2342 TRACE("(%p)->(): new ref = %u\n", This, ref);
2344 return ref;
2347 static ULONG WINAPI IDirect3DRMFrameArrayImpl_Release(IDirect3DRMFrameArray* iface)
2349 IDirect3DRMFrameArrayImpl *This = (IDirect3DRMFrameArrayImpl*)iface;
2350 ULONG ref = InterlockedDecrement(&This->ref);
2351 ULONG i;
2353 TRACE("(%p)->(): new ref = %u\n", This, ref);
2355 if (!ref)
2357 for (i = 0; i < This->size; i++)
2358 IDirect3DRMFrame_Release(This->frames[i]);
2359 HeapFree(GetProcessHeap(), 0, This->frames);
2360 HeapFree(GetProcessHeap(), 0, This);
2363 return ref;
2366 /*** IDirect3DRMArray methods ***/
2367 static DWORD WINAPI IDirect3DRMFrameArrayImpl_GetSize(IDirect3DRMFrameArray* iface)
2369 IDirect3DRMFrameArrayImpl *This = (IDirect3DRMFrameArrayImpl*)iface;
2371 TRACE("(%p)->() = %d\n", This, This->size);
2373 return This->size;
2376 /*** IDirect3DRMFrameArray methods ***/
2377 static HRESULT WINAPI IDirect3DRMFrameArrayImpl_GetElement(IDirect3DRMFrameArray* iface, DWORD index, LPDIRECT3DRMFRAME* frame)
2379 IDirect3DRMFrameArrayImpl *This = (IDirect3DRMFrameArrayImpl*)iface;
2381 TRACE("(%p)->(%u, %p)\n", This, index, frame);
2383 if (!frame)
2384 return D3DRMERR_BADVALUE;
2386 *frame = NULL;
2388 if (index >= This->size)
2389 return D3DRMERR_BADVALUE;
2391 IDirect3DRMFrame_AddRef(This->frames[index]);
2392 *frame = This->frames[index];
2394 return D3DRM_OK;
2397 static const struct IDirect3DRMFrameArrayVtbl Direct3DRMFrameArray_Vtbl =
2399 /*** IUnknown methods ***/
2400 IDirect3DRMFrameArrayImpl_QueryInterface,
2401 IDirect3DRMFrameArrayImpl_AddRef,
2402 IDirect3DRMFrameArrayImpl_Release,
2403 /*** IDirect3DRMArray methods ***/
2404 IDirect3DRMFrameArrayImpl_GetSize,
2405 /*** IDirect3DRMFrameArray methods ***/
2406 IDirect3DRMFrameArrayImpl_GetElement
2409 HRESULT Direct3DRMFrameArray_create(IDirect3DRMFrameArray** obj)
2411 IDirect3DRMFrameArrayImpl* object;
2413 TRACE("(%p)\n", obj);
2415 *obj = NULL;
2417 object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirect3DRMFrameArrayImpl));
2418 if (!object)
2420 ERR("Out of memory\n");
2421 return E_OUTOFMEMORY;
2424 object->IDirect3DRMFrameArray_iface.lpVtbl = &Direct3DRMFrameArray_Vtbl;
2425 object->ref = 1;
2427 *obj = &object->IDirect3DRMFrameArray_iface;
2429 return S_OK;
2432 /*** IUnknown methods ***/
2433 static HRESULT WINAPI IDirect3DRMVisualArrayImpl_QueryInterface(IDirect3DRMVisualArray* iface,
2434 REFIID riid, void** ret_iface)
2436 TRACE("(%p)->(%s, %p)\n", iface, debugstr_guid(riid), ret_iface);
2438 if (IsEqualGUID(riid, &IID_IUnknown) ||
2439 IsEqualGUID(riid, &IID_IDirect3DRMFrameArray))
2441 *ret_iface = iface;
2442 IDirect3DRMVisualArray_AddRef(iface);
2443 return S_OK;
2446 *ret_iface = NULL;
2448 WARN("Interface %s not implemented\n", debugstr_guid(riid));
2450 return E_NOINTERFACE;
2453 static ULONG WINAPI IDirect3DRMVisualArrayImpl_AddRef(IDirect3DRMVisualArray* iface)
2455 IDirect3DRMVisualArrayImpl *This = (IDirect3DRMVisualArrayImpl*)iface;
2456 ULONG ref = InterlockedIncrement(&This->ref);
2458 TRACE("(%p)->(): new ref = %u\n", iface, ref);
2460 return ref;
2463 static ULONG WINAPI IDirect3DRMVisualArrayImpl_Release(IDirect3DRMVisualArray* iface)
2465 IDirect3DRMVisualArrayImpl *This = (IDirect3DRMVisualArrayImpl*)iface;
2466 ULONG ref = InterlockedDecrement(&This->ref);
2467 ULONG i;
2469 TRACE("(%p)->(): new ref = %u\n", iface, ref);
2471 if (!ref)
2473 for (i = 0; i < This->size; i++)
2474 IDirect3DRMVisual_Release(This->visuals[i]);
2475 HeapFree(GetProcessHeap(), 0, This->visuals);
2476 HeapFree(GetProcessHeap(), 0, This);
2479 return ref;
2482 /*** IDirect3DRMArray methods ***/
2483 static DWORD WINAPI IDirect3DRMVisualArrayImpl_GetSize(IDirect3DRMVisualArray* iface)
2485 IDirect3DRMVisualArrayImpl *This = (IDirect3DRMVisualArrayImpl*)iface;
2487 TRACE("(%p)->() = %d\n", iface, This->size);
2489 return This->size;
2492 /*** IDirect3DRMVisualArray methods ***/
2493 static HRESULT WINAPI IDirect3DRMVisualArrayImpl_GetElement(IDirect3DRMVisualArray* iface, DWORD index, LPDIRECT3DRMVISUAL* visual)
2495 IDirect3DRMVisualArrayImpl *This = (IDirect3DRMVisualArrayImpl*)iface;
2497 TRACE("(%p)->(%u, %p)\n", iface, index, visual);
2499 if (!visual)
2500 return D3DRMERR_BADVALUE;
2502 *visual = NULL;
2504 if (index >= This->size)
2505 return D3DRMERR_BADVALUE;
2507 IDirect3DRMVisual_AddRef(This->visuals[index]);
2508 *visual = This->visuals[index];
2510 return D3DRM_OK;
2513 static const struct IDirect3DRMVisualArrayVtbl Direct3DRMVisualArray_Vtbl =
2515 /*** IUnknown methods ***/
2516 IDirect3DRMVisualArrayImpl_QueryInterface,
2517 IDirect3DRMVisualArrayImpl_AddRef,
2518 IDirect3DRMVisualArrayImpl_Release,
2519 /*** IDirect3DRMArray methods ***/
2520 IDirect3DRMVisualArrayImpl_GetSize,
2521 /*** IDirect3DRMVisualArray methods ***/
2522 IDirect3DRMVisualArrayImpl_GetElement
2525 HRESULT Direct3DRMVisualArray_create(IDirect3DRMVisualArray** ret_iface)
2527 IDirect3DRMVisualArrayImpl* object;
2529 TRACE("(%p)\n", ret_iface);
2531 *ret_iface = NULL;
2533 object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirect3DRMVisualArrayImpl));
2534 if (!object)
2536 ERR("Out of memory\n");
2537 return E_OUTOFMEMORY;
2540 object->IDirect3DRMVisualArray_iface.lpVtbl = &Direct3DRMVisualArray_Vtbl;
2541 object->ref = 1;
2543 *ret_iface = &object->IDirect3DRMVisualArray_iface;
2545 return S_OK;