More DirectDraw HAL type declarations.

This commit is contained in:
Ove Kaaven 2001-03-20 01:15:36 +00:00 committed by Alexandre Julliard
parent 66fb6075aa
commit 529eaed93a
1 changed files with 562 additions and 5 deletions

View File

@ -11,6 +11,10 @@ extern "C" {
#include "ddraw.h"
#include "dciddi.h" /* the DD HAL is layered onto DCI escapes */
typedef struct _DDVIDEOPORTCAPS *LPDDVIDEOPORTCAPS; /* should be in dvp.h */
typedef struct _DDKERNELCAPS *LPDDKERNELCAPS; /* should be in ddkernel.h */
typedef struct _VMEMHEAP *LPVMEMHEAP; /* should be in dmemmgr.h */
#define DDAPI WINAPI
/* the DirectDraw versions */
@ -26,6 +30,8 @@ extern "C" {
#define DDNEWCALLBACKFNS 12
#define DDVERSIONINFO 13
#define MAX_DRIVER_NAME CCHDEVICENAME
/*****************************************************************************
* Initialization stuff
*/
@ -51,6 +57,21 @@ typedef struct _DDHALINFO *LPDDHALINFO;
typedef struct _DDRAWI_DIRECTDRAW_INT *LPDDRAWI_DIRECTDRAW_INT;
typedef struct _DDRAWI_DIRECTDRAW_LCL *LPDDRAWI_DIRECTDRAW_LCL;
typedef struct _DDRAWI_DIRECTDRAW_GBL *LPDDRAWI_DIRECTDRAW_GBL;
typedef struct _DDRAWI_DDRAWSURFACE_INT *LPDDRAWI_DDRAWSURFACE_INT;
typedef struct _DDRAWI_DDRAWSURFACE_LCL *LPDDRAWI_DDRAWSURFACE_LCL;
typedef struct _DDRAWI_DDRAWSURFACE_GBL *LPDDRAWI_DDRAWSURFACE_GBL;
typedef struct _DDRAWI_DDRAWSURFACE_MORE *LPDDRAWI_DDRAWSURFACE_MORE;
typedef struct _DDRAWI_DDRAWSURFACE_GBL_MORE *LPDDRAWI_DDRAWSURFACE_GBL_MORE;
typedef struct _DDRAWI_DDRAWPALETTE_INT *LPDDRAWI_DDRAWPALETTE_INT;
typedef struct _DDRAWI_DDRAWPALETTE_LCL *LPDDRAWI_DDRAWPALETTE_LCL;
typedef struct _DDRAWI_DDRAWPALETTE_GBL *LPDDRAWI_DDRAWPALETTE_GBL;
typedef struct _DDRAWI_DDRAWCLIPPER_INT *LPDDRAWI_DDRAWCLIPPER_INT;
typedef struct _DDRAWI_DDRAWCLIPPER_LCL *LPDDRAWI_DDRAWCLIPPER_LCL;
typedef struct _DDRAWI_DDRAWCLIPPER_GBL *LPDDRAWI_DDRAWCLIPPER_GBL;
typedef struct _DDRAWI_DDVIDEOPORT_INT *LPDDRAWI_DDVIDEOPORT_INT;
typedef struct _DDRAWI_DDVIDEOPORT_LCL *LPDDRAWI_DDVIDEOPORT_LCL;
typedef struct _DDRAWI_DDMOTIONCOMP_INT *LPDDRAWI_DDMOTIONCOMP_INT;
typedef struct _DDRAWI_DDMOTIONCOMP_LCL *LPDDRAWI_DDMOTIONCOMP_LCL;
/*****************************************************************************
* driver->ddraw callbacks
@ -96,14 +117,14 @@ typedef struct _VIDMEM {
DWORD dwFlags;
FLATPTR fpStart;
union {
FLATPTR fpEnd;
DWORD dwWidth;
FLATPTR fpEnd;
DWORD dwWidth;
} DUMMYUNIONNAME1;
DDSCAPS ddsCaps;
DDSCAPS ddsCapsAlt;
union {
FLATPTR lpHeap;
DWORD dwHeight;
LPVMEMHEAP lpHeap;
DWORD dwHeight;
} DUMMYUNIONNAME2;
} VIDMEM,*LPVIDMEM;
@ -130,8 +151,24 @@ typedef struct _VIDMEMINFO {
LPVIDMEM pvmList;
} VIDMEMINFO,*LPVIDMEMINFO;
typedef struct _HEAPALIAS {
FLATPTR fpVidMem;
LPVOID lpAlias;
DWORD dwAliasSize;
} HEAPALIAS,*LPHEAPALIAS;
typedef struct _HEAPALIASINFO {
DWORD dwRefCnt;
DWORD dwFlags;
DWORD dwNumHeaps;
LPHEAPALIAS lpAliases;
} HEAPALIASINFO,*LPHEAPALIASINFO;
#define HEAPALIASINFO_MAPPEDREAL 0x00000001
#define HEAPALIASINFO_MAPPEDDUMMY 0x00000002
/*****************************************************************************
* core capabilities structure
* capabilities structures
*/
typedef struct _DDCORECAPS {
DWORD dwSize;
@ -187,6 +224,21 @@ typedef struct _DDCORECAPS {
DWORD dwSVBCaps2;
} DDCORECAPS,*LPDDCORECAPS;
typedef struct _DDNONLOCALVIDMEMCAPS {
DWORD dwSize;
DWORD dwNLVBCaps;
DWORD dwNLVBCaps2;
DWORD dwNLVBCKeyCaps;
DWORD dwNLVBFXCaps;
DWORD dwNLVBRops[DD_ROP_SPACE];
} DDNONLOCALVIDMEMCAPS,*LPDDNONLOCALVIDMEMCAPS;
typedef struct _DDSCAPSEX {
DWORD dwCaps2;
DWORD dwCaps3;
DWORD dwCaps4;
} DDSCAPSEX,*LPDDSCAPSEX;
/*****************************************************************************
* ddraw->driver callbacks
*/
@ -308,6 +360,8 @@ typedef struct _DDHAL_DDEXEBUFCALLBACKS {
LPDDHALEXEBUFCB_UNLOCKEXEBUF UnlockExecuteBuffer;
} DDHAL_DDEXEBUFCALLBACKS,*LPDDHAL_DDEXEBUFCALLBACKS;
typedef HRESULT WINAPI (*LPDDGAMMACALIBRATORPROC)(LPDDGAMMARAMP, LPBYTE);
/*****************************************************************************
* driver info structure
*
@ -342,6 +396,23 @@ typedef struct _DDHALINFO {
#define DDHALINFO_MODEXILLEGAL 0x00000002
#define DDHALINFO_GETDRIVERINFOSET 0x00000004
/* where the high-level ddraw implementation stores the callbacks */
typedef struct _DDHAL_CALLBACKS {
DDHAL_DDCALLBACKS cbDDCallbacks;
DDHAL_DDSURFACECALLBACKS cbDDSurfaceCallbacks;
DDHAL_DDPALETTECALLBACKS cbDDPaletteCallbacks;
DDHAL_DDCALLBACKS HALDD;
DDHAL_DDSURFACECALLBACKS HALDDSurface;
DDHAL_DDPALETTECALLBACKS HALDDPalette;
DDHAL_DDCALLBACKS HELDD;
DDHAL_DDSURFACECALLBACKS HELDDSurface;
DDHAL_DDPALETTECALLBACKS HELDDPalette;
DDHAL_DDEXEBUFCALLBACKS cbDDExeBufCallbacks;
DDHAL_DDEXEBUFCALLBACKS HALDDExeBuf;
DDHAL_DDEXEBUFCALLBACKS HELDDExeBuf;
/* there's more... videoport, colorcontrol, misc, and motion compensation callbacks... */
} DDHAL_CALLBACKS,*LPDDHAL_CALLBACKS;
/*****************************************************************************
* parameter structures
*/
@ -360,6 +431,93 @@ typedef struct _DDHAL_SETMODEDATA {
BOOL useRefreshRate;
} DDHAL_SETMODEDATA;
typedef struct _DDHAL_CREATESURFACEDATA {
LPDDRAWI_DIRECTDRAW_GBL lpDD;
LPDDSURFACEDESC lpDDSurfaceDesc;
LPDDRAWI_DDRAWSURFACE_LCL * lplpSList;
DWORD dwSCnt;
HRESULT ddRVal;
LPDDHAL_CREATESURFACE CreateSurface;
} DDHAL_CREATESURFACEDATA;
typedef struct _DDHAL_CANCREATESURFACEDATA {
LPDDRAWI_DIRECTDRAW_GBL lpDD;
LPDDSURFACEDESC lpDDSurfaceDesc;
DWORD bIsDifferentPixelFormat;
HRESULT ddRVal;
LPDDHAL_CANCREATESURFACE CanCreateSurface;
} DDHAL_CANCREATESURFACEDATA;
typedef struct _DDHAL_CREATEPALETTEDATA {
LPDDRAWI_DIRECTDRAW_GBL lpDD;
LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette;
LPPALETTEENTRY lpColorTable;
HRESULT ddRVal;
LPDDHAL_CREATEPALETTE CreatePalette;
BOOL is_excl;
} DDHAL_CREATEPALETTEDATA;
typedef struct _DDHAL_SETEXCLUSIVEMODEDATA {
LPDDRAWI_DIRECTDRAW_GBL lpDD;
DWORD dwEnterExcl;
DWORD dwReserved;
HRESULT ddRVal;
LPDDHAL_SETEXCLUSIVEMODE SetExclusiveMode;
} DDHAL_SETEXCLUSIVEMODEDATA;
/* surfaces */
typedef struct _DDHAL_DESTROYSURFACEDATA {
LPDDRAWI_DIRECTDRAW_GBL lpDD;
LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface;
HRESULT ddRVal;
LPDDHALSURFCB_DESTROYSURFACE DestroySurface;
} DDHAL_DESTROYSURFACEDATA;
typedef struct _DDHAL_BLTDATA {
LPDDRAWI_DIRECTDRAW_GBL lpDD;
LPDDRAWI_DDRAWSURFACE_LCL lpDDDestSurface;
RECTL rDest;
LPDDRAWI_DDRAWSURFACE_LCL lpDDSrcSurface;
RECTL rSrc;
DWORD dwFlags;
DWORD dwROPFlags;
DDBLTFX bltFX;
HRESULT ddRVal;
LPDDHALSURFCB_BLT Blt;
BOOL IsClipped;
RECTL rOrigDest;
RECTL rOrigSrc;
DWORD dwRectCnt;
LPRECT prDestRects;
} DDHAL_BLTDATA;
typedef struct _DDHAL_SETPALETTEDATA {
LPDDRAWI_DIRECTDRAW_GBL lpDD;
LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface;
LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette;
HRESULT ddRVal;
LPDDHALSURFCB_SETPALETTE SetPalette;
BOOL Attach;
} DDHAL_SETPALETTEDATA;
/* palettes */
typedef struct _DDHAL_DESTROYPALETTEDATA {
LPDDRAWI_DIRECTDRAW_GBL lpDD;
LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette;
HRESULT ddRVal;
LPDDHALPALCB_DESTROYPALETTE DestroyPalette;
} DDHAL_DESTROYPALETTEDATA;
typedef struct _DDHAL_SETENTRIESDATA {
LPDDRAWI_DIRECTDRAW_GBL lpDD;
LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette;
DWORD dwBase;
DWORD dwNumEntries;
LPPALETTEENTRY lpEntries;
HRESULT ddRVal;
LPDDHALPALCB_SETENTRIES SetEntries;
} DDHAL_SETENTRIESDATA;
typedef struct _DDHAL_GETDRIVERINFODATA {
DWORD dwSize;
DWORD dwFlags;
@ -371,6 +529,405 @@ typedef struct _DDHAL_GETDRIVERINFODATA {
ULONG_PTR dwContext;
} DDHAL_GETDRIVERINFODATA;
/*****************************************************************************
* high-level ddraw implementation structures
*/
typedef struct _IUNKNOWN_LIST {
struct _IUNKNOWN_LIST * lpLink;
LPGUID lpGuid;
IUnknown * lpIUnknown;
} IUNKNOWN_LIST,*LPIUNKNOWN_LIST;
typedef struct _PROCESS_LIST {
struct _PROCESS_LIST * lpLink;
DWORD dwProcessId;
DWORD dwRefCnt;
DWORD dwAlphaDepth;
DWORD dwZDepth;
} PROCESS_LIST,*LPPROCESS_LIST;
typedef struct _ATTACHLIST {
DWORD dwFlags;
struct _ATTACHLIST * lpLink;
LPDDRAWI_DDRAWSURFACE_LCL lpAttached;
LPDDRAWI_DDRAWSURFACE_INT lpIAttached;
} ATTACHLIST,*LPATTACHLIST;
#define DDAL_IMPLICIT 0x00000001
typedef struct _ACCESSRECTLIST {
struct _ACCESSRECTLIST * lpLink;
RECT rDest;
LPDDRAWI_DIRECTDRAW_LCL lpOwner;
LPVOID lpSurfaceData;
DWORD dwFlags;
LPHEAPALIASINFO lpHeapAliasInfo;
} ACCESSRECTLIST,*LPACCESSRECTLIST;
#define ACCESSRECT_VRAMSTYLE 0x00000001
#define ACCESSRECT_NOTHOLDINGWIN16LOCK 0x00000002
#define ACCESSRECT_BROKEN 0x00000004
typedef struct _DBLNODE {
struct _DBLNODE * next;
struct _DBLNODE * prev;
LPDDRAWI_DDRAWSURFACE_LCL object;
LPDDRAWI_DDRAWSURFACE_INT object_int;
} DBLNODE,*LPDBLNODE;
typedef struct _DDRAWI_DIRECTDRAW_INT {
LPVOID lpVtbl;
LPDDRAWI_DIRECTDRAW_LCL lpLcl;
LPDDRAWI_DIRECTDRAW_INT lpLink;
DWORD dwIntRefCnt;
} DDRAWI_DIRECTDRAW_INT;
typedef struct _DDRAWI_DIRECTDRAW_LCL {
DWORD lpDDMore;
LPDDRAWI_DIRECTDRAW_GBL lpGbl;
DWORD dwUnused0;
DWORD dwLocalFlags;
DWORD dwLocalRefCnt;
DWORD dwProcessId;
IUnknown * pUnkOuter;
DWORD dwObsolete1;
ULONG_PTR hWnd;
ULONG_PTR hDC;
DWORD dwErrorMode;
LPDDRAWI_DDRAWSURFACE_INT lpPrimary;
LPDDRAWI_DDRAWSURFACE_INT lpCB;
DWORD dwPreferredMode;
/* DirectX 2 */
HINSTANCE hD3DInstance;
IUnknown * pD3DIUnknown;
LPDDHAL_CALLBACKS lpDDCB;
ULONG_PTR hDDVxd;
/* DirectX 5.0 */
DWORD dwAppHackFlags;
/* DirectX 5.0A */
ULONG_PTR hFocusWnd;
DWORD dwHotTracking;
DWORD dwIMEState;
/* DirectX 6.0 */
ULONG_PTR hWndPopup;
ULONG_PTR hDD;
ULONG_PTR hGammaCalibrator;
LPDDGAMMACALIBRATORPROC lpGammaCalibrator;
} DDRAWI_DIRECTDRAW_LCL;
#define DDRAWILCL_HASEXCLUSIVEMODE 0x00000001
#define DDRAWILCL_ISFULLSCREEN 0x00000002
#define DDRAWILCL_SETCOOPCALLED 0x00000004
#define DDRAWILCL_ACTIVEYES 0x00000008
#define DDRAWILCL_ACTIVENO 0x00000010
#define DDRAWILCL_HOOKEDHWND 0x00000020
#define DDRAWILCL_ALLOWMODEX 0x00000040
#define DDRAWILCL_V1SCLBEHAVIOUR 0x00000080
#define DDRAWILCL_MODEHASBEENCHANGED 0x00000100
#define DDRAWILCL_CREATEDWINDOW 0x00000200
#define DDRAWILCL_DIRTYDC 0x00000400
#define DDRAWILCL_DISABLEINACTIVATE 0x00000800
#define DDRAWILCL_CURSORCLIPPED 0x00001000
#define DDRAWILCL_EXPLICITMONITOR 0x00002000
#define DDRAWILCL_MULTITHREADED 0x00004000
#define DDRAWILCL_FPUSETUP 0x00008000
#define DDRAWILCL_POWEREDDOWN 0x00010000
#define DDRAWILCL_DIRECTDRAW7 0x00020000
#define DDRAWILCL_ATTEMPTEDD3DCONTEXT 0x00040000
#define DDRAWILCL_FPUPRESERVE 0x00080000
typedef struct _DDRAWI_DIRECTDRAW_GBL {
DWORD dwRefCnt;
DWORD dwFlags;
FLATPTR fpPrimaryOrig;
DDCORECAPS ddCaps;
DWORD dwInternal1;
DWORD dwUnused1[9];
LPDDHAL_CALLBACKS lpDDCBtmp;
LPDDRAWI_DDRAWSURFACE_INT dsList;
LPDDRAWI_DDRAWPALETTE_INT palList;
LPDDRAWI_DDRAWCLIPPER_INT clipperList;
LPDDRAWI_DIRECTDRAW_GBL lp16DD;
DWORD dwMaxOverlays;
DWORD dwCurrOverlays;
DWORD dwMonitorFrequency;
DDCORECAPS ddHELCaps;
DWORD dwUnused2[50];
DDCOLORKEY ddckCKDestOverlay;
DDCOLORKEY ddckCKSrcOverlay;
VIDMEMINFO vmiData;
LPVOID lpDriverHandle;
LPDDRAWI_DIRECTDRAW_LCL lpExclusiveOwner;
DWORD dwModeIndex;
DWORD dwModeIndexOrig;
DWORD dwNumFourCC;
LPDWORD lpdwFourCC;
DWORD dwNumModes;
LPDDHALMODEINFO lpModeInfo;
PROCESS_LIST plProcessList;
DWORD dwSurfaceLockCount;
DWORD dwAliasedLockCnt;
ULONG_PTR dwReserved3;
ULONG_PTR hDD;
char cObsolete[12];
DWORD dwReserved1;
DWORD dwReserved2;
DBLNODE dbnOverlayRoot;
volatile LPWORD lpwPDeviceFlags;
DWORD dwPDevice;
DWORD dwWin16LockCnt;
DWORD dwUnused3;
DWORD hInstance;
DWORD dwEvent16;
DWORD dwSaveNumModes;
/* DirectX 2 */
ULONG_PTR lpD3DGlobalDriverData;
ULONG_PTR lpD3DHALCallbacks;
DDCORECAPS ddBothCaps;
/* DirectX 5.0 */
LPDDVIDEOPORTCAPS lpDDVideoPortCaps;
LPDDRAWI_DDVIDEOPORT_INT dvpList;
ULONG_PTR lpD3DHALCallbacks2;
RECT rectDevice;
DWORD cMonitors;
LPVOID gpbmiSrc;
LPVOID gpbmiDest;
LPHEAPALIASINFO phaiHeapAliases;
ULONG_PTR hKernelHandle;
ULONG_PTR pfnNotifyProc;
LPDDKERNELCAPS lpDDKernelCaps;
LPDDNONLOCALVIDMEMCAPS lpddNLVCaps;
LPDDNONLOCALVIDMEMCAPS lpddNLVHELCaps;
LPDDNONLOCALVIDMEMCAPS lpddNLVBothCaps;
ULONG_PTR lpD3DExtendedCaps;
/* DirectX 5.0A */
DWORD dwDOSBoxEvent;
RECT rectDesktop;
char cDriverName[MAX_DRIVER_NAME];
/* DirectX 6.0 */
ULONG_PTR lpD3DHALCallbacks3;
DWORD dwNumZPixelFormats;
LPDDPIXELFORMAT lpZPixelFormats;
LPDDRAWI_DDMOTIONCOMP_INT mcList;
DWORD hDDVxd;
DDSCAPSEX ddsCapsMore;
} DDRAWI_DIRECTDRAW_GBL;
#define DDRAWI_VIRTUALDESKTOP 0x00000008
#define DDRAWI_MODEX 0x00000010
#define DDRAWI_DISPLAYDRV 0x00000020
#define DDRAWI_FULLSCREEN 0x00000040
#define DDRAWI_MODECHANGED 0x00000080
#define DDRAWI_NOHARDWARE 0x00000100
#define DDRAWI_PALETTEINIT 0x00000200
#define DDRAWI_NOEMULATION 0x00000400
/* more... */
/* surfaces */
typedef struct _DDRAWI_DDRAWSURFACE_INT {
LPVOID lpVtbl;
LPDDRAWI_DDRAWSURFACE_LCL lpLcl;
LPDDRAWI_DDRAWSURFACE_INT lpLink;
DWORD dwIntRefCnt;
} DDRAWI_DDRAWSURFACE_INT;
typedef struct _DDRAWI_DDRAWSURFACE_GBL {
DWORD dwRefCnt;
DWORD dwGlobalFlags;
union {
LPACCESSRECTLIST lpRectList;
DWORD dwBlockSizeY;
} DUMMYUNIONNAME1;
union {
LPVMEMHEAP lpVidMemHeap;
DWORD dwBlockSizeX;
} DUMMYUNIONNAME2;
union {
LPDDRAWI_DIRECTDRAW_GBL lpDD;
LPVOID lpDDHandle;
} DUMMYUNIONNAME3;
FLATPTR fpVidMem;
union {
LONG lPitch;
DWORD dwLinearSize;
} DUMMYUNIONNAME4;
WORD wHeight;
WORD wWidth;
DWORD dwUsageCount;
ULONG_PTR dwReserved1; /* for display driver use */
/* optional (defaults to primary surface pixelformat) */
DDPIXELFORMAT ddpfSurface;
} DDRAWI_DDRAWSURFACE_GBL;
#define DDRAWISURFGBL_MEMFREE 0x00000001
#define DDRAWISURFGBL_SYSMEMREQUESTED 0x00000002
#define DDRAWISURFGBL_ISGDISURFACE 0x00000004
#define DDRAWISURFGBL_SOFTWAREAUTOFLIP 0x00000008
#define DDRAWISURFGBL_LOCKNOTHOLDINGWIN16LOCK 0x00000010
#define DDRAWISURFGBL_LOCKVRAMSTYLE 0x00000020
#define DDRAWISURFGBL_LOCKBROKEN 0x00000040
#define DDRAWISURFGBL_IMPLICITHANDLE 0x00000080
#define DDRAWISURFGBL_ISCLIENTMEM 0x00000100
#define DDRAWISURFGBL_HARDWAREOPSOURCE 0x00000200
#define DDRAWISURFGBL_HARDWAREOPDEST 0x00000400
#define DDRAWISURFGBL_HARDWAREOPSTARTED 0x00000600
#define DDRAWISURFGBL_VPORTINTERLEAVED 0x00000800
#define DDRAWISURFGBL_VPORTDATA 0x00001000
#define DDRAWISURFGBL_LATEALLOCATELINEAR 0x00002000
#define DDRAWISURFGBL_SYSMEMEXECUTEBUFFER 0x00004000
#define DDRAWISURFGBL_FASTLOCKHELD 0x00008000
#define DDRAWISURFGBL_READONLYLOCKHELD 0x00010000
typedef struct _DDRAWI_DDRAWSURFACE_GBL_MORE {
DWORD dwSize;
union {
DWORD dwPhysicalPageTable;
FLATPTR fpPhysicalVidMem;
} DUMMYUNIONNAME1;
LPDWORD pPageTable;
DWORD cPages;
ULONG_PTR dwSavedDCContext;
FLATPTR fpAliasedVidMem;
ULONG_PTR dwDriverReserved;
ULONG_PTR dwHELReserved;
DWORD cPageUnlocks;
ULONG_PTR hKernelSurface;
DWORD dwKernelRefCnt;
LPDDCOLORCONTROL lpColorInfo;
FLATPTR fpNTAlias;
DWORD dwContentsStamp;
LPVOID lpvUnswappedDriverReserved;
LPVOID lpDDRAWReserved2;
DWORD dwDDRAWReserved1;
DWORD dwDDRAWReserved2;
FLATPTR fpAliasOfVidMem;
} DDRAWI_DDRAWSURFACE_GBL_MORE;
/* the MS version of this macro was somewhat obfuscated and unreadable
* (possibly because of mediocre MS coders)... so I simplified it...
* (and so I commit no copyright violations either, hah) */
#define GET_LPDDRAWSURFACE_GBL_MORE(psurf_gbl) \
(*(((LPDDRAWI_DDRAWSURFACE_GBL_MORE *)(psurf_gbl)) - 1))
typedef struct _DDRAWI_DDRAWSURFACE_MORE {
DWORD dwSize;
IUNKNOWN_LIST * lpIUnknowns;
LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl;
DWORD dwPageLockCount;
DWORD dwBytesAllocated;
LPDDRAWI_DIRECTDRAW_INT lpDD_int;
DWORD dwMipMapCount;
LPDDRAWI_DDRAWCLIPPER_INT lpDDIClipper;
/* DirectX 5.0 */
/* more... */
} DDRAWI_DDRAWSURFACE_MORE;
typedef struct _DDRAWI_DDRAWSURFACE_LCL {
LPDDRAWI_DDRAWSURFACE_MORE lpSurfMore;
LPDDRAWI_DDRAWSURFACE_GBL lpGbl;
ULONG_PTR hDDSurface;
LPATTACHLIST lpAttachList;
LPATTACHLIST lpAttachListFrom;
DWORD dwLocalRefCnt;
DWORD dwProcessId;
DWORD dwFlags;
DDSCAPS ddsCaps;
LPDDRAWI_DDRAWPALETTE_INT lpDDPalette;
LPDDRAWI_DDRAWCLIPPER_LCL lpDDClipper;
DWORD dwModeCreatedIn;
DWORD dwBackBufferCount;
DDCOLORKEY ddckCKDestBlt;
DDCOLORKEY ddckCKSrcBlt;
ULONG_PTR hDC;
ULONG_PTR dwReserved1; /* for display driver use */
/* overlays only */
DDCOLORKEY ddckCKSrcOverlay;
DDCOLORKEY ddckCKDestOverlay;
LPDDRAWI_DDRAWSURFACE_INT lpSurfaceOverlaying;
DBLNODE dbnOverlayNode;
RECT rcOverlaySrc;
RECT rcOverlayDest;
DWORD dwClrXparent;
DWORD dwAlpha;
LONG lOverlayX;
LONG lOverlayY;
} DDRAWI_DDRAWSURFACE_LCL;
#define DDRAWISURF_ATTACHED 0x00000001
#define DDRAWISURF_IMPLICITCREATE 0x00000002
#define DDRAWISURF_ISFREE 0x00000004
#define DDRAWISURF_ATTACHED_FROM 0x00000008
#define DDRAWISURF_IMPLICITROOT 0x00000010
#define DDRAWISURF_PARTOFPRIMARYCHAIN 0x00000020
#define DDRAWISURF_DATAISALIASED 0x00000040
#define DDRAWISURF_HASDC 0x00000080
#define DDRAWISURF_HASCKEYDESTOVERLAY 0x00000100
#define DDRAWISURF_HASCKEYDESTBLT 0x00000200
#define DDRAWISURF_HASCKEYSRCOVERLAY 0x00000400
#define DDRAWISURF_HASCKEYSRCBLT 0x00000800
#define DDRAWISURF_LOCKEXCLUDEDCURSOR 0x00001000
#define DDRAWISURF_HASPIXELFORMAT 0x00002000
#define DDRAWISURF_HASOVERLAYDATA 0x00004000
#define DDRAWISURF_SETGAMMA 0x00008000
/* more... */
#define DDRAWISURF_INVALID 0x10000000
/* palettes */
typedef struct _DDRAWI_DDRAWPALETTE_INT {
LPVOID lpVtbl;
LPDDRAWI_DDRAWPALETTE_LCL lpLcl;
LPDDRAWI_DDRAWPALETTE_INT lpLink;
DWORD dwIntRefCnt;
} DDRAWI_DDRAWPALETTE_INT;
typedef struct _DDRAWI_DDRAWPALETTE_GBL {
DWORD dwRefCnt;
DWORD dwFlags;
LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl;
DWORD dwProcessId;
LPPALETTEENTRY lpColorTable;
union {
ULONG_PTR dwReserved1; /* for display driver use */
HPALETTE hHELGDIPalette;
} DUMMYUNIONNAME1;
/* DirectX 5.0 */
DWORD dwDriverReserved;
DWORD dwContentsStamp;
/* DirectX 6.0 */
DWORD dwSaveStamp;
/* DirectX 7.0 */
DWORD dwHandle;
} DDRAWI_DDRAWPALETTE_GBL;
#define DDRAWIPAL_256 0x00000001
#define DDRAWIPAL_16 0x00000002
#define DDRAWIPAL_GDI 0x00000004
#define DDRAWIPAL_STORED_8 0x00000008
#define DDRAWIPAL_STORED_16 0x00000010
#define DDRAWIPAL_STORED_24 0x00000020
#define DDRAWIPAL_EXCLUSIVE 0x00000040
#define DDRAWIPAL_INHEL 0x00000080
#define DDRAWIPAL_DIRTY 0x00000100
#define DDRAWIPAL_ALLOW256 0x00000200
#define DDRAWIPAL_4 0x00000400
#define DDRAWIPAL_2 0x00000800
#define DDRAWIPAL_STORED_8INDEX 0x00001000
#define DDRAWIPAL_ALPHA 0x00002000
typedef struct _DDRAWI_DDRAWPALETTE_LCL {
DWORD lpPalMore;
LPDDRAWI_DDRAWPALETTE_GBL lpGbl;
ULONG_PTR dwUnused0;
DWORD dwLocalRefCnt;
IUnknown * pUnkOuter;
LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl;
ULONG_PTR dwReserved1;
/* DirectX 6.0 */
ULONG_PTR dwDDRAWReserved1;
ULONG_PTR dwDDRAWReserved2;
ULONG_PTR dwDDRAWReserved3;
} DDRAWI_DDRAWPALETTE_LCL;
#ifdef __cplusplus
} /* extern "C" */
#endif