d3drm: Implement IDirect3DRMViewportX_[Get|Set]Front.
[wine] / dlls / d3drm / viewport.c
1 /*
2  * Implementation of IDirect3DRMViewport Interface
3  *
4  * Copyright 2012 AndrĂ© Hentschel
5  *
6  * This file contains the (internal) driver registration functions,
7  * driver enumeration APIs and DirectDraw creation functions.
8  *
9  * This library is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public
11  * License as published by the Free Software Foundation; either
12  * version 2.1 of the License, or (at your option) any later version.
13  *
14  * This library is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17  * Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with this library; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
22  */
23
24 #include "wine/debug.h"
25
26 #define COBJMACROS
27
28 #include "winbase.h"
29 #include "wingdi.h"
30
31 #include "d3drm_private.h"
32
33 WINE_DEFAULT_DEBUG_CHANNEL(d3drm);
34
35 typedef struct {
36     IDirect3DRMViewport IDirect3DRMViewport_iface;
37     IDirect3DRMViewport2 IDirect3DRMViewport2_iface;
38     LONG ref;
39     D3DVALUE back;
40     D3DVALUE front;
41 } IDirect3DRMViewportImpl;
42
43 static inline IDirect3DRMViewportImpl *impl_from_IDirect3DRMViewport(IDirect3DRMViewport *iface)
44 {
45     return CONTAINING_RECORD(iface, IDirect3DRMViewportImpl, IDirect3DRMViewport_iface);
46 }
47
48 static inline IDirect3DRMViewportImpl *impl_from_IDirect3DRMViewport2(IDirect3DRMViewport2 *iface)
49 {
50     return CONTAINING_RECORD(iface, IDirect3DRMViewportImpl, IDirect3DRMViewport2_iface);
51 }
52
53 /*** IUnknown methods ***/
54 static HRESULT WINAPI IDirect3DRMViewportImpl_QueryInterface(IDirect3DRMViewport* iface,
55                                                              REFIID riid, void** object)
56 {
57     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
58
59     TRACE("(%p/%p)->(%s, %p)\n", iface, This, debugstr_guid(riid), object);
60
61     *object = NULL;
62
63     if (IsEqualGUID(riid, &IID_IUnknown) ||
64         IsEqualGUID(riid, &IID_IDirect3DRMViewport))
65     {
66         *object = &This->IDirect3DRMViewport_iface;
67     }
68     else if(IsEqualGUID(riid, &IID_IDirect3DRMViewport2))
69     {
70         *object = &This->IDirect3DRMViewport2_iface;
71     }
72     else
73     {
74         FIXME("interface %s not implemented\n", debugstr_guid(riid));
75         return E_NOINTERFACE;
76     }
77
78     IDirect3DRMViewport_AddRef(iface);
79     return S_OK;
80 }
81
82 static ULONG WINAPI IDirect3DRMViewportImpl_AddRef(IDirect3DRMViewport* iface)
83 {
84     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
85     ULONG ref = InterlockedIncrement(&This->ref);
86
87     TRACE("(%p)->(): new ref = %d\n", This, ref);
88
89     return ref;
90 }
91
92 static ULONG WINAPI IDirect3DRMViewportImpl_Release(IDirect3DRMViewport* iface)
93 {
94     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
95     ULONG ref = InterlockedDecrement(&This->ref);
96
97     TRACE("(%p)->(): new ref = %d\n", This, ref);
98
99     if (!ref)
100         HeapFree(GetProcessHeap(), 0, This);
101
102     return ref;
103 }
104
105 /*** IDirect3DRMObject methods ***/
106 static HRESULT WINAPI IDirect3DRMViewportImpl_Clone(IDirect3DRMViewport* iface,
107                                                         LPUNKNOWN unkwn, REFIID riid,
108                                                         LPVOID* object)
109 {
110     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
111
112     FIXME("(%p/%p)->(%p, %s, %p): stub\n", iface, This, unkwn, debugstr_guid(riid), object);
113
114     return E_NOTIMPL;
115 }
116
117 static HRESULT WINAPI IDirect3DRMViewportImpl_AddDestroyCallback(IDirect3DRMViewport* iface,
118                                                                      D3DRMOBJECTCALLBACK cb,
119                                                                      LPVOID argument)
120 {
121     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
122
123     FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, argument);
124
125     return E_NOTIMPL;
126 }
127
128 static HRESULT WINAPI IDirect3DRMViewportImpl_DeleteDestroyCallback(IDirect3DRMViewport* iface,
129                                                                         D3DRMOBJECTCALLBACK cb,
130                                                                         LPVOID argument)
131 {
132     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
133
134     FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, argument);
135
136     return E_NOTIMPL;
137 }
138
139 static HRESULT WINAPI IDirect3DRMViewportImpl_SetAppData(IDirect3DRMViewport* iface,
140                                                              DWORD data)
141 {
142     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
143
144     FIXME("(%p/%p)->(%u): stub\n", iface, This, data);
145
146     return E_NOTIMPL;
147 }
148
149 static DWORD WINAPI IDirect3DRMViewportImpl_GetAppData(IDirect3DRMViewport* iface)
150 {
151     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
152
153     FIXME("(%p/%p)->(): stub\n", iface, This);
154
155     return 0;
156 }
157
158 static HRESULT WINAPI IDirect3DRMViewportImpl_SetName(IDirect3DRMViewport* iface, LPCSTR name)
159 {
160     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
161
162     FIXME("(%p/%p)->(%s): stub\n", iface, This, name);
163
164     return E_NOTIMPL;
165 }
166
167 static HRESULT WINAPI IDirect3DRMViewportImpl_GetName(IDirect3DRMViewport* iface,
168                                                           LPDWORD size, LPSTR name)
169 {
170     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
171
172     FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, size, name);
173
174     return E_NOTIMPL;
175 }
176
177 static HRESULT WINAPI IDirect3DRMViewportImpl_GetClassName(IDirect3DRMViewport* iface,
178                                                                LPDWORD size, LPSTR name)
179 {
180     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
181
182     FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, size, name);
183
184     return E_NOTIMPL;
185 }
186
187 /*** IDirect3DRMViewport methods ***/
188 static HRESULT WINAPI IDirect3DRMViewportImpl_Init(IDirect3DRMViewport* iface,
189                                                    LPDIRECT3DRMDEVICE dev, LPDIRECT3DRMFRAME camera,
190                                                    DWORD xpos, DWORD ypos,
191                                                    DWORD width, DWORD height)
192 {
193     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
194
195     FIXME("(%p/%p)->(%p, %p, %u, %u, %u, %u): stub\n", iface, This, dev, camera,
196           xpos, ypos, width, height);
197
198     return E_NOTIMPL;
199 }
200
201 static HRESULT WINAPI IDirect3DRMViewportImpl_Clear(IDirect3DRMViewport* iface)
202 {
203     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
204
205     FIXME("(%p/%p)->(): stub\n", iface, This);
206
207     return E_NOTIMPL;
208 }
209
210 static HRESULT WINAPI IDirect3DRMViewportImpl_Render(IDirect3DRMViewport* iface,
211                                                      LPDIRECT3DRMFRAME frame)
212 {
213     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
214
215     FIXME("(%p/%p)->(%p): stub\n", iface, This, frame);
216
217     return E_NOTIMPL;
218 }
219
220 static HRESULT WINAPI IDirect3DRMViewportImpl_SetFront(IDirect3DRMViewport* iface, D3DVALUE front)
221 {
222     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
223
224     TRACE("(%p/%p)->(%f)\n", iface, This, front);
225
226     return IDirect3DRMViewport2_SetFront(&This->IDirect3DRMViewport2_iface, front);
227 }
228
229 static HRESULT WINAPI IDirect3DRMViewportImpl_SetBack(IDirect3DRMViewport* iface, D3DVALUE back)
230 {
231     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
232
233     TRACE("(%p/%p)->(%f)\n", iface, This, back);
234
235     return IDirect3DRMViewport2_SetBack(&This->IDirect3DRMViewport2_iface, back);
236 }
237
238 static HRESULT WINAPI IDirect3DRMViewportImpl_SetField(IDirect3DRMViewport* iface, D3DVALUE field)
239 {
240     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
241
242     FIXME("(%p/%p)->(%f): stub\n", iface, This, field);
243
244     return E_NOTIMPL;
245 }
246
247 static HRESULT WINAPI IDirect3DRMViewportImpl_SetUniformScaling(IDirect3DRMViewport* iface, BOOL b)
248 {
249     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
250
251     FIXME("(%p/%p)->(%d): stub\n", iface, This, b);
252
253     return E_NOTIMPL;
254 }
255
256 static HRESULT WINAPI IDirect3DRMViewportImpl_SetCamera(IDirect3DRMViewport* iface,
257                                                         LPDIRECT3DRMFRAME frame)
258 {
259     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
260
261     FIXME("(%p/%p)->(%p): stub\n", iface, This, frame);
262
263     return E_NOTIMPL;
264 }
265
266 static HRESULT WINAPI IDirect3DRMViewportImpl_SetProjection(IDirect3DRMViewport* iface,
267                                                             D3DRMPROJECTIONTYPE type)
268 {
269     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
270
271     FIXME("(%p/%p)->(%u): stub\n", iface, This, type);
272
273     return S_OK;
274 }
275
276 static HRESULT WINAPI IDirect3DRMViewportImpl_Transform(IDirect3DRMViewport* iface,
277                                                         D3DRMVECTOR4D *d, D3DVECTOR *s)
278 {
279     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
280
281     FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, d, s);
282
283     return E_NOTIMPL;
284 }
285
286 static HRESULT WINAPI IDirect3DRMViewportImpl_InverseTransform(IDirect3DRMViewport* iface,
287                                                                D3DVECTOR *d, D3DRMVECTOR4D *s)
288 {
289     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
290
291     FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, d, s);
292
293     return E_NOTIMPL;
294 }
295
296 static HRESULT WINAPI IDirect3DRMViewportImpl_Configure(IDirect3DRMViewport* iface, LONG x, LONG y,
297                                                         DWORD width, DWORD height)
298 {
299     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
300
301     FIXME("(%p/%p)->(%u, %u, %u, %u): stub\n", iface, This, x, y, width, height);
302
303     return E_NOTIMPL;
304 }
305
306 static HRESULT WINAPI IDirect3DRMViewportImpl_ForceUpdate(IDirect3DRMViewport* iface,
307                                                           DWORD x1, DWORD y1, DWORD x2, DWORD y2)
308 {
309     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
310
311     FIXME("(%p/%p)->(%u, %u, %u, %u): stub\n", iface, This, x1, y1, x2, y2);
312
313     return E_NOTIMPL;
314 }
315
316 static HRESULT WINAPI IDirect3DRMViewportImpl_SetPlane(IDirect3DRMViewport* iface,
317                                                        D3DVALUE left, D3DVALUE right,
318                                                        D3DVALUE bottom, D3DVALUE top)
319 {
320     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
321
322     FIXME("(%p/%p)->(%f, %f, %f, %f): stub\n", iface, This, left, right, bottom, top);
323
324     return E_NOTIMPL;
325 }
326
327 static HRESULT WINAPI IDirect3DRMViewportImpl_GetCamera(IDirect3DRMViewport* iface,
328                                                         LPDIRECT3DRMFRAME * frame)
329 {
330     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
331
332     FIXME("(%p/%p)->(%p): stub\n", iface, This, frame);
333
334     return E_NOTIMPL;
335 }
336
337 static HRESULT WINAPI IDirect3DRMViewportImpl_GetDevice(IDirect3DRMViewport* iface,
338                                                         LPDIRECT3DRMDEVICE * device)
339 {
340     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
341
342     FIXME("(%p/%p)->(%p): stub\n", iface, This, device);
343
344     return E_NOTIMPL;
345 }
346
347 static HRESULT WINAPI IDirect3DRMViewportImpl_GetPlane(IDirect3DRMViewport* iface,
348                                                        D3DVALUE *left, D3DVALUE *right,
349                                                        D3DVALUE *bottom, D3DVALUE *top)
350 {
351     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
352
353     FIXME("(%p/%p)->(%p, %p, %p, %p): stub\n", iface, This, left, right, bottom, top);
354
355     return E_NOTIMPL;
356 }
357
358 static HRESULT WINAPI IDirect3DRMViewportImpl_Pick(IDirect3DRMViewport* iface, LONG x, LONG y,
359                                                    LPDIRECT3DRMPICKEDARRAY *return_visuals)
360 {
361     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
362
363     FIXME("(%p/%p)->(%u, %u, %p): stub\n", iface, This, x, y, return_visuals);
364
365     return E_NOTIMPL;
366 }
367
368 static BOOL WINAPI IDirect3DRMViewportImpl_GetUniformScaling(IDirect3DRMViewport* iface)
369 {
370     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
371
372     FIXME("(%p/%p)->(): stub\n", iface, This);
373
374     return E_NOTIMPL;
375 }
376
377 static LONG WINAPI IDirect3DRMViewportImpl_GetX(IDirect3DRMViewport* iface)
378 {
379     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
380
381     FIXME("(%p/%p)->(): stub\n", iface, This);
382
383     return E_NOTIMPL;
384 }
385
386 static LONG WINAPI IDirect3DRMViewportImpl_GetY(IDirect3DRMViewport* iface)
387 {
388     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
389
390     FIXME("(%p/%p)->(): stub\n", iface, This);
391
392     return E_NOTIMPL;
393 }
394
395 static DWORD WINAPI IDirect3DRMViewportImpl_GetWidth(IDirect3DRMViewport* iface)
396 {
397     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
398
399     FIXME("(%p/%p)->(): stub\n", iface, This);
400
401     return E_NOTIMPL;
402 }
403
404 static DWORD WINAPI IDirect3DRMViewportImpl_GetHeight(IDirect3DRMViewport* iface)
405 {
406     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
407
408     FIXME("(%p/%p)->(): stub\n", iface, This);
409
410     return E_NOTIMPL;
411 }
412
413 static D3DVALUE WINAPI IDirect3DRMViewportImpl_GetField(IDirect3DRMViewport* iface)
414 {
415     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
416
417     FIXME("(%p/%p)->(): stub\n", iface, This);
418
419     return E_NOTIMPL;
420 }
421
422 static D3DVALUE WINAPI IDirect3DRMViewportImpl_GetBack(IDirect3DRMViewport* iface)
423 {
424     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
425
426     TRACE("(%p/%p)->()\n", iface, This);
427
428     return IDirect3DRMViewport2_GetBack(&This->IDirect3DRMViewport2_iface);
429 }
430
431 static D3DVALUE WINAPI IDirect3DRMViewportImpl_GetFront(IDirect3DRMViewport* iface)
432 {
433     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
434
435     TRACE("(%p/%p)->()\n", iface, This);
436
437     return IDirect3DRMViewport2_GetFront(&This->IDirect3DRMViewport2_iface);
438 }
439
440 static D3DRMPROJECTIONTYPE WINAPI IDirect3DRMViewportImpl_GetProjection(IDirect3DRMViewport* iface)
441 {
442     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
443
444     FIXME("(%p/%p)->(): stub\n", iface, This);
445
446     return E_NOTIMPL;
447 }
448
449 static HRESULT WINAPI IDirect3DRMViewportImpl_GetDirect3DViewport(IDirect3DRMViewport* iface,
450                                                                   LPDIRECT3DVIEWPORT * viewport)
451 {
452     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport(iface);
453
454     FIXME("(%p/%p)->(%p): stub\n", iface, This, This);
455
456     return E_NOTIMPL;
457 }
458
459 static const struct IDirect3DRMViewportVtbl Direct3DRMViewport_Vtbl =
460 {
461     /*** IUnknown methods ***/
462     IDirect3DRMViewportImpl_QueryInterface,
463     IDirect3DRMViewportImpl_AddRef,
464     IDirect3DRMViewportImpl_Release,
465     /*** IDirect3DRMObject methods ***/
466     IDirect3DRMViewportImpl_Clone,
467     IDirect3DRMViewportImpl_AddDestroyCallback,
468     IDirect3DRMViewportImpl_DeleteDestroyCallback,
469     IDirect3DRMViewportImpl_SetAppData,
470     IDirect3DRMViewportImpl_GetAppData,
471     IDirect3DRMViewportImpl_SetName,
472     IDirect3DRMViewportImpl_GetName,
473     IDirect3DRMViewportImpl_GetClassName,
474     /*** IDirect3DRMViewport methods ***/
475     IDirect3DRMViewportImpl_Init,
476     IDirect3DRMViewportImpl_Clear,
477     IDirect3DRMViewportImpl_Render,
478     IDirect3DRMViewportImpl_SetFront,
479     IDirect3DRMViewportImpl_SetBack,
480     IDirect3DRMViewportImpl_SetField,
481     IDirect3DRMViewportImpl_SetUniformScaling,
482     IDirect3DRMViewportImpl_SetCamera,
483     IDirect3DRMViewportImpl_SetProjection,
484     IDirect3DRMViewportImpl_Transform,
485     IDirect3DRMViewportImpl_InverseTransform,
486     IDirect3DRMViewportImpl_Configure,
487     IDirect3DRMViewportImpl_ForceUpdate,
488     IDirect3DRMViewportImpl_SetPlane,
489     IDirect3DRMViewportImpl_GetCamera,
490     IDirect3DRMViewportImpl_GetDevice,
491     IDirect3DRMViewportImpl_GetPlane,
492     IDirect3DRMViewportImpl_Pick,
493     IDirect3DRMViewportImpl_GetUniformScaling,
494     IDirect3DRMViewportImpl_GetX,
495     IDirect3DRMViewportImpl_GetY,
496     IDirect3DRMViewportImpl_GetWidth,
497     IDirect3DRMViewportImpl_GetHeight,
498     IDirect3DRMViewportImpl_GetField,
499     IDirect3DRMViewportImpl_GetBack,
500     IDirect3DRMViewportImpl_GetFront,
501     IDirect3DRMViewportImpl_GetProjection,
502     IDirect3DRMViewportImpl_GetDirect3DViewport
503 };
504
505
506 /*** IUnknown methods ***/
507 static HRESULT WINAPI IDirect3DRMViewport2Impl_QueryInterface(IDirect3DRMViewport2* iface,
508                                                              REFIID riid, void** object)
509 {
510     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
511     return IDirect3DRMViewport_QueryInterface(&This->IDirect3DRMViewport_iface, riid, object);
512 }
513
514 static ULONG WINAPI IDirect3DRMViewport2Impl_AddRef(IDirect3DRMViewport2* iface)
515 {
516     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
517     return IDirect3DRMViewport_AddRef(&This->IDirect3DRMViewport_iface);
518 }
519
520 static ULONG WINAPI IDirect3DRMViewport2Impl_Release(IDirect3DRMViewport2* iface)
521 {
522     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
523     return IDirect3DRMViewport_Release(&This->IDirect3DRMViewport_iface);
524 }
525
526 /*** IDirect3DRMObject methods ***/
527 static HRESULT WINAPI IDirect3DRMViewport2Impl_Clone(IDirect3DRMViewport2* iface,
528                                                         LPUNKNOWN unkwn, REFIID riid,
529                                                         LPVOID* object)
530 {
531     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
532
533     FIXME("(%p/%p)->(%p, %s, %p): stub\n", iface, This, unkwn, debugstr_guid(riid), object);
534
535     return E_NOTIMPL;
536 }
537
538 static HRESULT WINAPI IDirect3DRMViewport2Impl_AddDestroyCallback(IDirect3DRMViewport2* iface,
539                                                                      D3DRMOBJECTCALLBACK cb,
540                                                                      LPVOID argument)
541 {
542     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
543
544     FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, argument);
545
546     return E_NOTIMPL;
547 }
548
549 static HRESULT WINAPI IDirect3DRMViewport2Impl_DeleteDestroyCallback(IDirect3DRMViewport2* iface,
550                                                                         D3DRMOBJECTCALLBACK cb,
551                                                                         LPVOID argument)
552 {
553     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
554
555     FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, argument);
556
557     return E_NOTIMPL;
558 }
559
560 static HRESULT WINAPI IDirect3DRMViewport2Impl_SetAppData(IDirect3DRMViewport2* iface,
561                                                              DWORD data)
562 {
563     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
564
565     FIXME("(%p/%p)->(%u): stub\n", iface, This, data);
566
567     return E_NOTIMPL;
568 }
569
570 static DWORD WINAPI IDirect3DRMViewport2Impl_GetAppData(IDirect3DRMViewport2* iface)
571 {
572     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
573
574     FIXME("(%p/%p)->(): stub\n", iface, This);
575
576     return 0;
577 }
578
579 static HRESULT WINAPI IDirect3DRMViewport2Impl_SetName(IDirect3DRMViewport2* iface, LPCSTR name)
580 {
581     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
582
583     FIXME("(%p/%p)->(%s): stub\n", iface, This, name);
584
585     return E_NOTIMPL;
586 }
587
588 static HRESULT WINAPI IDirect3DRMViewport2Impl_GetName(IDirect3DRMViewport2* iface,
589                                                           LPDWORD size, LPSTR name)
590 {
591     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
592
593     FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, size, name);
594
595     return E_NOTIMPL;
596 }
597
598 static HRESULT WINAPI IDirect3DRMViewport2Impl_GetClassName(IDirect3DRMViewport2* iface,
599                                                                LPDWORD size, LPSTR name)
600 {
601     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
602
603     FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, size, name);
604
605     return E_NOTIMPL;
606 }
607
608 /*** IDirect3DRMViewport methods ***/
609 static HRESULT WINAPI IDirect3DRMViewport2Impl_Init(IDirect3DRMViewport2* iface,
610                                                    LPDIRECT3DRMDEVICE3 dev, LPDIRECT3DRMFRAME3 camera,
611                                                    DWORD xpos, DWORD ypos,
612                                                    DWORD width, DWORD height)
613 {
614     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
615
616     FIXME("(%p/%p)->(%p, %p, %u, %u, %u, %u): stub\n", iface, This, dev, camera,
617           xpos, ypos, width, height);
618
619     return E_NOTIMPL;
620 }
621
622 static HRESULT WINAPI IDirect3DRMViewport2Impl_Clear(IDirect3DRMViewport2* iface, DWORD flags)
623 {
624     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
625
626     FIXME("(%p/%p)->(): stub\n", iface, This);
627
628     return E_NOTIMPL;
629 }
630
631 static HRESULT WINAPI IDirect3DRMViewport2Impl_Render(IDirect3DRMViewport2* iface,
632                                                      LPDIRECT3DRMFRAME3 frame)
633 {
634     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
635
636     FIXME("(%p/%p)->(%p): stub\n", iface, This, frame);
637
638     return E_NOTIMPL;
639 }
640
641 static HRESULT WINAPI IDirect3DRMViewport2Impl_SetFront(IDirect3DRMViewport2* iface, D3DVALUE front)
642 {
643     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
644
645     TRACE("(%p/%p)->(%f):\n", iface, This, front);
646
647     This->front = front;
648
649     return D3DRM_OK;
650 }
651
652 static HRESULT WINAPI IDirect3DRMViewport2Impl_SetBack(IDirect3DRMViewport2* iface, D3DVALUE back)
653 {
654     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
655
656     TRACE("(%p/%p)->(%f)\n", iface, This, back);
657
658     This->back = back;
659
660     return D3DRM_OK;
661 }
662
663 static HRESULT WINAPI IDirect3DRMViewport2Impl_SetField(IDirect3DRMViewport2* iface, D3DVALUE field)
664 {
665     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
666
667     FIXME("(%p/%p)->(%f): stub\n", iface, This, field);
668
669     return E_NOTIMPL;
670 }
671
672 static HRESULT WINAPI IDirect3DRMViewport2Impl_SetUniformScaling(IDirect3DRMViewport2* iface, BOOL b)
673 {
674     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
675
676     FIXME("(%p/%p)->(%d): stub\n", iface, This, b);
677
678     return E_NOTIMPL;
679 }
680
681 static HRESULT WINAPI IDirect3DRMViewport2Impl_SetCamera(IDirect3DRMViewport2* iface,
682                                                         LPDIRECT3DRMFRAME3 frame)
683 {
684     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
685
686     FIXME("(%p/%p)->(%p): stub\n", iface, This, frame);
687
688     return E_NOTIMPL;
689 }
690
691 static HRESULT WINAPI IDirect3DRMViewport2Impl_SetProjection(IDirect3DRMViewport2* iface,
692                                                             D3DRMPROJECTIONTYPE type)
693 {
694     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
695
696     FIXME("(%p/%p)->(%u): stub\n", iface, This, type);
697
698     return S_OK;
699 }
700
701 static HRESULT WINAPI IDirect3DRMViewport2Impl_Transform(IDirect3DRMViewport2* iface,
702                                                         D3DRMVECTOR4D *d, D3DVECTOR *s)
703 {
704     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
705
706     FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, d, s);
707
708     return E_NOTIMPL;
709 }
710
711 static HRESULT WINAPI IDirect3DRMViewport2Impl_InverseTransform(IDirect3DRMViewport2* iface,
712                                                                D3DVECTOR *d, D3DRMVECTOR4D *s)
713 {
714     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
715
716     FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, d, s);
717
718     return E_NOTIMPL;
719 }
720
721 static HRESULT WINAPI IDirect3DRMViewport2Impl_Configure(IDirect3DRMViewport2* iface, LONG x, LONG y,
722                                                         DWORD width, DWORD height)
723 {
724     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
725
726     FIXME("(%p/%p)->(%u, %u, %u, %u): stub\n", iface, This, x, y, width, height);
727
728     return E_NOTIMPL;
729 }
730
731 static HRESULT WINAPI IDirect3DRMViewport2Impl_ForceUpdate(IDirect3DRMViewport2* iface,
732                                                           DWORD x1, DWORD y1, DWORD x2, DWORD y2)
733 {
734     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
735
736     FIXME("(%p/%p)->(%u, %u, %u, %u): stub\n", iface, This, x1, y1, x2, y2);
737
738     return E_NOTIMPL;
739 }
740
741 static HRESULT WINAPI IDirect3DRMViewport2Impl_SetPlane(IDirect3DRMViewport2* iface,
742                                                        D3DVALUE left, D3DVALUE right,
743                                                        D3DVALUE bottom, D3DVALUE top)
744 {
745     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
746
747     FIXME("(%p/%p)->(%f, %f, %f, %f): stub\n", iface, This, left, right, bottom, top);
748
749     return E_NOTIMPL;
750 }
751
752 static HRESULT WINAPI IDirect3DRMViewport2Impl_GetCamera(IDirect3DRMViewport2* iface,
753                                                         LPDIRECT3DRMFRAME3 * frame)
754 {
755     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
756
757     FIXME("(%p/%p)->(%p): stub\n", iface, This, frame);
758
759     return E_NOTIMPL;
760 }
761
762 static HRESULT WINAPI IDirect3DRMViewport2Impl_GetDevice(IDirect3DRMViewport2* iface,
763                                                         LPDIRECT3DRMDEVICE3 * device)
764 {
765     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
766
767     FIXME("(%p/%p)->(%p): stub\n", iface, This, device);
768
769     return E_NOTIMPL;
770 }
771
772 static HRESULT WINAPI IDirect3DRMViewport2Impl_GetPlane(IDirect3DRMViewport2* iface,
773                                                        D3DVALUE *left, D3DVALUE *right,
774                                                        D3DVALUE *bottom, D3DVALUE *top)
775 {
776     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
777
778     FIXME("(%p/%p)->(%p, %p, %p, %p): stub\n", iface, This, left, right, bottom, top);
779
780     return E_NOTIMPL;
781 }
782
783 static HRESULT WINAPI IDirect3DRMViewport2Impl_Pick(IDirect3DRMViewport2* iface, LONG x, LONG y,
784                                                    LPDIRECT3DRMPICKEDARRAY *return_visuals)
785 {
786     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
787
788     FIXME("(%p/%p)->(%u, %u, %p): stub\n", iface, This, x, y, return_visuals);
789
790     return E_NOTIMPL;
791 }
792
793 static BOOL WINAPI IDirect3DRMViewport2Impl_GetUniformScaling(IDirect3DRMViewport2* iface)
794 {
795     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
796
797     FIXME("(%p/%p)->(): stub\n", iface, This);
798
799     return E_NOTIMPL;
800 }
801
802 static LONG WINAPI IDirect3DRMViewport2Impl_GetX(IDirect3DRMViewport2* iface)
803 {
804     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
805
806     FIXME("(%p/%p)->(): stub\n", iface, This);
807
808     return E_NOTIMPL;
809 }
810
811 static LONG WINAPI IDirect3DRMViewport2Impl_GetY(IDirect3DRMViewport2* iface)
812 {
813     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
814
815     FIXME("(%p/%p)->(): stub\n", iface, This);
816
817     return E_NOTIMPL;
818 }
819
820 static DWORD WINAPI IDirect3DRMViewport2Impl_GetWidth(IDirect3DRMViewport2* iface)
821 {
822     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
823
824     FIXME("(%p/%p)->(): stub\n", iface, This);
825
826     return E_NOTIMPL;
827 }
828
829 static DWORD WINAPI IDirect3DRMViewport2Impl_GetHeight(IDirect3DRMViewport2* iface)
830 {
831     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
832
833     FIXME("(%p/%p)->(): stub\n", iface, This);
834
835     return E_NOTIMPL;
836 }
837
838 static D3DVALUE WINAPI IDirect3DRMViewport2Impl_GetField(IDirect3DRMViewport2* iface)
839 {
840     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
841
842     FIXME("(%p/%p)->(): stub\n", iface, This);
843
844     return E_NOTIMPL;
845 }
846
847 static D3DVALUE WINAPI IDirect3DRMViewport2Impl_GetBack(IDirect3DRMViewport2* iface)
848 {
849     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
850
851     TRACE("(%p/%p)->()\n", iface, This);
852
853     return This->back;
854 }
855
856 static D3DVALUE WINAPI IDirect3DRMViewport2Impl_GetFront(IDirect3DRMViewport2* iface)
857 {
858     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
859
860     TRACE("(%p/%p)->()\n", iface, This);
861
862     return This->front;
863 }
864
865 static D3DRMPROJECTIONTYPE WINAPI IDirect3DRMViewport2Impl_GetProjection(IDirect3DRMViewport2* iface)
866 {
867     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
868
869     FIXME("(%p/%p)->(): stub\n", iface, This);
870
871     return E_NOTIMPL;
872 }
873
874 static HRESULT WINAPI IDirect3DRMViewport2Impl_GetDirect3DViewport(IDirect3DRMViewport2* iface,
875                                                                   LPDIRECT3DVIEWPORT * viewport)
876 {
877     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
878
879     FIXME("(%p/%p)->(%p): stub\n", iface, This, This);
880
881     return E_NOTIMPL;
882 }
883
884 /*** IDirect3DRMViewport2 methods ***/
885 static HRESULT WINAPI IDirect3DRMViewport2Impl_TransformVectors(IDirect3DRMViewport2* iface,
886                                                                 DWORD numvectors,
887                                                                 LPD3DRMVECTOR4D dstvectors,
888                                                                 LPD3DVECTOR srcvectors)
889 {
890     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
891
892     FIXME("(%p/%p)->(%u, %p, %p): stub\n", iface, This, numvectors, dstvectors, srcvectors);
893
894     return E_NOTIMPL;
895 }
896
897 static HRESULT WINAPI IDirect3DRMViewport2Impl_InverseTransformVectors(IDirect3DRMViewport2* iface,
898                                                                 DWORD numvectors,
899                                                                 LPD3DVECTOR dstvectors,
900                                                                 LPD3DRMVECTOR4D srcvectors)
901 {
902     IDirect3DRMViewportImpl *This = impl_from_IDirect3DRMViewport2(iface);
903
904     FIXME("(%p/%p)->(%u, %p, %p): stub\n", iface, This, numvectors, dstvectors, srcvectors);
905
906     return E_NOTIMPL;
907 }
908
909 static const struct IDirect3DRMViewport2Vtbl Direct3DRMViewport2_Vtbl =
910 {
911     /*** IUnknown methods ***/
912     IDirect3DRMViewport2Impl_QueryInterface,
913     IDirect3DRMViewport2Impl_AddRef,
914     IDirect3DRMViewport2Impl_Release,
915     /*** IDirect3DRMObject methods ***/
916     IDirect3DRMViewport2Impl_Clone,
917     IDirect3DRMViewport2Impl_AddDestroyCallback,
918     IDirect3DRMViewport2Impl_DeleteDestroyCallback,
919     IDirect3DRMViewport2Impl_SetAppData,
920     IDirect3DRMViewport2Impl_GetAppData,
921     IDirect3DRMViewport2Impl_SetName,
922     IDirect3DRMViewport2Impl_GetName,
923     IDirect3DRMViewport2Impl_GetClassName,
924     /*** IDirect3DRMViewport methods ***/
925     IDirect3DRMViewport2Impl_Init,
926     IDirect3DRMViewport2Impl_Clear,
927     IDirect3DRMViewport2Impl_Render,
928     IDirect3DRMViewport2Impl_SetFront,
929     IDirect3DRMViewport2Impl_SetBack,
930     IDirect3DRMViewport2Impl_SetField,
931     IDirect3DRMViewport2Impl_SetUniformScaling,
932     IDirect3DRMViewport2Impl_SetCamera,
933     IDirect3DRMViewport2Impl_SetProjection,
934     IDirect3DRMViewport2Impl_Transform,
935     IDirect3DRMViewport2Impl_InverseTransform,
936     IDirect3DRMViewport2Impl_Configure,
937     IDirect3DRMViewport2Impl_ForceUpdate,
938     IDirect3DRMViewport2Impl_SetPlane,
939     IDirect3DRMViewport2Impl_GetCamera,
940     IDirect3DRMViewport2Impl_GetDevice,
941     IDirect3DRMViewport2Impl_GetPlane,
942     IDirect3DRMViewport2Impl_Pick,
943     IDirect3DRMViewport2Impl_GetUniformScaling,
944     IDirect3DRMViewport2Impl_GetX,
945     IDirect3DRMViewport2Impl_GetY,
946     IDirect3DRMViewport2Impl_GetWidth,
947     IDirect3DRMViewport2Impl_GetHeight,
948     IDirect3DRMViewport2Impl_GetField,
949     IDirect3DRMViewport2Impl_GetBack,
950     IDirect3DRMViewport2Impl_GetFront,
951     IDirect3DRMViewport2Impl_GetProjection,
952     IDirect3DRMViewport2Impl_GetDirect3DViewport,
953     /*** IDirect3DRMViewport2 methods ***/
954     IDirect3DRMViewport2Impl_TransformVectors,
955     IDirect3DRMViewport2Impl_InverseTransformVectors
956 };
957
958 HRESULT Direct3DRMViewport_create(REFIID riid, IUnknown** ppObj)
959 {
960     IDirect3DRMViewportImpl* object;
961
962     TRACE("(%p)\n", ppObj);
963
964     object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirect3DRMViewportImpl));
965     if (!object)
966     {
967         ERR("Out of memory\n");
968         return E_OUTOFMEMORY;
969     }
970
971     object->IDirect3DRMViewport_iface.lpVtbl = &Direct3DRMViewport_Vtbl;
972     object->IDirect3DRMViewport2_iface.lpVtbl = &Direct3DRMViewport2_Vtbl;
973     object->ref = 1;
974
975     if (IsEqualGUID(riid, &IID_IDirect3DRMViewport2))
976         *ppObj = (IUnknown*)&object->IDirect3DRMViewport2_iface;
977     else
978         *ppObj = (IUnknown*)&object->IDirect3DRMViewport_iface;
979
980     return S_OK;
981 }