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"
28 #include "d3drm_private.h"
30 WINE_DEFAULT_DEBUG_CHANNEL(d3drm);
33 IDirect3DRMLight IDirect3DRMLight_iface;
38 } IDirect3DRMLightImpl;
40 static inline IDirect3DRMLightImpl *impl_from_IDirect3DRMLight(IDirect3DRMLight *iface)
42 return CONTAINING_RECORD(iface, IDirect3DRMLightImpl, IDirect3DRMLight_iface);
45 /*** IUnknown methods ***/
46 static HRESULT WINAPI IDirect3DRMLightImpl_QueryInterface(IDirect3DRMLight* iface,
47 REFIID riid, void** object)
49 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
51 TRACE("(%p/%p)->(%s, %p)\n", iface, This, debugstr_guid(riid), object);
55 if(IsEqualGUID(riid, &IID_IUnknown) ||
56 IsEqualGUID(riid, &IID_IDirect3DRMLight))
58 *object = &This->IDirect3DRMLight_iface;
62 FIXME("interface %s not implemented\n", debugstr_guid(riid));
66 IDirect3DRMLight_AddRef(iface);
70 static ULONG WINAPI IDirect3DRMLightImpl_AddRef(IDirect3DRMLight* iface)
72 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
73 ULONG ref = InterlockedIncrement(&This->ref);
75 TRACE("(%p)->(): new ref = %d\n", iface, ref);
80 static ULONG WINAPI IDirect3DRMLightImpl_Release(IDirect3DRMLight* iface)
82 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
83 ULONG ref = InterlockedDecrement(&This->ref);
85 TRACE("(%p)->(): new ref = %d\n", iface, ref);
88 HeapFree(GetProcessHeap(), 0, This);
93 /*** IDirect3DRMObject methods ***/
94 static HRESULT WINAPI IDirect3DRMLightImpl_Clone(IDirect3DRMLight* iface,
95 LPUNKNOWN unkwn, REFIID riid,
98 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
100 FIXME("(%p/%p)->(%p, %s, %p): stub\n", iface, This, unkwn, debugstr_guid(riid), object);
105 static HRESULT WINAPI IDirect3DRMLightImpl_AddDestroyCallback(IDirect3DRMLight* iface,
106 D3DRMOBJECTCALLBACK cb,
109 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
111 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, argument);
116 static HRESULT WINAPI IDirect3DRMLightImpl_DeleteDestroyCallback(IDirect3DRMLight* iface,
117 D3DRMOBJECTCALLBACK cb,
120 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
122 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, argument);
127 static HRESULT WINAPI IDirect3DRMLightImpl_SetAppData(IDirect3DRMLight* iface,
130 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
132 FIXME("(%p/%p)->(%u): stub\n", iface, This, data);
137 static DWORD WINAPI IDirect3DRMLightImpl_GetAppData(IDirect3DRMLight* iface)
139 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
141 FIXME("(%p/%p)->(): stub\n", iface, This);
146 static HRESULT WINAPI IDirect3DRMLightImpl_SetName(IDirect3DRMLight* iface, LPCSTR name)
148 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
150 FIXME("(%p/%p)->(%s): stub\n", iface, This, name);
155 static HRESULT WINAPI IDirect3DRMLightImpl_GetName(IDirect3DRMLight* iface,
156 LPDWORD size, LPSTR name)
158 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
160 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, size, name);
165 static HRESULT WINAPI IDirect3DRMLightImpl_GetClassName(IDirect3DRMLight* iface,
166 LPDWORD size, LPSTR name)
168 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
170 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, size, name);
175 /*** IDirect3DRMLight methods ***/
176 static HRESULT WINAPI IDirect3DRMLightImpl_SetType(IDirect3DRMLight* iface, D3DRMLIGHTTYPE type)
178 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
180 TRACE("(%p/%p)->(%u)\n", iface, This, type);
187 static HRESULT WINAPI IDirect3DRMLightImpl_SetColor(IDirect3DRMLight* iface, D3DCOLOR color)
189 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
191 TRACE("(%p/%p)->(%u)\n", iface, This, color);
198 static HRESULT WINAPI IDirect3DRMLightImpl_SetColorRGB(IDirect3DRMLight* iface,
199 D3DVALUE red, D3DVALUE green, D3DVALUE blue)
201 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
203 TRACE("(%p/%p)->(%f,%f,%f)\n", iface, This, red, green, blue);
205 This->color = D3DCOLOR_ARGB(0xff, (BYTE)(red * 255.0f),
206 (BYTE)(green * 255.0f),
207 (BYTE)(blue * 255.0f));
212 static HRESULT WINAPI IDirect3DRMLightImpl_SetRange(IDirect3DRMLight* iface, D3DVALUE range)
214 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
216 TRACE("(%p/%p)->(%f)\n", iface, This, range);
223 static HRESULT WINAPI IDirect3DRMLightImpl_SetUmbra(IDirect3DRMLight* iface, D3DVALUE umbra)
225 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
227 FIXME("(%p/%p)->(%f): stub\n", iface, This, umbra);
232 static HRESULT WINAPI IDirect3DRMLightImpl_SetPenumbra(IDirect3DRMLight* iface, D3DVALUE penumbra)
234 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
236 FIXME("(%p/%p)->(%f): stub\n", iface, This, penumbra);
241 static HRESULT WINAPI IDirect3DRMLightImpl_SetConstantAttenuation(IDirect3DRMLight* iface,
242 D3DVALUE cattenuation)
244 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
246 FIXME("(%p/%p)->(%f): stub\n", iface, This, cattenuation);
251 static HRESULT WINAPI IDirect3DRMLightImpl_SetLinearAttenuation(IDirect3DRMLight* iface,
252 D3DVALUE lattenuation)
254 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
256 FIXME("(%p/%p)->(%f): stub\n", iface, This, lattenuation);
261 static HRESULT WINAPI IDirect3DRMLightImpl_SetQuadraticAttenuation(IDirect3DRMLight* iface,
262 D3DVALUE qattenuation)
264 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
266 FIXME("(%p/%p)->(%f): stub\n", iface, This, qattenuation);
271 static D3DVALUE WINAPI IDirect3DRMLightImpl_GetRange(IDirect3DRMLight* iface)
273 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
275 TRACE("(%p/%p)->()\n", iface, This);
280 static D3DVALUE WINAPI IDirect3DRMLightImpl_GetUmbra(IDirect3DRMLight* iface)
282 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
284 FIXME("(%p/%p)->(): stub\n", iface, This);
289 static D3DVALUE WINAPI IDirect3DRMLightImpl_GetPenumbra(IDirect3DRMLight* iface)
291 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
293 FIXME("(%p/%p)->(): stub\n", iface, This);
298 static D3DVALUE WINAPI IDirect3DRMLightImpl_GetConstantAttenuation(IDirect3DRMLight* iface)
300 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
302 FIXME("(%p/%p)->(): stub\n", iface, This);
307 static D3DVALUE WINAPI IDirect3DRMLightImpl_GetLinearAttenuation(IDirect3DRMLight* iface)
309 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
311 FIXME("(%p/%p)->(): stub\n", iface, This);
316 static D3DVALUE WINAPI IDirect3DRMLightImpl_GetQuadraticAttenuation(IDirect3DRMLight* iface)
318 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
320 FIXME("(%p/%p)->(): stub\n", iface, This);
325 static D3DCOLOR WINAPI IDirect3DRMLightImpl_GetColor(IDirect3DRMLight* iface)
327 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
329 TRACE("(%p/%p)->()\n", iface, This);
334 static D3DRMLIGHTTYPE WINAPI IDirect3DRMLightImpl_GetType(IDirect3DRMLight* iface)
336 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
338 TRACE("(%p/%p)->()\n", iface, This);
343 static HRESULT WINAPI IDirect3DRMLightImpl_SetEnableFrame(IDirect3DRMLight* iface,
344 LPDIRECT3DRMFRAME frame)
346 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
348 FIXME("(%p/%p)->(%p): stub\n", iface, This, frame);
353 static HRESULT WINAPI IDirect3DRMLightImpl_GetEnableFrame(IDirect3DRMLight* iface,
354 LPDIRECT3DRMFRAME* frame)
356 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
358 FIXME("(%p/%p)->(%p): stub\n", iface, This, frame);
363 static const struct IDirect3DRMLightVtbl Direct3DRMLight_Vtbl =
365 /*** IUnknown methods ***/
366 IDirect3DRMLightImpl_QueryInterface,
367 IDirect3DRMLightImpl_AddRef,
368 IDirect3DRMLightImpl_Release,
369 /*** IDirect3DRMObject methods ***/
370 IDirect3DRMLightImpl_Clone,
371 IDirect3DRMLightImpl_AddDestroyCallback,
372 IDirect3DRMLightImpl_DeleteDestroyCallback,
373 IDirect3DRMLightImpl_SetAppData,
374 IDirect3DRMLightImpl_GetAppData,
375 IDirect3DRMLightImpl_SetName,
376 IDirect3DRMLightImpl_GetName,
377 IDirect3DRMLightImpl_GetClassName,
378 /*** IDirect3DRMLight methods ***/
379 IDirect3DRMLightImpl_SetType,
380 IDirect3DRMLightImpl_SetColor,
381 IDirect3DRMLightImpl_SetColorRGB,
382 IDirect3DRMLightImpl_SetRange,
383 IDirect3DRMLightImpl_SetUmbra,
384 IDirect3DRMLightImpl_SetPenumbra,
385 IDirect3DRMLightImpl_SetConstantAttenuation,
386 IDirect3DRMLightImpl_SetLinearAttenuation,
387 IDirect3DRMLightImpl_SetQuadraticAttenuation,
388 IDirect3DRMLightImpl_GetRange,
389 IDirect3DRMLightImpl_GetUmbra,
390 IDirect3DRMLightImpl_GetPenumbra,
391 IDirect3DRMLightImpl_GetConstantAttenuation,
392 IDirect3DRMLightImpl_GetLinearAttenuation,
393 IDirect3DRMLightImpl_GetQuadraticAttenuation,
394 IDirect3DRMLightImpl_GetColor,
395 IDirect3DRMLightImpl_GetType,
396 IDirect3DRMLightImpl_SetEnableFrame,
397 IDirect3DRMLightImpl_GetEnableFrame
400 HRESULT Direct3DRMLight_create(IUnknown** ppObj)
402 IDirect3DRMLightImpl* object;
404 TRACE("(%p)\n", ppObj);
406 object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirect3DRMLightImpl));
409 ERR("Out of memory\n");
410 return E_OUTOFMEMORY;
413 object->IDirect3DRMLight_iface.lpVtbl = &Direct3DRMLight_Vtbl;
416 *ppObj = (IUnknown*)&object->IDirect3DRMLight_iface;