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