Like the AUTORADIOBUTTON, the parent of a RADIOBUTTON style button
[wine] / dlls / ddraw / d3d_private.h
1 /* Direct3D private include file
2    (c) 1998 Lionel ULMER
3    
4    This files contains all the structure that are not exported
5    through d3d.h and all common macros. */
6
7 #ifndef __GRAPHICS_WINE_D3D_PRIVATE_H
8 #define __GRAPHICS_WINE_D3D_PRIVATE_H
9
10 /* THIS FILE MUST NOT CONTAIN X11 or MESA DEFINES */
11
12 #include "d3d.h"
13
14 /*****************************************************************************
15  * Predeclare the interface implementation structures
16  */
17 typedef struct IDirect3DImpl IDirect3DImpl;
18 typedef struct IDirect3D2Impl IDirect3D2Impl;
19 typedef struct IDirect3DLightImpl IDirect3DLightImpl;
20 typedef struct IDirect3DMaterial2Impl IDirect3DMaterial2Impl;
21 typedef struct IDirect3DTexture2Impl IDirect3DTexture2Impl;
22 typedef struct IDirect3DViewport2Impl IDirect3DViewport2Impl;
23 typedef struct IDirect3DExecuteBufferImpl IDirect3DExecuteBufferImpl;
24 typedef struct IDirect3DDeviceImpl IDirect3DDeviceImpl;
25 typedef struct IDirect3DDevice2Impl IDirect3DDevice2Impl;
26
27 #include "ddraw_private.h"
28
29 extern ICOM_VTABLE(IDirect3D)   mesa_d3dvt;
30 extern ICOM_VTABLE(IDirect3D2)  mesa_d3d2vt;
31
32 /*****************************************************************************
33  * IDirect3D implementation structure
34  */
35 struct IDirect3DImpl
36 {
37     /* IUnknown fields */
38     ICOM_VFIELD(IDirect3D);
39     DWORD                   ref;
40     /* IDirect3D fields */
41     IDirectDrawImpl*    ddraw;
42     LPVOID              private;
43 };
44
45 /*****************************************************************************
46  * IDirect3D2 implementation structure
47  */
48 struct IDirect3D2Impl
49 {
50     /* IUnknown fields */
51     ICOM_VFIELD(IDirect3D2);
52     DWORD                    ref;
53     /* IDirect3D2 fields */
54     IDirectDrawImpl*    ddraw;
55     LPVOID              private;
56 };
57
58 extern HRESULT WINAPI IDirect3DImpl_QueryInterface(
59     LPDIRECT3D iface,REFIID refiid,LPVOID *obj
60 );
61 extern ULONG WINAPI IDirect3DImpl_AddRef(LPDIRECT3D iface);
62 extern ULONG WINAPI IDirect3DImpl_Release(LPDIRECT3D iface)
63 ;
64 extern HRESULT WINAPI IDirect3DImpl_Initialize(LPDIRECT3D iface,REFIID refiid);
65 extern HRESULT WINAPI IDirect3DImpl_EnumDevices(
66     LPDIRECT3D iface, LPD3DENUMDEVICESCALLBACK cb, LPVOID context
67 );
68 extern HRESULT WINAPI IDirect3DImpl_CreateLight(
69     LPDIRECT3D iface, LPDIRECT3DLIGHT *lplight, IUnknown *lpunk
70 );
71 extern HRESULT WINAPI IDirect3DImpl_CreateMaterial(
72     LPDIRECT3D iface, LPDIRECT3DMATERIAL *lpmaterial, IUnknown *lpunk
73 );
74 extern HRESULT WINAPI IDirect3DImpl_CreateViewport(
75     LPDIRECT3D iface, LPDIRECT3DVIEWPORT *lpviewport, IUnknown *lpunk
76 );
77 extern HRESULT WINAPI IDirect3DImpl_FindDevice(
78     LPDIRECT3D iface, LPD3DFINDDEVICESEARCH lpfinddevsrc,
79     LPD3DFINDDEVICERESULT lpfinddevrst)
80 ;
81 extern HRESULT WINAPI IDirect3D2Impl_QueryInterface(LPDIRECT3D2 iface,REFIID refiid,LPVOID *obj);  
82 extern ULONG WINAPI IDirect3D2Impl_AddRef(LPDIRECT3D2 iface);
83 extern ULONG WINAPI IDirect3D2Impl_Release(LPDIRECT3D2 iface);
84 extern HRESULT WINAPI IDirect3D2Impl_EnumDevices(
85     LPDIRECT3D2 iface,LPD3DENUMDEVICESCALLBACK cb, LPVOID context
86 );
87 extern HRESULT WINAPI IDirect3D2Impl_CreateLight(
88     LPDIRECT3D2 iface, LPDIRECT3DLIGHT *lplight, IUnknown *lpunk
89 );
90 extern HRESULT WINAPI IDirect3D2Impl_CreateMaterial(
91     LPDIRECT3D2 iface, LPDIRECT3DMATERIAL2 *lpmaterial, IUnknown *lpunk
92 );
93 extern HRESULT WINAPI IDirect3D2Impl_CreateViewport(
94     LPDIRECT3D2 iface, LPDIRECT3DVIEWPORT2 *lpviewport, IUnknown *lpunk
95 );
96 extern HRESULT WINAPI IDirect3D2Impl_FindDevice(
97     LPDIRECT3D2 iface, LPD3DFINDDEVICESEARCH lpfinddevsrc,
98     LPD3DFINDDEVICERESULT lpfinddevrst);
99 extern HRESULT WINAPI IDirect3D2Impl_CreateDevice(
100     LPDIRECT3D2 iface, REFCLSID rguid, LPDIRECTDRAWSURFACE surface,
101     LPDIRECT3DDEVICE2 *device);
102
103 /*****************************************************************************
104  * IDirect3DLight implementation structure
105  */
106 struct IDirect3DLightImpl
107 {
108     /* IUnknown fields */
109     ICOM_VFIELD(IDirect3DLight);
110     DWORD                        ref;
111     /* IDirect3DLight fields */
112     union {
113         IDirect3DImpl*  d3d1;
114         IDirect3D2Impl* d3d2;
115     } d3d;
116     int                 type;
117   
118     D3DLIGHT2           light;
119
120     /* Chained list used for adding / removing from viewports */
121     IDirect3DLightImpl *next, *prev;
122
123     /* Activation function */
124     void (*activate)(IDirect3DLightImpl*);
125     int                 is_active;
126   
127     LPVOID              private;
128 };
129
130 /*****************************************************************************
131  * IDirect3DMaterial2 implementation structure
132  */
133 struct IDirect3DMaterial2Impl
134 {
135     /* IUnknown fields */
136     ICOM_VFIELD(IDirect3DMaterial2);
137     DWORD                            ref;
138     /* IDirect3DMaterial2 fields */
139     union {
140         IDirect3DImpl*        d3d1;
141         IDirect3D2Impl*       d3d2;
142     } d3d;
143     union {
144         IDirect3DDeviceImpl*  active_device1;
145         IDirect3DDevice2Impl* active_device2;
146     } device;
147     int                       use_d3d2;
148
149     D3DMATERIAL               mat;
150
151     void (*activate)(IDirect3DMaterial2Impl* this);
152     LPVOID                      private;
153 };
154
155 /*****************************************************************************
156  * IDirect3DTexture2 implementation structure
157  */
158 struct IDirect3DTexture2Impl
159 {
160     /* IUnknown fields */
161     ICOM_VFIELD(IDirect3DTexture2);
162     DWORD                           ref;
163     /* IDirect3DTexture2 fields */
164     void*                       D3Ddevice; /* (void *) to use the same pointer
165                                             * for both Direct3D and Direct3D2 */
166     IDirectDrawSurface4Impl*    surface;
167     LPVOID                      private;
168 };
169
170 extern HRESULT WINAPI IDirect3DTexture2Impl_QueryInterface(
171     LPDIRECT3DTEXTURE2 iface, REFIID riid, LPVOID* ppvObj
172 );
173 extern ULONG WINAPI IDirect3DTexture2Impl_AddRef(LPDIRECT3DTEXTURE2 iface);
174 extern ULONG WINAPI IDirect3DTexture2Impl_Release(LPDIRECT3DTEXTURE2 iface);
175 extern HRESULT WINAPI IDirect3DTextureImpl_GetHandle(LPDIRECT3DTEXTURE iface,
176                                                  LPDIRECT3DDEVICE lpD3DDevice,
177                                                  LPD3DTEXTUREHANDLE lpHandle)
178 ;
179 extern HRESULT WINAPI IDirect3DTextureImpl_Initialize(LPDIRECT3DTEXTURE iface,
180                                           LPDIRECT3DDEVICE lpD3DDevice,
181                                           LPDIRECTDRAWSURFACE lpSurface)
182 ;
183 extern HRESULT WINAPI IDirect3DTextureImpl_Unload(LPDIRECT3DTEXTURE iface);
184 extern HRESULT WINAPI IDirect3DTexture2Impl_GetHandle(
185     LPDIRECT3DTEXTURE2 iface, LPDIRECT3DDEVICE2 lpD3DDevice2,
186     LPD3DTEXTUREHANDLE lpHandle
187 );
188 extern HRESULT WINAPI IDirect3DTexture2Impl_PaletteChanged(
189     LPDIRECT3DTEXTURE2 iface, DWORD dwStart, DWORD dwCount
190 );
191 extern HRESULT WINAPI IDirect3DTexture2Impl_Load(
192     LPDIRECT3DTEXTURE2 iface, LPDIRECT3DTEXTURE2 lpD3DTexture2
193 );
194
195 /*****************************************************************************
196  * IDirect3DViewport2 implementation structure
197  */
198 struct IDirect3DViewport2Impl
199 {
200     /* IUnknown fields */
201     ICOM_VFIELD(IDirect3DViewport2);
202     DWORD                            ref;
203     /* IDirect3DViewport2 fields */
204     union {
205         IDirect3DImpl*        d3d1;
206         IDirect3D2Impl*       d3d2;
207     } d3d;
208     /* If this viewport is active for one device, put the device here */
209     union {
210         IDirect3DDeviceImpl*    active_device1;
211         IDirect3DDevice2Impl*   active_device2;
212     } device;
213     int                         use_d3d2;
214
215     union {
216         D3DVIEWPORT             vp1;
217         D3DVIEWPORT2            vp2;
218     } viewport;
219     int                         use_vp2;
220
221   /* Activation function */
222   void (*activate)(IDirect3DViewport2Impl*);
223   
224   /* Field used to chain viewports together */
225   IDirect3DViewport2Impl*       next;
226
227   /* Lights list */
228   IDirect3DLightImpl*           lights;
229   
230   LPVOID                        private;
231 };
232
233 extern HRESULT WINAPI IDirect3DViewport2Impl_QueryInterface(
234     LPDIRECT3DVIEWPORT2 iface, REFIID riid, LPVOID* ppvObj
235 );
236 extern ULONG WINAPI IDirect3DViewport2Impl_AddRef(LPDIRECT3DVIEWPORT2 iface)
237 ;
238 extern ULONG WINAPI IDirect3DViewport2Impl_Release(LPDIRECT3DVIEWPORT2 iface)
239 ;
240 extern HRESULT WINAPI IDirect3DViewport2Impl_Initialize(
241     LPDIRECT3DVIEWPORT2 iface, LPDIRECT3D d3d
242 );
243 extern HRESULT WINAPI IDirect3DViewport2Impl_GetViewport(
244     LPDIRECT3DVIEWPORT2 iface, LPD3DVIEWPORT lpvp
245 );
246 extern HRESULT WINAPI IDirect3DViewport2Impl_SetViewport(
247     LPDIRECT3DVIEWPORT2 iface,LPD3DVIEWPORT lpvp
248 );
249 extern HRESULT WINAPI IDirect3DViewport2Impl_TransformVertices(
250     LPDIRECT3DVIEWPORT2 iface,DWORD dwVertexCount,LPD3DTRANSFORMDATA lpData,
251     DWORD dwFlags,LPDWORD lpOffScreen
252 );
253 extern HRESULT WINAPI IDirect3DViewport2Impl_LightElements(
254     LPDIRECT3DVIEWPORT2 iface,DWORD dwElementCount,LPD3DLIGHTDATA lpData
255 );
256 extern HRESULT WINAPI IDirect3DViewport2Impl_SetBackground(
257     LPDIRECT3DVIEWPORT2 iface, D3DMATERIALHANDLE hMat
258 );
259 extern HRESULT WINAPI IDirect3DViewport2Impl_GetBackground(
260     LPDIRECT3DVIEWPORT2 iface,LPD3DMATERIALHANDLE lphMat,LPBOOL lpValid
261 );
262 extern HRESULT WINAPI IDirect3DViewport2Impl_SetBackgroundDepth(
263     LPDIRECT3DVIEWPORT2 iface,LPDIRECTDRAWSURFACE lpDDSurface
264 );
265 extern HRESULT WINAPI IDirect3DViewport2Impl_GetBackgroundDepth(
266     LPDIRECT3DVIEWPORT2 iface,LPDIRECTDRAWSURFACE* lplpDDSurface,LPBOOL lpValid
267 );
268 extern HRESULT WINAPI IDirect3DViewport2Impl_Clear(
269     LPDIRECT3DVIEWPORT2 iface, DWORD dwCount, LPD3DRECT lpRects, DWORD dwFlags
270 );
271 extern HRESULT WINAPI IDirect3DViewport2Impl_AddLight(
272     LPDIRECT3DVIEWPORT2 iface,LPDIRECT3DLIGHT lpLight
273 );
274 extern HRESULT WINAPI IDirect3DViewport2Impl_DeleteLight(
275     LPDIRECT3DVIEWPORT2 iface,LPDIRECT3DLIGHT lpLight
276 );
277 extern HRESULT WINAPI IDirect3DViewport2Impl_NextLight(
278     LPDIRECT3DVIEWPORT2 iface, LPDIRECT3DLIGHT lpLight,
279     LPDIRECT3DLIGHT* lplpLight, DWORD dwFlags
280 );
281 extern HRESULT WINAPI IDirect3DViewport2Impl_GetViewport2(
282     LPDIRECT3DVIEWPORT2 iface, LPD3DVIEWPORT2 lpViewport2
283 );
284 extern HRESULT WINAPI IDirect3DViewport2Impl_SetViewport2(
285     LPDIRECT3DVIEWPORT2 iface, LPD3DVIEWPORT2 lpViewport2
286 );
287
288 /*****************************************************************************
289  * IDirect3DExecuteBuffer implementation structure
290  */
291 struct IDirect3DExecuteBufferImpl
292 {
293     /* IUnknown fields */
294     ICOM_VFIELD(IDirect3DExecuteBuffer);
295     DWORD                                ref;
296     /* IDirect3DExecuteBuffer fields */
297     IDirect3DDeviceImpl* d3ddev;
298
299     D3DEXECUTEBUFFERDESC desc;
300     D3DEXECUTEDATA data;
301
302     /* This buffer will store the transformed vertices */
303     void* vertex_data;
304     D3DVERTEXTYPE vertex_type;
305
306     /* This flags is set to TRUE if we allocated ourselves the
307        data buffer */
308     BOOL need_free;
309
310     void (*execute)(IDirect3DExecuteBuffer* this,
311                     IDirect3DDevice* dev,
312                     IDirect3DViewport2* vp);
313     LPVOID private;
314 };
315 extern LPDIRECT3DEXECUTEBUFFER d3dexecutebuffer_create(IDirect3DDeviceImpl* d3ddev, LPD3DEXECUTEBUFFERDESC lpDesc);
316
317 /*****************************************************************************
318  * IDirect3DDevice implementation structure
319  */
320 struct IDirect3DDeviceImpl
321 {
322     /* IUnknown fields */
323     ICOM_VFIELD(IDirect3DDevice);
324     DWORD                         ref;
325     /* IDirect3DDevice fields */
326     IDirect3DImpl*          d3d;
327     IDirectDrawSurfaceImpl* surface;
328
329     IDirect3DViewport2Impl*  viewport_list;
330     IDirect3DViewport2Impl*  current_viewport;
331
332     void (*set_context)(IDirect3DDeviceImpl*);
333     LPVOID              private;
334 };
335
336 /*****************************************************************************
337  * IDirect3DDevice2 implementation structure
338  */
339 struct IDirect3DDevice2Impl
340 {
341     /* IUnknown fields */
342     ICOM_VFIELD(IDirect3DDevice2);
343     DWORD                          ref;
344     /* IDirect3DDevice fields */
345     IDirect3D2Impl*         d3d;
346     IDirectDrawSurfaceImpl* surface;
347
348     IDirect3DViewport2Impl* viewport_list;
349     IDirect3DViewport2Impl* current_viewport;
350
351     void (*set_context)(IDirect3DDevice2Impl*);
352     LPVOID              private;
353 };
354 extern HRESULT WINAPI IDirect3DDevice2Impl_QueryInterface(
355     LPDIRECT3DDEVICE2 iface, REFIID riid, LPVOID* ppvObj
356 );
357 extern ULONG WINAPI IDirect3DDevice2Impl_AddRef(LPDIRECT3DDEVICE2 iface);
358 extern ULONG WINAPI IDirect3DDevice2Impl_Release(LPDIRECT3DDEVICE2 iface)
359 ;
360 extern HRESULT WINAPI IDirect3DDevice2Impl_GetCaps(
361     LPDIRECT3DDEVICE2 iface, LPD3DDEVICEDESC lpdescsoft,
362     LPD3DDEVICEDESC lpdeschard
363 );
364 extern HRESULT WINAPI IDirect3DDevice2Impl_SwapTextureHandles(
365     LPDIRECT3DDEVICE2 iface,LPDIRECT3DTEXTURE2 lptex1,LPDIRECT3DTEXTURE2 lptex2
366 );
367 extern HRESULT WINAPI IDirect3DDevice2Impl_GetStats(
368     LPDIRECT3DDEVICE2 iface, LPD3DSTATS lpstats)
369 ;
370 extern HRESULT WINAPI IDirect3DDevice2Impl_AddViewport(
371     LPDIRECT3DDEVICE2 iface, LPDIRECT3DVIEWPORT2 lpvp
372 );
373 extern HRESULT WINAPI IDirect3DDevice2Impl_DeleteViewport(
374     LPDIRECT3DDEVICE2 iface, LPDIRECT3DVIEWPORT2 lpvp)
375 ;
376 extern HRESULT WINAPI IDirect3DDevice2Impl_NextViewport(
377     LPDIRECT3DDEVICE2 iface, LPDIRECT3DVIEWPORT2 lpvp,
378     LPDIRECT3DVIEWPORT2* lplpvp, DWORD dwFlags
379 );
380 extern HRESULT WINAPI IDirect3DDevice2Impl_EnumTextureFormats(
381     LPDIRECT3DDEVICE2 iface, LPD3DENUMTEXTUREFORMATSCALLBACK cb, LPVOID context
382 );
383 extern HRESULT WINAPI IDirect3DDevice2Impl_BeginScene(LPDIRECT3DDEVICE2 iface);
384 extern HRESULT WINAPI IDirect3DDevice2Impl_EndScene(LPDIRECT3DDEVICE2 iface);
385 extern HRESULT WINAPI IDirect3DDevice2Impl_GetDirect3D(
386     LPDIRECT3DDEVICE2 iface, LPDIRECT3D2 *lpd3d2
387 );
388 extern HRESULT WINAPI IDirect3DDevice2Impl_SetCurrentViewport(
389     LPDIRECT3DDEVICE2 iface, LPDIRECT3DVIEWPORT2 lpvp
390 );
391 extern HRESULT WINAPI IDirect3DDevice2Impl_GetCurrentViewport(
392     LPDIRECT3DDEVICE2 iface, LPDIRECT3DVIEWPORT2 *lplpvp
393 );
394 extern HRESULT WINAPI IDirect3DDevice2Impl_SetRenderTarget(
395     LPDIRECT3DDEVICE2 iface, LPDIRECTDRAWSURFACE lpdds, DWORD dwFlags
396 );
397 extern HRESULT WINAPI IDirect3DDevice2Impl_GetRenderTarget(
398     LPDIRECT3DDEVICE2 iface, LPDIRECTDRAWSURFACE *lplpdds
399 );
400 extern HRESULT WINAPI IDirect3DDevice2Impl_Begin(
401     LPDIRECT3DDEVICE2 iface, D3DPRIMITIVETYPE d3dp, D3DVERTEXTYPE d3dv,
402     DWORD dwFlags
403 );
404 extern HRESULT WINAPI IDirect3DDevice2Impl_BeginIndexed(
405     LPDIRECT3DDEVICE2 iface, D3DPRIMITIVETYPE d3dp, D3DVERTEXTYPE d3dv,
406     LPVOID lpvert, DWORD numvert, DWORD dwFlags
407 );
408 extern HRESULT WINAPI IDirect3DDevice2Impl_Vertex(
409     LPDIRECT3DDEVICE2 iface,LPVOID lpvert
410 );
411 extern HRESULT WINAPI IDirect3DDevice2Impl_Index(LPDIRECT3DDEVICE2 iface, WORD index);
412 extern HRESULT WINAPI IDirect3DDevice2Impl_End(LPDIRECT3DDEVICE2 iface,DWORD dwFlags);
413 extern HRESULT WINAPI IDirect3DDevice2Impl_GetRenderState(
414     LPDIRECT3DDEVICE2 iface, D3DRENDERSTATETYPE d3drs, LPDWORD lprstate
415 );
416 extern HRESULT WINAPI IDirect3DDevice2Impl_SetRenderState(
417     LPDIRECT3DDEVICE2 iface, D3DRENDERSTATETYPE dwRenderStateType,
418     DWORD dwRenderState
419 );
420 extern HRESULT WINAPI IDirect3DDevice2Impl_GetLightState(
421     LPDIRECT3DDEVICE2 iface, D3DLIGHTSTATETYPE d3dls, LPDWORD lplstate
422 );
423 extern HRESULT WINAPI IDirect3DDevice2Impl_SetLightState(
424     LPDIRECT3DDEVICE2 iface, D3DLIGHTSTATETYPE dwLightStateType,
425     DWORD dwLightState
426 );
427 extern HRESULT WINAPI IDirect3DDevice2Impl_SetTransform(
428     LPDIRECT3DDEVICE2 iface, D3DTRANSFORMSTATETYPE d3dts, LPD3DMATRIX lpmatrix
429 );
430 extern HRESULT WINAPI IDirect3DDevice2Impl_GetTransform(
431     LPDIRECT3DDEVICE2 iface, D3DTRANSFORMSTATETYPE d3dts, LPD3DMATRIX lpmatrix
432 );
433 extern HRESULT WINAPI IDirect3DDevice2Impl_MultiplyTransform(
434     LPDIRECT3DDEVICE2 iface, D3DTRANSFORMSTATETYPE d3dts, LPD3DMATRIX lpmatrix
435 );
436 extern HRESULT WINAPI IDirect3DDevice2Impl_DrawPrimitive(
437     LPDIRECT3DDEVICE2 iface, D3DPRIMITIVETYPE d3dp, D3DVERTEXTYPE d3dv,
438     LPVOID lpvertex, DWORD vertcount, DWORD dwFlags
439 );
440 extern HRESULT WINAPI IDirect3DDevice2Impl_DrawIndexedPrimitive(
441     LPDIRECT3DDEVICE2 iface, D3DPRIMITIVETYPE d3dp, D3DVERTEXTYPE d3dv,
442     LPVOID lpvertex, DWORD vertcount, LPWORD lpindexes, DWORD indexcount,
443     DWORD dwFlags
444 );
445 extern HRESULT WINAPI IDirect3DDevice2Impl_SetClipStatus(
446     LPDIRECT3DDEVICE2 iface, LPD3DCLIPSTATUS lpcs
447 );
448 extern HRESULT WINAPI IDirect3DDevice2Impl_GetClipStatus(
449     LPDIRECT3DDEVICE2 iface, LPD3DCLIPSTATUS lpcs
450 );
451 extern HRESULT WINAPI IDirect3DDeviceImpl_QueryInterface(
452     LPDIRECT3DDEVICE iface, REFIID riid, LPVOID* ppvObj
453 );
454 extern ULONG WINAPI IDirect3DDeviceImpl_AddRef(LPDIRECT3DDEVICE iface);
455 extern ULONG WINAPI IDirect3DDeviceImpl_Release(LPDIRECT3DDEVICE iface);
456 extern HRESULT WINAPI IDirect3DDeviceImpl_Initialize(
457     LPDIRECT3DDEVICE iface, LPDIRECT3D lpd3d, LPGUID lpGUID,
458     LPD3DDEVICEDESC lpd3ddvdesc
459 );
460 extern HRESULT WINAPI IDirect3DDeviceImpl_GetCaps(
461     LPDIRECT3DDEVICE iface, LPD3DDEVICEDESC lpD3DHWDevDesc,
462     LPD3DDEVICEDESC lpD3DSWDevDesc
463 );
464 extern HRESULT WINAPI IDirect3DDeviceImpl_SwapTextureHandles(
465     LPDIRECT3DDEVICE iface, LPDIRECT3DTEXTURE lpD3DTex1,
466     LPDIRECT3DTEXTURE lpD3DTex2
467 );
468 extern HRESULT WINAPI IDirect3DDeviceImpl_CreateExecuteBuffer(
469     LPDIRECT3DDEVICE iface, LPD3DEXECUTEBUFFERDESC lpDesc,
470     LPDIRECT3DEXECUTEBUFFER *lplpDirect3DExecuteBuffer, IUnknown *pUnkOuter
471 );
472 extern HRESULT WINAPI IDirect3DDeviceImpl_GetStats(
473     LPDIRECT3DDEVICE iface, LPD3DSTATS lpD3DStats
474 );
475 extern HRESULT WINAPI IDirect3DDeviceImpl_Execute(
476     LPDIRECT3DDEVICE iface, LPDIRECT3DEXECUTEBUFFER lpDirect3DExecuteBuffer,
477     LPDIRECT3DVIEWPORT lpDirect3DViewport, DWORD dwFlags
478 );
479 extern HRESULT WINAPI IDirect3DDeviceImpl_AddViewport(
480     LPDIRECT3DDEVICE iface, LPDIRECT3DVIEWPORT lpvp
481 );
482 extern HRESULT WINAPI IDirect3DDeviceImpl_DeleteViewport(
483     LPDIRECT3DDEVICE iface, LPDIRECT3DVIEWPORT lpvp
484 );
485 extern HRESULT WINAPI IDirect3DDeviceImpl_NextViewport(
486     LPDIRECT3DDEVICE iface, LPDIRECT3DVIEWPORT lpvp,
487     LPDIRECT3DVIEWPORT* lplpvp, DWORD dwFlags
488 );
489 extern HRESULT WINAPI IDirect3DDeviceImpl_Pick(
490     LPDIRECT3DDEVICE iface, LPDIRECT3DEXECUTEBUFFER lpDirect3DExecuteBuffer,
491     LPDIRECT3DVIEWPORT lpDirect3DViewport, DWORD dwFlags, LPD3DRECT lpRect
492 );
493 extern HRESULT WINAPI IDirect3DDeviceImpl_GetPickRecords(
494     LPDIRECT3DDEVICE iface, LPDWORD lpCount, LPD3DPICKRECORD lpD3DPickRec
495 );
496 extern HRESULT WINAPI IDirect3DDeviceImpl_EnumTextureFormats(
497     LPDIRECT3DDEVICE iface,LPD3DENUMTEXTUREFORMATSCALLBACK lpd3dEnumTextureProc,
498     LPVOID lpArg
499 );
500 extern HRESULT WINAPI IDirect3DDeviceImpl_CreateMatrix(
501     LPDIRECT3DDEVICE iface, LPD3DMATRIXHANDLE lpD3DMatHandle
502 )
503 ;
504 extern HRESULT WINAPI IDirect3DDeviceImpl_SetMatrix(
505     LPDIRECT3DDEVICE iface, D3DMATRIXHANDLE d3dMatHandle,
506     const LPD3DMATRIX lpD3DMatrix)
507 ;
508 extern HRESULT WINAPI IDirect3DDeviceImpl_GetMatrix(
509     LPDIRECT3DDEVICE iface,D3DMATRIXHANDLE D3DMatHandle,LPD3DMATRIX lpD3DMatrix
510 );
511 extern HRESULT WINAPI IDirect3DDeviceImpl_DeleteMatrix(
512     LPDIRECT3DDEVICE iface, D3DMATRIXHANDLE d3dMatHandle
513 );
514 extern HRESULT WINAPI IDirect3DDeviceImpl_BeginScene(LPDIRECT3DDEVICE iface)
515 ;
516 extern HRESULT WINAPI IDirect3DDeviceImpl_EndScene(LPDIRECT3DDEVICE iface)
517 ;
518 extern HRESULT WINAPI IDirect3DDeviceImpl_GetDirect3D(
519     LPDIRECT3DDEVICE iface, LPDIRECT3D *lpDirect3D
520 );
521
522 /* All non-static functions 'exported' by various sub-objects */
523 extern LPDIRECT3DTEXTURE2 d3dtexture2_create(IDirectDrawSurface4Impl* surf);
524 extern LPDIRECT3DTEXTURE d3dtexture_create(IDirectDrawSurface4Impl* surf);
525
526 extern LPDIRECT3DLIGHT d3dlight_create_dx3(IDirect3DImpl* d3d1);
527 extern LPDIRECT3DLIGHT d3dlight_create(IDirect3D2Impl* d3d2);
528
529 extern LPDIRECT3DEXECUTEBUFFER d3dexecutebuffer_create(IDirect3DDeviceImpl* d3ddev, LPD3DEXECUTEBUFFERDESC lpDesc);
530
531 extern LPDIRECT3DMATERIAL d3dmaterial_create(IDirect3DImpl* d3d1);
532 extern LPDIRECT3DMATERIAL2 d3dmaterial2_create(IDirect3D2Impl* d3d2);
533
534 extern LPDIRECT3DVIEWPORT d3dviewport_create(IDirect3DImpl* d3d1);
535 extern LPDIRECT3DVIEWPORT2 d3dviewport2_create(IDirect3D2Impl* d3d2);
536
537 extern int is_OpenGL_dx3(REFCLSID rguid, IDirectDrawSurfaceImpl* surface, IDirect3DDeviceImpl** device);
538 extern int d3d_OpenGL_dx3(LPD3DENUMDEVICESCALLBACK cb, LPVOID context) ;
539 extern int d3d_OpenGL(LPD3DENUMDEVICESCALLBACK cb, LPVOID context) ;
540 extern int is_OpenGL(REFCLSID rguid, IDirectDrawSurfaceImpl* surface, IDirect3DDevice2Impl** device, IDirect3D2Impl* d3d);
541
542
543 extern void _dump_renderstate(D3DRENDERSTATETYPE type, DWORD value);
544
545 #define dump_mat(mat) \
546     TRACE("%f %f %f %f\n", (mat)->_11, (mat)->_12, (mat)->_13, (mat)->_14); \
547     TRACE("%f %f %f %f\n", (mat)->_21, (mat)->_22, (mat)->_23, (mat)->_24); \
548     TRACE("%f %f %f %f\n", (mat)->_31, (mat)->_32, (mat)->_33, (mat)->_34); \
549     TRACE("%f %f %f %f\n", (mat)->_41, (mat)->_42, (mat)->_43, (mat)->_44);
550
551 #endif /* __GRAPHICS_WINE_D3D_PRIVATE_H */