dbghelp: Bump limits
[wine/multimedia.git] / dlls / d3drm / light.c
blob1326b6adf20079072d428988e78bd84b6c2cdf3d
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 #define D3DCOLOR_ARGB(a,r,g,b) ((D3DCOLOR)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff)))
34 typedef struct {
35 IDirect3DRMLight IDirect3DRMLight_iface;
36 LONG ref;
37 D3DRMLIGHTTYPE type;
38 D3DCOLOR color;
39 D3DVALUE range;
40 } IDirect3DRMLightImpl;
42 static inline IDirect3DRMLightImpl *impl_from_IDirect3DRMLight(IDirect3DRMLight *iface)
44 return CONTAINING_RECORD(iface, IDirect3DRMLightImpl, IDirect3DRMLight_iface);
47 /*** IUnknown methods ***/
48 static HRESULT WINAPI IDirect3DRMLightImpl_QueryInterface(IDirect3DRMLight* iface,
49 REFIID riid, void** object)
51 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
53 TRACE("(%p/%p)->(%s, %p)\n", iface, This, debugstr_guid(riid), object);
55 *object = NULL;
57 if(IsEqualGUID(riid, &IID_IUnknown) ||
58 IsEqualGUID(riid, &IID_IDirect3DRMLight))
60 *object = &This->IDirect3DRMLight_iface;
62 else
64 FIXME("interface %s not implemented\n", debugstr_guid(riid));
65 return E_NOINTERFACE;
68 IDirect3DRMLight_AddRef(iface);
69 return S_OK;
72 static ULONG WINAPI IDirect3DRMLightImpl_AddRef(IDirect3DRMLight* iface)
74 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
75 ULONG ref = InterlockedIncrement(&This->ref);
77 TRACE("(%p)->(): new ref = %d\n", iface, ref);
79 return ref;
82 static ULONG WINAPI IDirect3DRMLightImpl_Release(IDirect3DRMLight* iface)
84 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
85 ULONG ref = InterlockedDecrement(&This->ref);
87 TRACE("(%p)->(): new ref = %d\n", iface, ref);
89 if (!ref)
90 HeapFree(GetProcessHeap(), 0, This);
92 return ref;
95 /*** IDirect3DRMObject methods ***/
96 static HRESULT WINAPI IDirect3DRMLightImpl_Clone(IDirect3DRMLight* iface,
97 LPUNKNOWN unkwn, REFIID riid,
98 LPVOID* object)
100 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
102 FIXME("(%p/%p)->(%p, %s, %p): stub\n", iface, This, unkwn, debugstr_guid(riid), object);
104 return E_NOTIMPL;
107 static HRESULT WINAPI IDirect3DRMLightImpl_AddDestroyCallback(IDirect3DRMLight* iface,
108 D3DRMOBJECTCALLBACK cb,
109 LPVOID argument)
111 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
113 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, argument);
115 return E_NOTIMPL;
118 static HRESULT WINAPI IDirect3DRMLightImpl_DeleteDestroyCallback(IDirect3DRMLight* iface,
119 D3DRMOBJECTCALLBACK cb,
120 LPVOID argument)
122 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
124 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, argument);
126 return E_NOTIMPL;
129 static HRESULT WINAPI IDirect3DRMLightImpl_SetAppData(IDirect3DRMLight* iface,
130 DWORD data)
132 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
134 FIXME("(%p/%p)->(%u): stub\n", iface, This, data);
136 return E_NOTIMPL;
139 static DWORD WINAPI IDirect3DRMLightImpl_GetAppData(IDirect3DRMLight* iface)
141 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
143 FIXME("(%p/%p)->(): stub\n", iface, This);
145 return 0;
148 static HRESULT WINAPI IDirect3DRMLightImpl_SetName(IDirect3DRMLight* iface, LPCSTR name)
150 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
152 FIXME("(%p/%p)->(%s): stub\n", iface, This, name);
154 return E_NOTIMPL;
157 static HRESULT WINAPI IDirect3DRMLightImpl_GetName(IDirect3DRMLight* iface,
158 LPDWORD size, LPSTR name)
160 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
162 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, size, name);
164 return E_NOTIMPL;
167 static HRESULT WINAPI IDirect3DRMLightImpl_GetClassName(IDirect3DRMLight* iface,
168 LPDWORD size, LPSTR name)
170 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
172 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, size, name);
174 return E_NOTIMPL;
177 /*** IDirect3DRMLight methods ***/
178 static HRESULT WINAPI IDirect3DRMLightImpl_SetType(IDirect3DRMLight* iface, D3DRMLIGHTTYPE type)
180 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
182 TRACE("(%p/%p)->(%u)\n", iface, This, type);
184 This->type = type;
186 return D3DRM_OK;
189 static HRESULT WINAPI IDirect3DRMLightImpl_SetColor(IDirect3DRMLight* iface, D3DCOLOR color)
191 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
193 TRACE("(%p/%p)->(%u)\n", iface, This, color);
195 This->color = color;
197 return D3DRM_OK;
200 static HRESULT WINAPI IDirect3DRMLightImpl_SetColorRGB(IDirect3DRMLight* iface,
201 D3DVALUE red, D3DVALUE green, D3DVALUE blue)
203 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
205 TRACE("(%p/%p)->(%f,%f,%f)\n", iface, This, red, green, blue);
207 This->color = D3DCOLOR_ARGB(0xff, (BYTE)(red * 255.0f),
208 (BYTE)(green * 255.0f),
209 (BYTE)(blue * 255.0f));
211 return D3DRM_OK;
214 static HRESULT WINAPI IDirect3DRMLightImpl_SetRange(IDirect3DRMLight* iface, D3DVALUE range)
216 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
218 TRACE("(%p/%p)->(%f)\n", iface, This, range);
220 This->range = range;
222 return D3DRM_OK;
225 static HRESULT WINAPI IDirect3DRMLightImpl_SetUmbra(IDirect3DRMLight* iface, D3DVALUE umbra)
227 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
229 FIXME("(%p/%p)->(%f): stub\n", iface, This, umbra);
231 return E_NOTIMPL;
234 static HRESULT WINAPI IDirect3DRMLightImpl_SetPenumbra(IDirect3DRMLight* iface, D3DVALUE penumbra)
236 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
238 FIXME("(%p/%p)->(%f): stub\n", iface, This, penumbra);
240 return E_NOTIMPL;
243 static HRESULT WINAPI IDirect3DRMLightImpl_SetConstantAttenuation(IDirect3DRMLight* iface,
244 D3DVALUE cattenuation)
246 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
248 FIXME("(%p/%p)->(%f): stub\n", iface, This, cattenuation);
250 return E_NOTIMPL;
253 static HRESULT WINAPI IDirect3DRMLightImpl_SetLinearAttenuation(IDirect3DRMLight* iface,
254 D3DVALUE lattenuation)
256 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
258 FIXME("(%p/%p)->(%f): stub\n", iface, This, lattenuation);
260 return E_NOTIMPL;
263 static HRESULT WINAPI IDirect3DRMLightImpl_SetQuadraticAttenuation(IDirect3DRMLight* iface,
264 D3DVALUE qattenuation)
266 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
268 FIXME("(%p/%p)->(%f): stub\n", iface, This, qattenuation);
270 return E_NOTIMPL;
273 static D3DVALUE WINAPI IDirect3DRMLightImpl_GetRange(IDirect3DRMLight* iface)
275 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
277 TRACE("(%p/%p)->()\n", iface, This);
279 return This->range;
282 static D3DVALUE WINAPI IDirect3DRMLightImpl_GetUmbra(IDirect3DRMLight* iface)
284 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
286 FIXME("(%p/%p)->(): stub\n", iface, This);
288 return 0;
291 static D3DVALUE WINAPI IDirect3DRMLightImpl_GetPenumbra(IDirect3DRMLight* iface)
293 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
295 FIXME("(%p/%p)->(): stub\n", iface, This);
297 return 0;
300 static D3DVALUE WINAPI IDirect3DRMLightImpl_GetConstantAttenuation(IDirect3DRMLight* iface)
302 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
304 FIXME("(%p/%p)->(): stub\n", iface, This);
306 return 0;
309 static D3DVALUE WINAPI IDirect3DRMLightImpl_GetLinearAttenuation(IDirect3DRMLight* iface)
311 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
313 FIXME("(%p/%p)->(): stub\n", iface, This);
315 return 0;
318 static D3DVALUE WINAPI IDirect3DRMLightImpl_GetQuadraticAttenuation(IDirect3DRMLight* iface)
320 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
322 FIXME("(%p/%p)->(): stub\n", iface, This);
324 return 0;
327 static D3DCOLOR WINAPI IDirect3DRMLightImpl_GetColor(IDirect3DRMLight* iface)
329 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
331 TRACE("(%p/%p)->()\n", iface, This);
333 return This->color;
336 static D3DRMLIGHTTYPE WINAPI IDirect3DRMLightImpl_GetType(IDirect3DRMLight* iface)
338 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
340 TRACE("(%p/%p)->()\n", iface, This);
342 return This->type;
345 static HRESULT WINAPI IDirect3DRMLightImpl_SetEnableFrame(IDirect3DRMLight* iface,
346 LPDIRECT3DRMFRAME frame)
348 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
350 FIXME("(%p/%p)->(%p): stub\n", iface, This, frame);
352 return E_NOTIMPL;
355 static HRESULT WINAPI IDirect3DRMLightImpl_GetEnableFrame(IDirect3DRMLight* iface,
356 LPDIRECT3DRMFRAME* frame)
358 IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
360 FIXME("(%p/%p)->(%p): stub\n", iface, This, frame);
362 return E_NOTIMPL;
365 static const struct IDirect3DRMLightVtbl Direct3DRMLight_Vtbl =
367 /*** IUnknown methods ***/
368 IDirect3DRMLightImpl_QueryInterface,
369 IDirect3DRMLightImpl_AddRef,
370 IDirect3DRMLightImpl_Release,
371 /*** IDirect3DRMObject methods ***/
372 IDirect3DRMLightImpl_Clone,
373 IDirect3DRMLightImpl_AddDestroyCallback,
374 IDirect3DRMLightImpl_DeleteDestroyCallback,
375 IDirect3DRMLightImpl_SetAppData,
376 IDirect3DRMLightImpl_GetAppData,
377 IDirect3DRMLightImpl_SetName,
378 IDirect3DRMLightImpl_GetName,
379 IDirect3DRMLightImpl_GetClassName,
380 /*** IDirect3DRMLight methods ***/
381 IDirect3DRMLightImpl_SetType,
382 IDirect3DRMLightImpl_SetColor,
383 IDirect3DRMLightImpl_SetColorRGB,
384 IDirect3DRMLightImpl_SetRange,
385 IDirect3DRMLightImpl_SetUmbra,
386 IDirect3DRMLightImpl_SetPenumbra,
387 IDirect3DRMLightImpl_SetConstantAttenuation,
388 IDirect3DRMLightImpl_SetLinearAttenuation,
389 IDirect3DRMLightImpl_SetQuadraticAttenuation,
390 IDirect3DRMLightImpl_GetRange,
391 IDirect3DRMLightImpl_GetUmbra,
392 IDirect3DRMLightImpl_GetPenumbra,
393 IDirect3DRMLightImpl_GetConstantAttenuation,
394 IDirect3DRMLightImpl_GetLinearAttenuation,
395 IDirect3DRMLightImpl_GetQuadraticAttenuation,
396 IDirect3DRMLightImpl_GetColor,
397 IDirect3DRMLightImpl_GetType,
398 IDirect3DRMLightImpl_SetEnableFrame,
399 IDirect3DRMLightImpl_GetEnableFrame
402 HRESULT Direct3DRMLight_create(IUnknown** ppObj)
404 IDirect3DRMLightImpl* object;
406 TRACE("(%p)\n", ppObj);
408 object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirect3DRMLightImpl));
409 if (!object)
411 ERR("Out of memory\n");
412 return E_OUTOFMEMORY;
415 object->IDirect3DRMLight_iface.lpVtbl = &Direct3DRMLight_Vtbl;
416 object->ref = 1;
418 *ppObj = (IUnknown*)&object->IDirect3DRMLight_iface;
420 return S_OK;