- New implementation of SendMessage, ReceiveMessage, ReplyMessage functions
[wine] / graphics / 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 _WINE_D3D_PRIVATE_H
8 #define _WINE_D3D_PRIVATE_H
9
10 #include "wine_gl.h"
11
12 #ifdef HAVE_MESAGL
13
14 #include "d3d.h"
15
16 /* Matrix copy WITH transposition */
17 #define conv_mat2(mat,gl_mat)                   \
18 {                                               \
19   TRACE(ddraw, "%f %f %f %f\n", (mat)->_11, (mat)->_12, (mat)->_13, (mat)->_14); \
20   TRACE(ddraw, "%f %f %f %f\n", (mat)->_21, (mat)->_22, (mat)->_23, (mat)->_24); \
21   TRACE(ddraw, "%f %f %f %f\n", (mat)->_31, (mat)->_32, (mat)->_33, (mat)->_34); \
22   TRACE(ddraw, "%f %f %f %f\n", (mat)->_41, (mat)->_42, (mat)->_43, (mat)->_44); \
23   (gl_mat)[ 0] = (mat)->_11;                    \
24   (gl_mat)[ 1] = (mat)->_21;                    \
25   (gl_mat)[ 2] = (mat)->_31;                    \
26   (gl_mat)[ 3] = (mat)->_41;                    \
27   (gl_mat)[ 4] = (mat)->_12;                    \
28   (gl_mat)[ 5] = (mat)->_22;                    \
29   (gl_mat)[ 6] = (mat)->_32;                    \
30   (gl_mat)[ 7] = (mat)->_42;                    \
31   (gl_mat)[ 8] = (mat)->_13;                    \
32   (gl_mat)[ 9] = (mat)->_23;                    \
33   (gl_mat)[10] = (mat)->_33;                    \
34   (gl_mat)[11] = (mat)->_43;                    \
35   (gl_mat)[12] = (mat)->_14;                    \
36   (gl_mat)[13] = (mat)->_24;                    \
37   (gl_mat)[14] = (mat)->_34;                    \
38   (gl_mat)[15] = (mat)->_44;                    \
39 };
40
41 /* Matrix copy WITHOUT transposition */
42 #define conv_mat(mat,gl_mat)                    \
43 {                                               \
44   TRACE(ddraw, "%f %f %f %f\n", (mat)->_11, (mat)->_12, (mat)->_13, (mat)->_14); \
45   TRACE(ddraw, "%f %f %f %f\n", (mat)->_21, (mat)->_22, (mat)->_23, (mat)->_24); \
46   TRACE(ddraw, "%f %f %f %f\n", (mat)->_31, (mat)->_32, (mat)->_33, (mat)->_34); \
47   TRACE(ddraw, "%f %f %f %f\n", (mat)->_41, (mat)->_42, (mat)->_43, (mat)->_44); \
48   memcpy(gl_mat, (mat), 16 * sizeof(float));      \
49 };
50
51 #define dump_mat(mat) \
52   TRACE(ddraw, "%f %f %f %f\n", (mat)->_11, (mat)->_12, (mat)->_13, (mat)->_14); \
53   TRACE(ddraw, "%f %f %f %f\n", (mat)->_21, (mat)->_22, (mat)->_23, (mat)->_24); \
54   TRACE(ddraw, "%f %f %f %f\n", (mat)->_31, (mat)->_32, (mat)->_33, (mat)->_34); \
55   TRACE(ddraw, "%f %f %f %f\n", (mat)->_41, (mat)->_42, (mat)->_43, (mat)->_44);
56
57 typedef struct render_state {
58   /* This is used for the device mode */
59   GLenum src, dst;
60   /* This is used for textures */
61   GLenum mag, min;
62 } RenderState;
63
64 typedef struct OpenGL_IDirect3DDevice2 {
65   IDirect3DDevice2 common;
66   
67   /* These are the OpenGL-specific variables */
68   OSMesaContext ctx;
69   unsigned char *buffer;
70   
71   /* The current render state */
72   RenderState rs;
73
74   /* The last type of vertex drawn */
75   D3DVERTEXTYPE vt;
76   
77   float world_mat[16];
78   float view_mat[16];
79   float proj_mat[16];
80 } OpenGL_IDirect3DDevice2;
81
82 typedef struct OpenGL_IDirect3DDevice {
83   IDirect3DDevice common;
84   
85   /* These are the OpenGL-specific variables */
86   OSMesaContext ctx;
87   unsigned char *buffer;
88   
89   /* The current render state */
90   RenderState rs;
91   
92   D3DMATRIX *world_mat;
93   D3DMATRIX *view_mat;
94   D3DMATRIX *proj_mat;
95 } OpenGL_IDirect3DDevice;
96
97 #define _dump_colorvalue(s,v)                      \
98   TRACE(ddraw, " " s " : %f %f %f %f\n",           \
99         (v).r.r, (v).g.g, (v).b.b, (v).a.a);
100
101 /* Common functions defined in d3dcommon.c */
102 void set_render_state(D3DRENDERSTATETYPE dwRenderStateType,
103                       DWORD dwRenderState, RenderState *rs) ;
104
105 #endif /* HAVE_MESAGL */
106
107 /* All non-static functions 'exported' by various sub-objects */
108 extern LPDIRECT3DTEXTURE2 d3dtexture2_create(LPDIRECTDRAWSURFACE4 surf) ;
109 extern LPDIRECT3DTEXTURE d3dtexture_create(LPDIRECTDRAWSURFACE4 surf) ;
110
111 extern LPDIRECT3DLIGHT d3dlight_create_dx3(LPDIRECT3D d3d) ;
112 extern LPDIRECT3DLIGHT d3dlight_create(LPDIRECT3D2 d3d) ;
113
114 extern LPDIRECT3DEXECUTEBUFFER d3dexecutebuffer_create(LPDIRECT3DDEVICE d3ddev, LPD3DEXECUTEBUFFERDESC lpDesc) ;
115
116 extern LPDIRECT3DMATERIAL d3dmaterial_create(LPDIRECT3D d3d) ;
117 extern LPDIRECT3DMATERIAL2 d3dmaterial2_create(LPDIRECT3D2 d3d) ;
118
119 extern LPDIRECT3DVIEWPORT d3dviewport_create(LPDIRECT3D d3d) ;
120 extern LPDIRECT3DVIEWPORT2 d3dviewport2_create(LPDIRECT3D2 d3d) ;
121
122 extern int is_OpenGL_dx3(REFCLSID rguid, LPDIRECTDRAWSURFACE surface, LPDIRECT3DDEVICE *device) ;
123 extern int d3d_OpenGL_dx3(LPD3DENUMDEVICESCALLBACK cb, LPVOID context) ;
124 extern int d3d_OpenGL(LPD3DENUMDEVICESCALLBACK cb, LPVOID context) ;
125 extern int is_OpenGL(REFCLSID rguid, LPDIRECTDRAWSURFACE surface, LPDIRECT3DDEVICE2 *device, LPDIRECT3D2 d3d) ;
126
127 #endif /* _WINE_D3D_PRIVATE_H */