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