📄 minidx.pas
字号:
unit MiniDX;
{
projet ADK-ISO (c)2002-2003 Paul TOTH <tothpaul@free.fr>
http://www.web-synergy.net/naug-land/
}
interface
uses
Windows;
const
IID_IDirectDraw2 : TGUID = '{B3A6F3E0-2B43-11CF-A2DE-00AA00B93356}';
IID_IDirect3D2 : TGUID = '{6AAE1EC1-662A-11D0-889D-00AA00BBB76A}';
IID_IDirect3DHALDevice: TGUID = '{84E63DE0-46AA-11CF-816F-0000C020156E}';
DDSCL_FULLSCREEN = $00000001;
DDSCL_ALLOWREBOOT = $00000002;
DDSCL_NOWINDOWCHANGES = $00000004;
DDSCL_NORMAL = $00000008;
DDSCL_EXCLUSIVE = $00000010;
DDSCL_SETFOCUSWINDOW = $00000080;
DDSCL_SETDEVICEWINDOW = $00000100;
DDSD_CAPS = $00000001; // default
DDSD_HEIGHT = $00000002;
DDSD_WIDTH = $00000004;
DDSD_BACKBUFFERCOUNT = $00000020;
DDSD_PIXELFORMAT = $00001000;
DDSD_TEXTURESTAGE = $00100000;
DDSCAPS_BACKBUFFER = $00000004;
DDSCAPS_COMPLEX = $00000008;
DDSCAPS_FLIP = $00000010;
DDSCAPS_OFFSCREENPLAIN = $00000040;
DDSCAPS_PRIMARYSURFACE = $00000200;
DDSCAPS_TEXTURE = $00001000;
DDSCAPS_3DDEVICE = $00002000;
DDSCAPS2_TEXTUREMANAGE = $00000010;
DDPF_ALPHAPIXELS = $00000001;
DDPF_RGB = $00000040;
DDLOCK_SURFACEMEMORYPTR = $00000000; // default
DDLOCK_WAIT = $00000001;
DDBLT_COLORFILL = $00000400;
DDBLT_WAIT = $01000000;
DDFLIP_WAIT = $00000001;
D3DPT_LINESTRIP = 3;
D3DPT_TRIANGLELIST = 4;
D3DPT_TRIANGLESTRIP = 5;
D3DPT_TRIANGLEFAN = 6;
D3DVT_TLVERTEX = 3;
D3DDP_DONOTCLIP = $00000004;
D3DDP_DONOTUPDATEEXTENTS = $00000008;
D3DDP_DONOTLIGHT = $00000010;
D3DRENDERSTATE_TEXTUREHANDLE = 1;
D3DRENDERSTATE_BLENDENABLE = 27;
D3DRENDERSTATE_SPECULARENABLE = 29;
D3DRENDERSTATE_SRCBLEND = 19;
D3DRENDERSTATE_DESTBLEND = 20;
D3DRENDERSTATE_CULLMODE = 22;
D3DRENDERSTATE_LIGHTING = 137;
D3DCULL_NONE = 1;
D3DCULL_CW = 2;
D3DCULL_CCW = 3;
D3DBLEND_ZERO = 1;
D3DBLEND_ONE = 2;
D3DBLEND_SRCCOLOR = 3;
D3DBLEND_INVSRCCOLOR = 4;
D3DBLEND_SRCALPHA = 5;
D3DBLEND_INVSRCALPHA = 6;
D3DBLEND_DESTALPHA = 7;
D3DBLEND_INVDESTALPHA = 8;
D3DBLEND_DESTCOLOR = 9;
D3DBLEND_INVDESTCOLOR = 10;
D3DBLEND_SRCALPHASAT = 11;
D3DBLEND_BOTHSRCALPHA = 12;
D3DBLEND_BOTHINVSRCALPHA = 13;
type
TDDColorKey = record
dwColorSpaceLowValue : DWORD; // low boundary of color space that is to be treated as Color Key, inclusive
dwColorSpaceHighValue: DWORD; // high boundary of color space that is to be treated as Color Key, inclusive
end;
TDDPixelFormat = record
dwSize: DWORD; // size of structure
dwFlags: DWORD; // pixel format flags
dwFourCC: DWORD; // (FOURCC code)
dwRGBBitCount: DWORD; // how many bits per pixel
dwRBitMask: DWORD; // mask for red bit
dwGBitMask: DWORD; // mask for green bits
dwBBitMask: DWORD; // mask for blue bits
dwRGBAlphaBitMask: DWORD; // mask for alpha channel
end;
TDDSCaps = record
dwCaps: DWORD; // capabilities of surface wanted
end;
TDDSurfaceDesc = record
dwSize: DWORD; // size of the TDDSurfaceDesc structure
dwFlags: DWORD; // determines what fields are valid
dwHeight: DWORD; // height of surface to be created
dwWidth: DWORD; // width of input surface
lPitch: Longint;
dwBackBufferCount: DWORD; // number of back buffers requested
dwMipMapCount: DWORD; // number of mip-map levels requested
dwAlphaBitDepth: DWORD; // depth of alpha buffer requested
dwReserved: DWORD; // reserved
lpSurface: Pointer; // 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;
TDDBltFX = record
dwSize: DWORD; // size of structure
dwDDFX: DWORD; // FX operations
dwROP: DWORD; // Win32 raster operations
dwDDROP: DWORD; // Raster operations new for DirectDraw
dwRotationAngle: DWORD; // Rotation angle for blt
dwZBufferOpCode: DWORD; // ZBuffer compares
dwZBufferLow: DWORD; // Low limit of Z buffer
dwZBufferHigh: DWORD; // High limit of Z buffer
dwZBufferBaseDest: DWORD; // Destination base value
dwZDestConstBitDepth: DWORD; // Bit depth used to specify Z constant for destination
dwZDestConst: DWORD; // Constant to use as Z buffer for dest
dwZSrcConstBitDepth: DWORD; // Bit depth used to specify Z constant for source
dwZSrcConst: DWORD; // Constant to use as Z buffer for src
dwAlphaEdgeBlendBitDepth: DWORD; // Bit depth used to specify constant for alpha edge blend
dwAlphaEdgeBlend: DWORD; // Alpha for edge blending
dwReserved: DWORD;
dwAlphaDestConstBitDepth: DWORD; // Bit depth used to specify alpha constant for destination
dwAlphaDestConst: DWORD; // Constant to use as Alpha Channel
dwAlphaSrcConstBitDepth: DWORD; // Bit depth used to specify alpha constant for source
dwAlphaSrcConst: DWORD; // Constant to use as Alpha Channel
dwFillColor: DWORD; // color in RGB or Palettized
ddckDestColorkey: TDDColorKey; // DestColorkey override
ddckSrcColorkey: TDDColorKey; // SrcColorkey override
end;
type
IDirectDrawSurface = interface;
IDirectDrawClipper = interface(IUnknown)
['{6C14DB85-A733-11CE-A521-0020AF0BE560}']
// IDirectDrawClipper methods
procedure __GetClipList;
procedure __GetHWnd;
procedure __Initialize;
procedure __IsClipListChanged;
function SetClipList(lpClipList: PRgnData; dwFlags: DWORD): HResult; stdcall;
function SetHWnd(dwFlags: DWORD; hWnd: HWND): HResult; stdcall;
end;
IDirectDrawSurface = interface(IUnknown)
['{6C14DB81-A733-11CE-A521-0020AF0BE560}']
// IDirectDrawSurface methods
procedure __AddAttachedSurface;
procedure __AddOverlayDirtyRect;
function Blt(const lpDestRect: TRect; lpDDSrcSurface: IDirectDrawSurface; const lpSrcRect: TRect; dwFlags: DWORD; const lpDDBltFx: TDDBltFX): HResult; stdcall;
procedure __BltBatch;
procedure __BltFast;
procedure __DeleteAttachedSurface;
procedure __EnumAttachedSurfaces;
procedure __EnumOverlayZOrders;
function Flip(lpDDSurfaceTargetOverride: IDirectDrawSurface; dwFlags: DWORD): HResult; stdcall;
function GetAttachedSurface(var lpDDSCaps: TDDSCaps; out lplpDDAttachedSurface: IDirectDrawSurface): HResult; stdcall;
procedure __GetBltStatus;
procedure __GetCaps;
procedure __GetClipper;
procedure __GetColorKey;
function GetDC(var lphDC: HDC): HResult; stdcall;
procedure __GetFlipStatus;
procedure __GetOverlayPosition;
procedure __GetPalette;
procedure __GetPixelFormat;
procedure __GetSurfaceDesc;
procedure __Initialize;
function IsLost: HResult; stdcall;
function Lock(lpDestRect: PRect; var lpDDSurfaceDesc: TDDSurfaceDesc; dwFlags: DWORD; hEvent: THandle): HResult; stdcall;
function ReleaseDC(hDC: HDC): HResult; stdcall;
function Restore: HResult; stdcall;
function SetClipper(lpDDClipper: IDirectDrawClipper): HResult; stdcall;
procedure __SetColorKey;
procedure __SetOverlayPosition;
procedure __SetPalette;
function Unlock(lpSurfaceData: Pointer): HResult; stdcall;
procedure __UpdateOverlay;
procedure __UpdateOverlayDisplay;
end;
IDirectDraw2 = interface(IUnknown)
['{B3A6F3E0-2B43-11CF-A2DE-00AA00B93356}']
// IDirectDraw methods
procedure __Compact;
function CreateClipper(dwFlags: DWORD; out lplpDDClipper: IDirectDrawClipper; pUnkOuter: IUnknown): HResult; stdcall;
procedure __CreatePalette;
function CreateSurface(const lpDDSurfaceDesc: TDDSurfaceDesc; out lplpDDSurface: IDirectDrawSurface; pUnkOuter: IUnknown): HResult; stdcall;
procedure __DuplicateSurface;
procedure __EnumDisplayModes;
procedure __EnumSurfaces;
procedure __FlipToGDISurface;
procedure __GetCaps;
procedure __GetDisplayMode;
procedure __GetFourCCCodes;
procedure __GetGDISurface;
procedure __GetMonitorFrequency;
procedure __GetScanLine;
procedure __GetVerticalBlankStatus;
procedure __Initialize;
function RestoreDisplayMode: HResult; stdcall;
function SetCooperativeLevel(hWnd: HWND; dwFlags: DWORD): HResult; stdcall;
function SetDisplayMode(dwWidth, dwHeight, dwBPP, dwRefreshRate: DWORD; dwFlags: DWORD): HResult; stdcall;
procedure __WaitForVerticalBlank;
// IDirectDraw2 methods
procedure __GetAvailableVidMem;
end;
TD3DTLVertex = record
sx: single; // Screen coordinates
sy: single;
sz: single;
rhw: single; // Reciprocal of homogeneous w
color: cardinal; // Vertex color
specular: cardinal; // Specular component of vertex
tu: single; // Texture coordinates
tv: single;
end;
TD3DViewport = record
dwSize: DWORD;
dwX: DWORD;
dwY: DWORD; // Top left
dwWidth: DWORD;
dwHeight: DWORD; // Dimensions
dvScaleX: single; // Scale homogeneous to screen
dvScaleY: single; // Scale homogeneous to screen
dvMaxX: single; // Min/max homogeneous x coord
dvMaxY: single; // Min/max homogeneous y coord
dvMinZ: single;
dvMaxZ: single; // Min/max homogeneous z coord
end;
TD3DViewport2 = record
dwSize: DWORD;
dwX: DWORD;
dwY: DWORD; // Top left
dwWidth: DWORD;
dwHeight: DWORD; // Dimensions
dvClipX: single; // Top left of clip volume
dvClipY: single;
dvClipWidth: single; // Clip Volume Dimensions
dvClipHeight: single;
dvMinZ: single;
dvMaxZ: single; // Min/max homogeneous z coord
end;
IDirect3DViewport = interface(IUnknown)
['{4417C146-33AD-11CF-816F-0000C020156E}']
// IDirect3DViewport methods
procedure __Initialize;
procedure __GetViewport;
function SetViewport(const lpData: TD3DViewport): HResult; stdcall;
procedure __TransformVertices;
procedure __LightElements;
procedure __SetBackground;
procedure __GetBackground;
procedure __SetBackgroundDepth;
procedure __GetBackgroundDepth;
procedure __Clear;
procedure __AddLight;
procedure __DeleteLight;
procedure __NextLight;
end;
IDirect3DViewport2 = interface(IDirect3DViewport)
['{93281500-8CF8-11D0-89AB-00A0C9054129}']
// IDirect3DViewport2 methods
procedure __GetViewport2;
function SetViewport2(const lpData: TD3DViewport2): HResult; stdcall;
end;
IDirect3DDevice2 = interface(IUnknown)
['{93281501-8CF8-11D0-89AB-00A0C9054129}']
// IDirect3DDevice2 methods
procedure __GetCaps;
procedure __SwapTextureHandles;
procedure __GetStats;
function AddViewport(lpDirect3DViewport: IDirect3DViewport2): HResult; stdcall;
procedure __DeleteViewport;
procedure __NextViewport;
procedure __EnumTextureFormats;
function BeginScene: HResult; stdcall;
function EndScene: HResult; stdcall;
procedure __GetDirect3D;
function SetCurrentViewport(lpd3dViewport2: IDirect3DViewport2): HResult; stdcall;
procedure __GetCurrentViewport;
procedure __SetRenderTarget;
procedure __GetRenderTarget;
procedure __Begin;
procedure __BeginIndexed;
procedure __Vertex;
procedure __Index;
procedure __End;
procedure __GetRenderState;
function SetRenderState(dwRenderStateType, dwRenderState: cardinal): HResult; stdcall;
procedure __GetLightState;
function SetLightState(dwLightStateType, dwLightState: DWORD): HResult; stdcall;
procedure __SetTransform;
procedure __GetTransform;
procedure __MultiplyTransform;
function DrawPrimitive(dptPrimitiveType,dvtVertexType: cardinal; const lpvVertices; dwVertexCount, dwFlags: cardinal): HResult; stdcall;
procedure __DrawIndexedPrimitive;
procedure __SetClipStatus;
procedure __GetClipStatus;
end;
IDirect3D2 = interface(IUnknown)
['{6AAE1EC1-662A-11D0-889D-00AA00BBB76A}']
// IDirect3D methods
procedure __EnumDevices;
procedure __CreateLight;
procedure __CreateMaterial;
function CreateViewport(out lplpD3DViewport: IDirect3DViewport2; pUnkOuter: IUnknown ): HResult; stdcall;
procedure __FindDevice;
// IDirect3D2 methods
function CreateDevice(const rclsid: TGUID; lpDDS: IDirectDrawSurface; out lplpD3DDevice2: IDirect3DDevice2): HResult; stdcall;
end;
function DirectDrawCreate(lpGUID: PGUID; out lplpDD: IUnknown; pUnkOuter: IUnknown): HResult; stdcall; external 'DDraw.dll';
implementation
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -