⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 minidx.pas

📁 N年前有个法国小组用Delphi写了一个2D网游(AD&D类型)
💻 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 + -