Added mappings for a few messages.
[wine] / dlls / ddraw / d3ddevice / main.c
1 /* Direct3D Device
2    (c) 1998 Lionel ULMER
3    
4    This files contains all the common stuff for D3D devices.
5  */
6
7 #include <string.h>
8 #include "config.h"
9 #include "windef.h"
10 #include "winerror.h"
11 #include "wine/obj_base.h"
12 #include "ddraw.h"
13 #include "d3d.h"
14 #include "debugtools.h"
15
16 #include "d3d_private.h"
17
18 DEFAULT_DEBUG_CHANNEL(ddraw);
19
20 /*******************************************************************************
21  *                              IDirect3DDevice2
22  */
23
24 HRESULT WINAPI IDirect3DDevice2Impl_QueryInterface(
25     LPDIRECT3DDEVICE2 iface, REFIID riid, LPVOID* ppvObj
26 ) {
27     ICOM_THIS(IDirect3DDevice2Impl,iface);
28     FIXME("(%p)->(%s,%p): stub\n", This, debugstr_guid(riid),ppvObj);
29     return S_OK;
30 }
31
32 ULONG WINAPI IDirect3DDevice2Impl_AddRef(LPDIRECT3DDEVICE2 iface)
33 {
34     ICOM_THIS(IDirect3DDevice2Impl,iface);
35     TRACE("(%p)->()incrementing from %lu.\n", This, This->ref );
36
37     return ++(This->ref);
38 }
39
40
41
42 ULONG WINAPI IDirect3DDevice2Impl_Release(LPDIRECT3DDEVICE2 iface)
43 {
44     ICOM_THIS(IDirect3DDevice2Impl,iface);
45     FIXME("(%p)->() decrementing from %lu.\n", This, This->ref );
46
47     if (!--(This->ref)) {
48         HeapFree(GetProcessHeap(),0,This);
49         return 0;
50     }
51     return This->ref;
52 }
53
54
55 /*** IDirect3DDevice2 methods ***/
56 HRESULT WINAPI IDirect3DDevice2Impl_GetCaps(
57     LPDIRECT3DDEVICE2 iface, LPD3DDEVICEDESC lpdescsoft,
58     LPD3DDEVICEDESC lpdeschard
59 ) {
60     ICOM_THIS(IDirect3DDevice2Impl,iface);
61     FIXME("(%p)->(%p,%p), stub!\n", This, lpdescsoft, lpdeschard);
62     return DD_OK;
63 }
64
65
66
67 HRESULT WINAPI IDirect3DDevice2Impl_SwapTextureHandles(
68     LPDIRECT3DDEVICE2 iface,LPDIRECT3DTEXTURE2 lptex1,LPDIRECT3DTEXTURE2 lptex2
69 ) {
70     ICOM_THIS(IDirect3DDevice2Impl,iface);
71     FIXME("(%p)->(%p,%p): stub\n", This, lptex1, lptex2);
72
73     return DD_OK;
74 }
75
76 HRESULT WINAPI IDirect3DDevice2Impl_GetStats(
77     LPDIRECT3DDEVICE2 iface, LPD3DSTATS lpstats)
78 {
79     ICOM_THIS(IDirect3DDevice2Impl,iface);
80     FIXME("(%p)->(%p): stub\n", This, lpstats);
81
82     return DD_OK;
83 }
84
85 HRESULT WINAPI IDirect3DDevice2Impl_AddViewport(
86     LPDIRECT3DDEVICE2 iface, LPDIRECT3DVIEWPORT2 lpvp
87 ) {
88     ICOM_THIS(IDirect3DDevice2Impl,iface);
89     IDirect3DViewport2Impl* ilpvp=(IDirect3DViewport2Impl*)lpvp;
90     FIXME("(%p)->(%p): stub\n", This, ilpvp);
91
92     /* Adds this viewport to the viewport list */
93     ilpvp->next = This->viewport_list;
94     This->viewport_list = ilpvp;
95
96     return DD_OK;
97 }
98
99 HRESULT WINAPI IDirect3DDevice2Impl_DeleteViewport(
100     LPDIRECT3DDEVICE2 iface, LPDIRECT3DVIEWPORT2 lpvp)
101 {
102     ICOM_THIS(IDirect3DDevice2Impl,iface);
103     IDirect3DViewport2Impl* ilpvp=(IDirect3DViewport2Impl*)lpvp;
104     IDirect3DViewport2Impl *cur, *prev;
105     FIXME("(%p)->(%p): stub\n", This, lpvp);
106
107     /* Finds this viewport in the list */
108     prev = NULL;
109     cur = This->viewport_list;
110     while ((cur != NULL) && (cur != ilpvp)) {
111         prev = cur;
112         cur = cur->next;
113     }
114     if (cur == NULL)
115         return DDERR_INVALIDOBJECT;
116
117     /* And remove it */
118     if (prev == NULL)
119         This->viewport_list = cur->next;
120     else
121         prev->next = cur->next;
122     return DD_OK;
123 }
124
125 HRESULT WINAPI IDirect3DDevice2Impl_NextViewport(
126     LPDIRECT3DDEVICE2 iface, LPDIRECT3DVIEWPORT2 lpvp,
127     LPDIRECT3DVIEWPORT2* lplpvp, DWORD dwFlags
128 ) {
129     ICOM_THIS(IDirect3DDevice2Impl,iface);
130     IDirect3DViewport2Impl* ilpvp=(IDirect3DViewport2Impl*)lpvp;
131     IDirect3DViewport2Impl** ilplpvp=(IDirect3DViewport2Impl**)lplpvp;
132     FIXME("(%p)->(%p,%p,%08lx): stub\n", This, lpvp, lpvp, dwFlags);
133
134     switch (dwFlags) {
135     case D3DNEXT_NEXT:
136         *ilplpvp = ilpvp->next;
137         break;
138     case D3DNEXT_HEAD:
139         *ilplpvp = This->viewport_list;
140         break;
141     case D3DNEXT_TAIL:
142         ilpvp = This->viewport_list;
143         while (ilpvp->next != NULL)
144             ilpvp = ilpvp->next;
145         *ilplpvp = ilpvp;
146         break;
147     default:
148         return DDERR_INVALIDPARAMS;
149     }
150     return DD_OK;
151 }
152
153 HRESULT WINAPI IDirect3DDevice2Impl_EnumTextureFormats(
154     LPDIRECT3DDEVICE2 iface, LPD3DENUMTEXTUREFORMATSCALLBACK cb, LPVOID context
155 ) {
156     ICOM_THIS(IDirect3DDevice2Impl,iface);
157     FIXME("(%p)->(%p,%p), stub!\n", This, cb, context);
158
159     return DD_OK; /* no texture formats in stub implementation */
160 }
161
162
163
164 HRESULT WINAPI IDirect3DDevice2Impl_BeginScene(LPDIRECT3DDEVICE2 iface)
165 {
166     ICOM_THIS(IDirect3DDevice2Impl,iface);
167
168     FIXME("(%p)->(), stub!\n", This);
169
170     /* Here, we should get the DDraw surface and 'copy it' to the
171      OpenGL surface.... */
172     return DD_OK;
173 }
174
175 HRESULT WINAPI IDirect3DDevice2Impl_EndScene(LPDIRECT3DDEVICE2 iface)
176 {
177     ICOM_THIS(IDirect3DDevice2Impl,iface);
178     FIXME("(%p)->(): stub\n", This);
179     return DD_OK;
180 }
181
182 HRESULT WINAPI IDirect3DDevice2Impl_GetDirect3D(
183     LPDIRECT3DDEVICE2 iface, LPDIRECT3D2 *lpd3d2
184 ) {
185     ICOM_THIS(IDirect3DDevice2Impl,iface);
186     TRACE("(%p)->(%p): stub\n", This, lpd3d2);
187     *lpd3d2 = (LPDIRECT3D2)This->d3d;
188     return DD_OK;
189 }
190
191 /*** DrawPrimitive API ***/
192 HRESULT WINAPI IDirect3DDevice2Impl_SetCurrentViewport(
193     LPDIRECT3DDEVICE2 iface, LPDIRECT3DVIEWPORT2 lpvp
194 ) {
195     ICOM_THIS(IDirect3DDevice2Impl,iface);
196     IDirect3DViewport2Impl* ilpvp=(IDirect3DViewport2Impl*)lpvp;
197     FIXME("(%p)->(%p): stub\n", This, ilpvp);
198
199     /* Should check if the viewport was added or not */
200
201     /* Set this viewport as the current viewport */
202     This->current_viewport = ilpvp;
203
204     /* Activate this viewport */
205     ilpvp->device.active_device2 = This;
206     ilpvp->activate(ilpvp);
207
208     return DD_OK;
209 }
210
211
212
213 HRESULT WINAPI IDirect3DDevice2Impl_GetCurrentViewport(
214     LPDIRECT3DDEVICE2 iface, LPDIRECT3DVIEWPORT2 *lplpvp
215 ) {
216     ICOM_THIS(IDirect3DDevice2Impl,iface);
217     FIXME("(%p)->(%p): stub\n", This, lplpvp);
218
219     /* Returns the current viewport */
220     *lplpvp = (LPDIRECT3DVIEWPORT2)This->current_viewport;
221
222     return DD_OK;
223 }
224
225 HRESULT WINAPI IDirect3DDevice2Impl_SetRenderTarget(
226     LPDIRECT3DDEVICE2 iface, LPDIRECTDRAWSURFACE lpdds, DWORD dwFlags
227 ) {
228     ICOM_THIS(IDirect3DDevice2Impl,iface);
229     FIXME("(%p)->(%p,%08lx): stub\n", This, lpdds, dwFlags);
230
231     return DD_OK;
232 }
233
234 HRESULT WINAPI IDirect3DDevice2Impl_GetRenderTarget(
235     LPDIRECT3DDEVICE2 iface, LPDIRECTDRAWSURFACE *lplpdds
236 ) {
237     ICOM_THIS(IDirect3DDevice2Impl,iface);
238     FIXME("(%p)->(%p): stub\n", This, lplpdds);
239
240     /* Returns the current rendering target (the surface on wich we render) */
241     *lplpdds = (LPDIRECTDRAWSURFACE)This->surface;
242
243     return DD_OK;
244 }
245
246 HRESULT WINAPI IDirect3DDevice2Impl_Begin(
247     LPDIRECT3DDEVICE2 iface, D3DPRIMITIVETYPE d3dp, D3DVERTEXTYPE d3dv,
248     DWORD dwFlags
249 ) {
250     ICOM_THIS(IDirect3DDevice2Impl,iface);
251     FIXME("(%p)->(%d,%d,%08lx): stub\n", This, d3dp, d3dv, dwFlags);
252
253     return DD_OK;
254 }
255
256 HRESULT WINAPI IDirect3DDevice2Impl_BeginIndexed(
257     LPDIRECT3DDEVICE2 iface, D3DPRIMITIVETYPE d3dp, D3DVERTEXTYPE d3dv,
258     LPVOID lpvert, DWORD numvert, DWORD dwFlags
259 ) {
260     ICOM_THIS(IDirect3DDevice2Impl,iface);
261     FIXME("(%p)->(%d,%d,%p,%ld,%08lx): stub\n", This, d3dp, d3dv, lpvert, numvert, dwFlags);
262
263     return DD_OK;
264 }
265
266 HRESULT WINAPI IDirect3DDevice2Impl_Vertex(
267     LPDIRECT3DDEVICE2 iface,LPVOID lpvert
268 ) {
269     ICOM_THIS(IDirect3DDevice2Impl,iface);
270     FIXME("(%p)->(%p): stub\n", This, lpvert);
271
272     return DD_OK;
273 }
274
275 HRESULT WINAPI IDirect3DDevice2Impl_Index(LPDIRECT3DDEVICE2 iface, WORD index) {
276     ICOM_THIS(IDirect3DDevice2Impl,iface);
277     FIXME("(%p)->(%d): stub\n", This, index);
278
279     return DD_OK;
280 }
281
282
283
284 HRESULT WINAPI IDirect3DDevice2Impl_End(LPDIRECT3DDEVICE2 iface,DWORD dwFlags) {
285     ICOM_THIS(IDirect3DDevice2Impl,iface);
286     FIXME("(%p)->(%08lx): stub\n", This, dwFlags);
287
288     return DD_OK;
289 }
290
291 HRESULT WINAPI IDirect3DDevice2Impl_GetRenderState(
292     LPDIRECT3DDEVICE2 iface, D3DRENDERSTATETYPE d3drs, LPDWORD lprstate
293 ) {
294     ICOM_THIS(IDirect3DDevice2Impl,iface);
295     FIXME("(%p)->(%d,%p): stub\n", This, d3drs, lprstate);
296
297     return DD_OK;
298 }
299
300 HRESULT WINAPI IDirect3DDevice2Impl_SetRenderState(
301     LPDIRECT3DDEVICE2 iface, D3DRENDERSTATETYPE dwRenderStateType,
302     DWORD dwRenderState
303 ) {
304     ICOM_THIS(IDirect3DDevice2Impl,iface);
305
306     FIXME("(%p)->(%d,%ld)\n", This, dwRenderStateType, dwRenderState);
307
308     return DD_OK;
309 }
310
311 HRESULT WINAPI IDirect3DDevice2Impl_GetLightState(
312     LPDIRECT3DDEVICE2 iface, D3DLIGHTSTATETYPE d3dls, LPDWORD lplstate
313 ) {
314     ICOM_THIS(IDirect3DDevice2Impl,iface);
315     FIXME("(%p)->(%d,%p): stub\n", This, d3dls, lplstate);
316
317     return DD_OK;
318 }
319
320
321
322 HRESULT WINAPI IDirect3DDevice2Impl_SetLightState(
323     LPDIRECT3DDEVICE2 iface, D3DLIGHTSTATETYPE dwLightStateType,
324     DWORD dwLightState
325 ) {
326     ICOM_THIS(IDirect3DDevice2Impl,iface);
327     FIXME("(%p)->(%d,%08lx): stub\n", This, dwLightStateType, dwLightState);
328     return DD_OK;
329 }
330
331 HRESULT WINAPI IDirect3DDevice2Impl_SetTransform(
332     LPDIRECT3DDEVICE2 iface, D3DTRANSFORMSTATETYPE d3dts, LPD3DMATRIX lpmatrix
333 ) {
334     ICOM_THIS(IDirect3DDevice2Impl,iface);
335     FIXME("(%p)->(%d,%p),stub!\n",This,d3dts,lpmatrix);
336     return DD_OK;
337 }
338
339
340
341 HRESULT WINAPI IDirect3DDevice2Impl_GetTransform(
342     LPDIRECT3DDEVICE2 iface, D3DTRANSFORMSTATETYPE d3dts, LPD3DMATRIX lpmatrix
343 ) {
344     ICOM_THIS(IDirect3DDevice2Impl,iface);
345     FIXME("(%p)->(%d,%p): stub\n", This, d3dts, lpmatrix);
346
347     return DD_OK;
348 }
349
350
351
352 HRESULT WINAPI IDirect3DDevice2Impl_MultiplyTransform(
353     LPDIRECT3DDEVICE2 iface, D3DTRANSFORMSTATETYPE d3dts, LPD3DMATRIX lpmatrix
354 ) {
355     ICOM_THIS(IDirect3DDevice2Impl,iface);
356     FIXME("(%p)->(%d,%p): stub\n", This, d3dts, lpmatrix);
357
358     return DD_OK;
359 }
360
361 HRESULT WINAPI IDirect3DDevice2Impl_DrawPrimitive(
362     LPDIRECT3DDEVICE2 iface, D3DPRIMITIVETYPE d3dp, D3DVERTEXTYPE d3dv,
363     LPVOID lpvertex, DWORD vertcount, DWORD dwFlags
364 ) {
365   ICOM_THIS(IDirect3DDevice2Impl,iface);
366   
367   TRACE("(%p)->(%d,%d,%p,%ld,%08lx): stub\n", This, d3dp, d3dv, lpvertex, vertcount, dwFlags);
368
369   return D3D_OK;
370 }
371     
372 HRESULT WINAPI IDirect3DDevice2Impl_DrawIndexedPrimitive(
373     LPDIRECT3DDEVICE2 iface, D3DPRIMITIVETYPE d3dp, D3DVERTEXTYPE d3dv,
374     LPVOID lpvertex, DWORD vertcount, LPWORD lpindexes, DWORD indexcount,
375     DWORD dwFlags
376 ) {
377     ICOM_THIS(IDirect3DDevice2Impl,iface);
378     TRACE("(%p)->(%d,%d,%p,%ld,%p,%ld,%08lx): stub\n", This, d3dp, d3dv, lpvertex, vertcount, lpindexes, indexcount, dwFlags);
379     return D3D_OK;
380 }
381
382 HRESULT WINAPI IDirect3DDevice2Impl_SetClipStatus(
383     LPDIRECT3DDEVICE2 iface, LPD3DCLIPSTATUS lpcs
384 ) {
385     ICOM_THIS(IDirect3DDevice2Impl,iface);
386     FIXME("(%p)->(%p): stub\n", This, lpcs);
387
388     return DD_OK;
389 }
390
391 HRESULT WINAPI IDirect3DDevice2Impl_GetClipStatus(
392     LPDIRECT3DDEVICE2 iface, LPD3DCLIPSTATUS lpcs
393 ) {
394     ICOM_THIS(IDirect3DDevice2Impl,iface);
395     FIXME("(%p)->(%p): stub\n", This, lpcs);
396
397     return DD_OK;
398 }
399
400 /*******************************************************************************
401  *                              Direct3DDevice
402  */
403 HRESULT WINAPI IDirect3DDeviceImpl_QueryInterface(
404     LPDIRECT3DDEVICE iface, REFIID riid, LPVOID* ppvObj
405 ) {
406     ICOM_THIS(IDirect3DDeviceImpl,iface);
407     FIXME("(%p)->(%s,%p): stub\n", This, debugstr_guid(riid),ppvObj);
408     return S_OK;
409 }
410
411 ULONG WINAPI IDirect3DDeviceImpl_AddRef(LPDIRECT3DDEVICE iface)
412 {
413     ICOM_THIS(IDirect3DDeviceImpl,iface);
414     TRACE("(%p)->()incrementing from %lu.\n", This, This->ref );
415
416     return ++(This->ref);
417 }
418
419 ULONG WINAPI IDirect3DDeviceImpl_Release(LPDIRECT3DDEVICE iface)
420 {
421     ICOM_THIS(IDirect3DDeviceImpl,iface);
422     FIXME("(%p)->() decrementing from %lu.\n", This, This->ref );
423
424     if (!--(This->ref)) {
425         HeapFree(GetProcessHeap(),0,This);
426         return 0;
427     }
428     return This->ref;
429 }
430
431 HRESULT WINAPI IDirect3DDeviceImpl_Initialize(
432     LPDIRECT3DDEVICE iface, LPDIRECT3D lpd3d, LPGUID lpGUID,
433     LPD3DDEVICEDESC lpd3ddvdesc
434 ) {
435     ICOM_THIS(IDirect3DDeviceImpl,iface);
436     TRACE("(%p)->(%p,%p,%p): stub\n", This, lpd3d,lpGUID, lpd3ddvdesc);
437
438     return DDERR_ALREADYINITIALIZED;
439 }
440
441
442 HRESULT WINAPI IDirect3DDeviceImpl_GetCaps(
443     LPDIRECT3DDEVICE iface, LPD3DDEVICEDESC lpD3DHWDevDesc,
444     LPD3DDEVICEDESC lpD3DSWDevDesc
445 ) {
446     ICOM_THIS(IDirect3DDeviceImpl,iface);
447     TRACE("(%p)->(%p,%p): stub\n", This, lpD3DHWDevDesc, lpD3DSWDevDesc);
448
449     return DD_OK;
450 }
451
452
453 HRESULT WINAPI IDirect3DDeviceImpl_SwapTextureHandles(
454     LPDIRECT3DDEVICE iface, LPDIRECT3DTEXTURE lpD3DTex1,
455     LPDIRECT3DTEXTURE lpD3DTex2
456 ) {
457     ICOM_THIS(IDirect3DDeviceImpl,iface);
458     TRACE("(%p)->(%p,%p): stub\n", This, lpD3DTex1, lpD3DTex2);
459
460     return DD_OK;
461 }
462
463 HRESULT WINAPI IDirect3DDeviceImpl_CreateExecuteBuffer(
464     LPDIRECT3DDEVICE iface, LPD3DEXECUTEBUFFERDESC lpDesc,
465     LPDIRECT3DEXECUTEBUFFER *lplpDirect3DExecuteBuffer, IUnknown *pUnkOuter
466 ) {
467     ICOM_THIS(IDirect3DDeviceImpl,iface);
468     FIXME("(%p)->(%p,%p,%p): stub\n", This, lpDesc, lplpDirect3DExecuteBuffer, pUnkOuter);
469     return DD_OK;
470 }
471
472 HRESULT WINAPI IDirect3DDeviceImpl_GetStats(
473     LPDIRECT3DDEVICE iface, LPD3DSTATS lpD3DStats
474 ) {
475     ICOM_THIS(IDirect3DDeviceImpl,iface);
476     TRACE("(%p)->(%p): stub\n", This, lpD3DStats);
477
478     return DD_OK;
479 }
480
481
482 HRESULT WINAPI IDirect3DDeviceImpl_Execute(
483     LPDIRECT3DDEVICE iface, LPDIRECT3DEXECUTEBUFFER lpDirect3DExecuteBuffer,
484     LPDIRECT3DVIEWPORT lpDirect3DViewport, DWORD dwFlags
485 ) {
486     ICOM_THIS(IDirect3DDeviceImpl,iface);
487     TRACE("(%p)->(%p,%p,%08ld): stub\n", This, lpDirect3DExecuteBuffer, lpDirect3DViewport, dwFlags);
488
489     /* Put this as the default context */
490
491     /* Execute... */
492     ((IDirect3DExecuteBufferImpl*)lpDirect3DExecuteBuffer)->execute(lpDirect3DExecuteBuffer, iface, (IDirect3DViewport*)lpDirect3DViewport);
493
494     return DD_OK;
495 }
496
497 HRESULT WINAPI IDirect3DDeviceImpl_AddViewport(
498     LPDIRECT3DDEVICE iface, LPDIRECT3DVIEWPORT lpvp
499 ) {
500     ICOM_THIS(IDirect3DDeviceImpl,iface);
501     IDirect3DViewport2Impl* ilpvp=(IDirect3DViewport2Impl*)lpvp;
502     FIXME("(%p)->(%p): stub\n", This, ilpvp);
503
504     /* Adds this viewport to the viewport list */
505     ilpvp->next = This->viewport_list;
506     This->viewport_list = ilpvp;
507
508     return DD_OK;
509 }
510
511
512
513 HRESULT WINAPI IDirect3DDeviceImpl_DeleteViewport(
514     LPDIRECT3DDEVICE iface, LPDIRECT3DVIEWPORT lpvp
515 ) {
516     ICOM_THIS(IDirect3DDeviceImpl,iface);
517     IDirect3DViewport2Impl* ilpvp=(IDirect3DViewport2Impl*)lpvp;
518     IDirect3DViewport2Impl *cur, *prev;
519     FIXME("(%p)->(%p): stub\n", This, lpvp);
520
521     /* Finds this viewport in the list */
522     prev = NULL;
523     cur = This->viewport_list;
524     while ((cur != NULL) && (cur != ilpvp)) {
525         prev = cur;
526         cur = cur->next;
527     }
528     if (cur == NULL)
529         return DDERR_INVALIDOBJECT;
530
531     /* And remove it */
532     if (prev == NULL)
533         This->viewport_list = cur->next;
534     else
535         prev->next = cur->next;
536     return DD_OK;
537 }
538
539 HRESULT WINAPI IDirect3DDeviceImpl_NextViewport(
540     LPDIRECT3DDEVICE iface, LPDIRECT3DVIEWPORT lpvp,
541     LPDIRECT3DVIEWPORT* lplpvp, DWORD dwFlags
542 ) {
543     ICOM_THIS(IDirect3DDeviceImpl,iface);
544     IDirect3DViewport2Impl* ilpvp=(IDirect3DViewport2Impl*)lpvp;
545     IDirect3DViewport2Impl** ilplpvp=(IDirect3DViewport2Impl**)lplpvp;
546     FIXME("(%p)->(%p,%p,%08lx): stub\n", This, ilpvp, ilplpvp, dwFlags);
547
548     switch (dwFlags) {
549     case D3DNEXT_NEXT:
550         *ilplpvp = ilpvp->next;
551         break;
552     case D3DNEXT_HEAD:
553         *ilplpvp = This->viewport_list;
554         break;
555     case D3DNEXT_TAIL:
556         ilpvp = This->viewport_list;
557         while (ilpvp->next != NULL)
558             ilpvp = ilpvp->next;
559         *ilplpvp = ilpvp;
560         break;
561     default:
562         return DDERR_INVALIDPARAMS;
563     }
564     return DD_OK;
565 }
566
567 HRESULT WINAPI IDirect3DDeviceImpl_Pick(
568     LPDIRECT3DDEVICE iface, LPDIRECT3DEXECUTEBUFFER lpDirect3DExecuteBuffer,
569     LPDIRECT3DVIEWPORT lpDirect3DViewport, DWORD dwFlags, LPD3DRECT lpRect
570 ) {
571     ICOM_THIS(IDirect3DDeviceImpl,iface);
572     TRACE("(%p)->(%p,%p,%08lx,%p): stub\n", This, lpDirect3DExecuteBuffer, lpDirect3DViewport, dwFlags, lpRect);
573     return DD_OK;
574 }
575
576 HRESULT WINAPI IDirect3DDeviceImpl_GetPickRecords(
577     LPDIRECT3DDEVICE iface, LPDWORD lpCount, LPD3DPICKRECORD lpD3DPickRec
578 ) {
579     ICOM_THIS(IDirect3DDeviceImpl,iface);
580     TRACE("(%p)->(%p,%p): stub\n", This, lpCount, lpD3DPickRec);
581
582     return DD_OK;
583 }
584
585
586 HRESULT WINAPI IDirect3DDeviceImpl_EnumTextureFormats(
587     LPDIRECT3DDEVICE iface,LPD3DENUMTEXTUREFORMATSCALLBACK lpd3dEnumTextureProc,
588     LPVOID lpArg
589 ) {
590     ICOM_THIS(IDirect3DDeviceImpl,iface);
591     TRACE("(%p)->(%p,%p): stub\n", This, lpd3dEnumTextureProc, lpArg);
592     return D3D_OK;
593 }
594
595
596 HRESULT WINAPI IDirect3DDeviceImpl_CreateMatrix(
597     LPDIRECT3DDEVICE iface, LPD3DMATRIXHANDLE lpD3DMatHandle
598 )
599 {
600     ICOM_THIS(IDirect3DDeviceImpl,iface);
601     TRACE("(%p)->(%p)\n", This, lpD3DMatHandle);
602
603     *lpD3DMatHandle = (D3DMATRIXHANDLE) HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(D3DMATRIX));
604
605     return DD_OK;
606 }
607
608
609 HRESULT WINAPI IDirect3DDeviceImpl_SetMatrix(
610     LPDIRECT3DDEVICE iface, D3DMATRIXHANDLE d3dMatHandle,
611     const LPD3DMATRIX lpD3DMatrix)
612 {
613     ICOM_THIS(IDirect3DDeviceImpl,iface);
614     TRACE("(%p)->(%08lx,%p)\n", This, d3dMatHandle, lpD3DMatrix);
615
616     dump_mat(lpD3DMatrix);
617     *((D3DMATRIX *) d3dMatHandle) = *lpD3DMatrix;
618     return DD_OK;
619 }
620
621
622 HRESULT WINAPI IDirect3DDeviceImpl_GetMatrix(
623     LPDIRECT3DDEVICE iface,D3DMATRIXHANDLE D3DMatHandle,LPD3DMATRIX lpD3DMatrix
624 ) {
625     ICOM_THIS(IDirect3DDeviceImpl,iface);
626     TRACE("(%p)->(%08lx,%p)\n", This, D3DMatHandle, lpD3DMatrix);
627
628     *lpD3DMatrix = *((D3DMATRIX *) D3DMatHandle);
629
630     return DD_OK;
631 }
632
633
634 HRESULT WINAPI IDirect3DDeviceImpl_DeleteMatrix(
635     LPDIRECT3DDEVICE iface, D3DMATRIXHANDLE d3dMatHandle
636 ) {
637     ICOM_THIS(IDirect3DDeviceImpl,iface);
638     TRACE("(%p)->(%08lx)\n", This, d3dMatHandle);
639     HeapFree(GetProcessHeap(),0, (void *) d3dMatHandle);
640     return DD_OK;
641 }
642
643
644 HRESULT WINAPI IDirect3DDeviceImpl_BeginScene(LPDIRECT3DDEVICE iface)
645 {
646     ICOM_THIS(IDirect3DDeviceImpl,iface);
647     FIXME("(%p)->(): stub\n", This);
648     return DD_OK;
649 }
650
651 /* This is for the moment copy-pasted from IDirect3DDevice2...
652    Will make a common function ... */
653 HRESULT WINAPI IDirect3DDeviceImpl_EndScene(LPDIRECT3DDEVICE iface)
654 {
655     ICOM_THIS(IDirect3DDeviceImpl,iface);
656     FIXME("(%p)->(): stub\n", This);
657     return DD_OK;  
658 }
659
660 HRESULT WINAPI IDirect3DDeviceImpl_GetDirect3D(
661     LPDIRECT3DDEVICE iface, LPDIRECT3D *lpDirect3D
662 ) {
663     ICOM_THIS(IDirect3DDeviceImpl,iface);
664     TRACE("(%p)->(%p): stub\n", This, lpDirect3D);
665
666     return DD_OK;
667 }
668
669 /*******************************************************************************
670  *                              Direct3DDevice VTable
671  */
672 static ICOM_VTABLE(IDirect3DDevice) WINE_UNUSED d3d_d3ddevice_vtbl = 
673 {
674   ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
675   IDirect3DDeviceImpl_QueryInterface,
676   IDirect3DDeviceImpl_AddRef,
677   IDirect3DDeviceImpl_Release,
678   IDirect3DDeviceImpl_Initialize,
679   IDirect3DDeviceImpl_GetCaps,
680   IDirect3DDeviceImpl_SwapTextureHandles,
681   IDirect3DDeviceImpl_CreateExecuteBuffer,
682   IDirect3DDeviceImpl_GetStats,
683   IDirect3DDeviceImpl_Execute,
684   IDirect3DDeviceImpl_AddViewport,
685   IDirect3DDeviceImpl_DeleteViewport,
686   IDirect3DDeviceImpl_NextViewport,
687   IDirect3DDeviceImpl_Pick,
688   IDirect3DDeviceImpl_GetPickRecords,
689   IDirect3DDeviceImpl_EnumTextureFormats,
690   IDirect3DDeviceImpl_CreateMatrix,
691   IDirect3DDeviceImpl_SetMatrix,
692   IDirect3DDeviceImpl_GetMatrix,
693   IDirect3DDeviceImpl_DeleteMatrix,
694   IDirect3DDeviceImpl_BeginScene,
695   IDirect3DDeviceImpl_EndScene,
696   IDirect3DDeviceImpl_GetDirect3D,
697 };