d3drm: Implement IDirect3DRMMesh_GetGroup.
[wine] / dlls / d3drm / light.c
1 /*
2  * Implementation of IDirect3DRMLight Interface
3  *
4  * Copyright 2012 AndrĂ© Hentschel
5  *
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.
10  *
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.
15  *
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
19  */
20
21 #include "wine/debug.h"
22
23 #define COBJMACROS
24
25 #include "winbase.h"
26 #include "wingdi.h"
27
28 #include "d3drm_private.h"
29
30 WINE_DEFAULT_DEBUG_CHANNEL(d3drm);
31
32 typedef struct {
33     IDirect3DRMLight IDirect3DRMLight_iface;
34     LONG ref;
35 } IDirect3DRMLightImpl;
36
37 static inline IDirect3DRMLightImpl *impl_from_IDirect3DRMLight(IDirect3DRMLight *iface)
38 {
39     return CONTAINING_RECORD(iface, IDirect3DRMLightImpl, IDirect3DRMLight_iface);
40 }
41
42 /*** IUnknown methods ***/
43 static HRESULT WINAPI IDirect3DRMLightImpl_QueryInterface(IDirect3DRMLight* iface,
44                                                            REFIID riid, void** object)
45 {
46     IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
47
48     TRACE("(%p/%p)->(%s, %p)\n", iface, This, debugstr_guid(riid), object);
49
50     *object = NULL;
51
52     if(IsEqualGUID(riid, &IID_IUnknown) ||
53        IsEqualGUID(riid, &IID_IDirect3DRMLight))
54     {
55         *object = &This->IDirect3DRMLight_iface;
56     }
57     else
58     {
59         FIXME("interface %s not implemented\n", debugstr_guid(riid));
60         return E_NOINTERFACE;
61     }
62
63     IDirect3DRMLight_AddRef(iface);
64     return S_OK;
65 }
66
67 static ULONG WINAPI IDirect3DRMLightImpl_AddRef(IDirect3DRMLight* iface)
68 {
69     IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
70     ULONG ref = InterlockedIncrement(&This->ref);
71
72     TRACE("(%p)->(): new ref = %d\n", iface, ref);
73
74     return ref;
75 }
76
77 static ULONG WINAPI IDirect3DRMLightImpl_Release(IDirect3DRMLight* iface)
78 {
79     IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
80     ULONG ref = InterlockedDecrement(&This->ref);
81
82     TRACE("(%p)->(): new ref = %d\n", iface, ref);
83
84     if (!ref)
85         HeapFree(GetProcessHeap(), 0, This);
86
87     return ref;
88 }
89
90 /*** IDirect3DRMObject methods ***/
91 static HRESULT WINAPI IDirect3DRMLightImpl_Clone(IDirect3DRMLight* iface,
92                                                   LPUNKNOWN unkwn, REFIID riid,
93                                                   LPVOID* object)
94 {
95     IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
96
97     FIXME("(%p/%p)->(%p, %s, %p): stub\n", iface, This, unkwn, debugstr_guid(riid), object);
98
99     return E_NOTIMPL;
100 }
101
102 static HRESULT WINAPI IDirect3DRMLightImpl_AddDestroyCallback(IDirect3DRMLight* iface,
103                                                                D3DRMOBJECTCALLBACK cb,
104                                                                LPVOID argument)
105 {
106     IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
107
108     FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, argument);
109
110     return E_NOTIMPL;
111 }
112
113 static HRESULT WINAPI IDirect3DRMLightImpl_DeleteDestroyCallback(IDirect3DRMLight* iface,
114                                                                   D3DRMOBJECTCALLBACK cb,
115                                                                   LPVOID argument)
116 {
117     IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
118
119     FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, argument);
120
121     return E_NOTIMPL;
122 }
123
124 static HRESULT WINAPI IDirect3DRMLightImpl_SetAppData(IDirect3DRMLight* iface,
125                                                        DWORD data)
126 {
127     IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
128
129     FIXME("(%p/%p)->(%u): stub\n", iface, This, data);
130
131     return E_NOTIMPL;
132 }
133
134 static DWORD WINAPI IDirect3DRMLightImpl_GetAppData(IDirect3DRMLight* iface)
135 {
136     IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
137
138     FIXME("(%p/%p)->(): stub\n", iface, This);
139
140     return 0;
141 }
142
143 static HRESULT WINAPI IDirect3DRMLightImpl_SetName(IDirect3DRMLight* iface, LPCSTR name)
144 {
145     IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
146
147     FIXME("(%p/%p)->(%s): stub\n", iface, This, name);
148
149     return E_NOTIMPL;
150 }
151
152 static HRESULT WINAPI IDirect3DRMLightImpl_GetName(IDirect3DRMLight* iface,
153                                                     LPDWORD size, LPSTR name)
154 {
155     IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
156
157     FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, size, name);
158
159     return E_NOTIMPL;
160 }
161
162 static HRESULT WINAPI IDirect3DRMLightImpl_GetClassName(IDirect3DRMLight* iface,
163                                                          LPDWORD size, LPSTR name)
164 {
165     IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
166
167     FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, size, name);
168
169     return E_NOTIMPL;
170 }
171
172 /*** IDirect3DRMLight methods ***/
173 static HRESULT WINAPI IDirect3DRMLightImpl_SetType(IDirect3DRMLight* iface, D3DRMLIGHTTYPE type)
174 {
175     IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
176
177     FIXME("(%p/%p)->(%u): stub\n", iface, This, type);
178
179     return E_NOTIMPL;
180 }
181
182 static HRESULT WINAPI IDirect3DRMLightImpl_SetColor(IDirect3DRMLight* iface, D3DCOLOR color)
183 {
184     IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
185
186     FIXME("(%p/%p)->(%u): stub\n", iface, This, color);
187
188     return E_NOTIMPL;
189 }
190
191 static HRESULT WINAPI IDirect3DRMLightImpl_SetColorRGB(IDirect3DRMLight* iface,
192                                                          D3DVALUE red, D3DVALUE green, D3DVALUE blue)
193 {
194     IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
195
196     FIXME("(%p/%p)->(%f,%f,%f): stub\n", iface, This, red, green, blue);
197
198     return E_NOTIMPL;
199 }
200
201 static HRESULT WINAPI IDirect3DRMLightImpl_SetRange(IDirect3DRMLight* iface, D3DVALUE range)
202 {
203     IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
204
205     FIXME("(%p/%p)->(%f): stub\n", iface, This, range);
206
207     return E_NOTIMPL;
208 }
209
210 static HRESULT WINAPI IDirect3DRMLightImpl_SetUmbra(IDirect3DRMLight* iface, D3DVALUE umbra)
211 {
212     IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
213
214     FIXME("(%p/%p)->(%f): stub\n", iface, This, umbra);
215
216     return E_NOTIMPL;
217 }
218
219 static HRESULT WINAPI IDirect3DRMLightImpl_SetPenumbra(IDirect3DRMLight* iface, D3DVALUE penumbra)
220 {
221     IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
222
223     FIXME("(%p/%p)->(%f): stub\n", iface, This, penumbra);
224
225     return E_NOTIMPL;
226 }
227
228 static HRESULT WINAPI IDirect3DRMLightImpl_SetConstantAttenuation(IDirect3DRMLight* iface,
229                                                                     D3DVALUE cattenuation)
230 {
231     IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
232
233     FIXME("(%p/%p)->(%f): stub\n", iface, This, cattenuation);
234
235     return E_NOTIMPL;
236 }
237
238 static HRESULT WINAPI IDirect3DRMLightImpl_SetLinearAttenuation(IDirect3DRMLight* iface,
239                                                                   D3DVALUE lattenuation)
240 {
241     IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
242
243     FIXME("(%p/%p)->(%f): stub\n", iface, This, lattenuation);
244
245     return E_NOTIMPL;
246 }
247
248 static HRESULT WINAPI IDirect3DRMLightImpl_SetQuadraticAttenuation(IDirect3DRMLight* iface,
249                                                                      D3DVALUE qattenuation)
250 {
251     IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
252
253     FIXME("(%p/%p)->(%f): stub\n", iface, This, qattenuation);
254
255     return E_NOTIMPL;
256 }
257
258 static D3DVALUE WINAPI IDirect3DRMLightImpl_GetRange(IDirect3DRMLight* iface)
259 {
260     IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
261
262     FIXME("(%p/%p)->(): stub\n", iface, This);
263
264     return 0;
265 }
266
267 static D3DVALUE WINAPI IDirect3DRMLightImpl_GetUmbra(IDirect3DRMLight* iface)
268 {
269     IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
270
271     FIXME("(%p/%p)->(): stub\n", iface, This);
272
273     return 0;
274 }
275
276 static D3DVALUE WINAPI IDirect3DRMLightImpl_GetPenumbra(IDirect3DRMLight* iface)
277 {
278     IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
279
280     FIXME("(%p/%p)->(): stub\n", iface, This);
281
282     return 0;
283 }
284
285 static D3DVALUE WINAPI IDirect3DRMLightImpl_GetConstantAttenuation(IDirect3DRMLight* iface)
286 {
287     IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
288
289     FIXME("(%p/%p)->(): stub\n", iface, This);
290
291     return 0;
292 }
293
294 static D3DVALUE WINAPI IDirect3DRMLightImpl_GetLinearAttenuation(IDirect3DRMLight* iface)
295 {
296     IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
297
298     FIXME("(%p/%p)->(): stub\n", iface, This);
299
300     return 0;
301 }
302
303 static D3DVALUE WINAPI IDirect3DRMLightImpl_GetQuadraticAttenuation(IDirect3DRMLight* iface)
304 {
305     IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
306
307     FIXME("(%p/%p)->(): stub\n", iface, This);
308
309     return 0;
310 }
311
312 static D3DCOLOR WINAPI IDirect3DRMLightImpl_GetColor(IDirect3DRMLight* iface)
313 {
314     IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
315
316     FIXME("(%p/%p)->(): stub\n", iface, This);
317
318     return 0;
319 }
320
321 static D3DRMLIGHTTYPE WINAPI IDirect3DRMLightImpl_GetType(IDirect3DRMLight* iface)
322 {
323     IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
324
325     FIXME("(%p/%p)->(): stub\n", iface, This);
326
327     return D3DRMLIGHT_AMBIENT;
328 }
329
330 static HRESULT WINAPI IDirect3DRMLightImpl_SetEnableFrame(IDirect3DRMLight* iface,
331                                                             LPDIRECT3DRMFRAME frame)
332 {
333     IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
334
335     FIXME("(%p/%p)->(%p): stub\n", iface, This, frame);
336
337     return E_NOTIMPL;
338 }
339
340 static HRESULT WINAPI IDirect3DRMLightImpl_GetEnableFrame(IDirect3DRMLight* iface,
341                                                             LPDIRECT3DRMFRAME* frame)
342 {
343     IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
344
345     FIXME("(%p/%p)->(%p): stub\n", iface, This, frame);
346
347     return E_NOTIMPL;
348 }
349
350 static const struct IDirect3DRMLightVtbl Direct3DRMLight_Vtbl =
351 {
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
385 };
386
387 HRESULT Direct3DRMLight_create(IUnknown** ppObj)
388 {
389     IDirect3DRMLightImpl* object;
390
391     TRACE("(%p)\n", ppObj);
392
393     object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirect3DRMLightImpl));
394     if (!object)
395     {
396         ERR("Out of memory\n");
397         return E_OUTOFMEMORY;
398     }
399
400     object->IDirect3DRMLight_iface.lpVtbl = &Direct3DRMLight_Vtbl;
401     object->ref = 1;
402
403     *ppObj = (IUnknown*)&object->IDirect3DRMLight_iface;
404
405     return S_OK;
406 }