d3drm: Implement IDirect3DRMFrameX_GetChildren method and IDirect3DRMFrameArray inter...
[wine/multimedia.git] / dlls / d3drm / frame.c
blob536932ed467054a7a2c3e6e5ad872e2d08c02914
1 /*
2 * Implementation of IDirect3DRMFrame Interface
4 * Copyright 2011, 2012 André Hentschel
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 #include <assert.h>
22 #include "wine/debug.h"
24 #define COBJMACROS
26 #include "winbase.h"
27 #include "wingdi.h"
29 #include "d3drm_private.h"
31 WINE_DEFAULT_DEBUG_CHANNEL(d3drm);
33 typedef struct IDirect3DRMFrameImpl IDirect3DRMFrameImpl;
35 struct IDirect3DRMFrameImpl {
36 IDirect3DRMFrame2 IDirect3DRMFrame2_iface;
37 IDirect3DRMFrame3 IDirect3DRMFrame3_iface;
38 LONG ref;
39 IDirect3DRMFrameImpl* parent;
40 ULONG nb_children;
41 ULONG children_capacity;
42 IDirect3DRMFrame3** children;
43 ULONG nb_visuals;
44 ULONG visuals_capacity;
45 IDirect3DRMVisual** visuals;
46 ULONG nb_lights;
47 ULONG lights_capacity;
48 IDirect3DRMLight** lights;
51 typedef struct {
52 IDirect3DRMFrameArray IDirect3DRMFrameArray_iface;
53 LONG ref;
54 ULONG size;
55 LPDIRECT3DRMFRAME* frames;
56 } IDirect3DRMFrameArrayImpl;
58 HRESULT Direct3DRMFrameArray_create(IDirect3DRMFrameArray** obj);
60 static inline IDirect3DRMFrameImpl *impl_from_IDirect3DRMFrame2(IDirect3DRMFrame2 *iface)
62 return CONTAINING_RECORD(iface, IDirect3DRMFrameImpl, IDirect3DRMFrame2_iface);
65 static inline IDirect3DRMFrameImpl *impl_from_IDirect3DRMFrame3(IDirect3DRMFrame3 *iface)
67 return CONTAINING_RECORD(iface, IDirect3DRMFrameImpl, IDirect3DRMFrame3_iface);
70 static inline IDirect3DRMFrameImpl *unsafe_impl_from_IDirect3DRMFrame2(IDirect3DRMFrame2 *iface);
71 static inline IDirect3DRMFrameImpl *unsafe_impl_from_IDirect3DRMFrame3(IDirect3DRMFrame3 *iface);
73 /*** IUnknown methods ***/
74 static HRESULT WINAPI IDirect3DRMFrame2Impl_QueryInterface(IDirect3DRMFrame2* iface,
75 REFIID riid, void** object)
77 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
79 TRACE("(%p/%p)->(%s, %p)\n", iface, This, debugstr_guid(riid), object);
81 *object = NULL;
83 if(IsEqualGUID(riid, &IID_IUnknown) ||
84 IsEqualGUID(riid, &IID_IDirect3DRMFrame) ||
85 IsEqualGUID(riid, &IID_IDirect3DRMFrame2))
87 *object = &This->IDirect3DRMFrame2_iface;
89 else if(IsEqualGUID(riid, &IID_IDirect3DRMFrame3))
91 *object = &This->IDirect3DRMFrame3_iface;
93 else
95 FIXME("interface %s not implemented\n", debugstr_guid(riid));
96 return E_NOINTERFACE;
99 IDirect3DRMFrame2_AddRef(iface);
100 return S_OK;
103 static ULONG WINAPI IDirect3DRMFrame2Impl_AddRef(IDirect3DRMFrame2* iface)
105 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
106 ULONG ref = InterlockedIncrement(&This->ref);
108 TRACE("(%p)->(): new ref = %d\n", This, ref);
110 return ref;
113 static ULONG WINAPI IDirect3DRMFrame2Impl_Release(IDirect3DRMFrame2* iface)
115 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
116 ULONG ref = InterlockedDecrement(&This->ref);
117 ULONG i;
119 TRACE("(%p)->(): new ref = %d\n", This, ref);
121 if (!ref)
123 for (i = 0; i < This->nb_children; i++)
124 IDirect3DRMFrame3_Release(This->children[i]);
125 HeapFree(GetProcessHeap(), 0, This->children);
126 HeapFree(GetProcessHeap(), 0, This);
129 return ref;
132 /*** IDirect3DRMObject methods ***/
133 static HRESULT WINAPI IDirect3DRMFrame2Impl_Clone(IDirect3DRMFrame2* iface,
134 LPUNKNOWN unkwn, REFIID riid,
135 LPVOID* object)
137 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
139 FIXME("(%p/%p)->(%p, %s, %p): stub\n", iface, This, unkwn, debugstr_guid(riid), object);
141 return E_NOTIMPL;
144 static HRESULT WINAPI IDirect3DRMFrame2Impl_AddDestroyCallback(IDirect3DRMFrame2* iface,
145 D3DRMOBJECTCALLBACK cb,
146 LPVOID argument)
148 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
150 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, argument);
152 return E_NOTIMPL;
155 static HRESULT WINAPI IDirect3DRMFrame2Impl_DeleteDestroyCallback(IDirect3DRMFrame2* iface,
156 D3DRMOBJECTCALLBACK cb,
157 LPVOID argument)
159 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
161 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, argument);
163 return E_NOTIMPL;
166 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetAppData(IDirect3DRMFrame2* iface,
167 DWORD data)
169 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
171 FIXME("(%p/%p)->(%u): stub\n", iface, This, data);
173 return E_NOTIMPL;
176 static DWORD WINAPI IDirect3DRMFrame2Impl_GetAppData(IDirect3DRMFrame2* iface)
178 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
180 FIXME("(%p/%p)->(): stub\n", iface, This);
182 return 0;
185 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetName(IDirect3DRMFrame2* iface, LPCSTR name)
187 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
189 FIXME("(%p/%p)->(%s): stub\n", iface, This, name);
191 return E_NOTIMPL;
194 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetName(IDirect3DRMFrame2* iface,
195 LPDWORD size, LPSTR name)
197 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
199 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, size, name);
201 return E_NOTIMPL;
204 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetClassName(IDirect3DRMFrame2* iface,
205 LPDWORD size, LPSTR name)
207 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
209 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, size, name);
211 return E_NOTIMPL;
214 /*** IDirect3DRMFrame methods ***/
215 static HRESULT WINAPI IDirect3DRMFrame2Impl_AddChild(IDirect3DRMFrame2* iface,
216 LPDIRECT3DRMFRAME child)
218 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
219 IDirect3DRMFrameImpl *frame;
221 TRACE("(%p/%p)->(%p)\n", iface, This, child);
223 frame = unsafe_impl_from_IDirect3DRMFrame2((LPDIRECT3DRMFRAME2)child);
225 if (!frame)
226 return D3DRMERR_BADOBJECT;
228 return IDirect3DRMFrame3_AddChild(&This->IDirect3DRMFrame3_iface, &frame->IDirect3DRMFrame3_iface);
231 static HRESULT WINAPI IDirect3DRMFrame2Impl_AddLight(IDirect3DRMFrame2* iface,
232 LPDIRECT3DRMLIGHT light)
234 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
236 TRACE("(%p/%p)->(%p)\n", iface, This, light);
238 return IDirect3DRMFrame3_AddLight(&This->IDirect3DRMFrame3_iface, light);
241 static HRESULT WINAPI IDirect3DRMFrame2Impl_AddMoveCallback(IDirect3DRMFrame2* iface,
242 D3DRMFRAMEMOVECALLBACK cb, VOID *arg)
244 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
246 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, cb, arg);
248 return E_NOTIMPL;
251 static HRESULT WINAPI IDirect3DRMFrame2Impl_AddTransform(IDirect3DRMFrame2* iface,
252 D3DRMCOMBINETYPE type,
253 D3DRMMATRIX4D matrix)
255 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
257 FIXME("(%p/%p)->(%u,%p): stub\n", iface, This, type, matrix);
259 return E_NOTIMPL;
262 static HRESULT WINAPI IDirect3DRMFrame2Impl_AddTranslation(IDirect3DRMFrame2* iface,
263 D3DRMCOMBINETYPE type,
264 D3DVALUE x, D3DVALUE y, D3DVALUE z)
266 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
268 FIXME("(%p/%p)->(%u,%f,%f,%f): stub\n", iface, This, type, x, y, z);
270 return E_NOTIMPL;
273 static HRESULT WINAPI IDirect3DRMFrame2Impl_AddScale(IDirect3DRMFrame2* iface,
274 D3DRMCOMBINETYPE type,
275 D3DVALUE sx, D3DVALUE sy, D3DVALUE sz)
277 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
279 FIXME("(%p/%p)->(%u,%f,%f,%f): stub\n", iface, This, type, sx, sy, sz);
281 return E_NOTIMPL;
284 static HRESULT WINAPI IDirect3DRMFrame2Impl_AddRotation(IDirect3DRMFrame2* iface,
285 D3DRMCOMBINETYPE type,
286 D3DVALUE x, D3DVALUE y, D3DVALUE z,
287 D3DVALUE theta)
289 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
291 FIXME("(%p/%p)->(%u,%f,%f,%f,%f): stub\n", iface, This, type, x, y, z, theta);
293 return E_NOTIMPL;
296 static HRESULT WINAPI IDirect3DRMFrame2Impl_AddVisual(IDirect3DRMFrame2* iface,
297 LPDIRECT3DRMVISUAL vis)
299 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
301 TRACE("(%p/%p)->(%p)\n", iface, This, vis);
303 return IDirect3DRMFrame3_AddVisual(&This->IDirect3DRMFrame3_iface, (LPUNKNOWN)vis);
306 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetChildren(IDirect3DRMFrame2* iface,
307 LPDIRECT3DRMFRAMEARRAY *children)
309 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
311 TRACE("(%p/%p)->(%p)\n", iface, This, children);
313 return IDirect3DRMFrame3_GetChildren(&This->IDirect3DRMFrame3_iface, children);
316 static D3DCOLOR WINAPI IDirect3DRMFrame2Impl_GetColor(IDirect3DRMFrame2* iface)
318 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
320 FIXME("(%p/%p)->(): stub\n", iface, This);
322 return 0;
325 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetLights(IDirect3DRMFrame2* iface,
326 LPDIRECT3DRMLIGHTARRAY *lights)
328 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
330 FIXME("(%p/%p)->(%p): stub\n", iface, This, lights);
332 return E_NOTIMPL;
335 static D3DRMMATERIALMODE WINAPI IDirect3DRMFrame2Impl_GetMaterialMode(IDirect3DRMFrame2* iface)
337 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
339 FIXME("(%p/%p)->(): stub\n", iface, This);
341 return D3DRMMATERIAL_FROMPARENT;
344 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetParent(IDirect3DRMFrame2* iface,
345 LPDIRECT3DRMFRAME * frame)
347 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
349 TRACE("(%p/%p)->(%p)\n", iface, This, frame);
351 if (!frame)
352 return D3DRMERR_BADVALUE;
354 if (This->parent)
356 *frame = (LPDIRECT3DRMFRAME)&This->parent->IDirect3DRMFrame2_iface;
357 IDirect3DRMFrame_AddRef(*frame);
359 else
361 *frame = NULL;
364 return D3DRM_OK;
367 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetPosition(IDirect3DRMFrame2* iface,
368 LPDIRECT3DRMFRAME reference,
369 LPD3DVECTOR return_position)
371 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
373 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, reference, return_position);
375 return E_NOTIMPL;
378 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetRotation(IDirect3DRMFrame2* iface,
379 LPDIRECT3DRMFRAME reference,
380 LPD3DVECTOR axis, LPD3DVALUE return_theta)
382 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
384 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, reference, axis, return_theta);
386 return E_NOTIMPL;
389 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetScene(IDirect3DRMFrame2* iface,
390 LPDIRECT3DRMFRAME * frame)
392 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
394 FIXME("(%p/%p)->(%p): stub\n", iface, This, frame);
396 return E_NOTIMPL;
399 static D3DRMSORTMODE WINAPI IDirect3DRMFrame2Impl_GetSortMode(IDirect3DRMFrame2* iface)
401 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
403 FIXME("(%p/%p)->(): stub\n", iface, This);
405 return D3DRMSORT_FROMPARENT;
408 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetTexture(IDirect3DRMFrame2* iface,
409 LPDIRECT3DRMTEXTURE * tex)
411 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
413 FIXME("(%p/%p)->(%p): stub\n", iface, This, tex);
415 return E_NOTIMPL;
418 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetTransform(IDirect3DRMFrame2* iface,
419 D3DRMMATRIX4D return_matrix)
421 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
423 FIXME("(%p/%p)->(%p): stub\n", iface, This, return_matrix);
425 return E_NOTIMPL;
428 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetVelocity(IDirect3DRMFrame2* iface,
429 LPDIRECT3DRMFRAME reference,
430 LPD3DVECTOR return_velocity,
431 BOOL with_rotation)
433 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
435 FIXME("(%p/%p)->(%p,%p,%d): stub\n", iface, This, reference, return_velocity, with_rotation);
437 return E_NOTIMPL;
440 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetOrientation(IDirect3DRMFrame2* iface,
441 LPDIRECT3DRMFRAME reference,
442 LPD3DVECTOR dir, LPD3DVECTOR up)
444 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
446 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, reference, dir, up);
448 return E_NOTIMPL;
451 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetVisuals(IDirect3DRMFrame2* iface,
452 LPDIRECT3DRMVISUALARRAY *visuals)
454 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
456 FIXME("(%p/%p)->(%p): stub\n", iface, This, visuals);
458 return E_NOTIMPL;
461 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetTextureTopology(IDirect3DRMFrame2* iface,
462 BOOL *wrap_u, BOOL *wrap_v)
464 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
466 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, wrap_u, wrap_v);
468 return E_NOTIMPL;
471 static HRESULT WINAPI IDirect3DRMFrame2Impl_InverseTransform(IDirect3DRMFrame2* iface,
472 D3DVECTOR *d, D3DVECTOR *s)
474 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
476 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, d, s);
478 return E_NOTIMPL;
481 static HRESULT WINAPI IDirect3DRMFrame2Impl_Load(IDirect3DRMFrame2* iface, LPVOID filename,
482 LPVOID name, D3DRMLOADOPTIONS loadflags,
483 D3DRMLOADTEXTURECALLBACK cb, LPVOID lpArg)
485 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
487 FIXME("(%p/%p)->(%p,%p,%u,%p,%p): stub\n", iface, This, filename, name, loadflags, cb, lpArg);
489 return E_NOTIMPL;
492 static HRESULT WINAPI IDirect3DRMFrame2Impl_LookAt(IDirect3DRMFrame2* iface,
493 LPDIRECT3DRMFRAME target,
494 LPDIRECT3DRMFRAME reference,
495 D3DRMFRAMECONSTRAINT constraint)
497 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
499 FIXME("(%p/%p)->(%p,%p,%u): stub\n", iface, This, target, reference, constraint);
501 return E_NOTIMPL;
504 static HRESULT WINAPI IDirect3DRMFrame2Impl_Move(IDirect3DRMFrame2* iface, D3DVALUE delta)
506 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
508 FIXME("(%p/%p)->(%f): stub\n", iface, This, delta);
510 return E_NOTIMPL;
513 static HRESULT WINAPI IDirect3DRMFrame2Impl_DeleteChild(IDirect3DRMFrame2* iface,
514 LPDIRECT3DRMFRAME frame)
516 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
517 IDirect3DRMFrameImpl *child;
519 TRACE("(%p/%p)->(%p)\n", iface, This, frame);
521 child = unsafe_impl_from_IDirect3DRMFrame2((LPDIRECT3DRMFRAME2)frame);
523 if (!child)
524 return D3DRMERR_BADOBJECT;
526 return IDirect3DRMFrame3_DeleteChild(&This->IDirect3DRMFrame3_iface, &child->IDirect3DRMFrame3_iface);
529 static HRESULT WINAPI IDirect3DRMFrame2Impl_DeleteLight(IDirect3DRMFrame2* iface,
530 LPDIRECT3DRMLIGHT light)
532 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
534 TRACE("(%p/%p)->(%p)\n", iface, This, light);
536 return IDirect3DRMFrame3_DeleteLight(&This->IDirect3DRMFrame3_iface, light);
539 static HRESULT WINAPI IDirect3DRMFrame2Impl_DeleteMoveCallback(IDirect3DRMFrame2* iface,
540 D3DRMFRAMEMOVECALLBACK cb, VOID *arg)
542 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
544 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, cb, arg);
546 return E_NOTIMPL;
549 static HRESULT WINAPI IDirect3DRMFrame2Impl_DeleteVisual(IDirect3DRMFrame2* iface,
550 LPDIRECT3DRMVISUAL vis)
552 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
554 TRACE("(%p/%p)->(%p)\n", iface, This, vis);
556 return IDirect3DRMFrame3_DeleteVisual(&This->IDirect3DRMFrame3_iface, (LPUNKNOWN)vis);
559 static D3DCOLOR WINAPI IDirect3DRMFrame2Impl_GetSceneBackground(IDirect3DRMFrame2* iface)
561 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
563 FIXME("(%p/%p)->(): stub\n", iface, This);
565 return 0;
568 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetSceneBackgroundDepth(IDirect3DRMFrame2* iface,
569 LPDIRECTDRAWSURFACE * surface)
571 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
573 FIXME("(%p/%p)->(%p): stub\n", iface, This, surface);
575 return E_NOTIMPL;
578 static D3DCOLOR WINAPI IDirect3DRMFrame2Impl_GetSceneFogColor(IDirect3DRMFrame2* iface)
580 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
582 FIXME("(%p/%p)->(): stub\n", iface, This);
584 return 0;
587 static BOOL WINAPI IDirect3DRMFrame2Impl_GetSceneFogEnable(IDirect3DRMFrame2* iface)
589 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
591 FIXME("(%p/%p)->(): stub\n", iface, This);
593 return FALSE;
596 static D3DRMFOGMODE WINAPI IDirect3DRMFrame2Impl_GetSceneFogMode(IDirect3DRMFrame2* iface)
598 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
600 FIXME("(%p/%p)->(): stub\n", iface, This);
602 return D3DRMFOG_LINEAR;
605 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetSceneFogParams(IDirect3DRMFrame2* iface,
606 D3DVALUE *return_start,
607 D3DVALUE *return_end,
608 D3DVALUE *return_density)
610 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
612 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, return_start, return_end, return_density);
614 return E_NOTIMPL;
617 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetSceneBackground(IDirect3DRMFrame2* iface,
618 D3DCOLOR color)
620 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
622 FIXME("(%p/%p)->(%u): stub\n", iface, This, color);
624 return E_NOTIMPL;
627 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetSceneBackgroundRGB(IDirect3DRMFrame2* iface,
628 D3DVALUE red, D3DVALUE green,
629 D3DVALUE blue)
631 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
633 FIXME("(%p/%p)->(%f,%f,%f): stub\n", iface, This, red, green, blue);
635 return E_NOTIMPL;
638 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetSceneBackgroundDepth(IDirect3DRMFrame2* iface,
639 LPDIRECTDRAWSURFACE surface)
641 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
643 FIXME("(%p/%p)->(%p): stub\n", iface, This, surface);
645 return E_NOTIMPL;
648 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetSceneBackgroundImage(IDirect3DRMFrame2* iface,
649 LPDIRECT3DRMTEXTURE texture)
651 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
653 FIXME("(%p/%p)->(%p): stub\n", iface, This, texture);
655 return E_NOTIMPL;
658 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetSceneFogEnable(IDirect3DRMFrame2* iface, BOOL enable)
660 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
662 FIXME("(%p/%p)->(%d): stub\n", iface, This, enable);
664 return E_NOTIMPL;
667 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetSceneFogColor(IDirect3DRMFrame2* iface,
668 D3DCOLOR color)
670 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
672 FIXME("(%p/%p)->(%u): stub\n", iface, This, color);
674 return E_NOTIMPL;
677 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetSceneFogMode(IDirect3DRMFrame2* iface,
678 D3DRMFOGMODE mode)
680 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
682 FIXME("(%p/%p)->(%u): stub\n", iface, This, mode);
684 return E_NOTIMPL;
687 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetSceneFogParams(IDirect3DRMFrame2* iface,
688 D3DVALUE start, D3DVALUE end,
689 D3DVALUE density)
691 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
693 FIXME("(%p/%p)->(%f,%f,%f): stub\n", iface, This, start, end, density);
695 return E_NOTIMPL;
698 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetColor(IDirect3DRMFrame2* iface, D3DCOLOR color)
700 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
702 FIXME("(%p/%p)->(%u): stub\n", iface, This, color);
704 return E_NOTIMPL;
707 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetColorRGB(IDirect3DRMFrame2* iface, D3DVALUE red,
708 D3DVALUE green, D3DVALUE blue)
710 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
712 FIXME("(%p/%p)->(%f,%f,%f): stub\n", iface, This, red, green, blue);
714 return E_NOTIMPL;
717 static D3DRMZBUFFERMODE WINAPI IDirect3DRMFrame2Impl_GetZbufferMode(IDirect3DRMFrame2* iface)
719 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
721 FIXME("(%p/%p)->(): stub\n", iface, This);
723 return D3DRMZBUFFER_FROMPARENT;
726 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetMaterialMode(IDirect3DRMFrame2* iface,
727 D3DRMMATERIALMODE mode)
729 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
731 FIXME("(%p/%p)->(%u): stub\n", iface, This, mode);
733 return E_NOTIMPL;
736 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetOrientation(IDirect3DRMFrame2* iface,
737 LPDIRECT3DRMFRAME reference,
738 D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
739 D3DVALUE ux, D3DVALUE uy, D3DVALUE uz )
741 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
743 FIXME("(%p/%p)->(%p,%f,%f,%f,%f,%f,%f): stub\n", iface, This, reference,
744 dx, dy, dz, ux, uy, uz);
746 return E_NOTIMPL;
749 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetPosition(IDirect3DRMFrame2* iface,
750 LPDIRECT3DRMFRAME reference,
751 D3DVALUE x, D3DVALUE y, D3DVALUE z)
753 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
755 FIXME("(%p/%p)->(%p,%f,%f,%f): stub\n", iface, This, reference, x, y, z);
757 return E_NOTIMPL;
760 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetRotation(IDirect3DRMFrame2* iface,
761 LPDIRECT3DRMFRAME reference,
762 D3DVALUE x, D3DVALUE y, D3DVALUE z,
763 D3DVALUE theta)
765 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
767 FIXME("(%p/%p)->(%p,%f,%f,%f,%f): stub\n", iface, This, reference, x, y, z, theta);
769 return E_NOTIMPL;
772 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetSortMode(IDirect3DRMFrame2* iface,
773 D3DRMSORTMODE mode)
775 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
777 FIXME("(%p/%p)->(%u): stub\n", iface, This, mode);
779 return E_NOTIMPL;
782 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetTexture(IDirect3DRMFrame2* iface,
783 LPDIRECT3DRMTEXTURE texture)
785 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
787 FIXME("(%p/%p)->(%p): stub\n", iface, This, texture);
789 return E_NOTIMPL;
792 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetTextureTopology(IDirect3DRMFrame2* iface,
793 BOOL wrap_u, BOOL wrap_v)
795 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
797 FIXME("(%p/%p)->(%d,%d): stub\n", iface, This, wrap_u, wrap_v);
799 return E_NOTIMPL;
802 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetVelocity(IDirect3DRMFrame2* iface,
803 LPDIRECT3DRMFRAME reference,
804 D3DVALUE x, D3DVALUE y, D3DVALUE z,
805 BOOL with_rotation)
807 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
809 FIXME("(%p/%p)->(%p,%f,%f,%f,%d): stub\n", iface, This, reference, x, y, z, with_rotation);
811 return E_NOTIMPL;
814 static HRESULT WINAPI IDirect3DRMFrame2Impl_SetZbufferMode(IDirect3DRMFrame2* iface,
815 D3DRMZBUFFERMODE mode)
817 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
819 FIXME("(%p/%p)->(%u): stub\n", iface, This, mode);
821 return E_NOTIMPL;
824 static HRESULT WINAPI IDirect3DRMFrame2Impl_Transform(IDirect3DRMFrame2* iface, D3DVECTOR *d,
825 D3DVECTOR *s)
827 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
829 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, d, s);
831 return E_NOTIMPL;
834 /*** IDirect3DRMFrame2 methods ***/
835 static HRESULT WINAPI IDirect3DRMFrame2Impl_AddMoveCallback2(IDirect3DRMFrame2* iface,
836 D3DRMFRAMEMOVECALLBACK cb, VOID *arg,
837 DWORD flags)
839 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
841 FIXME("(%p/%p)->(%p,%p,%u): stub\n", iface, This, cb, arg, flags);
843 return E_NOTIMPL;
846 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetBox(IDirect3DRMFrame2* iface, LPD3DRMBOX box)
848 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
850 FIXME("(%p/%p)->(%p): stub\n", iface, This, box);
852 return E_NOTIMPL;
855 static BOOL WINAPI IDirect3DRMFrame2Impl_GetBoxEnable(IDirect3DRMFrame2* iface)
857 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
859 FIXME("(%p/%p)->(): stub\n", iface, This);
861 return E_NOTIMPL;
864 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetAxes(IDirect3DRMFrame2* iface,
865 LPD3DVECTOR dir, LPD3DVECTOR up)
867 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
869 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, dir, up);
871 return E_NOTIMPL;
874 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetMaterial(IDirect3DRMFrame2* iface,
875 LPDIRECT3DRMMATERIAL *material)
877 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
879 FIXME("(%p/%p)->(%p): stub\n", iface, This, material);
881 return E_NOTIMPL;
884 static BOOL WINAPI IDirect3DRMFrame2Impl_GetInheritAxes(IDirect3DRMFrame2* iface)
886 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
888 FIXME("(%p/%p)->(): stub\n", iface, This);
890 return E_NOTIMPL;
893 static HRESULT WINAPI IDirect3DRMFrame2Impl_GetHierarchyBox(IDirect3DRMFrame2* iface,
894 LPD3DRMBOX box)
896 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
898 FIXME("(%p/%p)->(%p): stub\n", iface, This, box);
900 return E_NOTIMPL;
903 static const struct IDirect3DRMFrame2Vtbl Direct3DRMFrame2_Vtbl =
905 /*** IUnknown methods ***/
906 IDirect3DRMFrame2Impl_QueryInterface,
907 IDirect3DRMFrame2Impl_AddRef,
908 IDirect3DRMFrame2Impl_Release,
909 /*** IDirect3DRMObject methods ***/
910 IDirect3DRMFrame2Impl_Clone,
911 IDirect3DRMFrame2Impl_AddDestroyCallback,
912 IDirect3DRMFrame2Impl_DeleteDestroyCallback,
913 IDirect3DRMFrame2Impl_SetAppData,
914 IDirect3DRMFrame2Impl_GetAppData,
915 IDirect3DRMFrame2Impl_SetName,
916 IDirect3DRMFrame2Impl_GetName,
917 IDirect3DRMFrame2Impl_GetClassName,
918 /*** IDirect3DRMFrame methods ***/
919 IDirect3DRMFrame2Impl_AddChild,
920 IDirect3DRMFrame2Impl_AddLight,
921 IDirect3DRMFrame2Impl_AddMoveCallback,
922 IDirect3DRMFrame2Impl_AddTransform,
923 IDirect3DRMFrame2Impl_AddTranslation,
924 IDirect3DRMFrame2Impl_AddScale,
925 IDirect3DRMFrame2Impl_AddRotation,
926 IDirect3DRMFrame2Impl_AddVisual,
927 IDirect3DRMFrame2Impl_GetChildren,
928 IDirect3DRMFrame2Impl_GetColor,
929 IDirect3DRMFrame2Impl_GetLights,
930 IDirect3DRMFrame2Impl_GetMaterialMode,
931 IDirect3DRMFrame2Impl_GetParent,
932 IDirect3DRMFrame2Impl_GetPosition,
933 IDirect3DRMFrame2Impl_GetRotation,
934 IDirect3DRMFrame2Impl_GetScene,
935 IDirect3DRMFrame2Impl_GetSortMode,
936 IDirect3DRMFrame2Impl_GetTexture,
937 IDirect3DRMFrame2Impl_GetTransform,
938 IDirect3DRMFrame2Impl_GetVelocity,
939 IDirect3DRMFrame2Impl_GetOrientation,
940 IDirect3DRMFrame2Impl_GetVisuals,
941 IDirect3DRMFrame2Impl_GetTextureTopology,
942 IDirect3DRMFrame2Impl_InverseTransform,
943 IDirect3DRMFrame2Impl_Load,
944 IDirect3DRMFrame2Impl_LookAt,
945 IDirect3DRMFrame2Impl_Move,
946 IDirect3DRMFrame2Impl_DeleteChild,
947 IDirect3DRMFrame2Impl_DeleteLight,
948 IDirect3DRMFrame2Impl_DeleteMoveCallback,
949 IDirect3DRMFrame2Impl_DeleteVisual,
950 IDirect3DRMFrame2Impl_GetSceneBackground,
951 IDirect3DRMFrame2Impl_GetSceneBackgroundDepth,
952 IDirect3DRMFrame2Impl_GetSceneFogColor,
953 IDirect3DRMFrame2Impl_GetSceneFogEnable,
954 IDirect3DRMFrame2Impl_GetSceneFogMode,
955 IDirect3DRMFrame2Impl_GetSceneFogParams,
956 IDirect3DRMFrame2Impl_SetSceneBackground,
957 IDirect3DRMFrame2Impl_SetSceneBackgroundRGB,
958 IDirect3DRMFrame2Impl_SetSceneBackgroundDepth,
959 IDirect3DRMFrame2Impl_SetSceneBackgroundImage,
960 IDirect3DRMFrame2Impl_SetSceneFogEnable,
961 IDirect3DRMFrame2Impl_SetSceneFogColor,
962 IDirect3DRMFrame2Impl_SetSceneFogMode,
963 IDirect3DRMFrame2Impl_SetSceneFogParams,
964 IDirect3DRMFrame2Impl_SetColor,
965 IDirect3DRMFrame2Impl_SetColorRGB,
966 IDirect3DRMFrame2Impl_GetZbufferMode,
967 IDirect3DRMFrame2Impl_SetMaterialMode,
968 IDirect3DRMFrame2Impl_SetOrientation,
969 IDirect3DRMFrame2Impl_SetPosition,
970 IDirect3DRMFrame2Impl_SetRotation,
971 IDirect3DRMFrame2Impl_SetSortMode,
972 IDirect3DRMFrame2Impl_SetTexture,
973 IDirect3DRMFrame2Impl_SetTextureTopology,
974 IDirect3DRMFrame2Impl_SetVelocity,
975 IDirect3DRMFrame2Impl_SetZbufferMode,
976 IDirect3DRMFrame2Impl_Transform,
977 /*** IDirect3DRMFrame2 methods ***/
978 IDirect3DRMFrame2Impl_AddMoveCallback2,
979 IDirect3DRMFrame2Impl_GetBox,
980 IDirect3DRMFrame2Impl_GetBoxEnable,
981 IDirect3DRMFrame2Impl_GetAxes,
982 IDirect3DRMFrame2Impl_GetMaterial,
983 IDirect3DRMFrame2Impl_GetInheritAxes,
984 IDirect3DRMFrame2Impl_GetHierarchyBox
987 /*** IUnknown methods ***/
988 static HRESULT WINAPI IDirect3DRMFrame3Impl_QueryInterface(IDirect3DRMFrame3* iface,
989 REFIID riid, void** object)
991 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
992 return IDirect3DRMFrame_QueryInterface(&This->IDirect3DRMFrame2_iface, riid, object);
995 static ULONG WINAPI IDirect3DRMFrame3Impl_AddRef(IDirect3DRMFrame3* iface)
997 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
998 return IDirect3DRMFrame2_AddRef(&This->IDirect3DRMFrame2_iface);
1001 static ULONG WINAPI IDirect3DRMFrame3Impl_Release(IDirect3DRMFrame3* iface)
1003 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1004 return IDirect3DRMFrame2_Release(&This->IDirect3DRMFrame2_iface);
1007 /*** IDirect3DRMObject methods ***/
1008 static HRESULT WINAPI IDirect3DRMFrame3Impl_Clone(IDirect3DRMFrame3* iface,
1009 LPUNKNOWN unkwn, REFIID riid,
1010 LPVOID* object)
1012 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1014 FIXME("(%p/%p)->(%p, %s, %p): stub\n", iface, This, unkwn, debugstr_guid(riid), object);
1016 return E_NOTIMPL;
1019 static HRESULT WINAPI IDirect3DRMFrame3Impl_AddDestroyCallback(IDirect3DRMFrame3* iface,
1020 D3DRMOBJECTCALLBACK cb,
1021 LPVOID argument)
1023 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1025 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, argument);
1027 return E_NOTIMPL;
1030 static HRESULT WINAPI IDirect3DRMFrame3Impl_DeleteDestroyCallback(IDirect3DRMFrame3* iface,
1031 D3DRMOBJECTCALLBACK cb,
1032 LPVOID argument)
1034 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1036 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, argument);
1038 return E_NOTIMPL;
1041 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetAppData(IDirect3DRMFrame3* iface,
1042 DWORD data)
1044 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1046 FIXME("(%p/%p)->(%u): stub\n", iface, This, data);
1048 return E_NOTIMPL;
1051 static DWORD WINAPI IDirect3DRMFrame3Impl_GetAppData(IDirect3DRMFrame3* iface)
1053 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1055 FIXME("(%p/%p)->(): stub\n", iface, This);
1057 return 0;
1060 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetName(IDirect3DRMFrame3* iface, LPCSTR name)
1062 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1064 FIXME("(%p/%p)->(%s): stub\n", iface, This, name);
1066 return E_NOTIMPL;
1069 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetName(IDirect3DRMFrame3* iface,
1070 LPDWORD size, LPSTR name)
1072 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1074 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, size, name);
1076 return E_NOTIMPL;
1079 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetClassName(IDirect3DRMFrame3* iface,
1080 LPDWORD size, LPSTR name)
1082 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1084 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, size, name);
1086 return E_NOTIMPL;
1089 /*** IDirect3DRMFrame methods ***/
1090 static HRESULT WINAPI IDirect3DRMFrame3Impl_AddChild(IDirect3DRMFrame3* iface,
1091 LPDIRECT3DRMFRAME3 child)
1093 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1094 IDirect3DRMFrameImpl *child_obj = unsafe_impl_from_IDirect3DRMFrame3(child);
1096 TRACE("(%p/%p)->(%p)\n", iface, This, child);
1098 if (!child_obj)
1099 return D3DRMERR_BADOBJECT;
1101 if (child_obj->parent)
1103 IDirect3DRMFrame3* parent = &child_obj->parent->IDirect3DRMFrame3_iface;
1105 if (parent == iface)
1107 /* Passed frame is already a child so return success */
1108 return D3DRM_OK;
1110 else
1112 /* Remove parent and continue */
1113 IDirect3DRMFrame3_DeleteChild(parent, child);
1117 if ((This->nb_children + 1) > This->children_capacity)
1119 ULONG new_capacity;
1120 IDirect3DRMFrame3** children;
1122 if (!This->children_capacity)
1124 new_capacity = 16;
1125 children = HeapAlloc(GetProcessHeap(), 0, new_capacity * sizeof(IDirect3DRMFrame3*));
1127 else
1129 new_capacity = This->children_capacity * 2;
1130 children = HeapReAlloc(GetProcessHeap(), 0, This->children, new_capacity * sizeof(IDirect3DRMFrame3*));
1133 if (!children)
1134 return E_OUTOFMEMORY;
1136 This->children_capacity = new_capacity;
1137 This->children = children;
1140 This->children[This->nb_children++] = child;
1141 IDirect3DRMFrame3_AddRef(child);
1142 child_obj->parent = This;
1144 return D3DRM_OK;
1147 static HRESULT WINAPI IDirect3DRMFrame3Impl_AddLight(IDirect3DRMFrame3* iface,
1148 LPDIRECT3DRMLIGHT light)
1150 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1151 ULONG i;
1152 IDirect3DRMLight** lights;
1154 TRACE("(%p/%p)->(%p)\n", iface, This, light);
1156 if (!light)
1157 return D3DRMERR_BADOBJECT;
1159 /* Check if already existing and return gracefully without increasing ref count */
1160 for (i = 0; i < This->nb_lights; i++)
1161 if (This->lights[i] == light)
1162 return D3DRM_OK;
1164 if ((This->nb_lights + 1) > This->lights_capacity)
1166 ULONG new_capacity;
1168 if (!This->lights_capacity)
1170 new_capacity = 16;
1171 lights = HeapAlloc(GetProcessHeap(), 0, new_capacity * sizeof(IDirect3DRMLight*));
1173 else
1175 new_capacity = This->lights_capacity * 2;
1176 lights = HeapReAlloc(GetProcessHeap(), 0, This->lights, new_capacity * sizeof(IDirect3DRMLight*));
1179 if (!lights)
1180 return E_OUTOFMEMORY;
1182 This->lights_capacity = new_capacity;
1183 This->lights = lights;
1186 This->lights[This->nb_lights++] = light;
1187 IDirect3DRMLight_AddRef(light);
1189 return D3DRM_OK;
1192 static HRESULT WINAPI IDirect3DRMFrame3Impl_AddMoveCallback(IDirect3DRMFrame3* iface,
1193 D3DRMFRAME3MOVECALLBACK cb, VOID *arg,
1194 DWORD flags)
1196 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1198 FIXME("(%p/%p)->(%p,%p,%u): stub\n", iface, This, cb, arg, flags);
1200 return E_NOTIMPL;
1203 static HRESULT WINAPI IDirect3DRMFrame3Impl_AddTransform(IDirect3DRMFrame3* iface,
1204 D3DRMCOMBINETYPE type,
1205 D3DRMMATRIX4D matrix)
1207 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1209 FIXME("(%p/%p)->(%u,%p): stub\n", iface, This, type, matrix);
1211 return E_NOTIMPL;
1214 static HRESULT WINAPI IDirect3DRMFrame3Impl_AddTranslation(IDirect3DRMFrame3* iface,
1215 D3DRMCOMBINETYPE type,
1216 D3DVALUE x, D3DVALUE y, D3DVALUE z)
1218 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1220 FIXME("(%p/%p)->(%u,%f,%f,%f): stub\n", iface, This, type, x, y, z);
1222 return E_NOTIMPL;
1225 static HRESULT WINAPI IDirect3DRMFrame3Impl_AddScale(IDirect3DRMFrame3* iface,
1226 D3DRMCOMBINETYPE type,
1227 D3DVALUE sx, D3DVALUE sy, D3DVALUE sz)
1229 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1231 FIXME("(%p/%p)->(%u,%f,%f,%f): stub\n", iface, This, type, sx, sy, sz);
1233 return E_NOTIMPL;
1236 static HRESULT WINAPI IDirect3DRMFrame3Impl_AddRotation(IDirect3DRMFrame3* iface,
1237 D3DRMCOMBINETYPE type,
1238 D3DVALUE x, D3DVALUE y, D3DVALUE z,
1239 D3DVALUE theta)
1241 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1243 FIXME("(%p/%p)->(%u,%f,%f,%f,%f): stub\n", iface, This, type, x, y, z, theta);
1245 return E_NOTIMPL;
1248 static HRESULT WINAPI IDirect3DRMFrame3Impl_AddVisual(IDirect3DRMFrame3* iface, LPUNKNOWN vis)
1250 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1251 ULONG i;
1252 IDirect3DRMVisual** visuals;
1254 TRACE("(%p/%p)->(%p)\n", iface, This, vis);
1256 if (!vis)
1257 return D3DRMERR_BADOBJECT;
1259 /* Check if already existing and return gracefully without increasing ref count */
1260 for (i = 0; i < This->nb_visuals; i++)
1261 if (This->visuals[i] == (IDirect3DRMVisual*)vis)
1262 return D3DRM_OK;
1264 if ((This->nb_visuals + 1) > This->visuals_capacity)
1266 ULONG new_capacity;
1268 if (!This->visuals_capacity)
1270 new_capacity = 16;
1271 visuals = HeapAlloc(GetProcessHeap(), 0, new_capacity * sizeof(IDirect3DRMVisual*));
1273 else
1275 new_capacity = This->visuals_capacity * 2;
1276 visuals = HeapReAlloc(GetProcessHeap(), 0, This->visuals, new_capacity * sizeof(IDirect3DRMVisual*));
1279 if (!visuals)
1280 return E_OUTOFMEMORY;
1282 This->visuals_capacity = new_capacity;
1283 This->visuals = visuals;
1286 This->visuals[This->nb_visuals++] = (IDirect3DRMVisual*)vis;
1287 IDirect3DRMVisual_AddRef(vis);
1289 return D3DRM_OK;
1292 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetChildren(IDirect3DRMFrame3* iface,
1293 LPDIRECT3DRMFRAMEARRAY *children)
1295 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1296 IDirect3DRMFrameArrayImpl* obj;
1297 HRESULT hr;
1299 TRACE("(%p/%p)->(%p)\n", iface, This, children);
1301 if (!children)
1302 return D3DRMERR_BADVALUE;
1304 hr = Direct3DRMFrameArray_create(children);
1306 if (hr != D3DRM_OK)
1307 return hr;
1309 obj = (IDirect3DRMFrameArrayImpl*)*children;
1311 obj->size = This->nb_children;
1312 if (This->nb_children)
1314 ULONG i;
1315 obj->frames = HeapAlloc(GetProcessHeap(), 0, This->nb_children * sizeof(LPDIRECT3DRMFRAME));
1316 if (!obj->frames)
1317 return E_OUTOFMEMORY;
1318 for (i = 0; i < This->nb_children; i++)
1319 IDirect3DRMFrame3_QueryInterface(This->children[i], &IID_IDirect3DRMFrame, (void**)&obj->frames[i]);
1322 return D3DRM_OK;
1325 static D3DCOLOR WINAPI IDirect3DRMFrame3Impl_GetColor(IDirect3DRMFrame3* iface)
1327 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1329 FIXME("(%p/%p)->(): stub\n", iface, This);
1331 return 0;
1334 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetLights(IDirect3DRMFrame3* iface,
1335 LPDIRECT3DRMLIGHTARRAY *lights)
1337 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1339 FIXME("(%p/%p)->(%p): stub\n", iface, This, lights);
1341 return E_NOTIMPL;
1344 static D3DRMMATERIALMODE WINAPI IDirect3DRMFrame3Impl_GetMaterialMode(IDirect3DRMFrame3* iface)
1346 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1348 FIXME("(%p/%p)->(): stub\n", iface, This);
1350 return D3DRMMATERIAL_FROMPARENT;
1353 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetParent(IDirect3DRMFrame3* iface,
1354 LPDIRECT3DRMFRAME3 * frame)
1356 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1358 TRACE("(%p/%p)->(%p)\n", iface, This, frame);
1360 if (!frame)
1361 return D3DRMERR_BADVALUE;
1363 if (This->parent)
1365 *frame = &This->parent->IDirect3DRMFrame3_iface;
1366 IDirect3DRMFrame_AddRef(*frame);
1368 else
1370 *frame = NULL;
1373 return D3DRM_OK;
1376 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetPosition(IDirect3DRMFrame3* iface,
1377 LPDIRECT3DRMFRAME3 reference,
1378 LPD3DVECTOR return_position)
1380 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1382 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, reference, return_position);
1384 return E_NOTIMPL;
1387 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetRotation(IDirect3DRMFrame3* iface,
1388 LPDIRECT3DRMFRAME3 reference,
1389 LPD3DVECTOR axis, LPD3DVALUE return_theta)
1391 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1393 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, reference, axis, return_theta);
1395 return E_NOTIMPL;
1398 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetScene(IDirect3DRMFrame3* iface,
1399 LPDIRECT3DRMFRAME3 * frame)
1401 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1403 FIXME("(%p/%p)->(%p): stub\n", iface, This, frame);
1405 return E_NOTIMPL;
1408 static D3DRMSORTMODE WINAPI IDirect3DRMFrame3Impl_GetSortMode(IDirect3DRMFrame3* iface)
1410 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1412 FIXME("(%p/%p)->(): stub\n", iface, This);
1414 return D3DRMSORT_FROMPARENT;
1417 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetTexture(IDirect3DRMFrame3* iface,
1418 LPDIRECT3DRMTEXTURE3 * tex)
1420 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1422 FIXME("(%p/%p)->(%p): stub\n", iface, This, tex);
1424 return E_NOTIMPL;
1427 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetTransform(IDirect3DRMFrame3* iface,
1428 LPDIRECT3DRMFRAME3 reference,
1429 D3DRMMATRIX4D return_matrix)
1431 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1433 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, reference, return_matrix);
1435 return E_NOTIMPL;
1438 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetVelocity(IDirect3DRMFrame3* iface,
1439 LPDIRECT3DRMFRAME3 reference,
1440 LPD3DVECTOR return_velocity,
1441 BOOL with_rotation)
1443 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1445 FIXME("(%p/%p)->(%p,%p,%d): stub\n", iface, This, reference, return_velocity, with_rotation);
1447 return E_NOTIMPL;
1450 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetOrientation(IDirect3DRMFrame3* iface,
1451 LPDIRECT3DRMFRAME3 reference,
1452 LPD3DVECTOR dir, LPD3DVECTOR up)
1454 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1456 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, reference, dir, up);
1458 return E_NOTIMPL;
1461 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetVisuals(IDirect3DRMFrame3* iface, LPDWORD num,
1462 LPUNKNOWN *visuals)
1464 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1466 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, num, visuals);
1468 return E_NOTIMPL;
1471 static HRESULT WINAPI IDirect3DRMFrame3Impl_InverseTransform(IDirect3DRMFrame3* iface,
1472 D3DVECTOR *d, D3DVECTOR *s)
1474 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1476 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, d, s);
1478 return E_NOTIMPL;
1481 static HRESULT WINAPI IDirect3DRMFrame3Impl_Load(IDirect3DRMFrame3* iface, LPVOID filename,
1482 LPVOID name, D3DRMLOADOPTIONS loadflags,
1483 D3DRMLOADTEXTURE3CALLBACK cb, LPVOID lpArg)
1485 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1487 FIXME("(%p/%p)->(%p,%p,%u,%p,%p): stub\n", iface, This, filename, name, loadflags, cb, lpArg);
1489 return E_NOTIMPL;
1492 static HRESULT WINAPI IDirect3DRMFrame3Impl_LookAt(IDirect3DRMFrame3* iface,
1493 LPDIRECT3DRMFRAME3 target,
1494 LPDIRECT3DRMFRAME3 reference,
1495 D3DRMFRAMECONSTRAINT constraint)
1497 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1499 FIXME("(%p/%p)->(%p,%p,%u): stub\n", iface, This, target, reference, constraint);
1501 return E_NOTIMPL;
1504 static HRESULT WINAPI IDirect3DRMFrame3Impl_Move(IDirect3DRMFrame3* iface, D3DVALUE delta)
1506 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1508 FIXME("(%p/%p)->(%f): stub\n", iface, This, delta);
1510 return E_NOTIMPL;
1513 static HRESULT WINAPI IDirect3DRMFrame3Impl_DeleteChild(IDirect3DRMFrame3* iface,
1514 LPDIRECT3DRMFRAME3 frame)
1516 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1517 IDirect3DRMFrameImpl *frame_obj = unsafe_impl_from_IDirect3DRMFrame3(frame);
1518 ULONG i;
1520 TRACE("(%p/%p)->(%p)\n", iface, This, frame);
1522 if (!frame_obj)
1523 return D3DRMERR_BADOBJECT;
1525 /* Check if child exists */
1526 for (i = 0; i < This->nb_children; i++)
1527 if (This->children[i] == frame)
1528 break;
1530 if (i == This->nb_children)
1531 return D3DRMERR_BADVALUE;
1533 memmove(This->children + i, This->children + i + 1, sizeof(IDirect3DRMFrame3*) * (This->nb_children - 1 - i));
1534 IDirect3DRMFrame3_Release(frame);
1535 frame_obj->parent = NULL;
1536 This->nb_children--;
1538 return D3DRM_OK;
1541 static HRESULT WINAPI IDirect3DRMFrame3Impl_DeleteLight(IDirect3DRMFrame3* iface,
1542 LPDIRECT3DRMLIGHT light)
1544 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1545 ULONG i;
1547 TRACE("(%p/%p)->(%p)\n", iface, This, light);
1549 if (!light)
1550 return D3DRMERR_BADOBJECT;
1552 /* Check if visual exists */
1553 for (i = 0; i < This->nb_lights; i++)
1554 if (This->lights[i] == light)
1555 break;
1557 if (i == This->nb_lights)
1558 return D3DRMERR_BADVALUE;
1560 memmove(This->lights + i, This->lights + i + 1, sizeof(IDirect3DRMLight*) * (This->nb_lights - 1 - i));
1561 IDirect3DRMLight_Release(light);
1562 This->nb_lights--;
1564 return D3DRM_OK;
1567 static HRESULT WINAPI IDirect3DRMFrame3Impl_DeleteMoveCallback(IDirect3DRMFrame3* iface,
1568 D3DRMFRAME3MOVECALLBACK cb,
1569 VOID *arg)
1571 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1573 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, cb, arg);
1575 return E_NOTIMPL;
1578 static HRESULT WINAPI IDirect3DRMFrame3Impl_DeleteVisual(IDirect3DRMFrame3* iface, LPUNKNOWN vis)
1580 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1581 ULONG i;
1583 TRACE("(%p/%p)->(%p)\n", iface, This, vis);
1585 if (!vis)
1586 return D3DRMERR_BADOBJECT;
1588 /* Check if visual exists */
1589 for (i = 0; i < This->nb_visuals; i++)
1590 if (This->visuals[i] == (IDirect3DRMVisual*)vis)
1591 break;
1593 if (i == This->nb_visuals)
1594 return D3DRMERR_BADVALUE;
1596 memmove(This->visuals + i, This->visuals + i + 1, sizeof(IDirect3DRMVisual*) * (This->nb_visuals - 1 - i));
1597 IDirect3DRMVisual_Release(vis);
1598 This->nb_visuals--;
1600 return D3DRM_OK;
1603 static D3DCOLOR WINAPI IDirect3DRMFrame3Impl_GetSceneBackground(IDirect3DRMFrame3* iface)
1605 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1607 FIXME("(%p/%p)->(): stub\n", iface, This);
1609 return 0;
1612 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetSceneBackgroundDepth(IDirect3DRMFrame3* iface,
1613 LPDIRECTDRAWSURFACE * surface)
1615 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1617 FIXME("(%p/%p)->(%p): stub\n", iface, This, surface);
1619 return E_NOTIMPL;
1622 static D3DCOLOR WINAPI IDirect3DRMFrame3Impl_GetSceneFogColor(IDirect3DRMFrame3* iface)
1624 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1626 FIXME("(%p/%p)->(): stub\n", iface, This);
1628 return 0;
1631 static BOOL WINAPI IDirect3DRMFrame3Impl_GetSceneFogEnable(IDirect3DRMFrame3* iface)
1633 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1635 FIXME("(%p/%p)->(): stub\n", iface, This);
1637 return FALSE;
1640 static D3DRMFOGMODE WINAPI IDirect3DRMFrame3Impl_GetSceneFogMode(IDirect3DRMFrame3* iface)
1642 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1644 FIXME("(%p/%p)->(): stub\n", iface, This);
1646 return D3DRMFOG_LINEAR;
1649 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetSceneFogParams(IDirect3DRMFrame3* iface,
1650 D3DVALUE *return_start,
1651 D3DVALUE *return_end,
1652 D3DVALUE *return_density)
1654 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1656 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, return_start, return_end, return_density);
1658 return E_NOTIMPL;
1661 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetSceneBackground(IDirect3DRMFrame3* iface,
1662 D3DCOLOR color)
1664 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1666 FIXME("(%p/%p)->(%u): stub\n", iface, This, color);
1668 return E_NOTIMPL;
1671 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetSceneBackgroundRGB(IDirect3DRMFrame3* iface,
1672 D3DVALUE red, D3DVALUE green,
1673 D3DVALUE blue)
1675 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1677 FIXME("(%p/%p)->(%f,%f,%f): stub\n", iface, This, red, green, blue);
1679 return E_NOTIMPL;
1682 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetSceneBackgroundDepth(IDirect3DRMFrame3* iface,
1683 LPDIRECTDRAWSURFACE surface)
1685 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1687 FIXME("(%p/%p)->(%p): stub\n", iface, This, surface);
1689 return E_NOTIMPL;
1692 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetSceneBackgroundImage(IDirect3DRMFrame3* iface,
1693 LPDIRECT3DRMTEXTURE3 texture)
1695 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1697 FIXME("(%p/%p)->(%p): stub\n", iface, This, texture);
1699 return E_NOTIMPL;
1702 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetSceneFogEnable(IDirect3DRMFrame3* iface, BOOL enable)
1704 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1706 FIXME("(%p/%p)->(%d): stub\n", iface, This, enable);
1708 return E_NOTIMPL;
1711 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetSceneFogColor(IDirect3DRMFrame3* iface,
1712 D3DCOLOR color)
1714 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1716 FIXME("(%p/%p)->(%u): stub\n", iface, This, color);
1718 return E_NOTIMPL;
1721 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetSceneFogMode(IDirect3DRMFrame3* iface,
1722 D3DRMFOGMODE mode)
1724 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1726 FIXME("(%p/%p)->(%u): stub\n", iface, This, mode);
1728 return E_NOTIMPL;
1731 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetSceneFogParams(IDirect3DRMFrame3* iface,
1732 D3DVALUE start, D3DVALUE end,
1733 D3DVALUE density)
1735 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1737 FIXME("(%p/%p)->(%f,%f,%f): stub\n", iface, This, start, end, density);
1739 return E_NOTIMPL;
1742 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetColor(IDirect3DRMFrame3* iface, D3DCOLOR color)
1744 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1746 FIXME("(%p/%p)->(%u): stub\n", iface, This, color);
1748 return E_NOTIMPL;
1751 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetColorRGB(IDirect3DRMFrame3* iface, D3DVALUE red,
1752 D3DVALUE green, D3DVALUE blue)
1754 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1756 FIXME("(%p/%p)->(%f,%f,%f): stub\n", iface, This, red, green, blue);
1758 return E_NOTIMPL;
1761 static D3DRMZBUFFERMODE WINAPI IDirect3DRMFrame3Impl_GetZbufferMode(IDirect3DRMFrame3* iface)
1763 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1765 FIXME("(%p/%p)->(): stub\n", iface, This);
1767 return D3DRMZBUFFER_FROMPARENT;
1770 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetMaterialMode(IDirect3DRMFrame3* iface,
1771 D3DRMMATERIALMODE mode)
1773 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1775 FIXME("(%p/%p)->(%u): stub\n", iface, This, mode);
1777 return E_NOTIMPL;
1780 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetOrientation(IDirect3DRMFrame3* iface,
1781 LPDIRECT3DRMFRAME3 reference,
1782 D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
1783 D3DVALUE ux, D3DVALUE uy, D3DVALUE uz )
1785 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1787 FIXME("(%p/%p)->(%p,%f,%f,%f,%f,%f,%f): stub\n", iface, This, reference,
1788 dx, dy, dz, ux, uy, uz);
1790 return E_NOTIMPL;
1793 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetPosition(IDirect3DRMFrame3* iface,
1794 LPDIRECT3DRMFRAME3 reference,
1795 D3DVALUE x, D3DVALUE y, D3DVALUE z)
1797 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1799 FIXME("(%p/%p)->(%p,%f,%f,%f): stub\n", iface, This, reference, x, y, z);
1801 return E_NOTIMPL;
1804 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetRotation(IDirect3DRMFrame3* iface,
1805 LPDIRECT3DRMFRAME3 reference,
1806 D3DVALUE x, D3DVALUE y, D3DVALUE z,
1807 D3DVALUE theta)
1809 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1811 FIXME("(%p/%p)->(%p,%f,%f,%f,%f): stub\n", iface, This, reference, x, y, z, theta);
1813 return E_NOTIMPL;
1816 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetSortMode(IDirect3DRMFrame3* iface,
1817 D3DRMSORTMODE mode)
1819 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1821 FIXME("(%p/%p)->(%u): stub\n", iface, This, mode);
1823 return E_NOTIMPL;
1826 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetTexture(IDirect3DRMFrame3* iface,
1827 LPDIRECT3DRMTEXTURE3 texture)
1829 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1831 FIXME("(%p/%p)->(%p): stub\n", iface, This, texture);
1833 return E_NOTIMPL;
1836 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetVelocity(IDirect3DRMFrame3* iface,
1837 LPDIRECT3DRMFRAME3 reference,
1838 D3DVALUE x, D3DVALUE y, D3DVALUE z,
1839 BOOL with_rotation)
1841 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1843 FIXME("(%p/%p)->(%p,%f,%f,%f,%d): stub\n", iface, This, reference, x, y, z, with_rotation);
1845 return E_NOTIMPL;
1848 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetZbufferMode(IDirect3DRMFrame3* iface,
1849 D3DRMZBUFFERMODE mode)
1851 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1853 FIXME("(%p/%p)->(%u): stub\n", iface, This, mode);
1855 return E_NOTIMPL;
1858 static HRESULT WINAPI IDirect3DRMFrame3Impl_Transform(IDirect3DRMFrame3* iface, D3DVECTOR *d,
1859 D3DVECTOR *s)
1861 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1863 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, d, s);
1865 return E_NOTIMPL;
1868 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetBox(IDirect3DRMFrame3* iface, LPD3DRMBOX box)
1870 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1872 FIXME("(%p/%p)->(%p): stub\n", iface, This, box);
1874 return E_NOTIMPL;
1877 static BOOL WINAPI IDirect3DRMFrame3Impl_GetBoxEnable(IDirect3DRMFrame3* iface)
1879 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1881 FIXME("(%p/%p)->(): stub\n", iface, This);
1883 return E_NOTIMPL;
1886 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetAxes(IDirect3DRMFrame3* iface,
1887 LPD3DVECTOR dir, LPD3DVECTOR up)
1889 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1891 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, dir, up);
1893 return E_NOTIMPL;
1896 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetMaterial(IDirect3DRMFrame3* iface,
1897 LPDIRECT3DRMMATERIAL2 *material)
1899 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1901 FIXME("(%p/%p)->(%p): stub\n", iface, This, material);
1903 return E_NOTIMPL;
1906 static BOOL WINAPI IDirect3DRMFrame3Impl_GetInheritAxes(IDirect3DRMFrame3* iface)
1908 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1910 FIXME("(%p/%p)->(): stub\n", iface, This);
1912 return E_NOTIMPL;
1915 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetHierarchyBox(IDirect3DRMFrame3* iface,
1916 LPD3DRMBOX box)
1918 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1920 FIXME("(%p/%p)->(%p): stub\n", iface, This, box);
1922 return E_NOTIMPL;
1925 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetBox(IDirect3DRMFrame3* iface, LPD3DRMBOX box)
1927 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1929 FIXME("(%p/%p)->(%p): stub\n", iface, This, box);
1931 return E_NOTIMPL;
1934 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetBoxEnable(IDirect3DRMFrame3* iface, BOOL enable)
1936 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1938 FIXME("(%p/%p)->(%u): stub\n", iface, This, enable);
1940 return E_NOTIMPL;
1943 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetAxes(IDirect3DRMFrame3* iface,
1944 D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
1945 D3DVALUE ux, D3DVALUE uy, D3DVALUE uz)
1947 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1949 FIXME("(%p/%p)->(%f,%f,%f,%f,%f,%f): stub\n", iface, This, dx, dy, dz, ux, uy, uz);
1951 return E_NOTIMPL;
1954 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetInheritAxes(IDirect3DRMFrame3* iface,
1955 BOOL inherit_from_parent)
1957 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1959 FIXME("(%p/%p)->(%u): stub\n", iface, This, inherit_from_parent);
1961 return E_NOTIMPL;
1964 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetMaterial(IDirect3DRMFrame3* iface,
1965 LPDIRECT3DRMMATERIAL2 material)
1967 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1969 FIXME("(%p/%p)->(%p): stub\n", iface, This, material);
1971 return E_NOTIMPL;
1974 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetQuaternion(IDirect3DRMFrame3* iface,
1975 LPDIRECT3DRMFRAME3 reference,
1976 D3DRMQUATERNION *q)
1978 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1980 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, reference, q);
1982 return E_NOTIMPL;
1985 static HRESULT WINAPI IDirect3DRMFrame3Impl_RayPick(IDirect3DRMFrame3* iface,
1986 LPDIRECT3DRMFRAME3 reference, LPD3DRMRAY ray,
1987 DWORD flags,
1988 LPDIRECT3DRMPICKED2ARRAY *return_visuals)
1990 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
1992 FIXME("(%p/%p)->(%p,%p,%u,%p): stub\n", iface, This, reference, ray, flags, return_visuals);
1994 return E_NOTIMPL;
1997 static HRESULT WINAPI IDirect3DRMFrame3Impl_Save(IDirect3DRMFrame3* iface, LPCSTR filename,
1998 D3DRMXOFFORMAT d3dFormat,
1999 D3DRMSAVEOPTIONS d3dSaveFlags)
2001 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2003 FIXME("(%p/%p)->(%p,%u,%u): stub\n", iface, This, filename, d3dFormat, d3dSaveFlags);
2005 return E_NOTIMPL;
2008 static HRESULT WINAPI IDirect3DRMFrame3Impl_TransformVectors(IDirect3DRMFrame3* iface,
2009 LPDIRECT3DRMFRAME3 reference,
2010 DWORD num, LPD3DVECTOR dst,
2011 LPD3DVECTOR src)
2013 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2015 FIXME("(%p/%p)->(%p,%u,%p,%p): stub\n", iface, This, reference, num, dst, src);
2017 return E_NOTIMPL;
2020 static HRESULT WINAPI IDirect3DRMFrame3Impl_InverseTransformVectors(IDirect3DRMFrame3* iface,
2021 LPDIRECT3DRMFRAME3 reference,
2022 DWORD num, LPD3DVECTOR dst,
2023 LPD3DVECTOR src)
2025 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2027 FIXME("(%p/%p)->(%p,%u,%p,%p): stub\n", iface, This, reference, num, dst, src);
2029 return E_NOTIMPL;
2032 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetTraversalOptions(IDirect3DRMFrame3* iface,
2033 DWORD flags)
2035 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2037 FIXME("(%p/%p)->(%u): stub\n", iface, This, flags);
2039 return E_NOTIMPL;
2042 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetTraversalOptions(IDirect3DRMFrame3* iface,
2043 LPDWORD flags)
2045 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2047 FIXME("(%p/%p)->(%p): stub\n", iface, This, flags);
2049 return E_NOTIMPL;
2052 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetSceneFogMethod(IDirect3DRMFrame3* iface,
2053 DWORD flags)
2055 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2057 FIXME("(%p/%p)->(%u): stub\n", iface, This, flags);
2059 return E_NOTIMPL;
2062 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetSceneFogMethod(IDirect3DRMFrame3* iface,
2063 LPDWORD flags)
2065 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2067 FIXME("(%p/%p)->(%p): stub\n", iface, This, flags);
2069 return E_NOTIMPL;
2072 static HRESULT WINAPI IDirect3DRMFrame3Impl_SetMaterialOverride(IDirect3DRMFrame3* iface,
2073 LPD3DRMMATERIALOVERRIDE override)
2075 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2077 FIXME("(%p/%p)->(%p): stub\n", iface, This, override);
2079 return E_NOTIMPL;
2082 static HRESULT WINAPI IDirect3DRMFrame3Impl_GetMaterialOverride(IDirect3DRMFrame3* iface,
2083 LPD3DRMMATERIALOVERRIDE override)
2085 IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
2087 FIXME("(%p/%p)->(%p): stub\n", iface, This, override);
2089 return E_NOTIMPL;
2092 static const struct IDirect3DRMFrame3Vtbl Direct3DRMFrame3_Vtbl =
2094 /*** IUnknown methods ***/
2095 IDirect3DRMFrame3Impl_QueryInterface,
2096 IDirect3DRMFrame3Impl_AddRef,
2097 IDirect3DRMFrame3Impl_Release,
2098 /*** IDirect3DRMObject methods ***/
2099 IDirect3DRMFrame3Impl_Clone,
2100 IDirect3DRMFrame3Impl_AddDestroyCallback,
2101 IDirect3DRMFrame3Impl_DeleteDestroyCallback,
2102 IDirect3DRMFrame3Impl_SetAppData,
2103 IDirect3DRMFrame3Impl_GetAppData,
2104 IDirect3DRMFrame3Impl_SetName,
2105 IDirect3DRMFrame3Impl_GetName,
2106 IDirect3DRMFrame3Impl_GetClassName,
2107 /*** IDirect3DRMFrame3 methods ***/
2108 IDirect3DRMFrame3Impl_AddChild,
2109 IDirect3DRMFrame3Impl_AddLight,
2110 IDirect3DRMFrame3Impl_AddMoveCallback,
2111 IDirect3DRMFrame3Impl_AddTransform,
2112 IDirect3DRMFrame3Impl_AddTranslation,
2113 IDirect3DRMFrame3Impl_AddScale,
2114 IDirect3DRMFrame3Impl_AddRotation,
2115 IDirect3DRMFrame3Impl_AddVisual,
2116 IDirect3DRMFrame3Impl_GetChildren,
2117 IDirect3DRMFrame3Impl_GetColor,
2118 IDirect3DRMFrame3Impl_GetLights,
2119 IDirect3DRMFrame3Impl_GetMaterialMode,
2120 IDirect3DRMFrame3Impl_GetParent,
2121 IDirect3DRMFrame3Impl_GetPosition,
2122 IDirect3DRMFrame3Impl_GetRotation,
2123 IDirect3DRMFrame3Impl_GetScene,
2124 IDirect3DRMFrame3Impl_GetSortMode,
2125 IDirect3DRMFrame3Impl_GetTexture,
2126 IDirect3DRMFrame3Impl_GetTransform,
2127 IDirect3DRMFrame3Impl_GetVelocity,
2128 IDirect3DRMFrame3Impl_GetOrientation,
2129 IDirect3DRMFrame3Impl_GetVisuals,
2130 IDirect3DRMFrame3Impl_InverseTransform,
2131 IDirect3DRMFrame3Impl_Load,
2132 IDirect3DRMFrame3Impl_LookAt,
2133 IDirect3DRMFrame3Impl_Move,
2134 IDirect3DRMFrame3Impl_DeleteChild,
2135 IDirect3DRMFrame3Impl_DeleteLight,
2136 IDirect3DRMFrame3Impl_DeleteMoveCallback,
2137 IDirect3DRMFrame3Impl_DeleteVisual,
2138 IDirect3DRMFrame3Impl_GetSceneBackground,
2139 IDirect3DRMFrame3Impl_GetSceneBackgroundDepth,
2140 IDirect3DRMFrame3Impl_GetSceneFogColor,
2141 IDirect3DRMFrame3Impl_GetSceneFogEnable,
2142 IDirect3DRMFrame3Impl_GetSceneFogMode,
2143 IDirect3DRMFrame3Impl_GetSceneFogParams,
2144 IDirect3DRMFrame3Impl_SetSceneBackground,
2145 IDirect3DRMFrame3Impl_SetSceneBackgroundRGB,
2146 IDirect3DRMFrame3Impl_SetSceneBackgroundDepth,
2147 IDirect3DRMFrame3Impl_SetSceneBackgroundImage,
2148 IDirect3DRMFrame3Impl_SetSceneFogEnable,
2149 IDirect3DRMFrame3Impl_SetSceneFogColor,
2150 IDirect3DRMFrame3Impl_SetSceneFogMode,
2151 IDirect3DRMFrame3Impl_SetSceneFogParams,
2152 IDirect3DRMFrame3Impl_SetColor,
2153 IDirect3DRMFrame3Impl_SetColorRGB,
2154 IDirect3DRMFrame3Impl_GetZbufferMode,
2155 IDirect3DRMFrame3Impl_SetMaterialMode,
2156 IDirect3DRMFrame3Impl_SetOrientation,
2157 IDirect3DRMFrame3Impl_SetPosition,
2158 IDirect3DRMFrame3Impl_SetRotation,
2159 IDirect3DRMFrame3Impl_SetSortMode,
2160 IDirect3DRMFrame3Impl_SetTexture,
2161 IDirect3DRMFrame3Impl_SetVelocity,
2162 IDirect3DRMFrame3Impl_SetZbufferMode,
2163 IDirect3DRMFrame3Impl_Transform,
2164 IDirect3DRMFrame3Impl_GetBox,
2165 IDirect3DRMFrame3Impl_GetBoxEnable,
2166 IDirect3DRMFrame3Impl_GetAxes,
2167 IDirect3DRMFrame3Impl_GetMaterial,
2168 IDirect3DRMFrame3Impl_GetInheritAxes,
2169 IDirect3DRMFrame3Impl_GetHierarchyBox,
2170 IDirect3DRMFrame3Impl_SetBox,
2171 IDirect3DRMFrame3Impl_SetBoxEnable,
2172 IDirect3DRMFrame3Impl_SetAxes,
2173 IDirect3DRMFrame3Impl_SetInheritAxes,
2174 IDirect3DRMFrame3Impl_SetMaterial,
2175 IDirect3DRMFrame3Impl_SetQuaternion,
2176 IDirect3DRMFrame3Impl_RayPick,
2177 IDirect3DRMFrame3Impl_Save,
2178 IDirect3DRMFrame3Impl_TransformVectors,
2179 IDirect3DRMFrame3Impl_InverseTransformVectors,
2180 IDirect3DRMFrame3Impl_SetTraversalOptions,
2181 IDirect3DRMFrame3Impl_GetTraversalOptions,
2182 IDirect3DRMFrame3Impl_SetSceneFogMethod,
2183 IDirect3DRMFrame3Impl_GetSceneFogMethod,
2184 IDirect3DRMFrame3Impl_SetMaterialOverride,
2185 IDirect3DRMFrame3Impl_GetMaterialOverride
2188 static inline IDirect3DRMFrameImpl *unsafe_impl_from_IDirect3DRMFrame2(IDirect3DRMFrame2 *iface)
2190 if (!iface)
2191 return NULL;
2192 assert(iface->lpVtbl == &Direct3DRMFrame2_Vtbl);
2194 return impl_from_IDirect3DRMFrame2(iface);
2197 static inline IDirect3DRMFrameImpl *unsafe_impl_from_IDirect3DRMFrame3(IDirect3DRMFrame3 *iface)
2199 if (!iface)
2200 return NULL;
2201 assert(iface->lpVtbl == &Direct3DRMFrame3_Vtbl);
2203 return impl_from_IDirect3DRMFrame3(iface);
2206 HRESULT Direct3DRMFrame_create(REFIID riid, IUnknown** ppObj)
2208 IDirect3DRMFrameImpl* object;
2210 TRACE("(%p)\n", ppObj);
2212 object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirect3DRMFrameImpl));
2213 if (!object)
2215 ERR("Out of memory\n");
2216 return E_OUTOFMEMORY;
2219 object->IDirect3DRMFrame2_iface.lpVtbl = &Direct3DRMFrame2_Vtbl;
2220 object->IDirect3DRMFrame3_iface.lpVtbl = &Direct3DRMFrame3_Vtbl;
2221 object->ref = 1;
2223 if (IsEqualGUID(riid, &IID_IDirect3DRMFrame3))
2224 *ppObj = (IUnknown*)&object->IDirect3DRMFrame3_iface;
2225 else
2226 *ppObj = (IUnknown*)&object->IDirect3DRMFrame2_iface;
2228 return S_OK;
2231 /*** IUnknown methods ***/
2232 static HRESULT WINAPI IDirect3DRMFrameArrayImpl_QueryInterface(IDirect3DRMFrameArray* iface,
2233 REFIID riid, void** object)
2235 IDirect3DRMFrameArrayImpl *This = (IDirect3DRMFrameArrayImpl*)iface;
2237 TRACE("(%p/%p)->(%s, %p)\n", iface, This, debugstr_guid(riid), object);
2239 *object = NULL;
2241 if (IsEqualGUID(riid, &IID_IUnknown) ||
2242 IsEqualGUID(riid, &IID_IDirect3DRMFrameArray))
2244 *object = &This->IDirect3DRMFrameArray_iface;
2246 else
2248 FIXME("interface %s not implemented\n", debugstr_guid(riid));
2249 return E_NOINTERFACE;
2252 IDirect3DRMFrameArray_AddRef(iface);
2253 return S_OK;
2256 static ULONG WINAPI IDirect3DRMFrameArrayImpl_AddRef(IDirect3DRMFrameArray* iface)
2258 IDirect3DRMFrameArrayImpl *This = (IDirect3DRMFrameArrayImpl*)iface;
2259 ULONG ref = InterlockedIncrement(&This->ref);
2261 TRACE("(%p)->(): new ref = %u\n", This, ref);
2263 return ref;
2266 static ULONG WINAPI IDirect3DRMFrameArrayImpl_Release(IDirect3DRMFrameArray* iface)
2268 IDirect3DRMFrameArrayImpl *This = (IDirect3DRMFrameArrayImpl*)iface;
2269 ULONG ref = InterlockedDecrement(&This->ref);
2270 ULONG i;
2272 TRACE("(%p)->(): new ref = %u\n", This, ref);
2274 if (!ref)
2276 for (i = 0; i < This->size; i++)
2277 IDirect3DRMFrame_Release(This->frames[i]);
2278 HeapFree(GetProcessHeap(), 0, This->frames);
2279 HeapFree(GetProcessHeap(), 0, This);
2282 return ref;
2285 /*** IDirect3DRMArray methods ***/
2286 static DWORD WINAPI IDirect3DRMFrameArrayImpl_GetSize(IDirect3DRMFrameArray* iface)
2288 IDirect3DRMFrameArrayImpl *This = (IDirect3DRMFrameArrayImpl*)iface;
2290 TRACE("(%p)->() = %d\n", This, This->size);
2292 return This->size;
2295 /*** IDirect3DRMFrameArray methods ***/
2296 static HRESULT WINAPI IDirect3DRMFrameArrayImpl_GetElement(IDirect3DRMFrameArray* iface, DWORD index, LPDIRECT3DRMFRAME* frame)
2298 IDirect3DRMFrameArrayImpl *This = (IDirect3DRMFrameArrayImpl*)iface;
2300 TRACE("(%p)->(%u, %p)\n", This, index, frame);
2302 if (!frame)
2303 return D3DRMERR_BADVALUE;
2305 *frame = NULL;
2307 if (index >= This->size)
2308 return D3DRMERR_BADVALUE;
2310 IDirect3DRMFrame_AddRef(This->frames[index]);
2311 *frame = This->frames[index];
2313 return D3DRM_OK;
2316 static const struct IDirect3DRMFrameArrayVtbl Direct3DRMFrameArray_Vtbl =
2318 /*** IUnknown methods ***/
2319 IDirect3DRMFrameArrayImpl_QueryInterface,
2320 IDirect3DRMFrameArrayImpl_AddRef,
2321 IDirect3DRMFrameArrayImpl_Release,
2322 /*** IDirect3DRMArray methods ***/
2323 IDirect3DRMFrameArrayImpl_GetSize,
2324 /*** IDirect3DRMFrameArray methods ***/
2325 IDirect3DRMFrameArrayImpl_GetElement
2328 HRESULT Direct3DRMFrameArray_create(IDirect3DRMFrameArray** obj)
2330 IDirect3DRMFrameArrayImpl* object;
2332 TRACE("(%p)\n", obj);
2334 *obj = NULL;
2336 object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirect3DRMFrameArrayImpl));
2337 if (!object)
2339 ERR("Out of memory\n");
2340 return E_OUTOFMEMORY;
2343 object->IDirect3DRMFrameArray_iface.lpVtbl = &Direct3DRMFrameArray_Vtbl;
2344 object->ref = 1;
2346 *obj = &object->IDirect3DRMFrameArray_iface;
2348 return S_OK;