d3drm: Hande parent when creating a new frame.
[wine/multimedia.git] / dlls / d3drm / light.c
blob82ec825ded424d68036e748e892e3e23ca7ef4f9
1 /*
2 * Implementation of IDirect3DRMLight Interface
4 * Copyright 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 "wine/debug.h"
23 #define COBJMACROS
25 #include "winbase.h"
26 #include "wingdi.h"
28 #include "d3drm_private.h"
30 WINE_DEFAULT_DEBUG_CHANNEL(d3drm);
32 typedef struct {
33 IDirect3DRMLight IDirect3DRMLight_iface;
34 LONG ref;
35 } IDirect3DRMLightImpl;
37 static inline IDirect3DRMLightImpl *impl_from_IDirect3DRMLight(IDirect3DRMLight *iface)
39 return CONTAINING_RECORD(iface, IDirect3DRMLightImpl, IDirect3DRMLight_iface);
42 /*** IUnknown methods ***/
43 static HRESULT WINAPI IDirect3DRMLightImpl_QueryInterface(IDirect3DRMLight* iface,
44 REFIID riid, void** object)
46 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
48 TRACE("(%p/%p)->(%s, %p)\n", iface, This, debugstr_guid(riid), object);
50 *object = NULL;
52 if(IsEqualGUID(riid, &IID_IUnknown) ||
53 IsEqualGUID(riid, &IID_IDirect3DRMLight))
55 *object = &This->IDirect3DRMLight_iface;
57 else
59 FIXME("interface %s not implemented\n", debugstr_guid(riid));
60 return E_NOINTERFACE;
63 IDirect3DRMLight_AddRef(iface);
64 return S_OK;
67 static ULONG WINAPI IDirect3DRMLightImpl_AddRef(IDirect3DRMLight* iface)
69 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
70 ULONG ref = InterlockedIncrement(&This->ref);
72 TRACE("(%p)->(): new ref = %d\n", iface, ref);
74 return ref;
77 static ULONG WINAPI IDirect3DRMLightImpl_Release(IDirect3DRMLight* iface)
79 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
80 ULONG ref = InterlockedDecrement(&This->ref);
82 TRACE("(%p)->(): new ref = %d\n", iface, ref);
84 if (!ref)
85 HeapFree(GetProcessHeap(), 0, This);
87 return ref;
90 /*** IDirect3DRMObject methods ***/
91 static HRESULT WINAPI IDirect3DRMLightImpl_Clone(IDirect3DRMLight* iface,
92 LPUNKNOWN unkwn, REFIID riid,
93 LPVOID* object)
95 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
97 FIXME("(%p/%p)->(%p, %s, %p): stub\n", iface, This, unkwn, debugstr_guid(riid), object);
99 return E_NOTIMPL;
102 static HRESULT WINAPI IDirect3DRMLightImpl_AddDestroyCallback(IDirect3DRMLight* iface,
103 D3DRMOBJECTCALLBACK cb,
104 LPVOID argument)
106 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
108 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, argument);
110 return E_NOTIMPL;
113 static HRESULT WINAPI IDirect3DRMLightImpl_DeleteDestroyCallback(IDirect3DRMLight* iface,
114 D3DRMOBJECTCALLBACK cb,
115 LPVOID argument)
117 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
119 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, argument);
121 return E_NOTIMPL;
124 static HRESULT WINAPI IDirect3DRMLightImpl_SetAppData(IDirect3DRMLight* iface,
125 DWORD data)
127 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
129 FIXME("(%p/%p)->(%u): stub\n", iface, This, data);
131 return E_NOTIMPL;
134 static DWORD WINAPI IDirect3DRMLightImpl_GetAppData(IDirect3DRMLight* iface)
136 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
138 FIXME("(%p/%p)->(): stub\n", iface, This);
140 return 0;
143 static HRESULT WINAPI IDirect3DRMLightImpl_SetName(IDirect3DRMLight* iface, LPCSTR name)
145 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
147 FIXME("(%p/%p)->(%s): stub\n", iface, This, name);
149 return E_NOTIMPL;
152 static HRESULT WINAPI IDirect3DRMLightImpl_GetName(IDirect3DRMLight* iface,
153 LPDWORD size, LPSTR name)
155 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
157 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, size, name);
159 return E_NOTIMPL;
162 static HRESULT WINAPI IDirect3DRMLightImpl_GetClassName(IDirect3DRMLight* iface,
163 LPDWORD size, LPSTR name)
165 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
167 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, size, name);
169 return E_NOTIMPL;
172 /*** IDirect3DRMLight methods ***/
173 static HRESULT WINAPI IDirect3DRMLightImpl_SetType(IDirect3DRMLight* iface, D3DRMLIGHTTYPE type)
175 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
177 FIXME("(%p/%p)->(%u): stub\n", iface, This, type);
179 return E_NOTIMPL;
182 static HRESULT WINAPI IDirect3DRMLightImpl_SetColor(IDirect3DRMLight* iface, D3DCOLOR color)
184 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
186 FIXME("(%p/%p)->(%u): stub\n", iface, This, color);
188 return E_NOTIMPL;
191 static HRESULT WINAPI IDirect3DRMLightImpl_SetColorRGB(IDirect3DRMLight* iface,
192 D3DVALUE red, D3DVALUE green, D3DVALUE blue)
194 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
196 FIXME("(%p/%p)->(%f,%f,%f): stub\n", iface, This, red, green, blue);
198 return E_NOTIMPL;
201 static HRESULT WINAPI IDirect3DRMLightImpl_SetRange(IDirect3DRMLight* iface, D3DVALUE range)
203 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
205 FIXME("(%p/%p)->(%f): stub\n", iface, This, range);
207 return E_NOTIMPL;
210 static HRESULT WINAPI IDirect3DRMLightImpl_SetUmbra(IDirect3DRMLight* iface, D3DVALUE umbra)
212 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
214 FIXME("(%p/%p)->(%f): stub\n", iface, This, umbra);
216 return E_NOTIMPL;
219 static HRESULT WINAPI IDirect3DRMLightImpl_SetPenumbra(IDirect3DRMLight* iface, D3DVALUE penumbra)
221 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
223 FIXME("(%p/%p)->(%f): stub\n", iface, This, penumbra);
225 return E_NOTIMPL;
228 static HRESULT WINAPI IDirect3DRMLightImpl_SetConstantAttenuation(IDirect3DRMLight* iface,
229 D3DVALUE cattenuation)
231 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
233 FIXME("(%p/%p)->(%f): stub\n", iface, This, cattenuation);
235 return E_NOTIMPL;
238 static HRESULT WINAPI IDirect3DRMLightImpl_SetLinearAttenuation(IDirect3DRMLight* iface,
239 D3DVALUE lattenuation)
241 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
243 FIXME("(%p/%p)->(%f): stub\n", iface, This, lattenuation);
245 return E_NOTIMPL;
248 static HRESULT WINAPI IDirect3DRMLightImpl_SetQuadraticAttenuation(IDirect3DRMLight* iface,
249 D3DVALUE qattenuation)
251 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
253 FIXME("(%p/%p)->(%f): stub\n", iface, This, qattenuation);
255 return E_NOTIMPL;
258 static D3DVALUE WINAPI IDirect3DRMLightImpl_GetRange(IDirect3DRMLight* iface)
260 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
262 FIXME("(%p/%p)->(): stub\n", iface, This);
264 return 0;
267 static D3DVALUE WINAPI IDirect3DRMLightImpl_GetUmbra(IDirect3DRMLight* iface)
269 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
271 FIXME("(%p/%p)->(): stub\n", iface, This);
273 return 0;
276 static D3DVALUE WINAPI IDirect3DRMLightImpl_GetPenumbra(IDirect3DRMLight* iface)
278 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
280 FIXME("(%p/%p)->(): stub\n", iface, This);
282 return 0;
285 static D3DVALUE WINAPI IDirect3DRMLightImpl_GetConstantAttenuation(IDirect3DRMLight* iface)
287 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
289 FIXME("(%p/%p)->(): stub\n", iface, This);
291 return 0;
294 static D3DVALUE WINAPI IDirect3DRMLightImpl_GetLinearAttenuation(IDirect3DRMLight* iface)
296 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
298 FIXME("(%p/%p)->(): stub\n", iface, This);
300 return 0;
303 static D3DVALUE WINAPI IDirect3DRMLightImpl_GetQuadraticAttenuation(IDirect3DRMLight* iface)
305 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
307 FIXME("(%p/%p)->(): stub\n", iface, This);
309 return 0;
312 static D3DCOLOR WINAPI IDirect3DRMLightImpl_GetColor(IDirect3DRMLight* iface)
314 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
316 FIXME("(%p/%p)->(): stub\n", iface, This);
318 return 0;
321 static D3DRMLIGHTTYPE WINAPI IDirect3DRMLightImpl_GetType(IDirect3DRMLight* iface)
323 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
325 FIXME("(%p/%p)->(): stub\n", iface, This);
327 return D3DRMLIGHT_AMBIENT;
330 static HRESULT WINAPI IDirect3DRMLightImpl_SetEnableFrame(IDirect3DRMLight* iface,
331 LPDIRECT3DRMFRAME frame)
333 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
335 FIXME("(%p/%p)->(%p): stub\n", iface, This, frame);
337 return E_NOTIMPL;
340 static HRESULT WINAPI IDirect3DRMLightImpl_GetEnableFrame(IDirect3DRMLight* iface,
341 LPDIRECT3DRMFRAME* frame)
343 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
345 FIXME("(%p/%p)->(%p): stub\n", iface, This, frame);
347 return E_NOTIMPL;
350 static const struct IDirect3DRMLightVtbl Direct3DRMLight_Vtbl =
352 /*** IUnknown methods ***/
353 IDirect3DRMLightImpl_QueryInterface,
354 IDirect3DRMLightImpl_AddRef,
355 IDirect3DRMLightImpl_Release,
356 /*** IDirect3DRMObject methods ***/
357 IDirect3DRMLightImpl_Clone,
358 IDirect3DRMLightImpl_AddDestroyCallback,
359 IDirect3DRMLightImpl_DeleteDestroyCallback,
360 IDirect3DRMLightImpl_SetAppData,
361 IDirect3DRMLightImpl_GetAppData,
362 IDirect3DRMLightImpl_SetName,
363 IDirect3DRMLightImpl_GetName,
364 IDirect3DRMLightImpl_GetClassName,
365 /*** IDirect3DRMLight methods ***/
366 IDirect3DRMLightImpl_SetType,
367 IDirect3DRMLightImpl_SetColor,
368 IDirect3DRMLightImpl_SetColorRGB,
369 IDirect3DRMLightImpl_SetRange,
370 IDirect3DRMLightImpl_SetUmbra,
371 IDirect3DRMLightImpl_SetPenumbra,
372 IDirect3DRMLightImpl_SetConstantAttenuation,
373 IDirect3DRMLightImpl_SetLinearAttenuation,
374 IDirect3DRMLightImpl_SetQuadraticAttenuation,
375 IDirect3DRMLightImpl_GetRange,
376 IDirect3DRMLightImpl_GetUmbra,
377 IDirect3DRMLightImpl_GetPenumbra,
378 IDirect3DRMLightImpl_GetConstantAttenuation,
379 IDirect3DRMLightImpl_GetLinearAttenuation,
380 IDirect3DRMLightImpl_GetQuadraticAttenuation,
381 IDirect3DRMLightImpl_GetColor,
382 IDirect3DRMLightImpl_GetType,
383 IDirect3DRMLightImpl_SetEnableFrame,
384 IDirect3DRMLightImpl_GetEnableFrame
387 HRESULT Direct3DRMLight_create(IUnknown** ppObj)
389 IDirect3DRMLightImpl* object;
391 TRACE("(%p)\n", ppObj);
393 object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirect3DRMLightImpl));
394 if (!object)
396 ERR("Out of memory\n");
397 return E_OUTOFMEMORY;
400 object->IDirect3DRMLight_iface.lpVtbl = &Direct3DRMLight_Vtbl;
401 object->ref = 1;
403 *ppObj = (IUnknown*)&object->IDirect3DRMLight_iface;
405 return S_OK;