2 * Copyright 2000-2001 TransGaming Technologies Inc.
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 #ifndef __WINE_DLLS_DDRAW_DDRAW_PRIVATE_H
20 #define __WINE_DLLS_DDRAW_DDRAW_PRIVATE_H
22 /* MAY NOT CONTAIN X11 or DGA specific includes/defines/structs! */
34 #include "ddcomimpl.h"
37 /* XXX Put this somewhere proper. */
38 #define DD_STRUCT_INIT(x) \
40 memset((x), 0, sizeof(*(x))); \
41 (x)->dwSize = sizeof(*x); \
44 #define DD_STRUCT_COPY_BYSIZE(to,from) \
46 DWORD __size = (to)->dwSize; \
47 DWORD __copysize = __size; \
48 DWORD __resetsize = __size; \
50 if (__resetsize > sizeof(*to)) \
51 __resetsize = sizeof(*to); \
52 memset(to,0,__resetsize); \
53 if ((from)->dwSize < __size) \
54 __copysize = (from)->dwSize; \
55 memcpy(to,from,__copysize); \
56 (to)->dwSize = __size;/*restore size*/ \
59 #define MAKE_FOURCC(a,b,c,d) ((a << 0) | (b << 8) | (c << 16) | (d << 24))
61 /*****************************************************************************
62 * IDirectDraw implementation structure
65 typedef struct IDirectDrawImpl IDirectDrawImpl;
66 typedef struct IDirectDrawPaletteImpl IDirectDrawPaletteImpl;
67 typedef struct IDirectDrawClipperImpl IDirectDrawClipperImpl;
68 typedef struct IDirectDrawSurfaceImpl IDirectDrawSurfaceImpl;
69 typedef struct IDirect3DDeviceImpl IDirect3DDeviceImpl;
71 typedef void (*pixel_convert_func)(void *src, void *dst, DWORD width,
72 DWORD height, LONG pitch,
73 IDirectDrawPaletteImpl *palette);
75 typedef void (*palette_convert_func)(LPPALETTEENTRY palent,
76 void *screen_palette, DWORD start,
79 struct IDirectDrawImpl
81 ICOM_VFIELD_MULTI(IDirectDraw7);
82 ICOM_VFIELD_MULTI(IDirectDraw4);
83 ICOM_VFIELD_MULTI(IDirectDraw2);
84 ICOM_VFIELD_MULTI(IDirectDraw);
85 ICOM_VFIELD_MULTI(IDirect3D7);
86 ICOM_VFIELD_MULTI(IDirect3D3);
87 ICOM_VFIELD_MULTI(IDirect3D2);
88 ICOM_VFIELD_MULTI(IDirect3D);
92 /* TRUE if created via DirectDrawCreateEx or CoCreateInstance,
93 * FALSE if created via DirectDrawCreate. */
96 /* Linked list of surfaces, joined by next_ddraw in IDirectSurfaceImpl. */
97 IDirectDrawSurfaceImpl* surfaces;
98 /* Linked list of palettes, joined by next_ddraw. */
99 IDirectDrawPaletteImpl* palettes;
100 /* Linked list of clippers, joined by next_ddraw. */
101 IDirectDrawClipperImpl* clippers;
103 IDirectDrawSurfaceImpl* primary_surface;
105 DDRAWI_DIRECTDRAW_LCL local;
109 DWORD cooperative_level;
110 WNDPROC original_wndproc;
114 DDPIXELFORMAT pixelformat;
119 /* Should each of these go into some structure? */
120 DWORD orig_width, orig_height;
122 DDPIXELFORMAT orig_pixelformat;
124 /* Called when the refcount goes to 0. */
125 void (*final_release)(IDirectDrawImpl *This);
127 HRESULT (*set_exclusive_mode)(IDirectDrawImpl *This, DWORD dwExcl);
129 HRESULT (*create_palette)(IDirectDrawImpl* This, DWORD dwFlags,
130 LPDIRECTDRAWPALETTE* ppPalette,
131 LPUNKNOWN pUnkOuter);
133 /* Surface creation functions. For all of these, pOuter == NULL. */
135 /* Do not create any backbuffers or the flipping chain. */
136 HRESULT (*create_primary)(IDirectDrawImpl* This,
137 const DDSURFACEDESC2* pDDSD,
138 LPDIRECTDRAWSURFACE7* ppSurf, LPUNKNOWN pOuter);
140 /* Primary may be NULL if we are creating an unattached backbuffer. */
141 HRESULT (*create_backbuffer)(IDirectDrawImpl* This,
142 const DDSURFACEDESC2* pDDSD,
143 LPDIRECTDRAWSURFACE7* ppSurf,
145 IDirectDrawSurfaceImpl* primary);
147 /* shiny happy offscreenplain surfaces */
148 HRESULT (*create_offscreen)(IDirectDrawImpl* This,
149 const DDSURFACEDESC2* pDDSD,
150 LPDIRECTDRAWSURFACE7* ppSurf,
153 /* dwMipMapLevel is specified as per OpenGL. (i.e. 0 is base) */
154 HRESULT (*create_texture)(IDirectDrawImpl* This,
155 const DDSURFACEDESC2* pDDSD,
156 LPDIRECTDRAWSURFACE7* ppSurf, LPUNKNOWN pOuter,
157 DWORD dwMipMapLevel);
159 HRESULT (*create_zbuffer)(IDirectDrawImpl* This,
160 const DDSURFACEDESC2* pDDSD,
161 LPDIRECTDRAWSURFACE7* ppSurf, LPUNKNOWN pOuter);
165 /* Everything below here is still questionable. */
167 DDPIXELFORMAT screen_pixelformat;
170 pixel_convert_func pixel_convert;
171 palette_convert_func palette_convert;
173 /* Use to fool some too strict games */
174 INT32 (*allocate_memory)(IDirectDrawImpl *This, DWORD mem);
175 void (*free_memory)(IDirectDrawImpl *This, DWORD mem);
176 DWORD total_vidmem, available_vidmem;
178 /* IDirect3D fields */
181 /* Used as a callback function to create a texture */
182 HRESULT (*d3d_create_texture)(IDirectDrawImpl *d3d, IDirectDrawSurfaceImpl *tex, BOOLEAN at_creation, IDirectDrawSurfaceImpl *main);
184 /* Used as a callback for Devices to tell to the D3D object it's been created */
185 HRESULT (*d3d_added_device)(IDirectDrawImpl *d3d, IDirect3DDeviceImpl *device);
186 HRESULT (*d3d_removed_device)(IDirectDrawImpl *d3d, IDirect3DDeviceImpl *device);
188 /* This is needed for delayed texture creation and Z buffer blits */
189 IDirect3DDeviceImpl *current_device;
191 /* This is for the fake mainWindow */
197 /*****************************************************************************
198 * IDirectDrawPalette implementation structure
200 struct IDirectDrawPaletteImpl
202 /* IUnknown fields */
203 ICOM_VFIELD_MULTI(IDirectDrawPalette);
206 DDRAWI_DDRAWPALETTE_LCL local;
207 DDRAWI_DDRAWPALETTE_GBL global;
209 /* IDirectDrawPalette fields */
211 WORD palVersion, palNumEntries; /* LOGPALETTE */
212 PALETTEENTRY palents[256];
213 /* This is to store the palette in 'screen format' */
214 int screen_palents[256];
216 VOID (*final_release)(IDirectDrawPaletteImpl* This);
218 IDirectDrawImpl* ddraw_owner;
219 IDirectDrawPaletteImpl* prev_ddraw;
220 IDirectDrawPaletteImpl* next_ddraw;
225 /*****************************************************************************
226 * IDirectDrawClipper implementation structure
228 struct IDirectDrawClipperImpl
230 /* IUnknown fields */
231 ICOM_VFIELD_MULTI(IDirectDrawClipper);
234 /* IDirectDrawClipper fields */
237 IDirectDrawImpl* ddraw_owner;
238 IDirectDrawClipperImpl* prev_ddraw;
239 IDirectDrawClipperImpl* next_ddraw;
242 /*****************************************************************************
243 * IDirectDrawSurface implementation structure
246 struct IDirectDrawSurfaceImpl
248 /* IUnknown fields */
249 ICOM_VFIELD_MULTI(IDirectDrawSurface7);
250 ICOM_VFIELD_MULTI(IDirectDrawSurface3);
251 ICOM_VFIELD_MULTI(IDirectDrawGammaControl);
252 ICOM_VFIELD_MULTI(IDirect3DTexture2);
253 ICOM_VFIELD_MULTI(IDirect3DTexture);
256 struct IDirectDrawSurfaceImpl* attached; /* attached surfaces */
258 struct IDirectDrawSurfaceImpl* next_ddraw; /* ddraw surface chain */
259 struct IDirectDrawSurfaceImpl* prev_ddraw;
260 struct IDirectDrawSurfaceImpl* next_attached; /* attached surface chain */
261 struct IDirectDrawSurfaceImpl* prev_attached;
263 IDirectDrawImpl* ddraw_owner;
264 IDirectDrawSurfaceImpl* surface_owner;
266 IDirectDrawPaletteImpl* palette; /* strong ref */
267 IDirectDrawClipperImpl* clipper; /* strong ref */
269 DDRAWI_DDRAWSURFACE_LCL local;
270 DDRAWI_DDRAWSURFACE_MORE more;
271 /* FIXME: since Flip should swap the GBL structures, they should
272 * probably not be embedded into the IDirectDrawSurfaceImpl structure... */
273 LPDDRAWI_DDRAWSURFACE_GBL_MORE gmore;
274 DDRAWI_DDRAWSURFACE_GBL global;
275 DDRAWI_DDRAWSURFACE_GBL_MORE global_more;
277 DDSURFACEDESC2 surface_desc;
285 HRESULT (*duplicate_surface)(IDirectDrawSurfaceImpl* src,
286 LPDIRECTDRAWSURFACE7* dst);
287 void (*final_release)(IDirectDrawSurfaceImpl *This);
288 HRESULT (*late_allocate)(IDirectDrawSurfaceImpl *This);
289 BOOL (*attach)(IDirectDrawSurfaceImpl *This, IDirectDrawSurfaceImpl *to);
290 BOOL (*detach)(IDirectDrawSurfaceImpl *This);
291 void (*lock_update)(IDirectDrawSurfaceImpl* This, LPCRECT pRect, DWORD dwFlags);
292 void (*unlock_update)(IDirectDrawSurfaceImpl* This, LPCRECT pRect);
293 void (*lose_surface)(IDirectDrawSurfaceImpl* This);
294 BOOL (*flip_data)(IDirectDrawSurfaceImpl* front,
295 IDirectDrawSurfaceImpl* back,
297 void (*flip_update)(IDirectDrawSurfaceImpl* front, DWORD dwFlags);
298 HRESULT (*get_dc)(IDirectDrawSurfaceImpl* This, HDC* phDC);
299 HRESULT (*release_dc)(IDirectDrawSurfaceImpl* This, HDC hDC);
300 void (*set_palette)(IDirectDrawSurfaceImpl* This, IDirectDrawPaletteImpl* pal);
301 void (*update_palette)(IDirectDrawSurfaceImpl* This, IDirectDrawPaletteImpl* pal,
302 DWORD dwStart, DWORD dwCount, LPPALETTEENTRY palent);
303 HWND (*get_display_window)(IDirectDrawSurfaceImpl *This);
304 HRESULT (*get_gamma_ramp)(IDirectDrawSurfaceImpl *This, DWORD dwFlags, LPDDGAMMARAMP lpGammaRamp);
305 HRESULT (*set_gamma_ramp)(IDirectDrawSurfaceImpl *This, DWORD dwFlags, LPDDGAMMARAMP lpGammaRamp);
307 struct PrivateData* private_data;
314 DWORD uniqueness_value;
318 /* Everything below here is dodgy. */
319 /* For Direct3D use */
320 LPVOID aux_ctx, aux_data;
321 void (*aux_release)(LPVOID ctx, LPVOID data);
322 BOOL (*aux_flip)(LPVOID ctx, LPVOID data);
323 void (*aux_unlock)(LPVOID ctx, LPVOID data, LPRECT lpRect);
324 HRESULT (*aux_blt)(struct IDirectDrawSurfaceImpl *This, LPRECT rdst, LPDIRECTDRAWSURFACE7 src, LPRECT rsrc, DWORD dwFlags, LPDDBLTFX lpbltfx);
325 HRESULT (*aux_bltfast)(struct IDirectDrawSurfaceImpl *This, DWORD dstx, DWORD dsty, LPDIRECTDRAWSURFACE7 src, LPRECT rsrc, DWORD trans);
326 HRESULT (*aux_setcolorkey_cb)(struct IDirectDrawSurfaceImpl *texture, DWORD dwFlags, LPDDCOLORKEY ckey );
327 /* This is to get the D3DDevice object associated to this surface */
328 struct IDirect3DDeviceImpl *d3ddevice;
329 /* This is for texture */
330 IDirectDrawSurfaceImpl *mip_main;
333 void (*lock_update_prev)(IDirectDrawSurfaceImpl* This, LPCRECT pRect, DWORD dwFlags);
334 void (*unlock_update_prev)(IDirectDrawSurfaceImpl* This, LPCRECT pRect);
335 BOOLEAN (*get_dirty_status)(IDirectDrawSurfaceImpl* This, LPCRECT pRect);
338 /*****************************************************************************
339 * Driver initialisation functions.
341 BOOL DDRAW_HAL_Init(HINSTANCE, DWORD, LPVOID);
342 BOOL DDRAW_User_Init(HINSTANCE, DWORD, LPVOID);
345 const DDDEVICEIDENTIFIER2* info;
346 int preference; /* how good we are. dga might get 100, xlib 50*/
347 HRESULT (*create)(const GUID*, LPDIRECTDRAW7*, LPUNKNOWN, BOOL ex);
349 /* For IDirectDraw7::Initialize. */
350 HRESULT (*init)(IDirectDrawImpl *, const GUID*);
353 void DDRAW_register_driver(const ddraw_driver*);
355 const ddraw_driver* DDRAW_FindDriver(const GUID* guid);
357 /******************************************************************************
361 /* Get DDSCAPS of surface (shortcutmacro) */
362 #define SDDSCAPS(iface) ((iface)->s.surface_desc.ddsCaps.dwCaps)
363 /* Get the number of bytes per pixel for a given surface */
364 #define PFGET_BPP(pf) (pf.dwFlags&DDPF_PALETTEINDEXED8?1:((pf.u1.dwRGBBitCount+7)/8))
365 #define GET_BPP(desc) PFGET_BPP(desc.u4.ddpfPixelFormat)
367 LONG DDRAW_width_bpp_to_pitch(DWORD width, DWORD bpp);
370 unsigned short bpp,depth;
371 unsigned int rmask,gmask,bmask;
375 void (*pixel_convert)(void *src, void *dst, DWORD width, DWORD height, LONG pitch, IDirectDrawPaletteImpl* palette);
376 void (*palette_convert)(LPPALETTEENTRY palent, void *screen_palette, DWORD start, DWORD count);
380 ConvertMode screen, dest;
384 extern Convert ModeEmulations[8];
385 extern int _common_depth_to_pixelformat(DWORD depth,LPDIRECTDRAW ddraw);
386 extern BOOL opengl_initialized;
387 extern BOOL s3tc_initialized;
389 typedef void (*FUNC_FETCH_2D_TEXEL_RGBA_DXT1)(int srcRowStride, const BYTE *pixdata, int i, int j, void *texel);
390 typedef void (*FUNC_FETCH_2D_TEXEL_RGBA_DXT3)(int srcRowStride, const BYTE *pixdata, int i, int j, void *texel);
391 typedef void (*FUNC_FETCH_2D_TEXEL_RGBA_DXT5)(int srcRowStride, const BYTE *pixdata, int i, int j, void *texel);
393 extern FUNC_FETCH_2D_TEXEL_RGBA_DXT1 fetch_2d_texel_rgba_dxt1;
394 extern FUNC_FETCH_2D_TEXEL_RGBA_DXT3 fetch_2d_texel_rgba_dxt3;
395 extern FUNC_FETCH_2D_TEXEL_RGBA_DXT5 fetch_2d_texel_rgba_dxt5;
397 /******************************************************************************
398 * Structure conversion (for thunks)
400 void DDRAW_Convert_DDSCAPS_1_To_2(const DDSCAPS* pIn, DDSCAPS2* pOut);
401 void DDRAW_Convert_DDDEVICEIDENTIFIER_2_To_1(const DDDEVICEIDENTIFIER2* pIn,
402 DDDEVICEIDENTIFIER* pOut);
404 /******************************************************************************
405 * Debugging / Flags output functions
407 extern void DDRAW_dump_DDBLTFX(DWORD flagmask);
408 extern void DDRAW_dump_DDBLTFAST(DWORD flagmask);
409 extern void DDRAW_dump_DDBLT(DWORD flagmask);
410 extern void DDRAW_dump_DDSCAPS(const DDSCAPS *in);
411 extern void DDRAW_dump_DDSCAPS2(const DDSCAPS2 *in);
412 extern void DDRAW_dump_pixelformat_flag(DWORD flagmask);
413 extern void DDRAW_dump_paletteformat(DWORD dwFlags);
414 extern void DDRAW_dump_pixelformat(const DDPIXELFORMAT *in);
415 extern void DDRAW_dump_colorkeyflag(DWORD ck);
416 extern void DDRAW_dump_surface_desc(const DDSURFACEDESC2 *lpddsd);
417 extern void DDRAW_dump_cooperativelevel(DWORD cooplevel);
418 extern void DDRAW_dump_lockflag(DWORD lockflag);
419 extern void DDRAW_dump_DDCOLORKEY(const DDCOLORKEY *in);
420 extern void DDRAW_dump_DDCAPS(const DDCAPS *lpcaps);
421 extern void DDRAW_dump_DDENUMSURFACES(DWORD flagmask);
422 extern void DDRAW_dump_surface_to_disk(IDirectDrawSurfaceImpl *surface, FILE *f, int scale) ;
424 /* Used for generic dumping */
431 #define FE(x) { x, #x }
437 void (*func)(const void *);
441 #define DDRAW_dump_flags(flags,names,num_names) DDRAW_dump_flags_(flags, names, num_names, 1)
442 #define ME(x,f,e) { x, #x, (void (*)(const void *))(f), offsetof(STRUCT, e) }
444 extern void DDRAW_dump_flags_(DWORD flags, const flag_info* names, size_t num_names, int newline);
445 extern void DDRAW_dump_members(DWORD flags, const void* data, const member_info* mems, size_t num_mems);
447 void DirectDrawSurface_RegisterClass(void);
448 void DirectDrawSurface_UnregisterClass(void);
450 extern const IDirectDrawSurface3Vtbl DDRAW_IDDS3_Thunk_VTable;
452 /*****************************************************************************
453 * IDirectDrawClipper declarations
455 HRESULT DDRAW_CreateClipper(IUnknown* pUnkOuter, REFIID riid, LPVOID* ppObj);
456 void Main_DirectDrawClipper_ForceDestroy(IDirectDrawClipperImpl* This);
459 Main_DirectDrawClipper_SetHwnd(LPDIRECTDRAWCLIPPER iface, DWORD dwFlags,
461 ULONG WINAPI Main_DirectDrawClipper_Release(LPDIRECTDRAWCLIPPER iface);
463 Main_DirectDrawClipper_GetClipList(LPDIRECTDRAWCLIPPER iface, LPRECT lpRect,
464 LPRGNDATA lpClipList, LPDWORD lpdwSize);
466 Main_DirectDrawClipper_SetClipList(LPDIRECTDRAWCLIPPER iface,LPRGNDATA lprgn,
469 Main_DirectDrawClipper_QueryInterface(LPDIRECTDRAWCLIPPER iface, REFIID riid,
471 ULONG WINAPI Main_DirectDrawClipper_AddRef( LPDIRECTDRAWCLIPPER iface );
473 Main_DirectDrawClipper_GetHWnd(LPDIRECTDRAWCLIPPER iface, HWND* hWndPtr);
475 Main_DirectDrawClipper_Initialize(LPDIRECTDRAWCLIPPER iface, LPDIRECTDRAW lpDD,
478 Main_DirectDrawClipper_IsClipListChanged(LPDIRECTDRAWCLIPPER iface,
481 /*****************************************************************************
482 * IDirectDrawPalette MAIN declarations
484 HRESULT Main_DirectDrawPalette_Construct(IDirectDrawPaletteImpl* This,
485 IDirectDrawImpl* pDD, DWORD dwFlags);
486 void Main_DirectDrawPalette_final_release(IDirectDrawPaletteImpl* This);
488 HRESULT Main_DirectDrawPalette_Create(IDirectDrawImpl* pDD, DWORD dwFlags,
489 LPDIRECTDRAWPALETTE* ppPalette,
490 LPUNKNOWN pUnkOuter);
491 void Main_DirectDrawPalette_ForceDestroy(IDirectDrawPaletteImpl* This);
493 DWORD Main_DirectDrawPalette_Size(DWORD dwFlags);
496 Main_DirectDrawPalette_GetEntries(LPDIRECTDRAWPALETTE iface, DWORD dwFlags,
497 DWORD dwStart, DWORD dwCount,
498 LPPALETTEENTRY palent);
500 Main_DirectDrawPalette_SetEntries(LPDIRECTDRAWPALETTE iface, DWORD dwFlags,
501 DWORD dwStart, DWORD dwCount,
502 LPPALETTEENTRY palent);
504 Main_DirectDrawPalette_Release(LPDIRECTDRAWPALETTE iface);
505 ULONG WINAPI Main_DirectDrawPalette_AddRef(LPDIRECTDRAWPALETTE iface);
507 Main_DirectDrawPalette_Initialize(LPDIRECTDRAWPALETTE iface,
508 LPDIRECTDRAW ddraw, DWORD dwFlags,
509 LPPALETTEENTRY palent);
511 Main_DirectDrawPalette_GetCaps(LPDIRECTDRAWPALETTE iface, LPDWORD lpdwCaps);
513 Main_DirectDrawPalette_QueryInterface(LPDIRECTDRAWPALETTE iface,
514 REFIID refiid, LPVOID *obj);
516 /*****************************************************************************
517 * IDirectDrawPalette HAL declarations
519 HRESULT HAL_DirectDrawPalette_Construct(IDirectDrawPaletteImpl* This,
520 IDirectDrawImpl* pDD, DWORD dwFlags);
521 void HAL_DirectDrawPalette_final_release(IDirectDrawPaletteImpl* This);
523 HRESULT HAL_DirectDrawPalette_Create(IDirectDrawImpl* pDD, DWORD dwFlags,
524 LPDIRECTDRAWPALETTE* ppPalette,
525 LPUNKNOWN pUnkOuter);
528 HAL_DirectDrawPalette_SetEntries(LPDIRECTDRAWPALETTE iface, DWORD dwFlags,
529 DWORD dwStart, DWORD dwCount,
530 LPPALETTEENTRY palent);
532 /*****************************************************************************
533 * IDirectDraw MAIN declarations
535 /* internal virtual functions */
536 void Main_DirectDraw_final_release(IDirectDrawImpl* This);
537 HRESULT Main_create_offscreen(IDirectDrawImpl* This, const DDSURFACEDESC2 *pDDSD,
538 LPDIRECTDRAWSURFACE7* ppSurf, LPUNKNOWN pOuter);
539 HRESULT Main_create_texture(IDirectDrawImpl* This, const DDSURFACEDESC2 *pDDSD,
540 LPDIRECTDRAWSURFACE7* ppSurf, LPUNKNOWN pOuter,
541 DWORD dwMipMapLevel);
542 HRESULT Main_create_zbuffer(IDirectDrawImpl* This, const DDSURFACEDESC2 *pDDSD,
543 LPDIRECTDRAWSURFACE7* ppSurf, LPUNKNOWN pOuter);
545 /* internal functions */
546 HRESULT Main_DirectDraw_Construct(IDirectDrawImpl *This, BOOL ex);
547 void Main_DirectDraw_AddSurface(IDirectDrawImpl* This,
548 IDirectDrawSurfaceImpl* surface);
549 void Main_DirectDraw_RemoveSurface(IDirectDrawImpl* This,
550 IDirectDrawSurfaceImpl* surface);
551 void Main_DirectDraw_AddClipper(IDirectDrawImpl* This,
552 IDirectDrawClipperImpl* clipper);
553 void Main_DirectDraw_RemoveClipper(IDirectDrawImpl* This,
554 IDirectDrawClipperImpl* clipper);
555 void Main_DirectDraw_AddPalette(IDirectDrawImpl* This,
556 IDirectDrawPaletteImpl* palette);
557 void Main_DirectDraw_RemovePalette(IDirectDrawImpl* This,
558 IDirectDrawPaletteImpl* palette);
560 /* interface functions */
561 ULONG WINAPI Main_DirectDraw_AddRef(LPDIRECTDRAW7 iface);
562 ULONG WINAPI Main_DirectDraw_Release(LPDIRECTDRAW7 iface);
563 HRESULT WINAPI Main_DirectDraw_QueryInterface(LPDIRECTDRAW7 iface,
564 REFIID refiid,LPVOID *obj);
565 HRESULT WINAPI Main_DirectDraw_Compact(LPDIRECTDRAW7 iface);
566 HRESULT WINAPI Main_DirectDraw_CreateClipper(LPDIRECTDRAW7 iface,
568 LPDIRECTDRAWCLIPPER *ppClipper,
569 IUnknown *pUnkOuter);
571 Main_DirectDraw_CreatePalette(LPDIRECTDRAW7 iface, DWORD dwFlags,
572 LPPALETTEENTRY palent,
573 LPDIRECTDRAWPALETTE* ppPalette,
576 Main_DirectDraw_CreateSurface(LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD,
577 LPDIRECTDRAWSURFACE7 *ppSurf,
578 IUnknown *pUnkOuter);
580 Main_DirectDraw_DuplicateSurface(LPDIRECTDRAW7 iface, LPDIRECTDRAWSURFACE7 src,
581 LPDIRECTDRAWSURFACE7* dst);
583 Main_DirectDraw_EnumSurfaces(LPDIRECTDRAW7 iface, DWORD dwFlags,
584 LPDDSURFACEDESC2 lpDDSD2, LPVOID context,
585 LPDDENUMSURFACESCALLBACK7 callback);
587 Main_DirectDraw_EvaluateMode(LPDIRECTDRAW7 iface,DWORD a,DWORD* b);
588 HRESULT WINAPI Main_DirectDraw_FlipToGDISurface(LPDIRECTDRAW7 iface);
590 Main_DirectDraw_GetCaps(LPDIRECTDRAW7 iface, LPDDCAPS pDriverCaps,
593 Main_DirectDraw_GetFourCCCodes(LPDIRECTDRAW7 iface, LPDWORD pNumCodes,
596 Main_DirectDraw_GetGDISurface(LPDIRECTDRAW7 iface,
597 LPDIRECTDRAWSURFACE7 *lplpGDIDDSSurface);
599 Main_DirectDraw_GetMonitorFrequency(LPDIRECTDRAW7 iface,LPDWORD freq);
601 Main_DirectDraw_GetScanLine(LPDIRECTDRAW7 iface, LPDWORD lpdwScanLine);
603 Main_DirectDraw_GetSurfaceFromDC(LPDIRECTDRAW7 iface, HDC hdc,
604 LPDIRECTDRAWSURFACE7 *lpDDS);
606 Main_DirectDraw_GetVerticalBlankStatus(LPDIRECTDRAW7 iface, LPBOOL status);
608 Main_DirectDraw_Initialize(LPDIRECTDRAW7 iface, LPGUID lpGuid);
609 HRESULT WINAPI Main_DirectDraw_RestoreAllSurfaces(LPDIRECTDRAW7 iface);
611 Main_DirectDraw_SetCooperativeLevel(LPDIRECTDRAW7 iface, HWND hwnd,
614 Main_DirectDraw_SetDisplayMode(LPDIRECTDRAW7 iface, DWORD dwWidth,
615 DWORD dwHeight, LONG lPitch,
616 DWORD dwRefreshRate, DWORD dwFlags,
617 const DDPIXELFORMAT* pixelformat);
618 HRESULT WINAPI Main_DirectDraw_RestoreDisplayMode(LPDIRECTDRAW7 iface);
620 Main_DirectDraw_WaitForVerticalBlank(LPDIRECTDRAW7 iface, DWORD dwFlags,
623 Main_DirectDraw_GetDisplayMode(LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD);
625 Main_DirectDraw_GetAvailableVidMem(LPDIRECTDRAW7 iface,LPDDSCAPS2 ddscaps,
626 LPDWORD total, LPDWORD free);
627 HRESULT WINAPI Main_DirectDraw_TestCooperativeLevel(LPDIRECTDRAW7 iface);
629 Main_DirectDraw_StartModeTest(LPDIRECTDRAW7 iface, LPSIZE pModes,
630 DWORD dwNumModes, DWORD dwFlags);
632 /*****************************************************************************
633 * IDirectDraw USER object declarations
635 #define USER_DDRAW_PRIV(ddraw) ((User_DirectDrawImpl*)((ddraw)->private))
636 #define USER_DDRAW_PRIV_VAR(name,ddraw) \
637 User_DirectDrawImpl* name = USER_DDRAW_PRIV(ddraw)
643 } User_DirectDrawImpl_Part;
647 User_DirectDrawImpl_Part user;
648 } User_DirectDrawImpl;
650 void User_DirectDraw_final_release(IDirectDrawImpl* This);
651 HRESULT User_DirectDraw_create_primary(IDirectDrawImpl* This,
652 const DDSURFACEDESC2* pDDSD,
653 LPDIRECTDRAWSURFACE7* ppSurf,
655 HRESULT User_DirectDraw_create_backbuffer(IDirectDrawImpl* This,
656 const DDSURFACEDESC2* pDDSD,
657 LPDIRECTDRAWSURFACE7* ppSurf,
659 IDirectDrawSurfaceImpl* primary);
660 HRESULT User_DirectDraw_Construct(IDirectDrawImpl *This, BOOL ex);
661 HRESULT User_DirectDraw_Create(const GUID* pGUID, LPDIRECTDRAW7* pIface,
662 IUnknown* pUnkOuter, BOOL ex);
665 User_DirectDraw_EnumDisplayModes(LPDIRECTDRAW7 iface, DWORD dwFlags,
666 LPDDSURFACEDESC2 pDDSD, LPVOID context,
667 LPDDENUMMODESCALLBACK2 callback);
669 User_DirectDraw_GetDeviceIdentifier(LPDIRECTDRAW7 iface,
670 LPDDDEVICEIDENTIFIER2 pDDDI,
673 User_DirectDraw_SetDisplayMode(LPDIRECTDRAW7 iface, DWORD dwWidth,
674 DWORD dwHeight, DWORD dwBPP,
675 DWORD dwRefreshRate, DWORD dwFlags);
677 /*****************************************************************************
678 * IDirectDraw HAL declarations
680 #define HAL_DDRAW_PRIV(ddraw) \
681 ((HAL_DirectDrawImpl*)((ddraw)->private))
682 #define HAL_DDRAW_PRIV_VAR(name,ddraw) \
683 HAL_DirectDrawImpl* name = HAL_DDRAW_PRIV(ddraw)
688 } HAL_DirectDrawImpl_Part;
692 User_DirectDrawImpl_Part user;
693 HAL_DirectDrawImpl_Part hal;
694 } HAL_DirectDrawImpl;
696 void HAL_DirectDraw_final_release(IDirectDrawImpl* This);
697 HRESULT HAL_DirectDraw_create_primary(IDirectDrawImpl* This,
698 const DDSURFACEDESC2* pDDSD,
699 LPDIRECTDRAWSURFACE7* ppSurf,
701 HRESULT HAL_DirectDraw_create_backbuffer(IDirectDrawImpl* This,
702 const DDSURFACEDESC2* pDDSD,
703 LPDIRECTDRAWSURFACE7* ppSurf,
705 IDirectDrawSurfaceImpl* primary);
706 HRESULT HAL_DirectDraw_create_texture(IDirectDrawImpl* This,
707 const DDSURFACEDESC2* pDDSD,
708 LPDIRECTDRAWSURFACE7* ppSurf,
710 DWORD dwMipMapLevel);
712 HRESULT HAL_DirectDraw_Construct(IDirectDrawImpl *This, BOOL ex);
713 HRESULT HAL_DirectDraw_Create(const GUID* pGUID, LPDIRECTDRAW7* pIface,
714 IUnknown* pUnkOuter, BOOL ex);
717 HAL_DirectDraw_GetDeviceIdentifier(LPDIRECTDRAW7 iface,
718 LPDDDEVICEIDENTIFIER2 pDDDI,
721 HAL_DirectDraw_SetDisplayMode(LPDIRECTDRAW7 iface, DWORD dwWidth,
722 DWORD dwHeight, DWORD dwBPP,
723 DWORD dwRefreshRate, DWORD dwFlags);
724 HRESULT WINAPI HAL_DirectDraw_RestoreDisplayMode(LPDIRECTDRAW7 iface);
726 /*****************************************************************************
727 * IDirectDrawSurface MAIN declarations
729 /* Support for IDirectDrawSurface7::Set/Get/FreePrivateData. I don't think
730 * anybody uses it for much so a good implementation is optional. */
731 typedef struct PrivateData
733 struct PrivateData* next;
734 struct PrivateData* prev;
737 DWORD flags; /* DDSPD_* */
738 DWORD uniqueness_value;
749 extern const IDirectDrawGammaControlVtbl DDRAW_IDDGC_VTable;
751 /* Non-interface functions */
752 HRESULT Main_DirectDrawSurface_Construct(IDirectDrawSurfaceImpl* This,
753 IDirectDrawImpl* pDD,
754 const DDSURFACEDESC2* pDDSD);
755 void Main_DirectDrawSurface_ForceDestroy(IDirectDrawSurfaceImpl* This);
757 void Main_DirectDrawSurface_final_release(IDirectDrawSurfaceImpl* This);
758 HRESULT Main_DirectDrawSurface_late_allocate(IDirectDrawSurfaceImpl* This);
759 BOOL Main_DirectDrawSurface_attach(IDirectDrawSurfaceImpl *This,
760 IDirectDrawSurfaceImpl *to);
761 BOOL Main_DirectDrawSurface_detach(IDirectDrawSurfaceImpl *This);
762 void Main_DirectDrawSurface_lock_update(IDirectDrawSurfaceImpl* This,
763 LPCRECT pRect, DWORD dwFlags);
764 void Main_DirectDrawSurface_unlock_update(IDirectDrawSurfaceImpl* This,
766 void Main_DirectDrawSurface_lose_surface(IDirectDrawSurfaceImpl* This);
767 void Main_DirectDrawSurface_set_palette(IDirectDrawSurfaceImpl* This,
768 IDirectDrawPaletteImpl* pal);
769 void Main_DirectDrawSurface_update_palette(IDirectDrawSurfaceImpl* This,
770 IDirectDrawPaletteImpl* pal,
771 DWORD dwStart, DWORD dwCount,
772 LPPALETTEENTRY palent);
773 HWND Main_DirectDrawSurface_get_display_window(IDirectDrawSurfaceImpl* This);
775 HRESULT Main_DirectDrawSurface_get_gamma_ramp(IDirectDrawSurfaceImpl* This,
777 LPDDGAMMARAMP lpGammaRamp);
778 HRESULT Main_DirectDrawSurface_set_gamma_ramp(IDirectDrawSurfaceImpl* This,
780 LPDDGAMMARAMP lpGammaRamp);
782 BOOL Main_DirectDrawSurface_flip_data(IDirectDrawSurfaceImpl* front,
783 IDirectDrawSurfaceImpl* back,
786 #define CHECK_LOST(This) \
788 if (This->lost) return DDERR_SURFACELOST; \
791 #define CHECK_TEXTURE(This) \
793 if (!(This->surface_desc.ddsCaps.dwCaps2 \
794 & DDSCAPS2_TEXTUREMANAGE)) \
795 return DDERR_INVALIDOBJECT; \
798 #define LOCK_OBJECT(This) do { } while (0)
799 #define UNLOCK_OBJECT(This) do { } while (0)
801 /* IDirectDrawSurface7 (partial) implementation */
802 ULONG WINAPI Main_DirectDrawSurface_AddRef(LPDIRECTDRAWSURFACE7 iface);
803 ULONG WINAPI Main_DirectDrawSurface_Release(LPDIRECTDRAWSURFACE7 iface);
805 Main_DirectDrawSurface_QueryInterface(LPDIRECTDRAWSURFACE7 iface, REFIID riid,
808 Main_DirectDrawSurface_AddAttachedSurface(LPDIRECTDRAWSURFACE7 iface,
809 LPDIRECTDRAWSURFACE7 pAttach);
811 Main_DirectDrawSurface_AddOverlayDirtyRect(LPDIRECTDRAWSURFACE7 iface,
814 Main_DirectDrawSurface_BltBatch(LPDIRECTDRAWSURFACE7 iface,
815 LPDDBLTBATCH pBatch, DWORD dwCount,
818 Main_DirectDrawSurface_ChangeUniquenessValue(LPDIRECTDRAWSURFACE7 iface);
820 Main_DirectDrawSurface_DeleteAttachedSurface(LPDIRECTDRAWSURFACE7 iface,
822 LPDIRECTDRAWSURFACE7 pAttach);
824 Main_DirectDrawSurface_EnumAttachedSurfaces(LPDIRECTDRAWSURFACE7 iface,
826 LPDDENUMSURFACESCALLBACK7 cb);
828 Main_DirectDrawSurface_EnumOverlayZOrders(LPDIRECTDRAWSURFACE7 iface,
829 DWORD dwFlags, LPVOID context,
830 LPDDENUMSURFACESCALLBACK7 cb);
832 Main_DirectDrawSurface_Flip(LPDIRECTDRAWSURFACE7 iface,
833 LPDIRECTDRAWSURFACE7 override, DWORD dwFlags);
835 Main_DirectDrawSurface_FreePrivateData(LPDIRECTDRAWSURFACE7 iface,
838 Main_DirectDrawSurface_GetAttachedSurface(LPDIRECTDRAWSURFACE7 iface,
840 LPDIRECTDRAWSURFACE7* ppSurface);
842 Main_DirectDrawSurface_GetBltStatus(LPDIRECTDRAWSURFACE7 iface,
845 Main_DirectDrawSurface_GetCaps(LPDIRECTDRAWSURFACE7 iface,
848 Main_DirectDrawSurface_GetClipper(LPDIRECTDRAWSURFACE7 iface,
849 LPDIRECTDRAWCLIPPER* ppClipper);
851 Main_DirectDrawSurface_GetColorKey(LPDIRECTDRAWSURFACE7 iface,
852 DWORD dwFlags, LPDDCOLORKEY pCKey);
854 Main_DirectDrawSurface_GetDC(LPDIRECTDRAWSURFACE7 iface, HDC *phDC);
856 Main_DirectDrawSurface_GetDDInterface(LPDIRECTDRAWSURFACE7 iface,
859 Main_DirectDrawSurface_GetFlipStatus(LPDIRECTDRAWSURFACE7 iface,
862 Main_DirectDrawSurface_GetLOD(LPDIRECTDRAWSURFACE7 iface,
865 Main_DirectDrawSurface_GetOverlayPosition(LPDIRECTDRAWSURFACE7 iface,
866 LPLONG pX, LPLONG pY);
868 Main_DirectDrawSurface_GetPalette(LPDIRECTDRAWSURFACE7 iface,
869 LPDIRECTDRAWPALETTE* ppPalette);
871 Main_DirectDrawSurface_GetPixelFormat(LPDIRECTDRAWSURFACE7 iface,
872 LPDDPIXELFORMAT pDDPixelFormat);
874 Main_DirectDrawSurface_GetPriority(LPDIRECTDRAWSURFACE7 iface,
875 LPDWORD pdwPriority);
877 Main_DirectDrawSurface_GetPrivateData(LPDIRECTDRAWSURFACE7 iface, REFGUID tag,
878 LPVOID pBuffer, LPDWORD pcbBufferSize);
880 Main_DirectDrawSurface_GetSurfaceDesc(LPDIRECTDRAWSURFACE7 iface,
881 LPDDSURFACEDESC2 pDDSD);
883 Main_DirectDrawSurface_GetUniquenessValue(LPDIRECTDRAWSURFACE7 iface,
886 Main_DirectDrawSurface_Initialize(LPDIRECTDRAWSURFACE7 iface,
887 LPDIRECTDRAW pDD, LPDDSURFACEDESC2 pDDSD);
889 Main_DirectDrawSurface_IsLost(LPDIRECTDRAWSURFACE7 iface);
891 Main_DirectDrawSurface_Lock(LPDIRECTDRAWSURFACE7 iface, LPRECT prect,
892 LPDDSURFACEDESC2 pDDSD, DWORD flags, HANDLE h);
894 Main_DirectDrawSurface_PageLock(LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags);
896 Main_DirectDrawSurface_PageUnlock(LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags);
898 Main_DirectDrawSurface_ReleaseDC(LPDIRECTDRAWSURFACE7 iface, HDC hDC);
900 Main_DirectDrawSurface_SetClipper(LPDIRECTDRAWSURFACE7 iface,
901 LPDIRECTDRAWCLIPPER pDDClipper);
903 Main_DirectDrawSurface_SetColorKey(LPDIRECTDRAWSURFACE7 iface,
904 DWORD dwFlags, LPDDCOLORKEY pCKey);
906 Main_DirectDrawSurface_SetLOD(LPDIRECTDRAWSURFACE7 iface, DWORD dwMaxLOD);
908 Main_DirectDrawSurface_SetOverlayPosition(LPDIRECTDRAWSURFACE7 iface,
911 Main_DirectDrawSurface_SetPalette(LPDIRECTDRAWSURFACE7 iface,
912 LPDIRECTDRAWPALETTE pPalette);
914 Main_DirectDrawSurface_SetPriority(LPDIRECTDRAWSURFACE7 iface,
917 Main_DirectDrawSurface_SetPrivateData(LPDIRECTDRAWSURFACE7 iface,
918 REFGUID tag, LPVOID pData,
919 DWORD cbSize, DWORD dwFlags);
921 Main_DirectDrawSurface_Unlock(LPDIRECTDRAWSURFACE7 iface, LPRECT pRect);
923 Main_DirectDrawSurface_UpdateOverlay(LPDIRECTDRAWSURFACE7 iface,
925 LPDIRECTDRAWSURFACE7 pDstSurface,
926 LPRECT pDstRect, DWORD dwFlags,
929 Main_DirectDrawSurface_UpdateOverlayDisplay(LPDIRECTDRAWSURFACE7 iface,
932 Main_DirectDrawSurface_UpdateOverlayZOrder(LPDIRECTDRAWSURFACE7 iface,
934 LPDIRECTDRAWSURFACE7 pDDSRef);
936 /*****************************************************************************
937 * IDirectDrawSurface DIB declarations
939 #define DIB_PRIV(surf) ((DIB_DirectDrawSurfaceImpl*)((surf)->private))
941 #define DIB_PRIV_VAR(name, surf) \
942 DIB_DirectDrawSurfaceImpl* name = DIB_PRIV(surf)
944 struct DIB_DirectDrawSurfaceImpl_Part
950 DWORD d3d_data[4]; /* room for Direct3D driver data */
955 struct DIB_DirectDrawSurfaceImpl_Part dib;
956 } DIB_DirectDrawSurfaceImpl;
959 DIB_DirectDrawSurface_Construct(IDirectDrawSurfaceImpl *This,
960 IDirectDrawImpl *pDD,
961 const DDSURFACEDESC2 *pDDSD);
963 DIB_DirectDrawSurface_Create(IDirectDrawImpl *pDD,
964 const DDSURFACEDESC2 *pDDSD,
965 LPDIRECTDRAWSURFACE7 *ppSurf,
966 IUnknown *pUnkOuter);
968 void DIB_DirectDrawSurface_final_release(IDirectDrawSurfaceImpl* This);
969 BOOL DIB_DirectDrawSurface_flip_data(IDirectDrawSurfaceImpl* front,
970 IDirectDrawSurfaceImpl* back,
973 void DIB_DirectDrawSurface_set_palette(IDirectDrawSurfaceImpl* This,
974 IDirectDrawPaletteImpl* pal);
975 void DIB_DirectDrawSurface_update_palette(IDirectDrawSurfaceImpl* This,
976 IDirectDrawPaletteImpl* pal,
977 DWORD dwStart, DWORD dwCount,
978 LPPALETTEENTRY palent);
980 HRESULT DIB_DirectDrawSurface_get_dc(IDirectDrawSurfaceImpl* This, HDC* phDC);
981 HRESULT DIB_DirectDrawSurface_release_dc(IDirectDrawSurfaceImpl* This,HDC hDC);
983 HRESULT DIB_DirectDrawSurface_alloc_dc(IDirectDrawSurfaceImpl* This,HDC* phDC);
984 HRESULT DIB_DirectDrawSurface_free_dc(IDirectDrawSurfaceImpl* This, HDC hDC);
987 DIB_DirectDrawSurface_Blt(LPDIRECTDRAWSURFACE7 iface, LPRECT prcDest,
988 LPDIRECTDRAWSURFACE7 pSrcSurf, LPRECT prcSrc,
989 DWORD dwFlags, LPDDBLTFX pBltFx);
991 DIB_DirectDrawSurface_BltFast(LPDIRECTDRAWSURFACE7 iface, DWORD dwX,
992 DWORD dwY, LPDIRECTDRAWSURFACE7 pSrcSurf,
993 LPRECT prcSrc, DWORD dwTrans);
994 HRESULT WINAPI DIB_DirectDrawSurface_Restore(LPDIRECTDRAWSURFACE7 iface);
996 DIB_DirectDrawSurface_SetSurfaceDesc(LPDIRECTDRAWSURFACE7 iface,
997 LPDDSURFACEDESC2 pDDSD, DWORD dwFlags);
999 /*****************************************************************************
1000 * IDirectDrawSurface USER declarations
1002 #define USER_PRIV(surf) ((User_DirectDrawSurfaceImpl*)((surf)->private))
1004 #define USER_PRIV_VAR(name,surf) \
1005 User_DirectDrawSurfaceImpl* name = USER_PRIV(surf)
1007 struct User_DirectDrawSurfaceImpl_Part
1011 HANDLE update_thread, update_event, refresh_event;
1012 volatile int wait_count, in_refresh;
1013 CRITICAL_SECTION crit;
1018 struct DIB_DirectDrawSurfaceImpl_Part dib;
1019 struct User_DirectDrawSurfaceImpl_Part user;
1020 } User_DirectDrawSurfaceImpl;
1022 HRESULT User_DirectDrawSurface_Construct(IDirectDrawSurfaceImpl* This,
1023 IDirectDrawImpl* pDD,
1024 const DDSURFACEDESC2* pDDSD);
1026 HRESULT User_DirectDrawSurface_Create(IDirectDrawImpl *pDD,
1027 const DDSURFACEDESC2 *pDDSD,
1028 LPDIRECTDRAWSURFACE7 *ppSurf,
1029 IUnknown *pUnkOuter);
1031 void User_DirectDrawSurface_final_release(IDirectDrawSurfaceImpl* This);
1033 void User_DirectDrawSurface_lock_update(IDirectDrawSurfaceImpl* This,
1034 LPCRECT pRect, DWORD dwFlags);
1035 void User_DirectDrawSurface_unlock_update(IDirectDrawSurfaceImpl* This,
1037 void User_DirectDrawSurface_set_palette(IDirectDrawSurfaceImpl* This,
1038 IDirectDrawPaletteImpl* pal);
1039 void User_DirectDrawSurface_update_palette(IDirectDrawSurfaceImpl* This,
1040 IDirectDrawPaletteImpl* pal,
1041 DWORD dwStart, DWORD dwCount,
1042 LPPALETTEENTRY palent);
1043 HRESULT User_DirectDrawSurface_duplicate_surface(IDirectDrawSurfaceImpl* This,
1044 LPDIRECTDRAWSURFACE7* ppDup);
1045 BOOL User_DirectDrawSurface_flip_data(IDirectDrawSurfaceImpl* front,
1046 IDirectDrawSurfaceImpl* back,
1048 void User_DirectDrawSurface_flip_update(IDirectDrawSurfaceImpl* This,
1050 HWND User_DirectDrawSurface_get_display_window(IDirectDrawSurfaceImpl* This);
1052 HRESULT User_DirectDrawSurface_get_dc(IDirectDrawSurfaceImpl* This, HDC* phDC);
1053 HRESULT User_DirectDrawSurface_release_dc(IDirectDrawSurfaceImpl* This,
1056 HRESULT User_DirectDrawSurface_get_gamma_ramp(IDirectDrawSurfaceImpl* This,
1058 LPDDGAMMARAMP lpGammaRamp);
1059 HRESULT User_DirectDrawSurface_set_gamma_ramp(IDirectDrawSurfaceImpl* This,
1061 LPDDGAMMARAMP lpGammaRamp);
1063 /*****************************************************************************
1064 * IDirectDrawSurface HAL declarations
1066 #define HAL_PRIV(surf) ((HAL_DirectDrawSurfaceImpl*)((surf)->private))
1068 #define HAL_PRIV_VAR(name,surf) \
1069 HAL_DirectDrawSurfaceImpl* name = HAL_PRIV(surf)
1071 struct HAL_DirectDrawSurfaceImpl_Part
1075 DWORD fb_pitch, fb_vofs;
1080 struct DIB_DirectDrawSurfaceImpl_Part dib;
1081 struct User_DirectDrawSurfaceImpl_Part user;
1082 struct HAL_DirectDrawSurfaceImpl_Part hal;
1083 } HAL_DirectDrawSurfaceImpl;
1085 HRESULT HAL_DirectDrawSurface_Construct(IDirectDrawSurfaceImpl* This,
1086 IDirectDrawImpl* pDD,
1087 const DDSURFACEDESC2* pDDSD);
1089 HRESULT HAL_DirectDrawSurface_Create(IDirectDrawImpl *pDD,
1090 const DDSURFACEDESC2 *pDDSD,
1091 LPDIRECTDRAWSURFACE7 *ppSurf,
1092 IUnknown *pUnkOuter);
1094 void HAL_DirectDrawSurface_final_release(IDirectDrawSurfaceImpl* This);
1095 HRESULT HAL_DirectDrawSurface_late_allocate(IDirectDrawSurfaceImpl* This);
1097 void HAL_DirectDrawSurface_set_palette(IDirectDrawSurfaceImpl* This,
1098 IDirectDrawPaletteImpl* pal);
1099 void HAL_DirectDrawSurface_update_palette(IDirectDrawSurfaceImpl* This,
1100 IDirectDrawPaletteImpl* pal,
1101 DWORD dwStart, DWORD dwCount,
1102 LPPALETTEENTRY palent);
1103 HRESULT HAL_DirectDrawSurface_duplicate_surface(IDirectDrawSurfaceImpl* This,
1104 LPDIRECTDRAWSURFACE7* ppDup);
1105 void HAL_DirectDrawSurface_lock_update(IDirectDrawSurfaceImpl* This,
1106 LPCRECT pRect, DWORD dwFlags);
1107 void HAL_DirectDrawSurface_unlock_update(IDirectDrawSurfaceImpl* This,
1109 BOOL HAL_DirectDrawSurface_flip_data(IDirectDrawSurfaceImpl* front,
1110 IDirectDrawSurfaceImpl* back,
1112 void HAL_DirectDrawSurface_flip_update(IDirectDrawSurfaceImpl* This,
1114 HWND HAL_DirectDrawSurface_get_display_window(IDirectDrawSurfaceImpl* This);
1116 /*****************************************************************************
1117 * IDirectDrawSurface FAKEZBUFFER declarations
1122 } FakeZBuffer_DirectDrawSurfaceImpl;
1124 HRESULT FakeZBuffer_DirectDrawSurface_Construct(IDirectDrawSurfaceImpl* This,
1125 IDirectDrawImpl* pDD,
1126 const DDSURFACEDESC2* pDDSD);
1128 HRESULT FakeZBuffer_DirectDrawSurface_Create(IDirectDrawImpl* pDD,
1129 const DDSURFACEDESC2* pDDSD,
1130 LPDIRECTDRAWSURFACE7* ppSurf,
1131 IUnknown* pUnkOuter);
1133 void FakeZBuffer_DirectDrawSurface_final_release(IDirectDrawSurfaceImpl* This);
1135 HRESULT FakeZBuffer_DirectDrawSurface_duplicate_surface(IDirectDrawSurfaceImpl* This,
1136 LPDIRECTDRAWSURFACE7* ppDup);
1138 #endif /* __WINE_DLLS_DDRAW_DDRAW_PRIVATE_H */