First support of DGA 2.0 for DirectDraw.
[wine.git] / graphics / ddraw_private.h
blobce62aa37dd3ebd0b55f1ecd0ef02b5ccdae8e17b
1 #ifndef __GRAPHICS_WINE_DDRAW_PRIVATE_H
2 #define __GRAPHICS_WINE_DDRAW_PRIVATE_H
4 #include "config.h"
6 #ifdef HAVE_LIBXXF86DGA2
7 #include "ts_xf86dga2.h"
8 #endif /* defined(HAVE_LIBXXF86DGA2) */
10 #include "ddraw.h"
11 #include "winuser.h"
13 /*****************************************************************************
14 * Predeclare the interface implementation structures
16 typedef struct IDirectDrawPaletteImpl IDirectDrawPaletteImpl;
17 typedef struct IDirectDrawClipperImpl IDirectDrawClipperImpl;
18 typedef struct IDirectDrawImpl IDirectDrawImpl;
19 typedef struct IDirectDraw2Impl IDirectDraw2Impl;
20 typedef struct IDirectDraw4Impl IDirectDraw4Impl;
21 typedef struct IDirectDrawSurfaceImpl IDirectDrawSurfaceImpl;
22 typedef struct IDirectDrawSurface3Impl IDirectDrawSurface2Impl;
23 typedef struct IDirectDrawSurface4Impl IDirectDrawSurface3Impl;
24 typedef struct IDirectDrawSurface4Impl IDirectDrawSurface4Impl;
25 typedef struct IDirectDrawColorControlImpl IDirectDrawColorControlImpl;
27 #include "d3d_private.h"
29 /*****************************************************************************
30 * IDirectDrawPalette implementation structure
32 struct IDirectDrawPaletteImpl
34 /* IUnknown fields */
35 ICOM_VFIELD(IDirectDrawPalette);
36 DWORD ref;
37 /* IDirectDrawPalette fields */
38 IDirectDrawImpl* ddraw;
39 Colormap cm;
40 PALETTEENTRY palents[256];
41 int installed;
42 /* This is to store the palette in 'screen format' */
43 int screen_palents[256];
46 /*****************************************************************************
47 * IDirectDrawClipper implementation structure
49 struct IDirectDrawClipperImpl
51 /* IUnknown fields */
52 ICOM_VFIELD(IDirectDrawClipper);
53 DWORD ref;
55 /* IDirectDrawClipper fields */
56 HWND hWnd;
59 /*****************************************************************************
60 * IDirectDraw implementation structure
62 struct _common_directdrawdata
64 DDPIXELFORMAT directdraw_pixelformat;
65 DDPIXELFORMAT screen_pixelformat;
66 int pixmap_depth;
67 void (*pixel_convert)(void *src, void *dst, DWORD width, DWORD height, LONG pitch, IDirectDrawPaletteImpl* palette);
68 void (*palette_convert)(LPPALETTEENTRY palent, void *screen_palette, DWORD start, DWORD count);
69 DWORD height,width; /* SetDisplayMode */
70 HWND mainWindow; /* SetCooperativeLevel */
72 /* This is for Wine's fake mainWindow.
73 We need it also in DGA mode to make some games (for example Monkey Island III work) */
74 ATOM winclass;
75 HWND window;
76 Window drawable;
77 PAINTSTRUCT ps;
78 int paintable;
81 struct _dga_directdrawdata
83 DWORD fb_width,fb_height,fb_memsize;
84 void* fb_addr;
85 unsigned int vpmask;
86 #ifdef HAVE_LIBXXF86DGA2
87 int version;
88 XDGADevice *dev;
89 #endif /* define(HAVE_LIBXXF86DGA2) */
92 struct _xlib_directdrawdata
94 #ifdef HAVE_LIBXXSHM
95 int xshm_active, xshm_compl;
96 #endif /* defined(HAVE_LIBXXSHM) */
98 /* are these needed for anything? (draw_surf is the active surface)
99 IDirectDrawSurfaceImpl* surfs;
100 DWORD num_surfs, alloc_surfs, draw_surf; */
103 struct IDirectDrawImpl
105 /* IUnknown fields */
106 ICOM_VFIELD(IDirectDraw);
107 DWORD ref;
108 /* IDirectDraw fields */
109 struct _common_directdrawdata d;
110 union {
111 struct _xlib_directdrawdata xlib;
112 struct _dga_directdrawdata dga;
113 } e;
116 /*****************************************************************************
117 * IDirectDraw2 implementation structure
119 struct IDirectDraw2Impl
121 /* IUnknown fields */
122 ICOM_VFIELD(IDirectDraw2);
123 DWORD ref;
124 /* IDirectDraw2 fields */
125 struct _common_directdrawdata d;
126 union {
127 struct _xlib_directdrawdata xlib;
128 struct _dga_directdrawdata dga;
129 } e;
132 /*****************************************************************************
133 * IDirectDraw4 implementation structure
135 struct IDirectDraw4Impl
137 /* IUnknown fields */
138 ICOM_VFIELD(IDirectDraw4);
139 DWORD ref;
140 /* IDirectDraw4 fields */
141 struct _common_directdrawdata d;
142 union {
143 struct _xlib_directdrawdata xlib;
144 struct _dga_directdrawdata dga;
145 } e;
148 /*****************************************************************************
149 * IDirectDrawSurface implementation structure
151 struct _common_directdrawsurface
153 IDirectDrawPaletteImpl* palette;
154 IDirectDraw2Impl* ddraw;
156 struct _surface_chain *chain;
158 DDSURFACEDESC surface_desc;
160 /* For Get / Release DC methods */
161 HBITMAP DIBsection;
162 void *bitmap_data;
163 HDC hdc;
164 HGDIOBJ holdbitmap;
166 /* Callback for loaded textures */
167 IDirect3DTexture2Impl* texture;
168 HRESULT WINAPI (*SetColorKey_cb)(IDirect3DTexture2Impl *texture, DWORD dwFlags, LPDDCOLORKEY ckey ) ;
170 /* Storage for attached device (void * as it can be either a Device or a Device2) */
171 void *d3d_device;
174 struct _dga_directdrawsurface
176 DWORD fb_height;
179 struct _xlib_directdrawsurface
181 XImage *image;
182 #ifdef HAVE_LIBXXSHM
183 XShmSegmentInfo shminfo;
184 #endif
187 struct IDirectDrawSurfaceImpl
189 /* IUnknown fields */
190 ICOM_VFIELD(IDirectDrawSurface);
191 DWORD ref;
192 /* IDirectDrawSurface fields */
193 struct _common_directdrawsurface s;
194 union {
195 struct _dga_directdrawsurface dga;
196 struct _xlib_directdrawsurface xlib;
197 } t;
198 LPDIRECTDRAWCLIPPER lpClipper;
201 /*****************************************************************************
202 * IDirectDrawSurface2 implementation structure
204 struct IDirectDrawSurface2Impl
206 /* IUnknown fields */
207 ICOM_VFIELD(IDirectDrawSurface2);
208 DWORD ref;
209 /* IDirectDrawSurface2 fields */
210 struct _common_directdrawsurface s;
211 union {
212 struct _dga_directdrawsurface dga;
213 struct _xlib_directdrawsurface xlib;
214 } t;
215 LPDIRECTDRAWCLIPPER lpClipper;
218 /*****************************************************************************
219 * IDirectDrawSurface3 implementation structure
221 struct IDirectDrawSurface3Impl
223 /* IUnknown fields */
224 ICOM_VFIELD(IDirectDrawSurface3);
225 DWORD ref;
226 /* IDirectDrawSurface3 fields */
227 struct _common_directdrawsurface s;
228 union {
229 struct _dga_directdrawsurface dga;
230 struct _xlib_directdrawsurface xlib;
231 } t;
232 LPDIRECTDRAWCLIPPER lpClipper;
235 /*****************************************************************************
236 * IDirectDrawSurface4 implementation structure
238 struct IDirectDrawSurface4Impl
240 /* IUnknown fields */
241 ICOM_VFIELD(IDirectDrawSurface4);
242 DWORD ref;
244 /* IDirectDrawSurface4 fields */
245 struct _common_directdrawsurface s;
246 union {
247 struct _dga_directdrawsurface dga;
248 struct _xlib_directdrawsurface xlib;
249 } t;
250 LPDIRECTDRAWCLIPPER lpClipper;
253 struct _surface_chain {
254 IDirectDrawSurface4Impl **surfaces;
255 int nrofsurfaces;
258 /*****************************************************************************
259 * IDirectDrawColorControl implementation structure
261 struct IDirectDrawColorControlImpl
263 /* IUnknown fields */
264 ICOM_VFIELD(IDirectDrawColorControl);
265 DWORD ref;
266 /* IDirectDrawColorControl fields */
267 /* none */
271 #endif /* __GRAPHICS_WINE_DDRAW_PRIVATE_H */