1 /* Direct3D private include file
4 This files contains all the structure that are not exported
5 through d3d.h and all common macros. */
7 #ifndef __GRAPHICS_WINE_D3D_PRIVATE_H
8 #define __GRAPHICS_WINE_D3D_PRIVATE_H
13 /*****************************************************************************
14 * Predeclare the interface implementation structures
16 typedef struct IDirect3DImpl IDirect3DImpl
;
17 typedef struct IDirect3D2Impl IDirect3D2Impl
;
18 typedef struct IDirect3DLightImpl IDirect3DLightImpl
;
19 typedef struct IDirect3DMaterial2Impl IDirect3DMaterial2Impl
;
20 typedef struct IDirect3DTexture2Impl IDirect3DTexture2Impl
;
21 typedef struct IDirect3DViewport2Impl IDirect3DViewport2Impl
;
22 typedef struct IDirect3DExecuteBufferImpl IDirect3DExecuteBufferImpl
;
23 typedef struct IDirect3DDeviceImpl IDirect3DDeviceImpl
;
24 typedef struct IDirect3DDevice2Impl IDirect3DDevice2Impl
;
26 #include "ddraw_private.h"
28 /*****************************************************************************
29 * IDirect3D implementation structure
34 ICOM_VTABLE(IDirect3D
)* lpvtbl
;
36 /* IDirect3D fields */
37 IDirectDrawImpl
* ddraw
;
40 /*****************************************************************************
41 * IDirect3D2 implementation structure
46 ICOM_VTABLE(IDirect3D2
)* lpvtbl
;
48 /* IDirect3D2 fields */
49 IDirectDrawImpl
* ddraw
;
52 /*****************************************************************************
53 * IDirect3DLight implementation structure
55 struct IDirect3DLightImpl
58 ICOM_VTABLE(IDirect3DLight
)* lpvtbl
;
60 /* IDirect3DLight fields */
69 /* Chained list used for adding / removing from viewports */
70 IDirect3DLightImpl
*next
, *prev
;
72 /* Activation function */
73 void (*activate
)(IDirect3DLightImpl
*);
76 /* Awful OpenGL code !!! */
82 /*****************************************************************************
83 * IDirect3DMaterial2 implementation structure
85 struct IDirect3DMaterial2Impl
88 ICOM_VTABLE(IDirect3DMaterial2
)* lpvtbl
;
90 /* IDirect3DMaterial2 fields */
96 IDirect3DDeviceImpl
* active_device1
;
97 IDirect3DDevice2Impl
* active_device2
;
103 void (*activate
)(IDirect3DMaterial2Impl
* this);
106 /*****************************************************************************
107 * IDirect3DTexture2 implementation structure
109 struct IDirect3DTexture2Impl
111 /* IUnknown fields */
112 ICOM_VTABLE(IDirect3DTexture2
)* lpvtbl
;
114 /* IDirect3DTexture2 fields */
115 void* D3Ddevice
; /* I put (void *) to use the same pointer for both
116 Direct3D and Direct3D2 */
120 IDirectDrawSurface4Impl
* surface
;
123 /*****************************************************************************
124 * IDirect3DViewport2 implementation structure
126 struct IDirect3DViewport2Impl
128 /* IUnknown fields */
129 ICOM_VTABLE(IDirect3DViewport2
)* lpvtbl
;
131 /* IDirect3DViewport2 fields */
134 IDirect3D2Impl
* d3d2
;
136 /* If this viewport is active for one device, put the device here */
138 IDirect3DDeviceImpl
* active_device1
;
139 IDirect3DDevice2Impl
* active_device2
;
149 /* Activation function */
150 void (*activate
)(IDirect3DViewport2Impl
*);
152 /* Field used to chain viewports together */
153 IDirect3DViewport2Impl
* next
;
156 IDirect3DLightImpl
* lights
;
164 /*****************************************************************************
165 * IDirect3DExecuteBuffer implementation structure
167 struct IDirect3DExecuteBufferImpl
169 /* IUnknown fields */
170 ICOM_VTABLE(IDirect3DExecuteBuffer
)* lpvtbl
;
172 /* IDirect3DExecuteBuffer fields */
173 IDirect3DDeviceImpl
* d3ddev
;
175 D3DEXECUTEBUFFERDESC desc
;
178 /* This buffer will store the transformed vertices */
180 D3DVERTEXTYPE vertex_type
;
182 /* This flags is set to TRUE if we allocated ourselves the
186 void (*execute
)(IDirect3DExecuteBuffer
* this,
187 IDirect3DDevice
* dev
,
188 IDirect3DViewport2
* vp
);
191 /*****************************************************************************
192 * IDirect3DDevice implementation structure
194 struct IDirect3DDeviceImpl
196 /* IUnknown fields */
197 ICOM_VTABLE(IDirect3DDevice
)* lpvtbl
;
199 /* IDirect3DDevice fields */
201 IDirectDrawSurfaceImpl
* surface
;
203 IDirect3DViewport2Impl
* viewport_list
;
204 IDirect3DViewport2Impl
* current_viewport
;
206 void (*set_context
)(IDirect3DDeviceImpl
*);
209 /*****************************************************************************
210 * IDirect3DDevice2 implementation structure
212 struct IDirect3DDevice2Impl
214 /* IUnknown fields */
215 ICOM_VTABLE(IDirect3DDevice2
)* lpvtbl
;
217 /* IDirect3DDevice fields */
219 IDirectDrawSurfaceImpl
* surface
;
221 IDirect3DViewport2Impl
* viewport_list
;
222 IDirect3DViewport2Impl
* current_viewport
;
224 void (*set_context
)(IDirect3DDevice2Impl
*);
232 /* Matrix copy WITH transposition */
233 #define conv_mat2(mat,gl_mat) \
235 TRACE(ddraw, "%f %f %f %f\n", (mat)->_11, (mat)->_12, (mat)->_13, (mat)->_14); \
236 TRACE(ddraw, "%f %f %f %f\n", (mat)->_21, (mat)->_22, (mat)->_23, (mat)->_24); \
237 TRACE(ddraw, "%f %f %f %f\n", (mat)->_31, (mat)->_32, (mat)->_33, (mat)->_34); \
238 TRACE(ddraw, "%f %f %f %f\n", (mat)->_41, (mat)->_42, (mat)->_43, (mat)->_44); \
239 (gl_mat)[ 0] = (mat)->_11; \
240 (gl_mat)[ 1] = (mat)->_21; \
241 (gl_mat)[ 2] = (mat)->_31; \
242 (gl_mat)[ 3] = (mat)->_41; \
243 (gl_mat)[ 4] = (mat)->_12; \
244 (gl_mat)[ 5] = (mat)->_22; \
245 (gl_mat)[ 6] = (mat)->_32; \
246 (gl_mat)[ 7] = (mat)->_42; \
247 (gl_mat)[ 8] = (mat)->_13; \
248 (gl_mat)[ 9] = (mat)->_23; \
249 (gl_mat)[10] = (mat)->_33; \
250 (gl_mat)[11] = (mat)->_43; \
251 (gl_mat)[12] = (mat)->_14; \
252 (gl_mat)[13] = (mat)->_24; \
253 (gl_mat)[14] = (mat)->_34; \
254 (gl_mat)[15] = (mat)->_44; \
257 /* Matrix copy WITHOUT transposition */
258 #define conv_mat(mat,gl_mat) \
260 TRACE(ddraw, "%f %f %f %f\n", (mat)->_11, (mat)->_12, (mat)->_13, (mat)->_14); \
261 TRACE(ddraw, "%f %f %f %f\n", (mat)->_21, (mat)->_22, (mat)->_23, (mat)->_24); \
262 TRACE(ddraw, "%f %f %f %f\n", (mat)->_31, (mat)->_32, (mat)->_33, (mat)->_34); \
263 TRACE(ddraw, "%f %f %f %f\n", (mat)->_41, (mat)->_42, (mat)->_43, (mat)->_44); \
264 memcpy(gl_mat, (mat), 16 * sizeof(float)); \
267 #define dump_mat(mat) \
268 TRACE(ddraw, "%f %f %f %f\n", (mat)->_11, (mat)->_12, (mat)->_13, (mat)->_14); \
269 TRACE(ddraw, "%f %f %f %f\n", (mat)->_21, (mat)->_22, (mat)->_23, (mat)->_24); \
270 TRACE(ddraw, "%f %f %f %f\n", (mat)->_31, (mat)->_32, (mat)->_33, (mat)->_34); \
271 TRACE(ddraw, "%f %f %f %f\n", (mat)->_41, (mat)->_42, (mat)->_43, (mat)->_44);
273 typedef struct render_state
{
274 /* This is used for the device mode */
276 /* This is used for textures */
280 typedef struct OpenGL_IDirect3DDevice2
{
281 IDirect3DDevice2Impl common
;
283 /* These are the OpenGL-specific variables */
285 unsigned char *buffer
;
287 /* The current render state */
290 /* The last type of vertex drawn */
296 } OpenGL_IDirect3DDevice2
;
298 typedef struct OpenGL_IDirect3DDevice
{
299 IDirect3DDeviceImpl common
;
301 /* These are the OpenGL-specific variables */
303 unsigned char *buffer
;
305 /* The current render state */
308 D3DMATRIX
*world_mat
;
311 } OpenGL_IDirect3DDevice
;
313 #define _dump_colorvalue(s,v) \
314 TRACE(ddraw, " " s " : %f %f %f %f\n", \
315 (v).r.r, (v).g.g, (v).b.b, (v).a.a);
317 /* Common functions defined in d3dcommon.c */
318 void set_render_state(D3DRENDERSTATETYPE dwRenderStateType
,
319 DWORD dwRenderState
, RenderState
*rs
) ;
321 #endif /* HAVE_MESAGL */
323 /* All non-static functions 'exported' by various sub-objects */
324 extern LPDIRECT3DTEXTURE2
d3dtexture2_create(IDirectDrawSurface4Impl
* surf
);
325 extern LPDIRECT3DTEXTURE
d3dtexture_create(IDirectDrawSurface4Impl
* surf
);
327 extern LPDIRECT3DLIGHT
d3dlight_create_dx3(IDirect3DImpl
* d3d1
);
328 extern LPDIRECT3DLIGHT
d3dlight_create(IDirect3D2Impl
* d3d2
);
330 extern LPDIRECT3DEXECUTEBUFFER
d3dexecutebuffer_create(IDirect3DDeviceImpl
* d3ddev
, LPD3DEXECUTEBUFFERDESC lpDesc
);
332 extern LPDIRECT3DMATERIAL
d3dmaterial_create(IDirect3DImpl
* d3d1
);
333 extern LPDIRECT3DMATERIAL2
d3dmaterial2_create(IDirect3D2Impl
* d3d2
);
335 extern LPDIRECT3DVIEWPORT
d3dviewport_create(IDirect3DImpl
* d3d1
);
336 extern LPDIRECT3DVIEWPORT2
d3dviewport2_create(IDirect3D2Impl
* d3d2
);
338 extern int is_OpenGL_dx3(REFCLSID rguid
, IDirectDrawSurfaceImpl
* surface
, IDirect3DDeviceImpl
** device
);
339 extern int d3d_OpenGL_dx3(LPD3DENUMDEVICESCALLBACK cb
, LPVOID context
) ;
340 extern int d3d_OpenGL(LPD3DENUMDEVICESCALLBACK cb
, LPVOID context
) ;
341 extern int is_OpenGL(REFCLSID rguid
, IDirectDrawSurfaceImpl
* surface
, IDirect3DDevice2Impl
** device
, IDirect3D2Impl
* d3d
);
344 #endif /* __GRAPHICS_WINE_D3D_PRIVATE_H */