📄 mmddraw.pas
字号:
{-- TDDSURFACEDESC -----------------------------------------------------------}
TDDSurfaceValue = record
case Byte of
0: (dwMipMapCount: DWORD); // number of mip-map levels requested
1: (dwZBufferBitDepth: DWORD); // depth of Z buffer requested
2: (dwRefreshRate: DWORD); // refresh rate (used when display mode is described)
end;
PDDSURFACEDESC = ^TDDSURFACEDESC;
TDDSURFACEDESC = record
dwSize : DWORD; // size of the DDSURFACEDESC structure
dwFlags : DWORD; // determines what fields are valid
dwHeight : DWORD; // height of surface to be created
dwWidth : DWORD; // width of input surface
lPitch : LONG; // distance to start of next line (return value only)
dwBackBufferCount : DWORD; // number of back buffers requested
Value : TDDSurfaceValue;
dwAlphaBitDepth : DWORD; // depth of alpha buffer requested
dwReserved : DWORD; // reserved
lpSurface : PVOID; // pointer to the associated surface memory
ddckCKDestOverlay : TDDCOLORKEY; // color key for destination overlay use
ddckCKDestBlt : TDDCOLORKEY; // color key for destination blt use
ddckCKSrcOverlay : TDDCOLORKEY; // color key for source overlay use
ddckCKSrcBlt : TDDCOLORKEY; // color key for source blt use
ddpfPixelFormat : TDDPIXELFORMAT; // pixel format description of the surface
ddsCaps : TDDSCAPS; // direct draw surface capabilities
end;
PDDENUMCALLBACKA = function(pGUID: PGUID; lpDriverDescription, lpDriverName: LPSTR; lpContext: PVOID): BOOL; pascal;
PDDENUMCALLBACKW = function(pGUID: PGUID; lpDriverDescription, lpDriverName: LPWSTR; lpContext: PVOID): BOOL; pascal;
PDDENUMCALLBACK = PDDENUMCALLBACKA;
PDDENUMMODESCALLBACK = function(lpDDSurfaceDesc: PDDSURFACEDESC; lpContext: PVOID): HRESULT; pascal;
PDDENUMSURFACESCALLBACK = function(lpDDSurface: PDIRECTDRAWSURFACE; lpDDSurfaceDesc: PDDSURFACEDESC; lpContext: PVOID): HRESULT; pascal;
{-- IDirectDraw --------------------------------------------------------------}
PDirectDraw = ^IDirectDraw;
IDirectDraw = class(IUnknown)
public
function Compact: HRESULT; virtual; stdcall; abstract;
function CreateClipper(dwFlags: DWORD; var lplpDDClipper: PDIRECTDRAWCLIPPER; pUnkOuter: PUnknown): HRESULT; virtual; stdcall; abstract;
function CreatePalette(dwFlags: DWORD; lpColorTable: PPALETTEENTRY; var lplpDDPalette: PDIRECTDRAWPALETTE; pUnkOuter: PUnknown): HRESULT; virtual; stdcall; abstract;
function CreateSurface(lpDDSurfaceDesc: PDDSURFACEDESC; var lplpDDSurface: PDIRECTDRAWSURFACE; pUnkOuter: PUnknown): HRESULT; virtual; stdcall; abstract;
function DuplicateSurface(lpDDSurface: PDIRECTDRAWSURFACE; var lplpDupDDSurface: PDIRECTDRAWSURFACE): HRESULT; virtual; stdcall; abstract;
function EnumDisplayModes(dwFlags: DWORD; lpDDSurfaceDesc: PDDSURFACEDESC; lpContext: PVOID; lpEnumModesCallback: PDDENUMMODESCALLBACK): HRESULT; virtual; stdcall; abstract;
function EnumSurfaces(dwFlags: DWORD; lpDDSD: PDDSURFACEDESC; lpContext: PVOID; lpEnumCallback: PDDENUMSURFACESCALLBACK): HRESULT; virtual; stdcall; abstract;
function FlipToGDISurface: HRESULT; virtual; stdcall; abstract;
function GetCaps(lpDDDriverCaps: PDDCAPS; lpDDHELCaps: PDDCAPS): HRESULT; virtual; stdcall; abstract;
function GetDisplayMode(lpDDSurfaceDesc: PDDSURFACEDESC): HRESULT; virtual; stdcall; abstract;
function GetFourCCCodes(lpNumCodes: PDWORD; lpCodes: PDWORD ): HRESULT; virtual; stdcall; abstract;
function GetGDISurface(var lplpGDIDDSSurface: PDIRECTDRAWSURFACE): HRESULT; virtual; stdcall; abstract;
function GetMonitorFrequency(lpdwFrequency: PDWORD): HRESULT; virtual; stdcall; abstract;
function GetScanLine(lpdwScanLine: PDWORD): HRESULT; virtual; stdcall; abstract;
function GetVerticalBlankStatus(lpblsInVB: PBOOL): HRESULT; virtual; stdcall; abstract;
function Initialize(lpGUID: PGUID): HRESULT; virtual; stdcall; abstract;
function RestoreDisplayMode: HRESULT; virtual; stdcall; abstract;
function SetCooperativeLevel(hWnd: HWND; dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
function SetDisplayMode(dwWidth: DWORD; dwHeight: DWORD; dwBPP: DWORD): HRESULT; virtual; stdcall; abstract;
function WaitForVerticalBlank(dwFlags: DWORD; hEvent: THANDLE): HRESULT; virtual; stdcall; abstract;
end;
{-- IDirectDraw2 -------------------------------------------------------------}
PDirectDraw2 = ^IDirectDraw2;
IDirectDraw2 = class(IUnknown)
public
function Compact: HRESULT; virtual; stdcall; abstract;
function CreateClipper(dwFlags: DWORD; var lplpDDClipper: PDIRECTDRAWCLIPPER; pUnkOuter: PUnknown): HRESULT; virtual; stdcall; abstract;
function CreatePalette(dwFlags: DWORD; lpColorTable: PPALETTEENTRY; var lplpDDPalette: PDIRECTDRAWPALETTE; pUnkOuter: PUnknown): HRESULT; virtual; stdcall; abstract;
function CreateSurface(lpDDSurfaceDesc: PDDSURFACEDESC; var lplpDDSurface: PDIRECTDRAWSURFACE; pUnkOuter: PUnknown): HRESULT; virtual; stdcall; abstract;
function DuplicateSurface(lpDDSurface: PDIRECTDRAWSURFACE; var lplpDupDDSurface: PDIRECTDRAWSURFACE): HRESULT; virtual; stdcall; abstract;
function EnumDisplayModes(dwFlags: DWORD; lpDDSurfaceDesc: PDDSURFACEDESC; lpContext: PVOID; lpEnumModesCallback: PDDENUMMODESCALLBACK): HRESULT; virtual; stdcall; abstract;
function EnumSurfaces(dwFlags: DWORD; lpDDSD: PDDSURFACEDESC; lpContext: PVOID; lpEnumCallback: PDDENUMSURFACESCALLBACK): HRESULT; virtual; stdcall; abstract;
function FlipToGDISurface: HRESULT; virtual; stdcall; abstract;
function GetCaps(lpDDDriverCaps: PDDCAPS; lpDDHELCaps: PDDCAPS): HRESULT; virtual; stdcall; abstract;
function GetDisplayMode(lpDDSurfaceDesc: PDDSURFACEDESC): HRESULT; virtual; stdcall; abstract;
function GetFourCCCodes(lpNumCodes: PDWORD; lpCodes: PDWORD ): HRESULT; virtual; stdcall; abstract;
function GetGDISurface(var lplpGDIDDSSurface: PDIRECTDRAWSURFACE): HRESULT; virtual; stdcall; abstract;
function GetMonitorFrequency(lpdwFrequency: PDWORD): HRESULT; virtual; stdcall; abstract;
function GetScanLine(lpdwScanLine: PDWORD): HRESULT; virtual; stdcall; abstract;
function GetVerticalBlankStatus(lpblsInVB: PBOOL): HRESULT; virtual; stdcall; abstract;
function Initialize(lpGUID: PGUID): HRESULT; virtual; stdcall; abstract;
function RestoreDisplayMode: HRESULT; virtual; stdcall; abstract;
function SetCooperativeLevel(hWnd: HWND; dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
{ SetDisplayMode changed in v2 }
function SetDisplayMode(dwWidth: DWORD; dwHeight: DWORD; dwBPP: DWORD; dwRefreshRate: DWORD; dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
function WaitForVerticalBlank(dwFlags: DWORD; hEvent: THANDLE): HRESULT; virtual; stdcall; abstract;
{ Added in the v2 interface }
function GetAvailableVidMem(lpDDSCaps: PDDSCAPS; lpdwTotal: PDWORD; lpdwFree: PDWORD): HRESULT; virtual; stdcall; abstract;
end;
{-- IDirectDrawPalette -------------------------------------------------------}
IDirectDrawPalette = class(IUnknown)
public
function GetCaps(lpdwCaps: PDWORD): HRESULT; virtual; stdcall; abstract;
function GetEntries(dwFlags: DWORD; dwBase: DWORD; dwNumEntries: DWORD; lpEntries: PPALETTEENTRY): HRESULT; virtual; stdcall; abstract;
function Initialize(lpDD: PDIRECTDRAW; dwFlags: DWORD; lpDDColorTable: PPALETTEENTRY): HRESULT; virtual; stdcall; abstract;
function SetEntries(dwFlags: DWORD; dwStartingEntry: DWORD; dwCount: DWORD; lpEntries: PPALETTEENTRY): HRESULT; virtual; stdcall; abstract;
end;
{-- IDirectDrawClipper -------------------------------------------------------}
IDirectDrawClipper = class(IUnknown)
public
function GetClipList(lpRect: PRECT; lpClipList: PRGNDATA; lpdwSize: PDWORD): HRESULT; virtual; stdcall; abstract;
function GetHWnd(lphWnd: PHWND): HRESULT; virtual; stdcall; abstract;
function Initialize(lpDD: PDIRECTDRAW; dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
function IsClipListChanged(lpbChanged: PBOOL): HRESULT; virtual; stdcall; abstract;
function SetClipList(lpClipList: PRGNDATA; dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
function SetHWnd(dwFlags: DWORD; hWnd: HWND): HRESULT; virtual; stdcall; abstract;
end;
{-- IDirectDrawSurface -------------------------------------------------------}
IDirectDrawSurface = class(IUnknown)
public
function AddAttachedSurface(lpDDSAttachedSurface: PDIRECTDRAWSURFACE): HRESULT; virtual; stdcall; abstract;
function AddOverlayDirtyRect(lpRect: PRECT): HRESULT; virtual; stdcall; abstract;
function Blt(lpDestRect: PRECT; lpDDSrcSurface: PDIRECTDRAWSURFACE; lpSrcRect: PRECT; dwFlags: DWORD; lpDDBltFx: PDDBLTFX): HRESULT; virtual; stdcall; abstract;
function BltBatch(lpDDBltBatch: PDDBLTBATCH; dwCount: DWORD; dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
function BltFast(dwX: DWORD; dwY: DWORD; lpDDSrcSurface: PDIRECTDRAWSURFACE; lpSrcRect: PRECT; dwTrans: DWORD): HRESULT; virtual; stdcall; abstract;
function DeleteAttachedSurface(dwFlags: DWORD; lpDDSAttachedSurface: PDIRECTDRAWSURFACE): HRESULT; virtual; stdcall; abstract;
function EnumAttachedSurfaces(lpContext: PVOID; lpEnumSurfacesCallback: PDDENUMSURFACESCALLBACK): HRESULT; virtual; stdcall; abstract;
function EnumOverlayZOrders(dwFlags: DWORD; lpContext: PVOID; lpfnCallback: PDDENUMSURFACESCALLBACK): HRESULT; virtual; stdcall; abstract;
function Flip(lpDDSurfaceTargetOverride: PDIRECTDRAWSURFACE; dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
function GetAttachedSurface(lpDDSCaps: PDDSCAPS; var lplpDDAttachedSurface: PDIRECTDRAWSURFACE): HRESULT; virtual; stdcall; abstract;
function GetBltStatus(dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
function GetCaps(lpDDSCaps: PDDSCAPS): HRESULT; virtual; stdcall; abstract;
function GetClipper(var lplpDDClipper: PDIRECTDRAWCLIPPER): HRESULT; virtual; stdcall; abstract;
function GetColorKey(dwFlags: DWORD; lpDDColorKey: PDDCOLORKEY): HRESULT; virtual; stdcall; abstract;
function GetDC(lphDC: PHDC): HRESULT; virtual; stdcall; abstract;
function GetFlipStatus(dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
function GetOverlayPosition(lplX: PLONG; lplY: PLONG ): HRESULT; virtual; stdcall; abstract;
function GetPalette(var lplpDDPalette: PDIRECTDRAWPALETTE): HRESULT; virtual; stdcall; abstract;
function GetPixelFormat(lpDDPixelFormat: PDDPIXELFORMAT): HRESULT; virtual; stdcall; abstract;
function GetSurfaceDesc(lpDDSurfaceDesc: PDDSURFACEDESC): HRESULT; virtual; stdcall; abstract;
function Initialize(lpDD: PDIRECTDRAW; lpDDSurfaceDesc: PDDSURFACEDESC): HRESULT; virtual; stdcall; abstract;
function IsLost: HRESULT; virtual; stdcall; abstract;
function Lock(lpDestRect: PRECT; lpDDSurfaceDesc: PDDSURFACEDESC; dwFlags: DWORD; hEvent: THANDLE): HRESULT; virtual; stdcall; abstract;
function ReleaseDC(hDC: HDC): HRESULT; virtual; stdcall; abstract;
function Restore: HRESULT; virtual; stdcall; abstract;
function SetClipper(lpDDClipper: PDIRECTDRAWCLIPPER): HRESULT; virtual; stdcall; abstract;
function SetColorKey(dwFlags: DWORD; lpDDColorKey: PDDCOLORKEY): HRESULT; virtual; stdcall; abstract;
function SetOverlayPosition(lX: LONG; lY: LONG): HRESULT; virtual; stdcall; abstract;
function SetPalette(lpDDPalette: PDIRECTDRAWPALETTE): HRESULT; virtual; stdcall; abstract;
function Unlock(lpSurfaceData: PVOID): HRESULT; virtual; stdcall; abstract;
function UpdateOverlay(lpSrcRect: PRECT; lpDDDestSurface: PDIRECTDRAWSURFACE; lpDestRect: PRECT; dwFlags: DWORD; lpDDOverlayFx: PDDOVERLAYFX): HRESULT; virtual; stdcall; abstract;
function UpdateOverlayDisplay(dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
function UpdateOverlayZOrder(dwFlags: DWORD; lpDDSReference: PDIRECTDRAWSURFACE): HRESULT; virtual; stdcall; abstract;
end;
{-- IDirectDrawSurface2 and related interfaces -------------------------------}
PDirectDrawSurface2 = ^IDirectDrawSurface2;
IDirectDrawSurface2 = class(IUnknown)
function AddAttachedSurface(lpDDSAttachedSurface: PDIRECTDRAWSURFACE2): HRESULT; virtual; stdcall; abstract;
function AddOverlayDirtyRect(lpRect: PRECT): HRESULT; virtual; stdcall; abstract;
function Blt(lpDestRect: PRECT; lpDDSrcSurface: PDIRECTDRAWSURFACE2; lpSrcRect: PRECT; dwFlags: DWORD; lpDDBltFx: PDDBLTFX): HRESULT; virtual; stdcall; abstract;
function BltBatch(lpDDBltBatch: PDDBLTBATCH; dwCount: DWORD; dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
function BltFast(dwX: DWORD; dwY: DWORD; lpDDSrcSurface: PDIRECTDRAWSURFACE2; lpSrcRect: PRECT; dwTrans: DWORD): HRESULT; virtual; stdcall; abstract;
function DeleteAttachedSurface(dwFlags: DWORD; lpDDSAttachedSurface: PDIRECTDRAWSURFACE2): HRESULT; virtual; stdcall; abstract;
function EnumAttachedSurfaces(lpContext: PVOID; lpEnumSurfacesCallback: PDDENUMSURFACESCALLBACK): HRESULT; virtual; stdcall; abstract;
function EnumOverlayZOrders(dwFlags: DWORD; lpContext: PVOID; lpfnCallback: PDDENUMSURFACESCALLBACK): HRESULT; virtual; stdcall; abstract;
function Flip(lpDDSurfaceTargetOverride: PDIRECTDRAWSURFACE2; dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
function GetAttachedSurface(lpDDSCaps: PDDSCAPS; var lplpDDAttachedSurface: PDIRECTDRAWSURFACE2): HRESULT; virtual; stdcall; abstract;
function GetBltStatus(dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
function GetCaps(lpDDSCaps: PDDSCAPS): HRESULT; virtual; stdcall; abstract;
function GetClipper(var lplpDDClipper: PDIRECTDRAWCLIPPER): HRESULT; virtual; stdcall; abstract;
function GetColorKey(dwFlags: DWORD; lpDDColorKey: PDDCOLORKEY): HRESULT; virtual; stdcall; abstract;
function GetDC(lphDC: PHDC): HRESULT; virtual; stdcall; abstract;
function GetFlipStatus(dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
function GetOverlayPosition(lplX: PLONG; lplY: PLONG): HRESULT; virtual; stdcall; abstract;
function GetPalette(var lplpDDPalette: PDIRECTDRAWPALETTE): HRESULT; virtual; stdcall; abstract;
function GetPixelFormat(lpDDPixelFormat: PDDPIXELFORMAT): HRESULT; virtual; stdcall; abstract;
function GetSurfaceDesc(lpDDSurfaceDesc: PDDSURFACEDESC): HRESULT; virtual; stdcall; abstract;
function Initialize(lpDD: PDIRECTDRAW; lpDDSurfaceDesc: PDDSURFACEDESC): HRESULT; virtual; stdcall; abstract;
function IsLost: HRESULT; virtual; stdcall; abstract;
function Lock(lpDestRect: PRECT; lpDDSurfaceDesc: PDDSURFACEDESC; dwFlags: DWORD; hEvent: THANDLE): HRESULT; virtual; stdcall; abstract;
function ReleaseDC(hDC: HDC): HRESULT; virtual; stdcall; abstract;
function Restore: HRESULT; virtual; stdcall; abstract;
function SetClipper(lpDDClipper: PDIRECTDRAWCLIPPER): HRESULT; virtual; stdcall; abstract;
function SetColorKey(dwFlags: DWORD; lpDDColorKey: PDDCOLORKEY): HRESULT; virtual; stdcall; abstract;
function SetOverlayPosition(lX: LONG; lY: LONG): HRESULT; virtual; stdcall; abstract;
function SetPalette(lpDDPalette: PDIRECTDRAWPALETTE): HRESULT; virtual; stdcall; abstract;
function Unlock(lpSurfaceData: PVOID): HRESULT; virtual; stdcall; abstract;
function UpdateOverlay(lpSrcRect: PRECT; lpDDDestSurface: PDIRECTDRAWSURFACE2; lpDestRect: PRECT; dwFlags: DWORD; lpDDOverlayFx: PDDOVERLAYFX): HRESULT; virtual; stdcall; abstract;
function UpdateOverlayDisplay(dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
function UpdateOverlayZOrder(dwFlags: DWORD; lpDDSReference: PDIRECTDRAWSURFACE2): HRESULT; virtual; stdcall; abstract;
{ Added in the v2 interface }
function GetDDInterface(var lplpDD: PVOID): HRESULT; virtual; stdcall; abstract;
function PageLock(dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
function PageUnlock(dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
end;
// #ifdef WINNT
// //This is the user-mode entry stub to the kernel mode procedure.
// extern HRESULT NtDirectDrawCreate( GUID FAR *lpGUID, HANDLE *lplpDD, IUnknown FAR *pUnkOuter );
// #endif
{-- Caps flags ---------------------------------------------------------------}
const
// ddsCaps field is valid.
DDSD_CAPS = $00000001; // default
// dwHeight field is valid.
DDSD_HEIGHT = $00000002;
// dwWidth field is valid.
DDSD_WIDTH = $00000004;
// lPitch is valid.
DDSD_PITCH = $00000008;
// dwBackBufferCount is valid.
DDSD_BACKBUFFERCOUNT = $00000020;
// dwZBufferBitDepth is valid.
DDSD_ZBUFFERBITDEPTH = $00000040;
// dwAlphaBitDepth is valid.
DDSD_ALPHABITDEPTH = $00000080;
// ddpfPixelFormat is valid.
DDSD_PIXELFORMAT = $00001000;
// ddckCKDestOverlay is valid.
DDSD_CKDESTOVERLAY = $00002000;
// ddckCKDestBlt is valid.
DDSD_CKDESTBLT = $00004000;
// ddckCKSrcOverlay is valid.
DDSD_CKSRCOVERLAY = $00008000;
// ddckCKSrcBlt is valid.
DDSD_CKSRCBLT = $00010000;
// dwMipMapCount is valid.
DDSD_MIPMAPCOUNT = $00020000;
// dwRefreshRate is valid
DDSD_REFRESHRATE = $00040000;
// All input fields are valid.
DDSD_ALL = $0007F9EE;
{== Capability flags =========================================================}
// These flags are used to describe the capabilities of a given Surface.
// All flags are bit flags.
const
//
// This bit currently has no meaning.
//
DDSCAPS_3D = $00000001;
//
// Indicates that this surface contains alpha information. The pixel
// format must be interrogated to determine whether this surface
// contains only alpha information or alpha information interlaced
// with pixel color data (e.g. RGBA or YUVA).
//
DDSCAPS_ALPHA = $00000002;
//
// Indicates that this surface is a backbuffer. It is generally
// set by CreateSurface when the DDSCAPS_FLIP capability bit is set.
// It indicates that this surface is THE back buffer of a surface
// flipping structure. DirectDraw supports N surfaces in a
// surface flipping structure. Only the surface that immediately
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -