MMD3DTyp.pas
上传用户:hylc_2004
上传日期:2014-01-23
资源大小:46800k
文件大小:42k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. {========================================================================}
  2. {=                (c) 1995-98 SwiftSoft Ronald Dittrich                 =}
  3. {========================================================================}
  4. {=                          All Rights Reserved                         =}
  5. {========================================================================}
  6. {=  D 01099 Dresden             = Tel.: +0351-8012255                   =}
  7. {=  Loewenstr.7a                = info@swiftsoft.de                     =}
  8. {========================================================================}
  9. {=  Actual versions on http://www.swiftsoft.de/mmtools.html             =}
  10. {========================================================================}
  11. {=  This code is for reference purposes only and may not be copied or   =}
  12. {=  distributed in any format electronic or otherwise except one copy   =}
  13. {=  for backup purposes.                                                =}
  14. {=                                                                      =}
  15. {=  No Delphi Component Kit or Component individually or in a collection=}
  16. {=  subclassed or otherwise from the code in this unit, or associated   =}
  17. {=  .pas, .dfm, .dcu, .asm or .obj files may be sold or distributed     =}
  18. {=  without express permission from SwiftSoft.                          =}
  19. {=                                                                      =}
  20. {=  For more licence informations please refer to the associated        =}
  21. {=  HelpFile.                                                           =}
  22. {========================================================================}
  23. {=  $Date: 20.01.1998 - 18:00:00 $                                      =}
  24. {========================================================================}
  25. {=  Aufgabe: Direct3D types Unit                                        =}
  26. {========================================================================}
  27. {=  This code is for reference purposes only and may not be copied or   =}
  28. {=  distributed in any format electronic or otherwise except one copy   =}
  29. {=  for backup purposes.                                                =}
  30. {=                                                                      =}
  31. {=  No Delphi Component Kit or Component individually or in a collection=}
  32. {=  subclassed or otherwise from the code in this unit, or associated   =}
  33. {=  .pas, .dfm, .dcu, .asm or .obj files may be sold or distributed     =}
  34. {=  without express permission from SwiftSoft.                          =}
  35. {=                                                                      =}
  36. {=  For more licence informations please refer to the associated        =}
  37. {=  HelpFile.                                                           =}
  38. {========================================================================}
  39. unit MMD3DTyp;
  40. {$I COMPILER.INC}
  41. interface
  42. uses
  43.     Windows,
  44.     MMDDraw;
  45. type
  46.     FLOAT       = Single;
  47.     LONG        = LongInt;
  48.     PVOID       = Pointer;
  49.     D3DENUM     = DWORD;
  50. {-- D3DVALUE is the fundamental Direct3D fractional data type ----------------}
  51. type
  52.     PD3DVALUE   = ^D3DVALUE;
  53.     D3DVALUE    = FLOAT;
  54. function    D3DVALP(val: Extended; prec: Integer): D3DVALUE;
  55. function    D3DVAL(val: Extended): D3DVALUE;
  56. function    D3DDivide(a, b: D3DVALUE): D3DVALUE;
  57. function    D3DMultiply(a, b: D3DVALUE): D3DVALUE;
  58. type
  59.     D3DFIXED    = LONG;
  60.     PD3DCOLOR   = ^D3DCOLOR;
  61.     D3DCOLOR    = DWORD;
  62. //
  63. // Format of CI colors is
  64. //  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  65. //  |    alpha      |         color index           |   fraction    |
  66. //  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  67. //
  68. function    CI_GETALPHA(ci: D3DCOLOR): Byte;
  69. function    CI_GETINDEX(ci: D3DCOLOR): Word;
  70. function    CI_GETFRACTION(ci: D3DCOLOR): Byte;
  71. function    CI_ROUNDINDEX(ci: D3DCOLOR): Word;
  72. function    CI_MASKALPHA(ci: D3DCOLOR): DWord;
  73. function    CI_MAKE(a: Byte; i: Word; f: Byte): D3DCOLOR;
  74. //
  75. // Format of RGBA colors is
  76. //  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  77. //  |    alpha      |      red      |     green     |     blue      |
  78. //  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  79. //
  80. function    RGBA_GETALPHA(rgb: D3DCOLOR): Byte;
  81. function    RGBA_GETRED(rgb: D3DCOLOR): Byte;
  82. function    RGBA_GETGREEN(rgb: D3DCOLOR): Byte;
  83. function    RGBA_GETBLUE(rgb: D3DCOLOR): Byte;
  84. function    RGBA_MAKE(r, g, b, a: Byte): D3DCOLOR;
  85. //
  86. // D3DRGB and D3DRGBA may be used as initialisers for D3DCOLORs
  87. // The float values must be in the range 0..1
  88. //
  89. function    D3DRGB(r, g, b: D3DVALUE): D3DCOLOR;
  90. function    D3DRGBA(r, g, b, a: D3DVALUE): D3DCOLOR;
  91. //
  92. // Format of RGB colors is
  93. //  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  94. //  |    ignored    |      red      |     green     |     blue      |
  95. //  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  96. //
  97. function    RGB_GETRED(rgb: D3DCOLOR): Byte;
  98. function    RGB_GETGREEN(rgb: D3DCOLOR): Byte;
  99. function    RGB_GETBLUE(rgb: D3DCOLOR): Byte;
  100. function    RGBA_SETALPHA(rgba: D3DCOLOR; x: Byte): D3DCOLOR;
  101. function    RGB_MAKE(r, g, b: Byte): D3DCOLOR;
  102. function    RGBA_TORGB(rgba: D3DCOLOR): D3DCOLOR;
  103. function    RGB_TORGBA(rgb: D3DCOLOR): D3DCOLOR;
  104. {== Flags for Enumerate functions ============================================}
  105. const
  106. {-- Stop the enumeration -----------------------------------------------------}
  107.     D3DENUMRET_CANCEL               = DDENUMRET_CANCEL;
  108. {-- Continue the enumeration -------------------------------------------------}
  109.     D3DENUMRET_OK                   = DDENUMRET_OK;
  110. type
  111.     TD3DVALIDATECALLBACK            = function(lpUserArg: PVOID; dwOffset: DWORD): HRESULT; stdcall;
  112.     TD3DENUMTEXTUREFORMATSCALLBACK  = function(lpDdsd: PDDSURFACEDESC; lpContext: PVOID): HRESULT; stdcall;
  113.     PD3DMATERIALHANDLE              = ^D3DMATERIALHANDLE;
  114.     D3DMATERIALHANDLE               = DWORD;
  115.     PD3DTEXTUREHANDLE               = ^D3DTEXTUREHANDLE;
  116.     D3DTEXTUREHANDLE                = DWORD;
  117.     PD3DMATRIXHANDLE                = ^D3DMATRIXHANDLE;
  118.     D3DMATRIXHANDLE                 = DWORD;
  119.     TD3DCOLORVALUE                  = record
  120.         case Byte of
  121.             0: (r, g, b, a          : D3DVALUE);
  122.             1: (dvR, dvG, dvB, dvA  : D3DVALUE);
  123.     end;
  124.     PD3DRECT                        = ^TD3DRECT;
  125.     TD3DRECT                        = record
  126.         case Byte of
  127.             0: (x1, y1, x2, y2: LONG);
  128.             1: (lX1, lY1, lX2, lY2: LONG);
  129.     end;
  130.     PD3DVECTOR                      = ^TD3DVECTOR;
  131.     TD3DVECTOR                      = record
  132.         case Byte of
  133.             0: (x, y, z: D3DVALUE);
  134.             1: (dvX, dvY, dvZ: D3DVALUE);
  135.     end;
  136. {== Vertext data types supported in an ExecuteBuffer =========================}
  137. {-- Homogenous vertices ------------------------------------------------------}
  138. type
  139.     PD3DHVERTEX                     = ^TD3DHVERTEX;
  140.     TD3DHVERTEX                     = record
  141.         dwFlags                     : DWORD;    // Homogeneous clipping flags
  142.         case Byte of
  143.             0: (hx, hy, hz: D3DVALUE);
  144.             1: (dvHX, dvHY, dvHZ: D3DVALUE);
  145.     end;
  146. {-- Transformed/lit vertices -------------------------------------------------}
  147.     PD3DTLVERTEX                    = ^TD3DTLVERTEX;
  148.     TD3DTLVERTEX                    = record
  149.         case Byte of
  150.             0: (
  151.                 sx          : D3DVALUE;     // Screen coordinates
  152.                 sy          : D3DVALUE;
  153.                 sz          : D3DVALUE;
  154.                 rhw         : D3DVALUE;     // Reciprocal of homogeneous w
  155.                 color       : D3DCOLOR;     // Vertex color
  156.                 specular    : D3DCOLOR;     // Specular component of vertex
  157.                 tu          : D3DVALUE;     // Texture coordinates
  158.                 tv          : D3DVALUE
  159.             );
  160.             1: (
  161.                 dvSX        : D3DVALUE;
  162.                 dvSY        : D3DVALUE;
  163.                 dvSZ        : D3DVALUE;
  164.                 dvRHW       : D3DVALUE;
  165.                 dcColor     : D3DCOLOR;
  166.                 dcSpecular  : D3DCOLOR;
  167.                 dvTU        : D3DVALUE;
  168.                 dvTV        : D3DVALUE
  169.             );
  170.     end;
  171. {-- Untransformed/lit vertices -----------------------------------------------}
  172.     PD3DLVERTEX                     = ^TD3DLVERTEX;
  173.     TD3DLVERTEX                     = record
  174.         case Byte of
  175.             0: (
  176.                 x           : D3DVALUE;     // Screen coordinates
  177.                 y           : D3DVALUE;
  178.                 z           : D3DVALUE;
  179.                 dwReserved  : DWORD;
  180.                 color       : D3DCOLOR;     // Vertex color
  181.                 specular    : D3DCOLOR;     // Specular component of vertex
  182.                 tu          : D3DVALUE;     // Texture coordinates
  183.                 tv          : D3DVALUE
  184.             );
  185.             1: (
  186.                 dvX         : D3DVALUE;
  187.                 dvY         : D3DVALUE;
  188.                 dvZ         : D3DVALUE;
  189.                 _dwReserved : DWORD;
  190.                 dcColor     : D3DCOLOR;
  191.                 dcSpecular  : D3DCOLOR;
  192.                 dvTU        : D3DVALUE;
  193.                 dvTV        : D3DVALUE
  194.             );
  195.     end;
  196. {-- Untransformed/unlit vertices ---------------------------------------------}
  197.     PD3DVERTEX                      = ^TD3DVERTEX;
  198.     TD3DVERTEX                      = record
  199.         case Byte of
  200.             0: (
  201.                 x           : D3DVALUE;     // Screen coordinates
  202.                 y           : D3DVALUE;
  203.                 z           : D3DVALUE;
  204.                 nx          : D3DVALUE;     // Normal
  205.                 ny          : D3DVALUE;
  206.                 nz          : D3DVALUE;
  207.                 tu          : D3DVALUE;     // Texture coordinates
  208.                 tv          : D3DVALUE
  209.             );
  210.             1: (
  211.                 dvX         : D3DVALUE;
  212.                 dvY         : D3DVALUE;
  213.                 dvZ         : D3DVALUE;
  214.                 dvNX        : D3DVALUE;
  215.                 dvNY        : D3DVALUE;
  216.                 dvNZ        : D3DVALUE;
  217.                 dvTU        : D3DVALUE;
  218.                 dvTV        : D3DVALUE
  219.             );
  220.     end;
  221. {-- Matrix, viewport, and transformation structures and definitions ----------}
  222.     PD3DMATRIX                      = ^TD3DMATRIX;
  223.     TD3DMATRIX                      = record
  224.         _11, _12, _13, _14          : D3DVALUE;
  225.         _21, _22, _23, _24          : D3DVALUE;
  226.         _31, _32, _33, _34          : D3DVALUE;
  227.         _41, _42, _43, _44          : D3DVALUE;
  228.     end;
  229.     PD3DVIEWPORT                    = ^TD3DVIEWPORT;
  230.     TD3DVIEWPORT                    = record
  231.         dwSize                      : DWORD;
  232.         dwX                         : DWORD;
  233.         dwY                         : DWORD;        // Top left
  234.         dwWidth                     : DWORD;
  235.         dwHeight                    : DWORD;        // Dimensions
  236.         dvScaleX                    : D3DVALUE;     // Scale homogeneous to screen
  237.         dvScaleY                    : D3DVALUE;     // Scale homogeneous to screen
  238.         dvMaxX                      : D3DVALUE;     // Min/max homogeneous x coord
  239.         dvMaxY                      : D3DVALUE;     // Min/max homogeneous y coord
  240.         dvMinZ                      : D3DVALUE;
  241.         dvMaxZ                      : D3DVALUE;     // Min/max homogeneous z coord
  242.     end;
  243. {-- Values for clip fields ---------------------------------------------------}
  244. const
  245.     D3DCLIP_LEFT                    = $00000001 ;
  246.     D3DCLIP_RIGHT                   = $00000002 ;
  247.     D3DCLIP_TOP                     = $00000004 ;
  248.     D3DCLIP_BOTTOM                  = $00000008 ;
  249.     D3DCLIP_FRONT                   = $00000010 ;
  250.     D3DCLIP_BACK                    = $00000020 ;
  251.     D3DCLIP_GEN0                    = $00000040 ;
  252.     D3DCLIP_GEN1                    = $00000080 ;
  253.     D3DCLIP_GEN2                    = $00000100 ;
  254.     D3DCLIP_GEN3                    = $00000200 ;
  255.     D3DCLIP_GEN4                    = $00000400 ;
  256.     D3DCLIP_GEN5                    = $00000800 ;
  257. {-- Values for D3D status ----------------------------------------------------}
  258.     D3DSTATUS_CLIPUNIONLEFT         = D3DCLIP_LEFT;
  259.     D3DSTATUS_CLIPUNIONRIGHT        = D3DCLIP_RIGHT;
  260.     D3DSTATUS_CLIPUNIONTOP          = D3DCLIP_TOP;
  261.     D3DSTATUS_CLIPUNIONBOTTOM       = D3DCLIP_BOTTOM;
  262.     D3DSTATUS_CLIPUNIONFRONT        = D3DCLIP_FRONT;
  263.     D3DSTATUS_CLIPUNIONBACK         = D3DCLIP_BACK;
  264.     D3DSTATUS_CLIPUNIONGEN0         = D3DCLIP_GEN0;
  265.     D3DSTATUS_CLIPUNIONGEN1         = D3DCLIP_GEN1;
  266.     D3DSTATUS_CLIPUNIONGEN2         = D3DCLIP_GEN2;
  267.     D3DSTATUS_CLIPUNIONGEN3         = D3DCLIP_GEN3;
  268.     D3DSTATUS_CLIPUNIONGEN4         = D3DCLIP_GEN4;
  269.     D3DSTATUS_CLIPUNIONGEN5         = D3DCLIP_GEN5;
  270.     D3DSTATUS_CLIPINTERSECTIONLEFT  = $00001000;
  271.     D3DSTATUS_CLIPINTERSECTIONRIGHT = $00002000;
  272.     D3DSTATUS_CLIPINTERSECTIONTOP   = $00004000;
  273.     D3DSTATUS_CLIPINTERSECTIONBOTTOM= $00008000;
  274.     D3DSTATUS_CLIPINTERSECTIONFRONT = $00010000;
  275.     D3DSTATUS_CLIPINTERSECTIONBACK  = $00020000;
  276.     D3DSTATUS_CLIPINTERSECTIONGEN0  = $00040000;
  277.     D3DSTATUS_CLIPINTERSECTIONGEN1  = $00080000;
  278.     D3DSTATUS_CLIPINTERSECTIONGEN2  = $00100000;
  279.     D3DSTATUS_CLIPINTERSECTIONGEN3  = $00200000;
  280.     D3DSTATUS_CLIPINTERSECTIONGEN4  = $00400000;
  281.     D3DSTATUS_CLIPINTERSECTIONGEN5  = $00800000;
  282.     D3DSTATUS_ZNOTVISIBLE           = $01000000;
  283.     D3DSTATUS_CLIPUNIONALL          =
  284.                                       D3DSTATUS_CLIPUNIONLEFT   or
  285.                                       D3DSTATUS_CLIPUNIONRIGHT  or
  286.                                       D3DSTATUS_CLIPUNIONTOP    or
  287.                                       D3DSTATUS_CLIPUNIONBOTTOM or
  288.                                       D3DSTATUS_CLIPUNIONFRONT  or
  289.                                       D3DSTATUS_CLIPUNIONBACK   or
  290.                                       D3DSTATUS_CLIPUNIONGEN0   or
  291.                                       D3DSTATUS_CLIPUNIONGEN1   or
  292.                                       D3DSTATUS_CLIPUNIONGEN2   or
  293.                                       D3DSTATUS_CLIPUNIONGEN3   or
  294.                                       D3DSTATUS_CLIPUNIONGEN4   or
  295.                                       D3DSTATUS_CLIPUNIONGEN5
  296.                                     ;
  297.     D3DSTATUS_CLIPINTERSECTIONALL   =
  298.                                       D3DSTATUS_CLIPINTERSECTIONLEFT   or
  299.                                       D3DSTATUS_CLIPINTERSECTIONRIGHT  or
  300.                                       D3DSTATUS_CLIPINTERSECTIONTOP    or
  301.                                       D3DSTATUS_CLIPINTERSECTIONBOTTOM or
  302.                                       D3DSTATUS_CLIPINTERSECTIONFRONT  or
  303.                                       D3DSTATUS_CLIPINTERSECTIONBACK   or
  304.                                       D3DSTATUS_CLIPINTERSECTIONGEN0   or
  305.                                       D3DSTATUS_CLIPINTERSECTIONGEN1   or
  306.                                       D3DSTATUS_CLIPINTERSECTIONGEN2   or
  307.                                       D3DSTATUS_CLIPINTERSECTIONGEN3   or
  308.                                       D3DSTATUS_CLIPINTERSECTIONGEN4   or
  309.                                       D3DSTATUS_CLIPINTERSECTIONGEN5
  310.                                     ;
  311.     D3DSTATUS_DEFAULT               =
  312.                                       D3DSTATUS_CLIPINTERSECTIONALL    or
  313.                                       D3DSTATUS_ZNOTVISIBLE
  314.                                     ;
  315. {-- Options for direct transform calls ---------------------------------------}
  316.     D3DTRANSFORM_CLIPPED            = $00000001;
  317.     D3DTRANSFORM_UNCLIPPED          = $00000002;
  318. type
  319.     PD3DTRANSFORMDATA               = ^TD3DTRANSFORMDATA;
  320.     TD3DTRANSFORMDATA               = record
  321.         dwSize                      : DWORD;
  322.         lpIn                        : PVOID;            // Input vertices
  323.         dwInSize                    : DWORD;            // Stride of input vertices 
  324.         lpOut                       : PVOID;            // Output vertices
  325.         dwOutSize                   : DWORD;            // Stride of output vertices 
  326.         lpHOut                      : PD3DHVERTEX;      // Output homogeneous vertices 
  327.         dwClip                      : DWORD;            // Clipping hint 
  328.         dwClipIntersection          : DWORD;
  329.         dwClipUnion                 : DWORD;            // Union of all clip flags
  330.         drExtent                    : TD3DRECT;         // Extent of transformed vertices
  331.     end;
  332. {-- Structure defining position and direction properties for lightning -------}
  333.     PD3DLIGHTINGELEMENT             = ^TD3DLIGHTINGELEMENT;
  334.     TD3DLIGHTINGELEMENT             = record
  335.         dvPosition                  : TD3DVECTOR;       // Lightable point in model space
  336.         dvNormal                    : TD3DVECTOR;       // Normalised unit vector
  337.     end;
  338. {-- Structure defining material properties for lightning ---------------------}
  339.     PD3DMATERIAL                    = ^TD3DMATERIAL;
  340.     TD3DMATERIAL                    = record
  341.         dwSize                      : DWORD;
  342.         case Byte of
  343.             0: (diffuse             : TD3DCOLORVALUE;   // Diffuse color RGBA
  344.                 ambient             : TD3DCOLORVALUE;   // Ambient color RGB
  345.                 specular            : TD3DCOLORVALUE;   // Specular 'shininess'
  346.                 emissive            : TD3DCOLORVALUE;   // Emissive color RGB
  347.                 power               : D3DVALUE;         // Sharpness if specular highlight
  348.                );
  349.             1: (dcvDiffuse          : TD3DCOLORVALUE;
  350.                 dcvAmbient          : TD3DCOLORVALUE;
  351.                 dcvSpecular         : TD3DCOLORVALUE;
  352.                 dcvEmissive         : TD3DCOLORVALUE;
  353.                 dvPower             : D3DVALUE;
  354.                 hTexture            : D3DTEXTUREHANDLE; // Handle to texture map
  355.                 dwRampSize          : DWORD;
  356.             );
  357.     end;
  358. type
  359.     D3DLIGHTTYPE                    = D3DENUM;
  360. const
  361.     D3DLIGHT_POINT                  = 1;
  362.     D3DLIGHT_SPOT                   = 2;
  363.     D3DLIGHT_DIRECTIONAL            = 3;
  364.     D3DLIGHT_PARALLELPOINT          = 4;
  365.     D3DLIGHT_GLSPOT                 = 5;
  366. {-- Structure defining a light source and its properties ---------------------}
  367. type
  368.     PD3DLIGHT                       = ^TD3DLIGHT;
  369.     TD3DLIGHT                       = record
  370.         dwSize                      : DWORD;
  371.         dltType                     : D3DLIGHTTYPE;     // Type of light source 
  372.         dcvColor                    : TD3DCOLORVALUE;   // Color of light
  373.         dvPosition                  : TD3DVECTOR;       // Position in world space
  374.         dvDirection                 : TD3DVECTOR;       // Direction in world space
  375.         dvRange                     : D3DVALUE;         // Cutoff range 
  376.         dvFalloff                   : D3DVALUE;         // Falloff 
  377.         dvAttenuation0              : D3DVALUE;         // Constant attenuation 
  378.         dvAttenuation1              : D3DVALUE;         // Linear attenuation 
  379.         dvAttenuation2              : D3DVALUE;         // Quadratic attenuation 
  380.         dvTheta                     : D3DVALUE;         // Inner angle of spotlight cone 
  381.         dvPhi                       : D3DVALUE;         // Outer angle of spotlight cone
  382.     end;
  383.     PD3DLIGHTDATA                   = ^TD3DLIGHTDATA;
  384.     TD3DLIGHTDATA                   = record
  385.         dwSize                      : DWORD;
  386.         lpIn                        : PD3DLIGHTINGELEMENT;  // Input positions and normals
  387.         dwInSize                    : DWORD;                // Stride of input elements
  388.         lpOut                       : PD3DTLVERTEX;         // Output colors
  389.         dwOutSize                   : DWORD;                // Stride of output colors
  390.     end;
  391.     D3DCOLORMODEL                   = D3DENUM;
  392. const
  393.     D3DCOLOR_MONO                   = 1;
  394.     D3DCOLOR_RGB                    = 2;
  395. {-- Options for clearing -----------------------------------------------------}
  396.     D3DCLEAR_TARGET                 = $00000001;            // Clear target surface 
  397.     D3DCLEAR_ZBUFFER                = $00000002;            // Clear target z buffer
  398. //
  399. // Execute buffers are allocated via Direct3D.  These buffers may then
  400. // be filled by the application with instructions to execute along with
  401. // vertex data.
  402. //
  403. //
  404. // Supported op codes for execute instructions.
  405. //
  406. type
  407.     D3DOPCODE                       = D3DENUM;
  408. const
  409.     D3DOP_POINT                     = 1;
  410.     D3DOP_LINE                      = 2;
  411.     D3DOP_TRIANGLE                  = 3;
  412.     D3DOP_MATRIXLOAD                = 4;
  413.     D3DOP_MATRIXMULTIPLY            = 5;
  414.     D3DOP_STATETRANSFORM            = 6;
  415.     D3DOP_STATELIGHT                = 7;
  416.     D3DOP_STATERENDER               = 8;
  417.     D3DOP_PROCESSVERTICES           = 9;
  418.     D3DOP_TEXTURELOAD               = 10;
  419.     D3DOP_EXIT                      = 11;
  420.     D3DOP_BRANCHFORWARD             = 12;
  421.     D3DOP_SPAN                      = 13;
  422.     D3DOP_SETSTATUS                 = 14;
  423. type
  424.     PD3DINSTRUCTION                 = ^TD3DINSTRUCTION;
  425.     TD3DINSTRUCTION                 = record
  426.         bOpcode                     : BYTE;     // Instruction opcode
  427.         bSize                       : BYTE;     // Size of each instruction data unit
  428.         wCount                      : WORD;     // Count of instruction data units to follow
  429.     end;
  430. {-- Structure for texture loads ----------------------------------------------}
  431.     PD3DTEXTURELOAD                 = ^TD3DTEXTURELOAD;
  432.     TD3DTEXTURELOAD                 = record
  433.         hDestTexture                : D3DTEXTUREHANDLE;
  434.         hSrcTexture                 : D3DTEXTUREHANDLE;
  435.     end;
  436. {-- Structure for picking ----------------------------------------------------}
  437.     PD3DPICKRECORD                  = ^TD3DPICKRECORD;
  438.     TD3DPICKRECORD                  = record
  439.         bOpcode                     : BYTE;
  440.         bPad                        : BYTE;
  441.         dwOffset                    : DWORD;
  442.         dvZ                         : D3DVALUE;
  443.     end;
  444. {-- Following defines the rendering states which can be set in execute buf ---}
  445. type
  446.     D3DSHADEMODE                    = D3DENUM;
  447. const
  448.     D3DSHADE_FLAT                   = 1;
  449.     D3DSHADE_GOURAUD                = 2;
  450.     D3DSHADE_PHONG                  = 3;
  451. type
  452.     D3DFILLMODE                     = D3DENUM;
  453. const
  454.     D3DFILL_POINT                   = 1;
  455.     D3DFILL_WIREFRAME               = 2;
  456.     D3DFILL_SOLID                   = 3;
  457. type
  458.     PD3DLINEPATTERN                 = ^TD3DLINEPATTERN;
  459.     TD3DLINEPATTERN                 = record
  460.         wRepeatFactor               : WORD;
  461.         wLinePattern                : WORD;
  462.     end;
  463.     D3DTEXTUREFILTER                = D3DENUM;
  464. const
  465.     D3DFILTER_NEAREST               = 1;
  466.     D3DFILTER_LINEAR                = 2;
  467.     D3DFILTER_MIPNEAREST            = 3;
  468.     D3DFILTER_MIPLINEAR             = 4;
  469.     D3DFILTER_LINEARMIPNEAREST      = 5;
  470.     D3DFILTER_LINEARMIPLINEAR       = 6;
  471. type
  472.     D3DBLEND                        = D3DENUM;
  473. const
  474.     D3DBLEND_ZERO                   = 1;
  475.     D3DBLEND_ONE                    = 2;
  476.     D3DBLEND_SRCCOLOR               = 3;
  477.     D3DBLEND_INVSRCCOLOR            = 4;
  478.     D3DBLEND_SRCALPHA               = 5;
  479.     D3DBLEND_INVSRCALPHA            = 6;
  480.     D3DBLEND_DESTALPHA              = 7;
  481.     D3DBLEND_INVDESTALPHA           = 8;
  482.     D3DBLEND_DESTCOLOR              = 9;
  483.     D3DBLEND_INVDESTCOLOR           = 10;
  484.     D3DBLEND_SRCALPHASAT            = 11;
  485.     D3DBLEND_BOTHSRCALPHA           = 12;
  486.     D3DBLEND_BOTHINVSRCALPHA        = 13;
  487. type
  488.     D3DTEXTUREBLEND                 = D3DENUM;
  489. const
  490.     D3DTBLEND_DECAL                 = 1;
  491.     D3DTBLEND_MODULATE              = 2;
  492.     D3DTBLEND_DECALALPHA            = 3;
  493.     D3DTBLEND_MODULATEALPHA         = 4;
  494.     D3DTBLEND_DECALMASK             = 5;
  495.     D3DTBLEND_MODULATEMASK          = 6;
  496.     D3DTBLEND_COPY                  = 7;
  497. type
  498.     D3DTEXTUREADDRESS               = D3DENUM;
  499. const
  500.     D3DTADDRESS_WRAP                = 1;
  501.     D3DTADDRESS_MIRROR              = 2;
  502.     D3DTADDRESS_CLAMP               = 3;
  503. type
  504.     D3DCULL                         = D3DENUM;
  505. const
  506.     D3DCULL_NONE                    = 1;
  507.     D3DCULL_CW                      = 2;
  508.     D3DCULL_CCW                     = 3;
  509. type
  510.     D3DCMPFUNC                      = D3DENUM;
  511. const
  512.     D3DCMP_NEVER                    = 1;
  513.     D3DCMP_LESS                     = 2;
  514.     D3DCMP_EQUAL                    = 3;
  515.     D3DCMP_LESSEQUAL                = 4;
  516.     D3DCMP_GREATER                  = 5;
  517.     D3DCMP_NOTEQUAL                 = 6;
  518.     D3DCMP_GREATEREQUAL             = 7;
  519.     D3DCMP_ALWAYS                   = 8;
  520. type
  521.     D3DFOGMODE                      = D3DENUM;
  522. const
  523.     D3DFOG_NONE                     = 0;
  524.     D3DFOG_EXP                      = 1;
  525.     D3DFOG_EXP2                     = 2;
  526.     D3DFOG_LINEAR                   = 3;
  527. {-- Amount to add to a state to generate the override for that state ---------}
  528. const
  529.     D3DSTATE_OVERRIDE_BIAS          = 256;
  530. {-- A state which sets the override flag for the specified state type --------}
  531. function    D3DSTATE_OVERRIDE(_type: DWORD): DWORD;
  532. type
  533.     D3DTRANSFORMSTATETYPE           = D3DENUM;
  534. const
  535.     D3DTRANSFORMSTATE_WORLD         = 1;
  536.     D3DTRANSFORMSTATE_VIEW          = 2;
  537.     D3DTRANSFORMSTATE_PROJECTION    = 3;
  538. type
  539.     D3DLIGHTSTATETYPE               = D3DENUM;
  540. const
  541.     D3DLIGHTSTATE_MATERIAL          = 1;
  542.     D3DLIGHTSTATE_AMBIENT           = 2;
  543.     D3DLIGHTSTATE_COLORMODEL        = 3;
  544.     D3DLIGHTSTATE_FOGMODE           = 4;
  545.     D3DLIGHTSTATE_FOGSTART          = 5;
  546.     D3DLIGHTSTATE_FOGEND            = 6;
  547.     D3DLIGHTSTATE_FOGDENSITY        = 7;
  548. type
  549.     D3DRENDERSTATETYPE              = D3DENUM;
  550. const
  551.     D3DRENDERSTATE_TEXTUREHANDLE        = 1;    // Texture handle
  552.     D3DRENDERSTATE_ANTIALIAS            = 2;    // Antialiasing prim edges
  553.     D3DRENDERSTATE_TEXTUREADDRESS       = 3;    // D3DTEXTUREADDRESS
  554.     D3DRENDERSTATE_TEXTUREPERSPECTIVE   = 4;    // TRUE for perspective correction
  555.     D3DRENDERSTATE_WRAPU                = 5;    // TRUE for wrapping in u
  556.     D3DRENDERSTATE_WRAPV                = 6;    // TRUE for wrapping in v
  557.     D3DRENDERSTATE_ZENABLE              = 7;    // TRUE to enable z test
  558.     D3DRENDERSTATE_FILLMODE             = 8;    // D3DFILL_MODE
  559.     D3DRENDERSTATE_SHADEMODE            = 9;    // D3DSHADEMODE
  560.     D3DRENDERSTATE_LINEPATTERN          = 10;   // D3DLINEPATTERN
  561.     D3DRENDERSTATE_MONOENABLE           = 11;   // TRUE to enable mono rasterization
  562.     D3DRENDERSTATE_ROP2                 = 12;   // ROP2
  563.     D3DRENDERSTATE_PLANEMASK            = 13;   // DWORD physical plane mask
  564.     D3DRENDERSTATE_ZWRITEENABLE         = 14;   // TRUE to enable z writes
  565.     D3DRENDERSTATE_ALPHATESTENABLE      = 15;   // TRUE to enable alpha tests
  566.     D3DRENDERSTATE_LASTPIXEL            = 16;   // TRUE for last-pixel on lines
  567.     D3DRENDERSTATE_TEXTUREMAG           = 17;   // D3DTEXTUREFILTER
  568.     D3DRENDERSTATE_TEXTUREMIN           = 18;   // D3DTEXTUREFILTER
  569.     D3DRENDERSTATE_SRCBLEND             = 19;   // D3DBLEND
  570.     D3DRENDERSTATE_DESTBLEND            = 20;   // D3DBLEND
  571.     D3DRENDERSTATE_TEXTUREMAPBLEND      = 21;   // D3DTEXTUREBLEND 
  572.     D3DRENDERSTATE_CULLMODE             = 22;   // D3DCULL 
  573.     D3DRENDERSTATE_ZFUNC                = 23;   // D3DCMPFUNC 
  574.     D3DRENDERSTATE_ALPHAREF             = 24;   // D3DFIXED 
  575.     D3DRENDERSTATE_ALPHAFUNC            = 25;   // D3DCMPFUNC
  576.     D3DRENDERSTATE_DITHERENABLE         = 26;   // TRUE to enable dithering 
  577.     D3DRENDERSTATE_BLENDENABLE          = 27;   // TRUE to enable alpha blending 
  578.     D3DRENDERSTATE_FOGENABLE            = 28;   // TRUE to enable fog 
  579.     D3DRENDERSTATE_SPECULARENABLE       = 29;   // TRUE to enable specular 
  580.     D3DRENDERSTATE_ZVISIBLE             = 30;   // TRUE to enable z checking
  581.     D3DRENDERSTATE_SUBPIXEL             = 31;   // TRUE to enable subpixel correction 
  582.     D3DRENDERSTATE_SUBPIXELX            = 32;   // TRUE to enable correction in X only
  583.     D3DRENDERSTATE_STIPPLEDALPHA        = 33;   // TRUE to enable stippled alpha
  584.     D3DRENDERSTATE_FOGCOLOR             = 34;   // D3DCOLOR
  585.     D3DRENDERSTATE_FOGTABLEMODE         = 35;   // D3DFOGMODE
  586.     D3DRENDERSTATE_FOGTABLESTART        = 36;   // Fog table start        
  587.     D3DRENDERSTATE_FOGTABLEEND          = 37;   // Fog table end          
  588.     D3DRENDERSTATE_FOGTABLEDENSITY      = 38;   // Fog table density      
  589.     D3DRENDERSTATE_STIPPLEENABLE        = 39;   // TRUE to enable stippling
  590.     D3DRENDERSTATE_STIPPLEPATTERN00     = 64;   // Stipple pattern 01...
  591.     D3DRENDERSTATE_STIPPLEPATTERN01     = 65;
  592.     D3DRENDERSTATE_STIPPLEPATTERN02     = 66;
  593.     D3DRENDERSTATE_STIPPLEPATTERN03     = 67;
  594.     D3DRENDERSTATE_STIPPLEPATTERN04     = 68;
  595.     D3DRENDERSTATE_STIPPLEPATTERN05     = 69;
  596.     D3DRENDERSTATE_STIPPLEPATTERN06     = 70;
  597.     D3DRENDERSTATE_STIPPLEPATTERN07     = 71;
  598.     D3DRENDERSTATE_STIPPLEPATTERN08     = 72;
  599.     D3DRENDERSTATE_STIPPLEPATTERN09     = 73;
  600.     D3DRENDERSTATE_STIPPLEPATTERN10     = 74;
  601.     D3DRENDERSTATE_STIPPLEPATTERN11     = 75;
  602.     D3DRENDERSTATE_STIPPLEPATTERN12     = 76;
  603.     D3DRENDERSTATE_STIPPLEPATTERN13     = 77;
  604.     D3DRENDERSTATE_STIPPLEPATTERN14     = 78; 
  605.     D3DRENDERSTATE_STIPPLEPATTERN15     = 79;
  606.     D3DRENDERSTATE_STIPPLEPATTERN16     = 80; 
  607.     D3DRENDERSTATE_STIPPLEPATTERN17     = 81;
  608.     D3DRENDERSTATE_STIPPLEPATTERN18     = 82; 
  609.     D3DRENDERSTATE_STIPPLEPATTERN19     = 83; 
  610.     D3DRENDERSTATE_STIPPLEPATTERN20     = 84;
  611.     D3DRENDERSTATE_STIPPLEPATTERN21     = 85; 
  612.     D3DRENDERSTATE_STIPPLEPATTERN22     = 86; 
  613.     D3DRENDERSTATE_STIPPLEPATTERN23     = 87; 
  614.     D3DRENDERSTATE_STIPPLEPATTERN24     = 88; 
  615.     D3DRENDERSTATE_STIPPLEPATTERN25     = 89;
  616.     D3DRENDERSTATE_STIPPLEPATTERN26     = 90;
  617.     D3DRENDERSTATE_STIPPLEPATTERN27     = 91;
  618.     D3DRENDERSTATE_STIPPLEPATTERN28     = 92;
  619.     D3DRENDERSTATE_STIPPLEPATTERN29     = 93;
  620.     D3DRENDERSTATE_STIPPLEPATTERN30     = 94;
  621.     D3DRENDERSTATE_STIPPLEPATTERN31     = 95; 
  622. function    D3DRENDERSTATE_STIPPLEPATTERN(y: D3DRENDERSTATETYPE): D3DRENDERSTATETYPE; 
  623. type
  624.     TStateType                          = record
  625.         case Byte of
  626.             0: (dtstTransformStateType      : D3DTRANSFORMSTATETYPE);
  627.             1: (dlstLightStateType          : D3DLIGHTSTATETYPE);
  628.             2: (drstRenderStateType         : D3DRENDERSTATETYPE);
  629.     end;
  630.     PD3DSTATE                           = ^TD3DSTATE;
  631.     TD3DSTATE                           = record
  632.         stType                          : TStateType;
  633.         case Byte of
  634.             0: (dwArg: array[0..0] of DWORD);
  635.             1: (dvArg: array[0..0] of D3DVALUE);
  636.     end;
  637. {-- Operation used to load matrices (hDstMat = hSrcMat) ----------------------}
  638.     PD3DMATRIXLOAD                      = ^TD3DMATRIXLOAD;
  639.     TD3DMATRIXLOAD                      = record
  640.         hDestMatrix                     : D3DMATRIXHANDLE;  // Destination matrix
  641.         hSrcMatrix                      : D3DMATRIXHANDLE;  // Source matrix
  642.     end;
  643. {-- Operation used to multiply matrices (hDstMat = hSrcMat1 * hSrcMat2) ------}
  644.     PD3DMATRIXMULTIPLY                  = ^TD3DMATRIXMULTIPLY;
  645.     TD3DMATRIXMULTIPLY                  = record
  646.         hDestMatrix                     : D3DMATRIXHANDLE;  // Destination matrix
  647.         hSrcMatrix1                     : D3DMATRIXHANDLE;  // First source matrix
  648.         hSrcMatrix2                     : D3DMATRIXHANDLE;  // Second source matrix
  649.     end;
  650. {-- Operation used to transform and light vertices ---------------------------}
  651.     PD3DPROCESSVERTICES                 = ^TD3DPROCESSVERTICES;
  652.     TD3DPROCESSVERTICES                 = record
  653.         dwFlags                         : DWORD;            // Do we transform or light or just copy?
  654.         wStart                          : WORD;             // Index to first vertex in source 
  655.         wDest                           : WORD;             // Index to first vertex in local buffer 
  656.         dwCount                         : DWORD;            // Number of vertices to be processed 
  657.         dwReserved                      : DWORD;            // Must be zero 
  658.     end;
  659. const
  660.     D3DPROCESSVERTICES_TRANSFORMLIGHT   = $00000000;
  661.     D3DPROCESSVERTICES_TRANSFORM        = $00000001;
  662.     D3DPROCESSVERTICES_COPY             = $00000002;
  663.     D3DPROCESSVERTICES_OPMASK           = $00000007;
  664.     D3DPROCESSVERTICES_UPDATEEXTENTS    = $00000008;
  665.     D3DPROCESSVERTICES_NOCOLOR          = $00000010;
  666. {== Triangle flags ===========================================================}
  667. {-- Tri strip and fan flags --------------------------------------------------}
  668. //
  669. // START loads all three vertices
  670. // EVEN and ODD load just v3 with even or odd culling
  671. // START_FLAT contains a count from 0 to 29 that allows the
  672. // whole strip or fan to be culled in one hit.
  673. // e.g. for a quad len = 1
  674. //
  675. const
  676.     D3DTRIFLAG_START                        = $00000000;
  677. // 0 < len < 30
  678. function    D3DTRIFLAG_STARTFLAT(len: DWORD): DWORD;
  679. const
  680.     D3DTRIFLAG_ODD                          = $0000001e;
  681.     D3DTRIFLAG_EVEN                         = $0000001f;
  682. {-- Triangle edge flags - enable edges for wireframe or antialiasing ---------}
  683. const
  684.     D3DTRIFLAG_EDGEENABLE1                  = $00000100;    // v0-v1 edge
  685.     D3DTRIFLAG_EDGEENABLE2                  = $00000200;    // v1-v2 edge
  686.     D3DTRIFLAG_EDGEENABLE3                  = $00000400;    // v2-v0 edge
  687.     D3DTRIFLAG_EDGEENABLETRIANGLE           = D3DTRIFLAG_EDGEENABLE1 or D3DTRIFLAG_EDGEENABLE2 or D3DTRIFLAG_EDGEENABLE3;
  688. {== Primitive structures and related defines =================================}
  689. // Vertex offsets are to types D3DVERTEX, D3DLVERTEX, or D3DTLVERTEX.
  690. {-- Triangle list primitive structure ----------------------------------------}
  691. type
  692.     PD3DTRIANGLE                            = ^TD3DTRIANGLE;
  693.     TD3DTRIANGLE                            = record
  694.         case Byte of
  695.             0: (v1, v2, v3: WORD);          // Vertex indices
  696.             1: (wV1, wV2, wV3,
  697.                 wFlags: WORD);              // Edge (and other) flags
  698.     end;
  699. {-- Line strip structure - the instr count - 1 defines the num of line segs --}
  700.     PD3DLINE                                = ^TD3DLINE;
  701.     TD3DLINE                                = record
  702.         case Byte of
  703.             0: (v1, v2: WORD);              // Vertex indices
  704.             1: (wV1, wV2: WORD);
  705.     end;
  706. {-- Span structure -----------------------------------------------------------}
  707. // Spans join a list of points with the same y value.
  708. // If the y value changes, a new span is started.
  709.     PD3DSPAN                                = ^TD3DSPAN;
  710.     TD3DSPAN                                = record
  711.         wCount                              : WORD;     // Number of spans
  712.         wFirst                              : WORD;     // Index to first vertex
  713.     end;
  714. {-- Point structure ----------------------------------------------------------}
  715.     PD3DPOINT                               = ^TD3DPOINT;
  716.     TD3DPOINT                               = record
  717.         wCount                              : WORD;     // number of points
  718.         wFirst                              : WORD;     // index to first vertex
  719.     end;
  720. {-- Forward branch structure -------------------------------------------------}
  721. // Mask is logically anded with the driver status mask
  722. // if the result equals 'value', the branch is taken.
  723.     PD3DBRANCH                              = ^TD3DBRANCH;
  724.     TD3DBRANCH                              = record
  725.         dwMask                              : DWORD;    // Bitmask against D3D status
  726.         dwValue                             : DWORD;
  727.         bNegate                             : BOOL;     // TRUE to negate comparison
  728.         dwOffset                            : DWORD;    // How far to branch forward (0 for exit)
  729.     end;
  730. {-- Status used for set status instruction -----------------------------------}
  731. // The D3D status is initialised on device creation
  732. // and is modified by all execute calls.
  733.     PD3DSTATUS                              = ^TD3DSTATUS;
  734.     TD3DSTATUS                              = record
  735.         dwFlags                             : DWORD;    // Do we set extents or status
  736.         dwStatus                            : DWORD;    // D3D status
  737.         drExtent                            : TD3DRECT;
  738.     end;
  739. const
  740.     D3DSETSTATUS_STATUS                     = $00000001;
  741.     D3DSETSTATUS_EXTENTS                    = $00000002;
  742.     D3DSETSTATUS_ALL                        = (D3DSETSTATUS_STATUS or D3DSETSTATUS_EXTENTS);
  743. {-- Statistics structure -----------------------------------------------------}
  744. type
  745.     PD3DSTATS                               = ^TD3DSTATS;
  746.     TD3DSTATS                               = record
  747.         dwSize                              : DWORD;
  748.         dwTrianglesDrawn                    : DWORD;
  749.         dwLinesDrawn                        : DWORD;
  750.         dwPointsDrawn                       : DWORD;
  751.         dwSpansDrawn                        : DWORD;
  752.         dwVerticesProcessed                 : DWORD;
  753.     end;
  754. {-- Execute options ----------------------------------------------------------}
  755. // When calling using D3DEXECUTE_UNCLIPPED all the primitives
  756. // inside the buffer must be contained within the viewport.
  757. const
  758.     D3DEXECUTE_CLIPPED                      = $00000001;
  759.     D3DEXECUTE_UNCLIPPED                    = $00000002;
  760. type
  761.     PD3DEXECUTEDATA                         = ^TD3DEXECUTEDATA;
  762.     TD3DEXECUTEDATA                         = record
  763.         dwSize                              : DWORD;
  764.         dwVertexOffset                      : DWORD;
  765.         dwVertexCount                       : DWORD;
  766.         dwInstructionOffset                 : DWORD;
  767.         dwInstructionLength                 : DWORD;
  768.         dwHVertexOffset                     : DWORD;
  769.         dsStatus                            : TD3DSTATUS;   // Status after execute
  770.     end;
  771. {-- Palette flags ------------------------------------------------------------}
  772. // This are or'ed with the peFlags in the PALETTEENTRYs passed to DirectDraw.
  773. const
  774.     D3DPAL_FREE                             = $00;  // Renderer may use this entry freely
  775.     D3DPAL_READONLY                         = $40;  // Renderer may not set this entry
  776.     D3DPAL_RESERVED                         = $80;  // Renderer may not use this entry
  777. function D3DVector(vX,vY,vZ: D3DValue): TD3DVECTOR;
  778. implementation
  779. function D3DVector(vX,vY,vZ: D3DValue): TD3DVECTOR;
  780. begin
  781.    with Result do
  782.    begin
  783.       X := vX;
  784.       Y := vY;
  785.       Z := vZ;
  786.    end;
  787. end;
  788. function    D3DVALP(val: Extended; prec: Integer): D3DVALUE;
  789. begin
  790.     Result  := val;
  791. end;
  792. function    D3DVAL(val: Extended): D3DVALUE;
  793. begin
  794.     Result  := val;
  795. end;
  796. function    D3DDivide(a, b: D3DVALUE): D3DVALUE;
  797. begin
  798.     Result  := a / b;
  799. end;
  800. function    D3DMultiply(a, b: D3DVALUE): D3DVALUE;
  801. begin
  802.     Result  := a * b;
  803. end;
  804. function    CI_GETALPHA(ci: D3DCOLOR): Byte;
  805. begin
  806.     Result  := ci shr 24;
  807. end;
  808. function    CI_GETINDEX(ci: D3DCOLOR): Word;
  809. begin
  810.     Result  := (ci shr 8) and $ffff;
  811. end;
  812. function    CI_GETFRACTION(ci: D3DCOLOR): Byte;
  813. begin
  814.     Result  := ci and $ff;
  815. end;
  816. function    CI_ROUNDINDEX(ci: D3DCOLOR): Word;
  817. begin
  818.     Result  := CI_GETINDEX(ci + $80);
  819. end;
  820. function    CI_MASKALPHA(ci: D3DCOLOR): DWord;
  821. begin
  822.     Result  := ci and $ffffff;
  823. end;
  824. function    CI_MAKE(a: Byte; i: Word; f: Byte): D3DCOLOR;
  825. begin
  826.     Result  := (a shl 24) or (i shl 8) or f;
  827. end;
  828. function    RGBA_GETALPHA(rgb: D3DCOLOR): Byte;
  829. begin
  830.     Result  := rgb shr 24;
  831. end;
  832. function    RGBA_GETRED(rgb: D3DCOLOR): Byte;
  833. begin
  834.     Result  := (rgb shr 16) and $ff;
  835. end;
  836. function    RGBA_GETGREEN(rgb: D3DCOLOR): Byte;
  837. begin
  838.     Result  := (rgb shr 8) and $ff;
  839. end;
  840. function    RGBA_GETBLUE(rgb: D3DCOLOR): Byte;
  841. begin
  842.     Result  := rgb and $ff;
  843. end;
  844. function    RGBA_MAKE(r, g, b, a: Byte): D3DCOLOR;
  845. begin
  846.     Result  := (a shl 24) or (r shl 16) or (g shl 8) or b;
  847. end;
  848. function    D3DRGB(r, g, b: D3DVALUE): D3DCOLOR;
  849. begin
  850.     Result  := $ff000000 or (Trunc(r * 255) shl 16) or (Trunc(g * 255) shl 8) or Trunc(b * 255);
  851. end;
  852. function    D3DRGBA(r, g, b, a: D3DVALUE): D3DCOLOR;
  853. begin
  854.     Result  := (Trunc(a * 255) shl 24) or (Trunc(r * 255) shl 16) or (Trunc(g * 255) shl 8) or Trunc(b * 255);
  855. end;
  856. function    RGB_GETRED(rgb: D3DCOLOR): Byte;
  857. begin
  858.     Result  := (rgb shr 16) and $ff;
  859. end;
  860. function    RGB_GETGREEN(rgb: D3DCOLOR): Byte;
  861. begin
  862.     Result  := (rgb shr 8) and $ff;
  863. end;
  864. function    RGB_GETBLUE(rgb: D3DCOLOR): Byte;
  865. begin
  866.     Result  := rgb and $ff;
  867. end;
  868. function    RGBA_SETALPHA(rgba: D3DCOLOR; x: Byte): D3DCOLOR;
  869. begin
  870.     Result  := (x shl 24) or (rgba and $00ffffff);
  871. end;
  872. function    RGB_MAKE(r, g, b: Byte): D3DCOLOR;
  873. begin
  874.     Result  := (r shl 16) or (g shl 8) or b;
  875. end;
  876. function    RGBA_TORGB(rgba: D3DCOLOR): D3DCOLOR;
  877. begin
  878.     Result  := rgba and $ffffff;
  879. end;
  880. function    RGB_TORGBA(rgb: D3DCOLOR): D3DCOLOR;
  881. begin
  882.     Result  := rgb or $ff000000;
  883. end;
  884. {-- A state which sets the override flag for the specified state type --------}
  885. function    D3DSTATE_OVERRIDE(_type: DWORD): DWORD;
  886. begin
  887.     Result  := _type + D3DSTATE_OVERRIDE_BIAS;
  888. end;
  889. function    D3DRENDERSTATE_STIPPLEPATTERN(y: D3DRENDERSTATETYPE): D3DRENDERSTATETYPE;
  890. begin
  891.     Result  := D3DRENDERSTATE_STIPPLEPATTERN00 + y;
  892. end;
  893. function    D3DTRIFLAG_STARTFLAT(len: DWORD): DWORD;
  894. begin
  895.     Result  := len;
  896. end;
  897. end.