天天看點

Ada計算機圖形DirectX之DXGIType

----------------------------------------
-- File : DXGIType.ads                --
-- Translator:Dongfeng.Gu,2018/10/21  --
-- Mail: [email protected]                --
-- Progress:100%                      --
----------------------------------------

with win32;                    use win32;
with win32.objbase;            use win32.objbase;
with win32.winerror;

with DXGIFormat;               use DXGIFormat;

package DXGIType is

   function Shift_Left(A:dword;B:Natural) return dword with import,convention=>Intrinsic;
   function Lsh(A:dword;B:Natural) return dword is (Shift_Left(A,B));
   
   function Shift_Right(A:dword;B:Natural) return dword with import,convention=>Intrinsic;
   function Rsh(A:dword;B:Natural) return dword is (Shift_Right(A,B));
   
   type float_Array is array(natural range<>) of float;

   FACDXGI : constant := 16#87a#;

   function MAKE_DXGI_HRESULT(code:WORD) return HRESULT is (win32.winerror.MAKE_HRESULT(1,FACDXGI,code));
   function MAKE_DXGI_STATUS(code:WORD)  return HRESULT is (win32.winerror.MAKE_HRESULT(0,FACDXGI,code));

   DXGI_STATUS_OCCLUDED : constant HRESULT:= MAKE_DXGI_STATUS(1);

   DXGI_STATUS_CLIPPED : constant HRESULT:= MAKE_DXGI_STATUS(2);

   DXGI_STATUS_NO_REDIRECTION : constant HRESULT:= MAKE_DXGI_STATUS(4);

   DXGI_STATUS_NO_DESKTOP_ACCESS : constant HRESULT:= MAKE_DXGI_STATUS(5);

   DXGI_STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE : constant HRESULT:= MAKE_DXGI_STATUS(6);

   DXGI_STATUS_MODE_CHANGED : constant HRESULT:= MAKE_DXGI_STATUS(7);

   DXGI_STATUS_MODE_CHANGE_IN_PROGRESS : constant HRESULT:= MAKE_DXGI_STATUS(8);

   DXGI_ERROR_INVALID_CALL : constant HRESULT:= MAKE_DXGI_HRESULT(1);

   DXGI_ERROR_NOT_FOUND : constant HRESULT:= MAKE_DXGI_HRESULT(2);

   DXGI_ERROR_MORE_DATA : constant HRESULT:= MAKE_DXGI_HRESULT(3);

   DXGI_ERROR_UNSUPPORTED : constant HRESULT:= MAKE_DXGI_HRESULT(4);

   DXGI_ERROR_DEVICE_REMOVED : constant HRESULT:= MAKE_DXGI_HRESULT(5);

   DXGI_ERROR_DEVICE_HUNG : constant HRESULT:= MAKE_DXGI_HRESULT(6);

   DXGI_ERROR_DEVICE_RESET : constant HRESULT:= MAKE_DXGI_HRESULT(7);

   DXGI_ERROR_WAS_STILL_DRAWING : constant HRESULT:= MAKE_DXGI_HRESULT(10);

   DXGI_ERROR_FRAME_STATISTICS_DISJOINT : constant HRESULT:= MAKE_DXGI_HRESULT(11);

   DXGI_ERROR_GRAPHICS_VIDPN_SOURCE_IN_USE : constant HRESULT:= MAKE_DXGI_HRESULT(12);

   DXGI_ERROR_DRIVER_INTERNAL_ERROR : constant HRESULT:= MAKE_DXGI_HRESULT(32);

   DXGI_ERROR_NONEXCLUSIVE : constant HRESULT:= MAKE_DXGI_HRESULT(33);

   DXGI_ERROR_NOT_CURRENTLY_AVAILABLE : constant HRESULT:= MAKE_DXGI_HRESULT(34);

   DXGI_ERROR_REMOTE_CLIENT_DISCONNECTED : constant HRESULT:= MAKE_DXGI_HRESULT(35);

   DXGI_ERROR_REMOTE_OUTOFMEMORY : constant HRESULT:= MAKE_DXGI_HRESULT(36);

   DXGI_CPU_ACCESS_NONE : constant := ( 0 );

   DXGI_CPU_ACCESS_DYNAMIC : constant := ( 1 );

   DXGI_CPU_ACCESS_READ_WRITE : constant := ( 2 );

   DXGI_CPU_ACCESS_SCRATCH : constant := ( 3 );

   DXGI_CPU_ACCESS_FIELD : constant := 15;

   DXGI_USAGE_SHADER_INPUT : constant dword:= Lsh(1, (0 + 4) );

   DXGI_USAGE_RENDER_TARGET_OUTPUT : constant dword:= Lsh(1, (1 + 4) );

   DXGI_USAGE_BACK_BUFFER : constant dword:= Lsh(1, (2 + 4) );

   DXGI_USAGE_SHARED : constant dword:= Lsh(1, (3 + 4) );

   DXGI_USAGE_READ_ONLY : constant dword:= Lsh(1, (4 + 4) );

   DXGI_USAGE_DISCARD_ON_PRESENT : constant dword:= Lsh(1, (5 + 4) );

   DXGI_USAGE_UNORDERED_ACCESS : constant dword:= Lsh(1, (6 + 4) );

   type DXGI_RGB is record
      Red:float;
      Green:float;
      Blue:float;
   end record;

   type LPDXGI_RGB is access all DXGI_RGB;

   type DXGI_RGB_ARRAY is array(Natural range<>) of DXGI_RGB;

   type DXGI_GAMMA_CONTROL is record
      Scale:DXGI_RGB;
      Offset:DXGI_RGB;
      GammaCurve:DXGI_RGB_Array(0..1024);
   end record;

   type LPDXGI_GAMMA_CONTROL is access all DXGI_GAMMA_CONTROL;
   type LPCDXGI_GAMMA_CONTROL is access constant DXGI_GAMMA_CONTROL;

   type DXGI_GAMMA_CONTROL_CAPABILITIES is record
      ScaleAndOffsetSupported:BOOL;
      MaxConvertedValue:float;
      MinConvertedValue:float;
      NumGammaControlPoints:UINT;
      ControlPointPositions:float_Array(0..1024);
   end record;

   type LPDXGI_GAMMA_CONTROL_CAPABILITIES is access all DXGI_GAMMA_CONTROL_CAPABILITIES;

   type DXGI_RATIONAL is record
      Numerator:UINT;
      Denominator:UINT;
   end record;

   type LPDXGI_RATIONAL is access all DXGI_RATIONAL;

   type DXGI_MODE_SCANLINE_ORDER is (DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED,
                                     DXGI_MODE_SCANLINE_ORDER_PROGRESSIVE,
                                     DXGI_MODE_SCANLINE_ORDER_UPPER_FIELD_FIRST,
                                     DXGI_MODE_SCANLINE_ORDER_LOWER_FIELD_FIRST);
   for DXGI_MODE_SCANLINE_ORDER use (DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED=>0,
                                     DXGI_MODE_SCANLINE_ORDER_PROGRESSIVE=>1,
                                     DXGI_MODE_SCANLINE_ORDER_UPPER_FIELD_FIRST=>2,
                                     DXGI_MODE_SCANLINE_ORDER_LOWER_FIELD_FIRST=>3);

   type LPDXGI_MODE_SCANLINE_ORDER is access DXGI_MODE_SCANLINE_ORDER;

   type DXGI_MODE_SCALING is (DXGI_MODE_SCALING_UNSPECIFIED,
                              DXGI_MODE_SCALING_CENTERED,
                              DXGI_MODE_SCALING_STRETCHED);
   for DXGI_MODE_SCALING use (DXGI_MODE_SCALING_UNSPECIFIED=>0,
                              DXGI_MODE_SCALING_CENTERED=>1,
                              DXGI_MODE_SCALING_STRETCHED=>2);

   type LPDXGI_MODE_SCALING is access DXGI_MODE_SCALING;

   type DXGI_MODE_ROTATION is (DXGI_MODE_ROTATION_UNSPECIFIED,
                               DXGI_MODE_ROTATION_IDENTITY,
                               DXGI_MODE_ROTATION_ROTATE90,
                               DXGI_MODE_ROTATION_ROTATE180,
                               DXGI_MODE_ROTATION_ROTATE270);
   for DXGI_MODE_ROTATION use (DXGI_MODE_ROTATION_UNSPECIFIED=>0,
                               DXGI_MODE_ROTATION_IDENTITY=>1,
                               DXGI_MODE_ROTATION_ROTATE90=>2,
                               DXGI_MODE_ROTATION_ROTATE180=>3,
                               DXGI_MODE_ROTATION_ROTATE270=>4);

   type LPDXGI_MODE_ROTATION is access DXGI_MODE_ROTATION;

   type DXGI_MODE_DESC is record
      Width:UINT;
      Height:UINT;
      RefreshRate:DXGI_RATIONAL;
      Format:DXGI_FORMAT;
      ScanlineOrdering:DXGI_MODE_SCANLINE_ORDER;
      Scaling:DXGI_MODE_SCALING;
   end record;

   type LPDXGI_MODE_DESC is access all DXGI_MODE_DESC;
   type LPCDXGI_MODE_DESC is access constant DXGI_MODE_DESC;

   type DXGI_SAMPLE_DESC is record
      Count:UINT;
      Quality:UINT;
   end record;

   type LPDXGI_SAMPLE_DESC is access all DXGI_SAMPLE_DESC;






end DXGIType;
           

繼續閱讀