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

Delphi控件源码

开发平台:

Delphi

  1. //////////////////////////////////////////////////////////////////////////////
  2. //
  3. //  Copyright (C) Microsoft Corporation.  All Rights Reserved.
  4. //
  5. //  File:       d3dx8tex.h
  6. //  Content:    D3DX texturing APIs
  7. //
  8. //////////////////////////////////////////////////////////////////////////////
  9. //----------------------------------------------------------------------------
  10. // D3DX_FILTER flags:
  11. // ------------------
  12. //
  13. // A valid filter must contain one of these values:
  14. //
  15. //  D3DX_FILTER_NONE
  16. //      No scaling or filtering will take place.  Pixels outside the bounds
  17. //      of the source image are assumed to be transparent black.
  18. //  D3DX_FILTER_POINT
  19. //      Each destination pixel is computed by sampling the nearest pixel
  20. //      from the source image.
  21. //  D3DX_FILTER_LINEAR
  22. //      Each destination pixel is computed by linearly interpolating between
  23. //      the nearest pixels in the source image.  This filter works best
  24. //      when the scale on each axis is less than 2.
  25. //  D3DX_FILTER_TRIANGLE
  26. //      Every pixel in the source image contributes equally to the
  27. //      destination image.  This is the slowest of all the filters.
  28. //  D3DX_FILTER_BOX
  29. //      Each pixel is computed by averaging a 2x2(x2) box pixels from
  30. //      the source image. Only works when the dimensions of the
  31. //      destination are half those of the source. (as with mip maps)
  32. //
  33. // And can be OR'd with any of these optional flags:
  34. //
  35. //  D3DX_FILTER_MIRROR_U
  36. //      Indicates that pixels off the edge of the texture on the U-axis
  37. //      should be mirrored, not wraped.
  38. //  D3DX_FILTER_MIRROR_V
  39. //      Indicates that pixels off the edge of the texture on the V-axis
  40. //      should be mirrored, not wraped.
  41. //  D3DX_FILTER_MIRROR_W
  42. //      Indicates that pixels off the edge of the texture on the W-axis
  43. //      should be mirrored, not wraped.
  44. //  D3DX_FILTER_MIRROR
  45. //      Same as specifying D3DX_FILTER_MIRROR_U | D3DX_FILTER_MIRROR_V |
  46. //      D3DX_FILTER_MIRROR_V
  47. //  D3DX_FILTER_DITHER
  48. //      Dithers the resulting image.
  49. //
  50. //----------------------------------------------------------------------------
  51. const
  52.   D3DX_FILTER_NONE      = (1 shl 0);
  53.   {$EXTERNALSYM D3DX_FILTER_NONE}
  54.   D3DX_FILTER_POINT     = (2 shl 0);
  55.   {$EXTERNALSYM D3DX_FILTER_POINT}
  56.   D3DX_FILTER_LINEAR    = (3 shl 0);
  57.   {$EXTERNALSYM D3DX_FILTER_LINEAR}
  58.   D3DX_FILTER_TRIANGLE  = (4 shl 0);
  59.   {$EXTERNALSYM D3DX_FILTER_TRIANGLE}
  60.   D3DX_FILTER_BOX       = (5 shl 0);
  61.   {$EXTERNALSYM D3DX_FILTER_BOX}
  62.   D3DX_FILTER_MIRROR_U  = (1 shl 16);
  63.   {$EXTERNALSYM D3DX_FILTER_MIRROR_U}
  64.   D3DX_FILTER_MIRROR_V  = (2 shl 16);
  65.   {$EXTERNALSYM D3DX_FILTER_MIRROR_V}
  66.   D3DX_FILTER_MIRROR_W  = (4 shl 16);
  67.   {$EXTERNALSYM D3DX_FILTER_MIRROR_W}
  68.   D3DX_FILTER_MIRROR    = (7 shl 16);
  69.   {$EXTERNALSYM D3DX_FILTER_MIRROR}
  70.   D3DX_FILTER_DITHER    = (8 shl 16);
  71.   {$EXTERNALSYM D3DX_FILTER_DITHER}
  72. //----------------------------------------------------------------------------
  73. // D3DX_NORMALMAP flags:
  74. // ---------------------
  75. // These flags are used to control how D3DXComputeNormalMap generates normal
  76. // maps.  Any number of these flags may be OR'd together in any combination.
  77. //
  78. //  D3DX_NORMALMAP_MIRROR_U
  79. //      Indicates that pixels off the edge of the texture on the U-axis
  80. //      should be mirrored, not wraped.
  81. //  D3DX_NORMALMAP_MIRROR_V
  82. //      Indicates that pixels off the edge of the texture on the V-axis
  83. //      should be mirrored, not wraped.
  84. //  D3DX_NORMALMAP_MIRROR
  85. //      Same as specifying D3DX_NORMALMAP_MIRROR_U | D3DX_NORMALMAP_MIRROR_V
  86. //  D3DX_NORMALMAP_INVERTSIGN
  87. //      Inverts the direction of each normal
  88. //  D3DX_NORMALMAP_COMPUTE_OCCLUSION
  89. //      Compute the per pixel Occlusion term and encodes it into the alpha.
  90. //      An Alpha of 1 means that the pixel is not obscured in anyway, and
  91. //      an alpha of 0 would mean that the pixel is completly obscured.
  92. //
  93. //----------------------------------------------------------------------------
  94. //----------------------------------------------------------------------------
  95. const
  96.   D3DX_NORMALMAP_MIRROR_U     = (1 shl 16);
  97.   {$EXTERNALSYM D3DX_NORMALMAP_MIRROR_U}
  98.   D3DX_NORMALMAP_MIRROR_V     = (2 shl 16);
  99.   {$EXTERNALSYM D3DX_NORMALMAP_MIRROR_V}
  100.   D3DX_NORMALMAP_MIRROR       = (3 shl 16);
  101.   {$EXTERNALSYM D3DX_NORMALMAP_MIRROR}
  102.   D3DX_NORMALMAP_INVERTSIGN   = (8 shl 16);
  103.   {$EXTERNALSYM D3DX_NORMALMAP_INVERTSIGN}
  104.   D3DX_NORMALMAP_COMPUTE_OCCLUSION = (16 shl 16);
  105.   {$EXTERNALSYM D3DX_NORMALMAP_COMPUTE_OCCLUSION}
  106. //----------------------------------------------------------------------------
  107. // D3DX_CHANNEL flags:
  108. // -------------------
  109. // These flags are used by functions which operate on or more channels
  110. // in a texture.
  111. //
  112. // D3DX_CHANNEL_RED
  113. //     Indicates the red channel should be used
  114. // D3DX_CHANNEL_BLUE
  115. //     Indicates the blue channel should be used
  116. // D3DX_CHANNEL_GREEN
  117. //     Indicates the green channel should be used
  118. // D3DX_CHANNEL_ALPHA
  119. //     Indicates the alpha channel should be used
  120. // D3DX_CHANNEL_LUMINANCE
  121. //     Indicates the luminaces of the red green and blue channels should be
  122. //     used.
  123. //
  124. //----------------------------------------------------------------------------
  125. const
  126.   D3DX_CHANNEL_RED            = (1 shl 0);
  127.   {$EXTERNALSYM D3DX_CHANNEL_RED}
  128.   D3DX_CHANNEL_BLUE           = (1 shl 1);
  129.   {$EXTERNALSYM D3DX_CHANNEL_BLUE}
  130.   D3DX_CHANNEL_GREEN          = (1 shl 2);
  131.   {$EXTERNALSYM D3DX_CHANNEL_GREEN}
  132.   D3DX_CHANNEL_ALPHA          = (1 shl 3);
  133.   {$EXTERNALSYM D3DX_CHANNEL_ALPHA}
  134.   D3DX_CHANNEL_LUMINANCE      = (1 shl 4);
  135.   {$EXTERNALSYM D3DX_CHANNEL_LUMINANCE}
  136. //----------------------------------------------------------------------------
  137. // D3DXIMAGE_FILEFORMAT:
  138. // ---------------------
  139. // This enum is used to describe supported image file formats.
  140. //
  141. //----------------------------------------------------------------------------
  142. type
  143.   PD3DXImageFileFormat = ^TD3DXImageFileFormat;
  144.   _D3DXIMAGE_FILEFORMAT = (
  145.     D3DXIFF_BMP        {= 0},
  146.     D3DXIFF_JPG        {= 1},
  147.     D3DXIFF_TGA        {= 2},
  148.     D3DXIFF_PNG        {= 3},
  149.     D3DXIFF_DDS        {= 4},
  150.     D3DXIFF_PPM        {= 5},
  151.     D3DXIFF_DIB        {= 6}
  152.   );
  153.   {$EXTERNALSYM _D3DXIMAGE_FILEFORMAT}
  154.   D3DXIMAGE_FILEFORMAT = _D3DXIMAGE_FILEFORMAT;
  155.   {$EXTERNALSYM D3DXIMAGE_FILEFORMAT}
  156.   TD3DXImageFileFormat = _D3DXIMAGE_FILEFORMAT;
  157. //----------------------------------------------------------------------------
  158. // LPD3DXFILL2D and LPD3DXFILL3D:
  159. // ------------------------------
  160. // Function types used by the texture fill functions.
  161. //
  162. // Parameters:
  163. //  pOut
  164. //      Pointer to a vector which the function uses to return its result.
  165. //      X,Y,Z,W will be mapped to R,G,B,A respectivly.
  166. //  pTexCoord
  167. //      Pointer to a vector containing the coordinates of the texel currently
  168. //      being evaluated.  Textures and VolumeTexture texcoord components
  169. //      range from 0 to 1. CubeTexture texcoord component range from -1 to 1.
  170. //  pTexelSize
  171. //      Pointer to a vector containing the dimensions of the current texel.
  172. //  pData
  173. //      Pointer to user data.
  174. //
  175. //----------------------------------------------------------------------------
  176. type
  177.   // typedef VOID (*LPD3DXFILL2D)(D3DXVECTOR4 *pOut, D3DXVECTOR2 *pTexCoord, D3DXVECTOR2 *pTexelSize, LPVOID pData);
  178.   LPD3DXFILL2D = procedure (out pOut: TD3DXVector4; const pTexCoord, pTexelSize: TD3DXVector2; var pData);
  179.   {$EXTERNALSYM LPD3DXFILL2D}
  180.   TD3DXFill2D = LPD3DXFILL2D;
  181.   // typedef VOID (*LPD3DXFILL3D)(D3DXVECTOR4 *pOut, D3DXVECTOR3 *pTexCoord, D3DXVECTOR3 *pTexelSize, LPVOID pData);
  182.   LPD3DXFILL3D = procedure (out pOut: TD3DXVector4; const pTexCoord, pTexelSize: TD3DXVector3; var pData);
  183.   {$EXTERNALSYM LPD3DXFILL3D}
  184.   TD3DXFill3D = LPD3DXFILL3D;
  185. //----------------------------------------------------------------------------
  186. // D3DXIMAGE_INFO:
  187. // ---------------
  188. // This structure is used to return a rough description of what the
  189. // the original contents of an image file looked like.
  190. //
  191. //  Width
  192. //      Width of original image in pixels
  193. //  Height
  194. //      Height of original image in pixels
  195. //  Depth
  196. //      Depth of original image in pixels
  197. //  MipLevels
  198. //      Number of mip levels in original image
  199. //  Format
  200. //      D3D format which most closely describes the data in original image
  201. //  ResourceType
  202. //      D3DRESOURCETYPE representing the type of texture stored in the file.
  203. //      D3DRTYPE_TEXTURE, D3DRTYPE_VOLUMETEXTURE, or D3DRTYPE_CUBETEXTURE.
  204. //  ImageFileFormat
  205. //      D3DXIMAGE_FILEFORMAT representing the format of the image file.
  206. //
  207. //----------------------------------------------------------------------------
  208. type
  209.   PD3DXImageInfo = ^TD3DXImageInfo;
  210.   _D3DXIMAGE_INFO = packed record
  211.     Width:      LongWord;
  212.     Height:     LongWord;
  213.     Depth:      LongWord;
  214.     MipLevels:  LongWord;
  215.     Format:     TD3DFormat;
  216.     ResourceType: TD3DResourceType;
  217.     ImageFileFormat: TD3DXImageFileFormat;
  218.   end;
  219.   {$EXTERNALSYM _D3DXIMAGE_INFO}
  220.   D3DXIMAGE_INFO = _D3DXIMAGE_INFO;
  221.   {$EXTERNALSYM D3DXIMAGE_INFO}
  222.   TD3DXImageInfo = _D3DXIMAGE_INFO;
  223. //////////////////////////////////////////////////////////////////////////////
  224. // Image File APIs ///////////////////////////////////////////////////////////
  225. //////////////////////////////////////////////////////////////////////////////
  226. //----------------------------------------------------------------------------
  227. // GetImageInfoFromFile/Resource:
  228. // ------------------------------
  229. // Fills in a D3DXIMAGE_INFO struct with information about an image file.
  230. //
  231. // Parameters:
  232. //  pSrcFile
  233. //      File name of the source image.
  234. //  pSrcModule
  235. //      Module where resource is located, or NULL for module associated
  236. //      with image the os used to create the current process.
  237. //  pSrcResource
  238. //      Resource name
  239. //  pSrcData
  240. //      Pointer to file in memory.
  241. //  SrcDataSize
  242. //      Size in bytes of file in memory.
  243. //  pSrcInfo
  244. //      Pointer to a D3DXIMAGE_INFO structure to be filled in with the
  245. //      description of the data in the source image file.
  246. //
  247. //----------------------------------------------------------------------------
  248. function D3DXGetImageInfoFromFileA(
  249.   pSrcFile: PAnsiChar;
  250.   out pSrcInfo: TD3DXImageInfo): HResult; stdcall; external d3dx8dll name 'D3DXGetImageInfoFromFileA';
  251. {$EXTERNALSYM D3DXGetImageInfoFromFileA}
  252. function D3DXGetImageInfoFromFileW(
  253.   pSrcFile: PWideChar;
  254.   out pSrcInfo: TD3DXImageInfo): HResult; stdcall; external d3dx8dll name 'D3DXGetImageInfoFromFileW';
  255. {$EXTERNALSYM D3DXGetImageInfoFromFileW}
  256. function D3DXGetImageInfoFromFile(
  257.   pSrcFile: PChar;
  258.   out pSrcInfo: TD3DXImageInfo): HResult; stdcall; external d3dx8dll name 'D3DXGetImageInfoFromFileA';
  259. {$EXTERNALSYM D3DXGetImageInfoFromFile}
  260. function D3DXGetImageInfoFromResourceA(
  261.   hSrcModule: HModule;
  262.   pSrcResource: PAnsiChar;
  263.   out pSrcInfo: TD3DXImageInfo): HResult; stdcall; external d3dx8dll name 'D3DXGetImageInfoFromResourceA';
  264. {$EXTERNALSYM D3DXGetImageInfoFromResourceA}
  265. function D3DXGetImageInfoFromResourceW(
  266.   hSrcModule: HModule;
  267.   pSrcResource: PWideChar;
  268.   out pSrcInfo: TD3DXImageInfo): HResult; stdcall; external d3dx8dll name 'D3DXGetImageInfoFromResourceW';
  269. {$EXTERNALSYM D3DXGetImageInfoFromResourceW}
  270. function D3DXGetImageInfoFromResource(
  271.   hSrcModule: HModule;
  272.   pSrcResource: PChar;
  273.   out pSrcInfo: TD3DXImageInfo): HResult; stdcall; external d3dx8dll name 'D3DXGetImageInfoFromResourceA';
  274. {$EXTERNALSYM D3DXGetImageInfoFromResource}
  275. function D3DXGetImageInfoFromFileInMemory(
  276.   const pSrcData;
  277.   SrcDataSize: LongWord;
  278.   out pSrcInfo: TD3DXImageInfo): HResult; stdcall; external d3dx8dll;
  279. {$EXTERNALSYM D3DXGetImageInfoFromFileInMemory}
  280. //////////////////////////////////////////////////////////////////////////////
  281. // Load/Save Surface APIs ////////////////////////////////////////////////////
  282. //////////////////////////////////////////////////////////////////////////////
  283. //----------------------------------------------------------------------------
  284. // D3DXLoadSurfaceFromFile/Resource:
  285. // ---------------------------------
  286. // Load surface from a file or resource
  287. //
  288. // Parameters:
  289. //  pDestSurface
  290. //      Destination surface, which will receive the image.
  291. //  pDestPalette
  292. //      Destination palette of 256 colors, or NULL
  293. //  pDestRect
  294. //      Destination rectangle, or NULL for entire surface
  295. //  pSrcFile
  296. //      File name of the source image.
  297. //  pSrcModule
  298. //      Module where resource is located, or NULL for module associated
  299. //      with image the os used to create the current process.
  300. //  pSrcResource
  301. //      Resource name
  302. //  pSrcData
  303. //      Pointer to file in memory.
  304. //  SrcDataSize
  305. //      Size in bytes of file in memory.
  306. //  pSrcRect
  307. //      Source rectangle, or NULL for entire image
  308. //  Filter
  309. //      D3DX_FILTER flags controlling how the image is filtered.
  310. //      Or D3DX_DEFAULT for D3DX_FILTER_TRIANGLE.
  311. //  ColorKey
  312. //      Color to replace with transparent black, or 0 to disable colorkey.
  313. //      This is always a 32-bit ARGB color, independent of the source image
  314. //      format.  Alpha is significant, and should usually be set to FF for
  315. //      opaque colorkeys.  (ex. Opaque black == 0xff000000)
  316. //  pSrcInfo
  317. //      Pointer to a D3DXIMAGE_INFO structure to be filled in with the
  318. //      description of the data in the source image file, or NULL.
  319. //
  320. //----------------------------------------------------------------------------
  321. function D3DXLoadSurfaceFromFileA(
  322.   pDestSurface: IDirect3DSurface8;
  323.   pDestPalette: PPaletteEntry;
  324.   pDestRect: PRect;
  325.   pSrcFile: PAnsiChar;
  326.   pSrcRect: PRect;
  327.   Filter: DWord;
  328.   ColorKey: TD3DColor;
  329.   pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx8dll name 'D3DXLoadSurfaceFromFileA';
  330. {$EXTERNALSYM D3DXLoadSurfaceFromFileA}
  331. function D3DXLoadSurfaceFromFileW(
  332.   pDestSurface: IDirect3DSurface8;
  333.   pDestPalette: PPaletteEntry;
  334.   pDestRect: PRect;
  335.   pSrcFile: PWideChar;
  336.   pSrcRect: PRect;
  337.   Filter: DWord;
  338.   ColorKey: TD3DColor;
  339.   pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx8dll name 'D3DXLoadSurfaceFromFileW';
  340. {$EXTERNALSYM D3DXLoadSurfaceFromFileW}
  341. function D3DXLoadSurfaceFromFile(
  342.   pDestSurface: IDirect3DSurface8;
  343.   pDestPalette: PPaletteEntry;
  344.   pDestRect: PRect;
  345.   pSrcFile: PChar;
  346.   pSrcRect: PRect;
  347.   Filter: DWord;
  348.   ColorKey: TD3DColor;
  349.   pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx8dll name 'D3DXLoadSurfaceFromFileA';
  350. {$EXTERNALSYM D3DXLoadSurfaceFromFile}
  351. function D3DXLoadSurfaceFromResourceA(
  352.   pDestSurface: IDirect3DSurface8;
  353.   pDestPalette: PPaletteEntry;
  354.   pDestRect: PRect;
  355.   hSrcModule: HModule;
  356.   pSrcResource: PAnsiChar;
  357.   pSrcRect: PRect;
  358.   Filter: DWord;
  359.   ColorKey: TD3DColor;
  360.   pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx8dll name 'D3DXLoadSurfaceFromResourceA';
  361. {$EXTERNALSYM D3DXLoadSurfaceFromResourceA}
  362. function D3DXLoadSurfaceFromResourceW(
  363.   pDestSurface: IDirect3DSurface8;
  364.   pDestPalette: PPaletteEntry;
  365.   pDestRect: PRect;
  366.   hSrcModule: HModule;
  367.   pSrcResource: PWideChar;
  368.   pSrcRect: PRect;
  369.   Filter: DWord;
  370.   ColorKey: TD3DColor;
  371.   pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx8dll name 'D3DXLoadSurfaceFromResourceW';
  372. {$EXTERNALSYM D3DXLoadSurfaceFromResourceW}
  373. function D3DXLoadSurfaceFromResource(
  374.   pDestSurface: IDirect3DSurface8;
  375.   pDestPalette: PPaletteEntry;
  376.   pDestRect: PRect;
  377.   hSrcModule: HModule;
  378.   pSrcResource: PChar;
  379.   pSrcRect: PRect;
  380.   Filter: DWord;
  381.   ColorKey: TD3DColor;
  382.   pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx8dll name 'D3DXLoadSurfaceFromResourceA';
  383. {$EXTERNALSYM D3DXLoadSurfaceFromResource}
  384. function D3DXLoadSurfaceFromFileInMemory(
  385.   pDestSurface: IDirect3DSurface8;
  386.   pDestPalette: PPaletteEntry;
  387.   pDestRect: PRect;
  388.   const pSrcData;
  389.   SrcDataSize: LongWord;
  390.   pSrcRect: PRect;
  391.   Filter: DWord;
  392.   ColorKey: TD3DColor;
  393.   pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx8dll;
  394. {$EXTERNALSYM D3DXLoadSurfaceFromFileInMemory}
  395. //----------------------------------------------------------------------------
  396. // D3DXLoadSurfaceFromSurface:
  397. // ---------------------------
  398. // Load surface from another surface (with color conversion)
  399. //
  400. // Parameters:
  401. //  pDestSurface
  402. //      Destination surface, which will receive the image.
  403. //  pDestPalette
  404. //      Destination palette of 256 colors, or NULL
  405. //  pDestRect
  406. //      Destination rectangle, or NULL for entire surface
  407. //  pSrcSurface
  408. //      Source surface
  409. //  pSrcPalette
  410. //      Source palette of 256 colors, or NULL
  411. //  pSrcRect
  412. //      Source rectangle, or NULL for entire surface
  413. //  Filter
  414. //      D3DX_FILTER flags controlling how the image is filtered.
  415. //      Or D3DX_DEFAULT for D3DX_FILTER_TRIANGLE.
  416. //  ColorKey
  417. //      Color to replace with transparent black, or 0 to disable colorkey.
  418. //      This is always a 32-bit ARGB color, independent of the source image
  419. //      format.  Alpha is significant, and should usually be set to FF for
  420. //      opaque colorkeys.  (ex. Opaque black == 0xff000000)
  421. //
  422. //----------------------------------------------------------------------------
  423. function D3DXLoadSurfaceFromSurface(
  424.   pDestSurface: IDirect3DSurface8;
  425.   pDestPalette: PPaletteEntry;
  426.   pDestRect: PRect;
  427.   pSrcSurface: IDirect3DSurface8;
  428.   pSrcPalette: PPaletteEntry;
  429.   pSrcRect: PRect;
  430.   Filter: DWord;
  431.   ColorKey: TD3DColor): HResult; stdcall; external d3dx8dll;
  432. {$EXTERNALSYM D3DXLoadSurfaceFromSurface}
  433. //----------------------------------------------------------------------------
  434. // D3DXLoadSurfaceFromMemory:
  435. // ---------------------------
  436. // Load surface from memory.
  437. //
  438. // Parameters:
  439. //  pDestSurface
  440. //      Destination surface, which will receive the image.
  441. //  pDestPalette
  442. //      Destination palette of 256 colors, or NULL
  443. //  pDestRect
  444. //      Destination rectangle, or NULL for entire surface
  445. //  pSrcMemory
  446. //      Pointer to the top-left corner of the source image in memory
  447. //  SrcFormat
  448. //      Pixel format of the source image.
  449. //  SrcPitch
  450. //      Pitch of source image, in bytes.  For DXT formats, this number
  451. //      should represent the width of one row of cells, in bytes.
  452. //  pSrcPalette
  453. //      Source palette of 256 colors, or NULL
  454. //  pSrcRect
  455. //      Source rectangle.
  456. //  Filter
  457. //      D3DX_FILTER flags controlling how the image is filtered.
  458. //      Or D3DX_DEFAULT for D3DX_FILTER_TRIANGLE.
  459. //  ColorKey
  460. //      Color to replace with transparent black, or 0 to disable colorkey.
  461. //      This is always a 32-bit ARGB color, independent of the source image
  462. //      format.  Alpha is significant, and should usually be set to FF for
  463. //      opaque colorkeys.  (ex. Opaque black == 0xff000000)
  464. //
  465. //----------------------------------------------------------------------------
  466. function D3DXLoadSurfaceFromMemory(
  467.   pDestSurface: IDirect3DSurface8;
  468.   pDestPalette: PPaletteEntry;
  469.   pDestRect: PRect;
  470.   const pSrcMemory;
  471.   SrcFormat: TD3DFormat;
  472.   SrcPitch: LongWord;
  473.   pSrcPalette: PPaletteEntry;
  474.   pSrcRect: PRect;
  475.   Filter: DWord;
  476.   ColorKey: TD3DColor): HResult; stdcall; external d3dx8dll;
  477. {$EXTERNALSYM D3DXLoadSurfaceFromMemory}
  478. //----------------------------------------------------------------------------
  479. // D3DXSaveSurfaceToFile:
  480. // ----------------------
  481. // Save a surface to a image file.
  482. //
  483. // Parameters:
  484. //  pDestFile
  485. //      File name of the destination file
  486. //  DestFormat
  487. //      D3DXIMAGE_FILEFORMAT specifying file format to use when saving.
  488. //  pSrcSurface
  489. //      Source surface, containing the image to be saved
  490. //  pSrcPalette
  491. //      Source palette of 256 colors, or NULL
  492. //  pSrcRect
  493. //      Source rectangle, or NULL for the entire image
  494. //
  495. //----------------------------------------------------------------------------
  496. function D3DXSaveSurfaceToFileA(
  497.   pDestFile: PAnsiChar;
  498.   DestFormat: TD3DXImageFileFormat;
  499.   pSrcSurface: IDirect3DSurface8;
  500.   pSrcPalette: PPaletteEntry;
  501.   pSrcRect: PRect): HResult; stdcall; external d3dx8dll name 'D3DXSaveSurfaceToFileA';
  502. {$EXTERNALSYM D3DXSaveSurfaceToFileA}
  503. function D3DXSaveSurfaceToFileW(
  504.   pDestFile: PWideChar;
  505.   DestFormat: TD3DXImageFileFormat;
  506.   pSrcSurface: IDirect3DSurface8;
  507.   pSrcPalette: PPaletteEntry;
  508.   pSrcRect: PRect): HResult; stdcall; external d3dx8dll name 'D3DXSaveSurfaceToFileW';
  509. {$EXTERNALSYM D3DXSaveSurfaceToFileW}
  510. function D3DXSaveSurfaceToFile(
  511.   pDestFile: PChar;
  512.   DestFormat: TD3DXImageFileFormat;
  513.   pSrcSurface: IDirect3DSurface8;
  514.   pSrcPalette: PPaletteEntry;
  515.   pSrcRect: PRect): HResult; stdcall; external d3dx8dll name 'D3DXSaveSurfaceToFileA';
  516. {$EXTERNALSYM D3DXSaveSurfaceToFile}
  517. //////////////////////////////////////////////////////////////////////////////
  518. // Load/Save Volume APIs /////////////////////////////////////////////////////
  519. //////////////////////////////////////////////////////////////////////////////
  520. //----------------------------------------------------------------------------
  521. // D3DXLoadVolumeFromFile/Resource:
  522. // --------------------------------
  523. // Load volume from a file or resource
  524. //
  525. // Parameters:
  526. //  pDestVolume
  527. //      Destination volume, which will receive the image.
  528. //  pDestPalette
  529. //      Destination palette of 256 colors, or NULL
  530. //  pDestBox
  531. //      Destination box, or NULL for entire volume
  532. //  pSrcFile
  533. //      File name of the source image.
  534. //  pSrcModule
  535. //      Module where resource is located, or NULL for module associated
  536. //      with image the os used to create the current process.
  537. //  pSrcResource
  538. //      Resource name
  539. //  pSrcData
  540. //      Pointer to file in memory.
  541. //  SrcDataSize
  542. //      Size in bytes of file in memory.
  543. //  pSrcBox
  544. //      Source box, or NULL for entire image
  545. //  Filter
  546. //      D3DX_FILTER flags controlling how the image is filtered.
  547. //      Or D3DX_DEFAULT for D3DX_FILTER_TRIANGLE.
  548. //  ColorKey
  549. //      Color to replace with transparent black, or 0 to disable colorkey.
  550. //      This is always a 32-bit ARGB color, independent of the source image
  551. //      format.  Alpha is significant, and should usually be set to FF for
  552. //      opaque colorkeys.  (ex. Opaque black == 0xff000000)
  553. //  pSrcInfo
  554. //      Pointer to a D3DXIMAGE_INFO structure to be filled in with the
  555. //      description of the data in the source image file, or NULL.
  556. //
  557. //----------------------------------------------------------------------------
  558. function D3DXLoadVolumeFromFileA(
  559.   pDestVolume: IDirect3DVolume8;
  560.   pDestPalette: PPaletteEntry;
  561.   pDestBox: TD3DBox;
  562.   pSrcFile: PAnsiChar;
  563.   pSrcBox: TD3DBox;
  564.   Filter: DWord;
  565.   ColorKey: TD3DColor;
  566.   pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx8dll name 'D3DXLoadVolumeFromFileA';
  567. {$EXTERNALSYM D3DXLoadVolumeFromFileA}
  568. function D3DXLoadVolumeFromFileW(
  569.   pDestVolume: IDirect3DVolume8;
  570.   pDestPalette: PPaletteEntry;
  571.   pDestBox: TD3DBox;
  572.   pSrcFile: PWideChar;
  573.   pSrcBox: TD3DBox;
  574.   Filter: DWord;
  575.   ColorKey: TD3DColor;
  576.   pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx8dll name 'D3DXLoadVolumeFromFileW';
  577. {$EXTERNALSYM D3DXLoadVolumeFromFileW}
  578. function D3DXLoadVolumeFromFile(
  579.   pDestVolume: IDirect3DVolume8;
  580.   pDestPalette: PPaletteEntry;
  581.   pDestBox: TD3DBox;
  582.   pSrcFile: PChar;
  583.   pSrcBox: TD3DBox;
  584.   Filter: DWord;
  585.   ColorKey: TD3DColor;
  586.   pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx8dll name 'D3DXLoadVolumeFromFileA';
  587. {$EXTERNALSYM D3DXLoadVolumeFromFile}
  588. function D3DXLoadVolumeFromResourceA(
  589.   pDestVolume: IDirect3DVolume8;
  590.   pDestPalette: PPaletteEntry;
  591.   pDestBox: TD3DBox;
  592.   hSrcModule: HModule;
  593.   pSrcResource: PAnsiChar;
  594.   pSrcBox: TD3DBox;
  595.   Filter: DWord;
  596.   ColorKey: TD3DColor;
  597.   pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx8dll name 'D3DXLoadVolumeFromResourceA';
  598. {$EXTERNALSYM D3DXLoadVolumeFromResourceA}
  599. function D3DXLoadVolumeFromResourceW(
  600.   pDestVolume: IDirect3DVolume8;
  601.   pDestPalette: PPaletteEntry;
  602.   pDestBox: TD3DBox;
  603.   hSrcModule: HModule;
  604.   pSrcResource: PWideChar;
  605.   pSrcBox: TD3DBox;
  606.   Filter: DWord;
  607.   ColorKey: TD3DColor;
  608.   pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx8dll name 'D3DXLoadVolumeFromResourceW';
  609. {$EXTERNALSYM D3DXLoadVolumeFromResourceW}
  610. function D3DXLoadVolumeFromResource(
  611.   pDestVolume: IDirect3DVolume8;
  612.   pDestPalette: PPaletteEntry;
  613.   pDestBox: TD3DBox;
  614.   hSrcModule: HModule;
  615.   pSrcResource: PChar;
  616.   pSrcBox: TD3DBox;
  617.   Filter: DWord;
  618.   ColorKey: TD3DColor;
  619.   pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx8dll name 'D3DXLoadVolumeFromResourceA';
  620. {$EXTERNALSYM D3DXLoadVolumeFromResource}
  621. function D3DXLoadVolumeFromFileInMemory(
  622.   pDestVolume: IDirect3DVolume8;
  623.   pDestPalette: PPaletteEntry;
  624.   pDestBox: TD3DBox;
  625.   const pSrcData;
  626.   SrcDataSize: LongWord;
  627.   pSrcBox: TD3DBox;
  628.   Filter: DWord;
  629.   ColorKey: TD3DColor;
  630.   pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx8dll;
  631. {$EXTERNALSYM D3DXLoadVolumeFromFileInMemory}
  632. //----------------------------------------------------------------------------
  633. // D3DXLoadVolumeFromVolume:
  634. // ---------------------------
  635. // Load volume from another volume (with color conversion)
  636. //
  637. // Parameters:
  638. //  pDestVolume
  639. //      Destination volume, which will receive the image.
  640. //  pDestPalette
  641. //      Destination palette of 256 colors, or NULL
  642. //  pDestBox
  643. //      Destination box, or NULL for entire volume
  644. //  pSrcVolume
  645. //      Source volume
  646. //  pSrcPalette
  647. //      Source palette of 256 colors, or NULL
  648. //  pSrcBox
  649. //      Source box, or NULL for entire volume
  650. //  Filter
  651. //      D3DX_FILTER flags controlling how the image is filtered.
  652. //      Or D3DX_DEFAULT for D3DX_FILTER_TRIANGLE.
  653. //  ColorKey
  654. //      Color to replace with transparent black, or 0 to disable colorkey.
  655. //      This is always a 32-bit ARGB color, independent of the source image
  656. //      format.  Alpha is significant, and should usually be set to FF for
  657. //      opaque colorkeys.  (ex. Opaque black == 0xff000000)
  658. //
  659. //----------------------------------------------------------------------------
  660. function D3DXLoadVolumeFromVolume(
  661.   pDestVolume: IDirect3DVolume8;
  662.   pDestPalette: PPaletteEntry;
  663.   pDestBox: TD3DBox;
  664.   pSrcVolume: IDirect3DVolume8;
  665.   pSrcPalette: PPaletteEntry;
  666.   pSrcBox: TD3DBox;
  667.   Filter: DWord;
  668.   ColorKey: TD3DColor): HResult; stdcall; external d3dx8dll;
  669. {$EXTERNALSYM D3DXLoadVolumeFromVolume}
  670. //----------------------------------------------------------------------------
  671. // D3DXLoadVolumeFromMemory:
  672. // ---------------------------
  673. // Load volume from memory.
  674. //
  675. // Parameters:
  676. //  pDestVolume
  677. //      Destination volume, which will receive the image.
  678. //  pDestPalette
  679. //      Destination palette of 256 colors, or NULL
  680. //  pDestBox
  681. //      Destination box, or NULL for entire volume
  682. //  pSrcMemory
  683. //      Pointer to the top-left corner of the source volume in memory
  684. //  SrcFormat
  685. //      Pixel format of the source volume.
  686. //  SrcRowPitch
  687. //      Pitch of source image, in bytes.  For DXT formats, this number
  688. //      should represent the size of one row of cells, in bytes.
  689. //  SrcSlicePitch
  690. //      Pitch of source image, in bytes.  For DXT formats, this number
  691. //      should represent the size of one slice of cells, in bytes.
  692. //  pSrcPalette
  693. //      Source palette of 256 colors, or NULL
  694. //  pSrcBox
  695. //      Source box.
  696. //  Filter
  697. //      D3DX_FILTER flags controlling how the image is filtered.
  698. //      Or D3DX_DEFAULT for D3DX_FILTER_TRIANGLE.
  699. //  ColorKey
  700. //      Color to replace with transparent black, or 0 to disable colorkey.
  701. //      This is always a 32-bit ARGB color, independent of the source image
  702. //      format.  Alpha is significant, and should usually be set to FF for
  703. //      opaque colorkeys.  (ex. Opaque black == 0xff000000)
  704. //
  705. //----------------------------------------------------------------------------
  706. function D3DXLoadVolumeFromMemory(
  707.   pDestVolume: IDirect3DVolume8;
  708.   pDestPalette: PPaletteEntry;
  709.   pDestBox: TD3DBox;
  710.   const pSrcMemory;
  711.   SrcFormat: TD3DFormat;
  712.   SrcRowPitch: LongWord;
  713.   SrcSlicePitch: LongWord;
  714.   pSrcPalette: PPaletteEntry;
  715.   pSrcBox: TD3DBox;
  716.   Filter: DWord;
  717.   ColorKey: TD3DColor): HResult; stdcall; external d3dx8dll;
  718. {$EXTERNALSYM D3DXLoadVolumeFromMemory}
  719. //----------------------------------------------------------------------------
  720. // D3DXSaveVolumeToFile:
  721. // ---------------------
  722. // Save a volume to a image file.
  723. //
  724. // Parameters:
  725. //  pDestFile
  726. //      File name of the destination file
  727. //  DestFormat
  728. //      D3DXIMAGE_FILEFORMAT specifying file format to use when saving.
  729. //  pSrcVolume
  730. //      Source volume, containing the image to be saved
  731. //  pSrcPalette
  732. //      Source palette of 256 colors, or NULL
  733. //  pSrcBox
  734. //      Source box, or NULL for the entire volume
  735. //
  736. //----------------------------------------------------------------------------
  737. function D3DXSaveVolumeToFileA(
  738.   pDestFile: PAnsiChar;
  739.   DestFormat: TD3DXImageFileFormat;
  740.   pSrcVolume: IDirect3DVolume8;
  741.   pSrcPalette: PPaletteEntry;
  742.   pSrcBox: TD3DBox): HResult; stdcall; external d3dx8dll name 'D3DXSaveVolumeToFileA';
  743. {$EXTERNALSYM D3DXSaveVolumeToFileA}
  744. function D3DXSaveVolumeToFileW(
  745.   pDestFile: PWideChar;
  746.   DestFormat: TD3DXImageFileFormat;
  747.   pSrcVolume: IDirect3DVolume8;
  748.   pSrcPalette: PPaletteEntry;
  749.   pSrcBox: TD3DBox): HResult; stdcall; external d3dx8dll name 'D3DXSaveVolumeToFileW';
  750. {$EXTERNALSYM D3DXSaveVolumeToFileW}
  751. function D3DXSaveVolumeToFile(
  752.   pDestFile: PChar;
  753.   DestFormat: TD3DXImageFileFormat;
  754.   pSrcVolume: IDirect3DVolume8;
  755.   pSrcPalette: PPaletteEntry;
  756.   pSrcBox: TD3DBox): HResult; stdcall; external d3dx8dll name 'D3DXSaveVolumeToFileA';
  757. {$EXTERNALSYM D3DXSaveVolumeToFile}
  758. //////////////////////////////////////////////////////////////////////////////
  759. // Create/Save Texture APIs //////////////////////////////////////////////////
  760. //////////////////////////////////////////////////////////////////////////////
  761. //----------------------------------------------------------------------------
  762. // D3DXCheckTextureRequirements:
  763. // -----------------------------
  764. // Checks texture creation parameters.  If parameters are invalid, this
  765. // function returns corrected parameters.
  766. //
  767. // Parameters:
  768. //
  769. //  pDevice
  770. //      The D3D device to be used
  771. //  pWidth, pHeight, pDepth, pSize
  772. //      Desired size in pixels, or NULL.  Returns corrected size.
  773. //  pNumMipLevels
  774. //      Number of desired mipmap levels, or NULL.  Returns corrected number.
  775. //  Usage
  776. //      Texture usage flags
  777. //  pFormat
  778. //      Desired pixel format, or NULL.  Returns corrected format.
  779. //  Pool
  780. //      Memory pool to be used to create texture
  781. //
  782. //----------------------------------------------------------------------------
  783. function D3DXCheckTextureRequirements(
  784.   pDevice: IDirect3DDevice8;
  785.   pWidth: PLongWord;
  786.   pHeight: PLongWord;
  787.   pNumMipLevels: PLongWord;
  788.   Usage: DWord;
  789.   pFormat: PD3DFormat;
  790.   Pool: TD3DPool): HResult; stdcall; external d3dx8dll;
  791. {$EXTERNALSYM D3DXCheckTextureRequirements}
  792. function D3DXCheckCubeTextureRequirements(
  793.   pDevice: IDirect3DDevice8;
  794.   pSize: PLongWord;
  795.   pNumMipLevels: PLongWord;
  796.   Usage: DWord;
  797.   pFormat: PD3DFormat;
  798.   Pool: TD3DPool): HResult; stdcall; external d3dx8dll;
  799. {$EXTERNALSYM D3DXCheckCubeTextureRequirements}
  800. function D3DXCheckVolumeTextureRequirements(
  801.   pDevice: IDirect3DDevice8;
  802.   pWidth: PLongWord;
  803.   pHeight: PLongWord;
  804.   pDepth: PLongWord;
  805.   pNumMipLevels: PLongWord;
  806.   Usage: DWord;
  807.   pFormat: PD3DFormat;
  808.   Pool: TD3DPool): HResult; stdcall; external d3dx8dll;
  809. {$EXTERNALSYM D3DXCheckVolumeTextureRequirements}
  810. //----------------------------------------------------------------------------
  811. // D3DXCreateTexture:
  812. // ------------------
  813. // Create an empty texture
  814. //
  815. // Parameters:
  816. //
  817. //  pDevice
  818. //      The D3D device with which the texture is going to be used.
  819. //  Width, Height, Depth, Size
  820. //      size in pixels; these must be non-zero
  821. //  MipLevels
  822. //      number of mip levels desired; if zero or D3DX_DEFAULT, a complete
  823. //      mipmap chain will be created.
  824. //  Usage
  825. //      Texture usage flags
  826. //  Format
  827. //      Pixel format.
  828. //  Pool
  829. //      Memory pool to be used to create texture
  830. //  ppTexture, ppCubeTexture, ppVolumeTexture
  831. //      The texture object that will be created
  832. //
  833. //----------------------------------------------------------------------------
  834. function D3DXCreateTexture(
  835.   Device: IDirect3DDevice8;
  836.   Width: LongWord;
  837.   Height: LongWord;
  838.   MipLevels: LongWord;
  839.   Usage: DWord;
  840.   Format: TD3DFormat;
  841.   Pool: TD3DPool;
  842.   out ppTexture: IDirect3DTexture8): HResult; stdcall; external d3dx8dll;
  843. {$EXTERNALSYM D3DXCreateTexture}
  844. function D3DXCreateCubeTexture(
  845.   Device: IDirect3DDevice8;
  846.   Size: LongWord;
  847.   MipLevels: LongWord;
  848.   Usage: DWord;
  849.   Format: TD3DFormat;
  850.   Pool: TD3DPool;
  851.   out ppCubeTexture: IDirect3DCubeTexture8): HResult; stdcall; external d3dx8dll;
  852. {$EXTERNALSYM D3DXCreateCubeTexture}
  853. function D3DXCreateVolumeTexture(
  854.   Device: IDirect3DDevice8;
  855.   Width: LongWord;
  856.   Height: LongWord;
  857.   Depth: LongWord;
  858.   MipLevels: LongWord;
  859.   Usage: DWord;
  860.   Format: TD3DFormat;
  861.   Pool: TD3DPool;
  862.   out ppVolumeTexture: IDirect3DVolumeTexture8): HResult; stdcall; external d3dx8dll;
  863. {$EXTERNALSYM D3DXCreateVolumeTexture}
  864. //----------------------------------------------------------------------------
  865. // D3DXCreateTextureFromFile/Resource:
  866. // -----------------------------------
  867. // Create a texture object from a file or resource.
  868. //
  869. // Parameters:
  870. //
  871. //  pDevice
  872. //      The D3D device with which the texture is going to be used.
  873. //  pSrcFile
  874. //      File name.
  875. //  hSrcModule
  876. //      Module handle. if NULL, current module will be used.
  877. //  pSrcResource
  878. //      Resource name in module
  879. //  pvSrcData
  880. //      Pointer to file in memory.
  881. //  SrcDataSize
  882. //      Size in bytes of file in memory.
  883. //  Width, Height, Depth, Size
  884. //      Size in pixels; if zero or D3DX_DEFAULT, the size will be taken
  885. //      from the file.
  886. //  MipLevels
  887. //      Number of mip levels;  if zero or D3DX_DEFAULT, a complete mipmap
  888. //      chain will be created.
  889. //  Usage
  890. //      Texture usage flags
  891. //  Format
  892. //      Desired pixel format.  If D3DFMT_UNKNOWN, the format will be
  893. //      taken from the file.
  894. //  Pool
  895. //      Memory pool to be used to create texture
  896. //  Filter
  897. //      D3DX_FILTER flags controlling how the image is filtered.
  898. //      Or D3DX_DEFAULT for D3DX_FILTER_TRIANGLE.
  899. //  MipFilter
  900. //      D3DX_FILTER flags controlling how each miplevel is filtered.
  901. //      Or D3DX_DEFAULT for D3DX_FILTER_BOX,
  902. //  ColorKey
  903. //      Color to replace with transparent black, or 0 to disable colorkey.
  904. //      This is always a 32-bit ARGB color, independent of the source image
  905. //      format.  Alpha is significant, and should usually be set to FF for
  906. //      opaque colorkeys.  (ex. Opaque black == 0xff000000)
  907. //  pSrcInfo
  908. //      Pointer to a D3DXIMAGE_INFO structure to be filled in with the
  909. //      description of the data in the source image file, or NULL.
  910. //  pPalette
  911. //      256 color palette to be filled in, or NULL
  912. //  ppTexture, ppCubeTexture, ppVolumeTexture
  913. //      The texture object that will be created
  914. //
  915. //----------------------------------------------------------------------------
  916. // FromFile
  917. function D3DXCreateTextureFromFileA(
  918.   Device: IDirect3DDevice8;
  919.   pSrcFile: PAnsiChar;
  920.   out ppTexture: IDirect3DTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateTextureFromFileA';
  921. {$EXTERNALSYM D3DXCreateTextureFromFileA}
  922. function D3DXCreateTextureFromFileW(
  923.   Device: IDirect3DDevice8;
  924.   pSrcFile: PWideChar;
  925.   out ppTexture: IDirect3DTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateTextureFromFileW';
  926. {$EXTERNALSYM D3DXCreateTextureFromFileW}
  927. function D3DXCreateTextureFromFile(
  928.   Device: IDirect3DDevice8;
  929.   pSrcFile: PChar;
  930.   out ppTexture: IDirect3DTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateTextureFromFileA';
  931. {$EXTERNALSYM D3DXCreateTextureFromFile}
  932. function D3DXCreateCubeTextureFromFileA(
  933.   Device: IDirect3DDevice8;
  934.   pSrcFile: PAnsiChar;
  935.   out ppCubeTexture: IDirect3DCubeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateCubeTextureFromFileA';
  936. {$EXTERNALSYM D3DXCreateCubeTextureFromFileA}
  937. function D3DXCreateCubeTextureFromFileW(
  938.   Device: IDirect3DDevice8;
  939.   pSrcFile: PWideChar;
  940.   out ppCubeTexture: IDirect3DCubeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateCubeTextureFromFileW';
  941. {$EXTERNALSYM D3DXCreateCubeTextureFromFileW}
  942. function D3DXCreateCubeTextureFromFile(
  943.   Device: IDirect3DDevice8;
  944.   pSrcFile: PChar;
  945.   out ppCubeTexture: IDirect3DCubeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateCubeTextureFromFileA';
  946. {$EXTERNALSYM D3DXCreateCubeTextureFromFile}
  947. function D3DXCreateVolumeTextureFromFileA(
  948.   Device: IDirect3DDevice8;
  949.   pSrcFile: PAnsiChar;
  950.   out ppVolumeTexture: IDirect3DVolumeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateVolumeTextureFromFileA';
  951. {$EXTERNALSYM D3DXCreateVolumeTextureFromFileA}
  952. function D3DXCreateVolumeTextureFromFileW(
  953.   Device: IDirect3DDevice8;
  954.   pSrcFile: PWideChar;
  955.   out ppVolumeTexture: IDirect3DVolumeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateVolumeTextureFromFileW';
  956. {$EXTERNALSYM D3DXCreateVolumeTextureFromFileW}
  957. function D3DXCreateVolumeTextureFromFile(
  958.   Device: IDirect3DDevice8;
  959.   pSrcFile: PChar;
  960.   out ppVolumeTexture: IDirect3DVolumeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateVolumeTextureFromFileA';
  961. {$EXTERNALSYM D3DXCreateVolumeTextureFromFile}
  962. // FromResource
  963. function D3DXCreateTextureFromResourceA(
  964.   Device: IDirect3DDevice8;
  965.   hSrcModule: HModule;
  966.   pSrcResource: PAnsiChar;
  967.   out ppTexture: IDirect3DTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateTextureFromResourceA';
  968. {$EXTERNALSYM D3DXCreateTextureFromResourceA}
  969. function D3DXCreateTextureFromResourceW(
  970.   Device: IDirect3DDevice8;
  971.   hSrcModule: HModule;
  972.   pSrcResource: PWideChar;
  973.   out ppTexture: IDirect3DTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateTextureFromResourceW';
  974. {$EXTERNALSYM D3DXCreateTextureFromResourceW}
  975. function D3DXCreateTextureFromResource(
  976.   Device: IDirect3DDevice8;
  977.   hSrcModule: HModule;
  978.   pSrcResource: PChar;
  979.   out ppTexture: IDirect3DTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateTextureFromResourceA';
  980. {$EXTERNALSYM D3DXCreateTextureFromResource}
  981. function D3DXCreateCubeTextureFromResourceA(
  982.   Device: IDirect3DDevice8;
  983.   hSrcModule: HModule;
  984.   pSrcResource: PAnsiChar;
  985.   out ppCubeTexture: IDirect3DCubeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateCubeTextureFromResourceA';
  986. {$EXTERNALSYM D3DXCreateCubeTextureFromResourceA}
  987. function D3DXCreateCubeTextureFromResourceW(
  988.   Device: IDirect3DDevice8;
  989.   hSrcModule: HModule;
  990.   pSrcResource: PWideChar;
  991.   out ppCubeTexture: IDirect3DCubeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateCubeTextureFromResourceW';
  992. {$EXTERNALSYM D3DXCreateCubeTextureFromResourceW}
  993. function D3DXCreateCubeTextureFromResource(
  994.   Device: IDirect3DDevice8;
  995.   hSrcModule: HModule;
  996.   pSrcResource: PChar;
  997.   out ppCubeTexture: IDirect3DCubeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateCubeTextureFromResourceA';
  998. {$EXTERNALSYM D3DXCreateCubeTextureFromResource}
  999. function D3DXCreateVolumeTextureFromResourceA(
  1000.   Device: IDirect3DDevice8;
  1001.   hSrcModule: HModule;
  1002.   pSrcResource: PAnsiChar;
  1003.   out ppVolumeTexture: IDirect3DVolumeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateVolumeTextureFromResourceA';
  1004. {$EXTERNALSYM D3DXCreateVolumeTextureFromResourceA}
  1005. function D3DXCreateVolumeTextureFromResourceW(
  1006.   Device: IDirect3DDevice8;
  1007.   hSrcModule: HModule;
  1008.   pSrcResource: PWideChar;
  1009.   out ppVolumeTexture: IDirect3DVolumeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateVolumeTextureFromResourceW';
  1010. {$EXTERNALSYM D3DXCreateVolumeTextureFromResourceW}
  1011. function D3DXCreateVolumeTextureFromResource(
  1012.   Device: IDirect3DDevice8;
  1013.   hSrcModule: HModule;
  1014.   pSrcResource: PChar;
  1015.   out ppVolumeTexture: IDirect3DVolumeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateVolumeTextureFromResourceA';
  1016. {$EXTERNALSYM D3DXCreateVolumeTextureFromResource}
  1017. // FromFileEx
  1018. function D3DXCreateTextureFromFileExA(
  1019.   Device: IDirect3DDevice8;
  1020.   pSrcFile: PAnsiChar;
  1021.   Width: LongWord;
  1022.   Height: LongWord;
  1023.   MipLevels: LongWord;
  1024.   Usage: DWord;
  1025.   Format: TD3DFormat;
  1026.   Pool: TD3DPool;
  1027.   Filter: DWord;
  1028.   MipFilter: DWord;
  1029.   ColorKey: TD3DColor;
  1030.   pSrcInfo: PD3DXImageInfo;
  1031.   pPalette: PPaletteEntry;
  1032.   out ppTexture: IDirect3DTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateTextureFromFileExA';
  1033. {$EXTERNALSYM D3DXCreateTextureFromFileExA}
  1034. function D3DXCreateTextureFromFileExW(
  1035.   Device: IDirect3DDevice8;
  1036.   pSrcFile: PWideChar;
  1037.   Width: LongWord;
  1038.   Height: LongWord;
  1039.   MipLevels: LongWord;
  1040.   Usage: DWord;
  1041.   Format: TD3DFormat;
  1042.   Pool: TD3DPool;
  1043.   Filter: DWord;
  1044.   MipFilter: DWord;
  1045.   ColorKey: TD3DColor;
  1046.   pSrcInfo: PD3DXImageInfo;
  1047.   pPalette: PPaletteEntry;
  1048.   out ppTexture: IDirect3DTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateTextureFromFileExW';
  1049. {$EXTERNALSYM D3DXCreateTextureFromFileExW}
  1050. function D3DXCreateTextureFromFileEx(
  1051.   Device: IDirect3DDevice8;
  1052.   pSrcFile: PChar;
  1053.   Width: LongWord;
  1054.   Height: LongWord;
  1055.   MipLevels: LongWord;
  1056.   Usage: DWord;
  1057.   Format: TD3DFormat;
  1058.   Pool: TD3DPool;
  1059.   Filter: DWord;
  1060.   MipFilter: DWord;
  1061.   ColorKey: TD3DColor;
  1062.   pSrcInfo: PD3DXImageInfo;
  1063.   pPalette: PPaletteEntry;
  1064.   out ppTexture: IDirect3DTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateTextureFromFileExA';
  1065. {$EXTERNALSYM D3DXCreateTextureFromFileEx}
  1066. function D3DXCreateCubeTextureFromFileExA(
  1067.   Device: IDirect3DDevice8;
  1068.   pSrcFile: PAnsiChar;
  1069.   Size: LongWord;
  1070.   MipLevels: LongWord;
  1071.   Usage: DWord;
  1072.   Format: TD3DFormat;
  1073.   Pool: TD3DPool;
  1074.   Filter: DWord;
  1075.   MipFilter: DWord;
  1076.   ColorKey: TD3DColor;
  1077.   pSrcInfo: PD3DXImageInfo;
  1078.   pPalette: PPaletteEntry;
  1079.   out ppCubeTexture: IDirect3DCubeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateCubeTextureFromFileExA';
  1080. {$EXTERNALSYM D3DXCreateCubeTextureFromFileExA}
  1081. function D3DXCreateCubeTextureFromFileExW(
  1082.   Device: IDirect3DDevice8;
  1083.   pSrcFile: PWideChar;
  1084.   Size: LongWord;
  1085.   MipLevels: LongWord;
  1086.   Usage: DWord;
  1087.   Format: TD3DFormat;
  1088.   Pool: TD3DPool;
  1089.   Filter: DWord;
  1090.   MipFilter: DWord;
  1091.   ColorKey: TD3DColor;
  1092.   pSrcInfo: PD3DXImageInfo;
  1093.   pPalette: PPaletteEntry;
  1094.   out ppCubeTexture: IDirect3DCubeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateCubeTextureFromFileExW';
  1095. {$EXTERNALSYM D3DXCreateCubeTextureFromFileExW}
  1096. function D3DXCreateCubeTextureFromFileEx(
  1097.   Device: IDirect3DDevice8;
  1098.   pSrcFile: PChar;
  1099.   Size: LongWord;
  1100.   MipLevels: LongWord;
  1101.   Usage: DWord;
  1102.   Format: TD3DFormat;
  1103.   Pool: TD3DPool;
  1104.   Filter: DWord;
  1105.   MipFilter: DWord;
  1106.   ColorKey: TD3DColor;
  1107.   pSrcInfo: PD3DXImageInfo;
  1108.   pPalette: PPaletteEntry;
  1109.   out ppCubeTexture: IDirect3DCubeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateCubeTextureFromFileExA';
  1110. {$EXTERNALSYM D3DXCreateCubeTextureFromFileEx}
  1111. function D3DXCreateVolumeTextureFromFileExA(
  1112.   Device: IDirect3DDevice8;
  1113.   pSrcFile: PAnsiChar;
  1114.   Width: LongWord;
  1115.   Height: LongWord;
  1116.   Depth: LongWord;
  1117.   MipLevels: LongWord;
  1118.   Usage: DWord;
  1119.   Format: TD3DFormat;
  1120.   Pool: TD3DPool;
  1121.   Filter: DWord;
  1122.   MipFilter: DWord;
  1123.   ColorKey: TD3DColor;
  1124.   pSrcInfo: PD3DXImageInfo;
  1125.   pPalette: PPaletteEntry;
  1126.   out ppVolumeTexture: IDirect3DVolumeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateVolumeTextureFromFileExA';
  1127. {$EXTERNALSYM D3DXCreateVolumeTextureFromFileExA}
  1128. function D3DXCreateVolumeTextureFromFileExW(
  1129.   Device: IDirect3DDevice8;
  1130.   pSrcFile: PWideChar;
  1131.   Width: LongWord;
  1132.   Height: LongWord;
  1133.   Depth: LongWord;
  1134.   MipLevels: LongWord;
  1135.   Usage: DWord;
  1136.   Format: TD3DFormat;
  1137.   Pool: TD3DPool;
  1138.   Filter: DWord;
  1139.   MipFilter: DWord;
  1140.   ColorKey: TD3DColor;
  1141.   pSrcInfo: PD3DXImageInfo;
  1142.   pPalette: PPaletteEntry;
  1143.   out ppVolumeTexture: IDirect3DVolumeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateVolumeTextureFromFileExW';
  1144. {$EXTERNALSYM D3DXCreateVolumeTextureFromFileExW}
  1145. function D3DXCreateVolumeTextureFromFileEx(
  1146.   Device: IDirect3DDevice8;
  1147.   pSrcFile: PChar;
  1148.   Width: LongWord;
  1149.   Height: LongWord;
  1150.   Depth: LongWord;
  1151.   MipLevels: LongWord;
  1152.   Usage: DWord;
  1153.   Format: TD3DFormat;
  1154.   Pool: TD3DPool;
  1155.   Filter: DWord;
  1156.   MipFilter: DWord;
  1157.   ColorKey: TD3DColor;
  1158.   pSrcInfo: PD3DXImageInfo;
  1159.   pPalette: PPaletteEntry;
  1160.   out ppVolumeTexture: IDirect3DVolumeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateVolumeTextureFromFileExA';
  1161. {$EXTERNALSYM D3DXCreateVolumeTextureFromFileEx}
  1162. // FromResourceEx
  1163. function D3DXCreateTextureFromResourceExA(
  1164.   Device: IDirect3DDevice8;
  1165.   hSrcModule: HModule;
  1166.   pSrcResource: PAnsiChar;
  1167.   Width: LongWord;
  1168.   Height: LongWord;
  1169.   MipLevels: LongWord;
  1170.   Usage: DWord;
  1171.   Format: TD3DFormat;
  1172.   Pool: TD3DPool;
  1173.   Filter: DWord;
  1174.   MipFilter: DWord;
  1175.   ColorKey: TD3DColor;
  1176.   pSrcInfo: PD3DXImageInfo;
  1177.   pPalette: PPaletteEntry;
  1178.   out ppTexture: IDirect3DTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateTextureFromResourceExA';
  1179. {$EXTERNALSYM D3DXCreateTextureFromResourceExA}
  1180. function D3DXCreateTextureFromResourceExW(
  1181.   Device: IDirect3DDevice8;
  1182.   hSrcModule: HModule;
  1183.   pSrcResource: PWideChar;
  1184.   Width: LongWord;
  1185.   Height: LongWord;
  1186.   MipLevels: LongWord;
  1187.   Usage: DWord;
  1188.   Format: TD3DFormat;
  1189.   Pool: TD3DPool;
  1190.   Filter: DWord;
  1191.   MipFilter: DWord;
  1192.   ColorKey: TD3DColor;
  1193.   pSrcInfo: PD3DXImageInfo;
  1194.   pPalette: PPaletteEntry;
  1195.   out ppTexture: IDirect3DTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateTextureFromResourceExW';
  1196. {$EXTERNALSYM D3DXCreateTextureFromResourceExW}
  1197. function D3DXCreateTextureFromResourceEx(
  1198.   Device: IDirect3DDevice8;
  1199.   hSrcModule: HModule;
  1200.   pSrcResource: PChar;
  1201.   Width: LongWord;
  1202.   Height: LongWord;
  1203.   MipLevels: LongWord;
  1204.   Usage: DWord;
  1205.   Format: TD3DFormat;
  1206.   Pool: TD3DPool;
  1207.   Filter: DWord;
  1208.   MipFilter: DWord;
  1209.   ColorKey: TD3DColor;
  1210.   pSrcInfo: PD3DXImageInfo;
  1211.   pPalette: PPaletteEntry;
  1212.   out ppTexture: IDirect3DTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateTextureFromResourceExA';
  1213. {$EXTERNALSYM D3DXCreateTextureFromResourceEx}
  1214. function D3DXCreateCubeTextureFromResourceExA(
  1215.   Device: IDirect3DDevice8;
  1216.   hSrcModule: HModule;
  1217.   pSrcResource: PAnsiChar;
  1218.   Size: LongWord;
  1219.   MipLevels: LongWord;
  1220.   Usage: DWord;
  1221.   Format: TD3DFormat;
  1222.   Pool: TD3DPool;
  1223.   Filter: DWord;
  1224.   MipFilter: DWord;
  1225.   ColorKey: TD3DColor;
  1226.   pSrcInfo: PD3DXImageInfo;
  1227.   pPalette: PPaletteEntry;
  1228.   out ppCubeTexture: IDirect3DCubeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateCubeTextureFromResourceExA';
  1229. {$EXTERNALSYM D3DXCreateCubeTextureFromResourceExA}
  1230. function D3DXCreateCubeTextureFromResourceExW(
  1231.   Device: IDirect3DDevice8;
  1232.   hSrcModule: HModule;
  1233.   pSrcResource: PWideChar;
  1234.   Size: LongWord;
  1235.   MipLevels: LongWord;
  1236.   Usage: DWord;
  1237.   Format: TD3DFormat;
  1238.   Pool: TD3DPool;
  1239.   Filter: DWord;
  1240.   MipFilter: DWord;
  1241.   ColorKey: TD3DColor;
  1242.   pSrcInfo: PD3DXImageInfo;
  1243.   pPalette: PPaletteEntry;
  1244.   out ppCubeTexture: IDirect3DCubeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateCubeTextureFromResourceExW';
  1245. {$EXTERNALSYM D3DXCreateCubeTextureFromResourceExW}
  1246. function D3DXCreateCubeTextureFromResourceEx(
  1247.   Device: IDirect3DDevice8;
  1248.   hSrcModule: HModule;
  1249.   pSrcResource: PChar;
  1250.   Size: LongWord;
  1251.   MipLevels: LongWord;
  1252.   Usage: DWord;
  1253.   Format: TD3DFormat;
  1254.   Pool: TD3DPool;
  1255.   Filter: DWord;
  1256.   MipFilter: DWord;
  1257.   ColorKey: TD3DColor;
  1258.   pSrcInfo: PD3DXImageInfo;
  1259.   pPalette: PPaletteEntry;
  1260.   out ppCubeTexture: IDirect3DCubeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateCubeTextureFromResourceExA';
  1261. {$EXTERNALSYM D3DXCreateCubeTextureFromResourceEx}
  1262. function D3DXCreateVolumeTextureFromResourceExA(
  1263.   Device: IDirect3DDevice8;
  1264.   hSrcModule: HModule;
  1265.   pSrcResource: PAnsiChar;
  1266.   Width: LongWord;
  1267.   Height: LongWord;
  1268.   Depth: LongWord;
  1269.   MipLevels: LongWord;
  1270.   Usage: DWord;
  1271.   Format: TD3DFormat;
  1272.   Pool: TD3DPool;
  1273.   Filter: DWord;
  1274.   MipFilter: DWord;
  1275.   ColorKey: TD3DColor;
  1276.   pSrcInfo: PD3DXImageInfo;
  1277.   pPalette: PPaletteEntry;
  1278.   out ppVolumeTexture: IDirect3DVolumeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateVolumeTextureFromResourceExA';
  1279. {$EXTERNALSYM D3DXCreateVolumeTextureFromResourceExA}
  1280. function D3DXCreateVolumeTextureFromResourceExW(
  1281.   Device: IDirect3DDevice8;
  1282.   hSrcModule: HModule;
  1283.   pSrcResource: PWideChar;
  1284.   Width: LongWord;
  1285.   Height: LongWord;
  1286.   Depth: LongWord;
  1287.   MipLevels: LongWord;
  1288.   Usage: DWord;
  1289.   Format: TD3DFormat;
  1290.   Pool: TD3DPool;
  1291.   Filter: DWord;
  1292.   MipFilter: DWord;
  1293.   ColorKey: TD3DColor;
  1294.   pSrcInfo: PD3DXImageInfo;
  1295.   pPalette: PPaletteEntry;
  1296.   out ppVolumeTexture: IDirect3DVolumeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateVolumeTextureFromResourceExW';
  1297. {$EXTERNALSYM D3DXCreateVolumeTextureFromResourceExW}
  1298. function D3DXCreateVolumeTextureFromResourceEx(
  1299.   Device: IDirect3DDevice8;
  1300.   hSrcModule: HModule;
  1301.   pSrcResource: PChar;
  1302.   Width: LongWord;
  1303.   Height: LongWord;
  1304.   Depth: LongWord;
  1305.   MipLevels: LongWord;
  1306.   Usage: DWord;
  1307.   Format: TD3DFormat;
  1308.   Pool: TD3DPool;
  1309.   Filter: DWord;
  1310.   MipFilter: DWord;
  1311.   ColorKey: TD3DColor;
  1312.   pSrcInfo: PD3DXImageInfo;
  1313.   pPalette: PPaletteEntry;
  1314.   out ppVolumeTexture: IDirect3DVolumeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateVolumeTextureFromResourceExA';
  1315. {$EXTERNALSYM D3DXCreateVolumeTextureFromResourceEx}
  1316. // FromFileInMemory
  1317. function D3DXCreateTextureFromFileInMemory(
  1318.   Device: IDirect3DDevice8;
  1319.   const pSrcData;
  1320.   SrcDataSize: LongWord;
  1321.   out ppTexture: IDirect3DTexture8): HResult; stdcall; external d3dx8dll;
  1322. {$EXTERNALSYM D3DXCreateTextureFromFileInMemory}
  1323. function D3DXCreateCubeTextureFromFileInMemory(
  1324.   Device: IDirect3DDevice8;
  1325.   const pSrcData;
  1326.   SrcDataSize: LongWord;
  1327.   out ppCubeTexture: IDirect3DCubeTexture8): HResult; stdcall; external d3dx8dll;
  1328. {$EXTERNALSYM D3DXCreateCubeTextureFromFileInMemory}
  1329. function D3DXCreateVolumeTextureFromFileInMemory(
  1330.   Device: IDirect3DDevice8;
  1331.   const pSrcData;
  1332.   SrcDataSize: LongWord;
  1333.   out ppVolumeTexture: IDirect3DVolumeTexture8): HResult; stdcall; external d3dx8dll;
  1334. {$EXTERNALSYM D3DXCreateVolumeTextureFromFileInMemory}
  1335. // FromFileInMemoryEx
  1336. function D3DXCreateTextureFromFileInMemoryEx(
  1337.   Device: IDirect3DDevice8;
  1338.   const pSrcData;
  1339.   SrcDataSize: LongWord;
  1340.   Width: LongWord;
  1341.   Height: LongWord;
  1342.   MipLevels: LongWord;
  1343.   Usage: DWord;
  1344.   Format: TD3DFormat;
  1345.   Pool: TD3DPool;
  1346.   Filter: DWord;
  1347.   MipFilter: DWord;
  1348.   ColorKey: TD3DColor;
  1349.   pSrcInfo: PD3DXImageInfo;
  1350.   pPalette: PPaletteEntry;
  1351.   out ppTexture: IDirect3DTexture8): HResult; stdcall; external d3dx8dll;
  1352. {$EXTERNALSYM D3DXCreateTextureFromFileInMemoryEx}
  1353. function D3DXCreateCubeTextureFromFileInMemoryEx(
  1354.   Device: IDirect3DDevice8;
  1355.   const pSrcData;
  1356.   SrcDataSize: LongWord;
  1357.   Size: LongWord;
  1358.   MipLevels: LongWord;
  1359.   Usage: DWord;
  1360.   Format: TD3DFormat;
  1361.   Pool: TD3DPool;
  1362.   Filter: DWord;
  1363.   MipFilter: DWord;
  1364.   ColorKey: TD3DColor;
  1365.   pSrcInfo: PD3DXImageInfo;
  1366.   pPalette: PPaletteEntry;
  1367.   out ppCubeTexture: IDirect3DCubeTexture8): HResult; stdcall; external d3dx8dll;
  1368. {$EXTERNALSYM D3DXCreateCubeTextureFromFileInMemoryEx}
  1369. function D3DXCreateVolumeTextureFromFileInMemoryEx(
  1370.   Device: IDirect3DDevice8;
  1371.   const pSrcData;
  1372.   SrcDataSize: LongWord;
  1373.   Width: LongWord;
  1374.   Height: LongWord;
  1375.   Depth: LongWord;
  1376.   MipLevels: LongWord;
  1377.   Usage: DWord;
  1378.   Format: TD3DFormat;
  1379.   Pool: TD3DPool;
  1380.   Filter: DWord;
  1381.   MipFilter: DWord;
  1382.   ColorKey: TD3DColor;
  1383.   pSrcInfo: PD3DXImageInfo;
  1384.   pPalette: PPaletteEntry;
  1385.   out ppVolumeTexture: IDirect3DVolumeTexture8): HResult; stdcall; external d3dx8dll;
  1386. {$EXTERNALSYM D3DXCreateVolumeTextureFromFileInMemoryEx}
  1387. //----------------------------------------------------------------------------
  1388. // D3DXSaveTextureToFile:
  1389. // ----------------------
  1390. // Save a texture to a file.
  1391. //
  1392. // Parameters:
  1393. //  pDestFile
  1394. //      File name of the destination file
  1395. //  DestFormat
  1396. //      D3DXIMAGE_FILEFORMAT specifying file format to use when saving.
  1397. //  pSrcTexture
  1398. //      Source texture, containing the image to be saved
  1399. //  pSrcPalette
  1400. //      Source palette of 256 colors, or NULL
  1401. //
  1402. //----------------------------------------------------------------------------
  1403. function D3DXSaveTextureToFileA(
  1404.   pDestFile: PAnsiChar;
  1405.   DestFormat: TD3DXImageFileFormat;
  1406.   pSrcTexture: IDirect3DBaseTexture8;
  1407.   pSrcPalette: PPaletteEntry): HResult; stdcall; external d3dx8dll name 'D3DXSaveTextureToFileA';
  1408. {$EXTERNALSYM D3DXSaveTextureToFileA}
  1409. function D3DXSaveTextureToFileW(
  1410.   pDestFile: PWideChar;
  1411.   DestFormat: TD3DXImageFileFormat;
  1412.   pSrcTexture: IDirect3DBaseTexture8;
  1413.   pSrcPalette: PPaletteEntry): HResult; stdcall; external d3dx8dll name 'D3DXSaveTextureToFileW';
  1414. {$EXTERNALSYM D3DXSaveTextureToFileW}
  1415. function D3DXSaveTextureToFile(
  1416.   pDestFile: PChar;
  1417.   DestFormat: TD3DXImageFileFormat;
  1418.   pSrcTexture: IDirect3DBaseTexture8;
  1419.   pSrcPalette: PPaletteEntry): HResult; stdcall; external d3dx8dll name 'D3DXSaveTextureToFileA';
  1420. {$EXTERNALSYM D3DXSaveTextureToFile}
  1421. //////////////////////////////////////////////////////////////////////////////
  1422. // Misc Texture APIs /////////////////////////////////////////////////////////
  1423. //////////////////////////////////////////////////////////////////////////////
  1424. //----------------------------------------------------------------------------
  1425. // D3DXFilterTexture:
  1426. // ------------------
  1427. // Filters mipmaps levels of a texture.
  1428. //
  1429. // Parameters:
  1430. //  pBaseTexture
  1431. //      The texture object to be filtered
  1432. //  pPalette
  1433. //      256 color palette to be used, or NULL for non-palettized formats
  1434. //  SrcLevel
  1435. //      The level whose image is used to generate the subsequent levels.
  1436. //  Filter
  1437. //      D3DX_FILTER flags controlling how each miplevel is filtered.
  1438. //      Or D3DX_DEFAULT for D3DX_FILTER_BOX,
  1439. //
  1440. //-------------------------------------------------------------------------
  1441. function D3DXFilterTexture(
  1442.   pTexture: IDirect3DTexture8;
  1443.   pPalette: PPaletteEntry;
  1444.   SrcLevel: LongWord;
  1445.   Filter: DWord): HResult; stdcall; external d3dx8dll;
  1446. {$EXTERNALSYM D3DXFilterTexture}
  1447. // #define D3DXFilterCubeTexture D3DXFilterTexture
  1448. // In Pascal this mapped to DLL-exported "D3DXFilterTexture" function
  1449. function D3DXFilterCubeTexture(
  1450.   pTexture: IDirect3DCubeTexture8;
  1451.   pPalette: PPaletteEntry;
  1452.   SrcLevel: LongWord;
  1453.   Filter: DWord): HResult; stdcall; external d3dx8dll name 'D3DXFilterTexture';
  1454. {$EXTERNALSYM D3DXFilterCubeTexture}
  1455. // #define D3DXFilterVolumeTexture D3DXFilterTexture
  1456. // In Pascal this mapped to DLL-exported "D3DXFilterTexture" function
  1457. function D3DXFilterVolumeTexture(
  1458.   pTexture: IDirect3DVolumeTexture8;
  1459.   pPalette: PPaletteEntry;
  1460.   SrcLevel: LongWord;
  1461.   Filter: DWord): HResult; stdcall; external d3dx8dll name 'D3DXFilterTexture';
  1462. {$EXTERNALSYM D3DXFilterVolumeTexture}
  1463. //----------------------------------------------------------------------------
  1464. // D3DXFillTexture:
  1465. // ----------------
  1466. // Uses a user provided function to fill each texel of each mip level of a
  1467. // given texture.
  1468. //
  1469. // Paramters:
  1470. //  pTexture, pCubeTexture, pVolumeTexture
  1471. //      Pointer to the texture to be filled.
  1472. //  pFunction
  1473. //      Pointer to user provided evalutor function which will be used to
  1474. //      compute the value of each texel.
  1475. //  pData
  1476. //      Pointer to an arbitrary block of user defined data.  This pointer
  1477. //      will be passed to the function provided in pFunction
  1478. //-----------------------------------------------------------------------------
  1479. function D3DXFillTexture(
  1480.   pTexture: IDirect3DTexture8;
  1481.   pFunction: TD3DXFill2D;
  1482.   const pData): HResult; stdcall; external d3dx8dll;
  1483. {$EXTERNALSYM D3DXFillTexture}
  1484. function D3DXFillCubeTexture(
  1485.   pCubeTexture: IDirect3DCubeTexture8;
  1486.   pFunction: TD3DXFill2D;
  1487.   const pData): HResult; stdcall; external d3dx8dll;
  1488. {$EXTERNALSYM D3DXFillCubeTexture}
  1489. function D3DXFillVolumeTexture(
  1490.   pVolumeTexture: IDirect3DVolumeTexture8;
  1491.   pFunction: TD3DXFill3D;
  1492.   const pData): HResult; stdcall; external d3dx8dll;
  1493. {$EXTERNALSYM D3DXFillVolumeTexture}
  1494. //----------------------------------------------------------------------------
  1495. // D3DXComputeNormalMap:
  1496. // ---------------------
  1497. // Converts a height map into a normal map.  The (x,y,z) components of each
  1498. // normal are mapped to the (r,g,b) channels of the output texture.
  1499. //
  1500. // Parameters
  1501. //  pTexture
  1502. //      Pointer to the destination texture
  1503. //  pSrcTexture
  1504. //      Pointer to the source heightmap texture
  1505. //  pSrcPalette
  1506. //      Source palette of 256 colors, or NULL
  1507. //  Flags
  1508. //      D3DX_NORMALMAP flags
  1509. //  Channel
  1510. //      D3DX_CHANNEL specifying source of height information
  1511. //  Amplitude
  1512. //      The constant value which the height information is multiplied by.
  1513. //---------------------------------------------------------------------------
  1514. function D3DXComputeNormalMap(
  1515.   pTexture: IDirect3DTexture8;
  1516.   pSrcTexture: IDirect3DTexture8;
  1517.   pSrcPalette: PPaletteEntry;
  1518.   Flags: DWord;
  1519.   Channel: DWord;
  1520.   Amplitude: Single): HResult; stdcall; external d3dx8dll;
  1521. {$EXTERNALSYM D3DXComputeNormalMap}
  1522. //********************************************************************
  1523. // Introduced types for compatibility with "REVISED" D3DX8.pas translation
  1524. // by Ampaze (Tim Baumgarten) from www.Delphi-Jedi.org/DelphiGraphics
  1525. type
  1526.   PD3DXEffect_Desc      = PD3DXEffectDesc;
  1527.   PD3DXImage_Info       = PD3DXImageInfo;
  1528.   PD3DXParameter_Desc   = PD3DXParameterDesc;
  1529.   PD3DXPass_Desc        = PD3DXPassDesc;
  1530.   PD3DXRTE_Desc         = PD3DXRTEDesc;
  1531.   PD3DXRTS_Desc         = PD3DXRTSDesc;
  1532.   PD3DXTechnique_Desc   = PD3DXTechniqueDesc;
  1533.   TD3DXEffect_Desc      = TD3DXEffectDesc;
  1534.   TD3DXImage_Info       = TD3DXImageInfo;
  1535.   TD3DXParameter_Desc   = TD3DXParameterDesc;
  1536.   TD3DXPass_Desc        = TD3DXPassDesc;
  1537.   TD3DXRTE_Desc         = TD3DXRTEDesc;
  1538.   TD3DXRTS_Desc         = TD3DXRTSDesc;
  1539.   TD3DXTechnique_Desc   = TD3DXTechniqueDesc;
  1540.   PD3DXImage_FileFormat = PD3DXImageFileFormat;
  1541.   TD3DXImage_FileFormat = TD3DXImageFileFormat;
  1542. (*$HPPEMIT '}  /* namespace D3dx8 */' *)
  1543. //***************************************************************************//
  1544. //***************************************************************************//
  1545. //***************************************************************************//
  1546. implementation
  1547. //***************************************************************************//
  1548. //***************************************************************************//
  1549. //***************************************************************************//
  1550. //////////////////////////////////////////////////////////////////////////////
  1551. //
  1552. //  Copyright (C) Microsoft Corporation.  All Rights Reserved.
  1553. //
  1554. //  File:       d3dx8math.h
  1555. //  Content:    D3DX math types and functions
  1556. //
  1557. //////////////////////////////////////////////////////////////////////////////
  1558. //===========================================================================
  1559. //
  1560. // General purpose utilities
  1561. //
  1562. //===========================================================================
  1563. function D3DXToRadian(Degree: Single): Single;
  1564. begin
  1565.   Result:= Degree * (D3DX_PI / 180.0);
  1566. end;
  1567. function D3DXToDegree(Radian: Single): Single;
  1568. begin
  1569.   Result:= Radian * (180.0 / D3DX_PI);
  1570. end;
  1571. //--------------------------
  1572. // 2D Vector
  1573. //--------------------------
  1574. function D3DXVector2(_x, _y: Single): TD3DXVector2;
  1575. begin
  1576.   Result.x:= _x; Result.y:= _y;
  1577. end;
  1578. function D3DXVector2Equal(const v1, v2: TD3DXVector2): Boolean;
  1579. begin
  1580.   Result:= (v1.x = v2.x) and (v1.y = v2.y);
  1581. end;
  1582. //--------------------------
  1583. // 3D Vector
  1584. //--------------------------
  1585. function D3DXVector3(_x, _y, _z: Single): TD3DXVector3;
  1586. begin
  1587.   Result.x:= _x; Result.y:= _y; Result.z:=_z;
  1588. end;
  1589. function D3DXVector3Equal(const v1, v2: TD3DXVector3): Boolean;
  1590. begin
  1591.   Result:= (v1.x = v2.x) and (v1.y = v2.y) and (v1.z = v2.z);
  1592. end;
  1593. //--------------------------
  1594. // 4D Vector
  1595. //--------------------------
  1596. function D3DXVector4(_x, _y, _z, _w: Single): TD3DXVector4;
  1597. begin
  1598.   with Result do
  1599.   begin
  1600.     x:= _x; y:= _y; z:= _z; w:= _w;
  1601.   end;
  1602. end;
  1603. function D3DXVector4Equal(const v1, v2: TD3DXVector4): Boolean;
  1604. begin
  1605.   Result:= (v1.x = v2.x) and (v1.y = v2.y) and
  1606.     (v1.z = v2.z) and (v1.w = v2.w);
  1607. end;
  1608. //--------------------------
  1609. // 4D Matrix
  1610. //--------------------------
  1611. function D3DXMatrix(
  1612.   _m00, _m01, _m02, _m03,
  1613.   _m10, _m11, _m12, _m13,
  1614.   _m20, _m21, _m22, _m23,
  1615.   _m30, _m31, _m32, _m33: Single): TD3DXMatrix;
  1616. begin
  1617.   with Result do
  1618.   begin
  1619.     m[0,0]:= _m00; m[0,1]:= _m01; m[0,2]:= _m02; m[0,3]:= _m03;
  1620.     m[1,0]:= _m10; m[1,1]:= _m11; m[1,2]:= _m12; m[1,3]:= _m13;
  1621.     m[2,0]:= _m20; m[2,1]:= _m21; m[2,2]:= _m22; m[2,3]:= _m23;
  1622.     m[3,0]:= _m30; m[3,1]:= _m31; m[3,2]:= _m32; m[3,3]:= _m33;
  1623.   end;
  1624. end;
  1625. function D3DXMatrixAdd(out mOut: TD3DXMatrix; const m1, m2: TD3DXMatrix): PD3DXMatrix;
  1626. var
  1627.   pOut, p1, p2: PSingle; x: Integer;
  1628. begin
  1629.   pOut:= @mOut._11; p1:= @m1._11; p2:= @m2._11;
  1630.   for x:= 0 to 15 do
  1631.   begin
  1632.     pOut^:= p1^+p2^;
  1633.     Inc(pOut); Inc(p1); Inc(p2);
  1634.   end;
  1635.   Result:= @mOut;
  1636. end;
  1637. function D3DXMatrixSubtract(out mOut: TD3DXMatrix; const m1, m2: TD3DXMatrix): PD3DXMatrix;
  1638. var
  1639.   pOut, p1, p2: PSingle; x: Integer;
  1640. begin
  1641.   pOut:= @mOut._11; p1:= @m1._11; p2:= @m2._11;
  1642.   for x:= 0 to 15 do
  1643.   begin
  1644.     pOut^:= p1^-p2^;
  1645.     Inc(pOut); Inc(p1); Inc(p2);
  1646.   end;
  1647.   Result:= @mOut;
  1648. end;
  1649. function D3DXMatrixMul(out mOut: TD3DXMatrix; const m: TD3DXMatrix; MulBy: Single): PD3DXMatrix;
  1650. var
  1651.   pOut, p: PSingle; x: Integer;
  1652. begin
  1653.   pOut:= @mOut._11; p:= @m._11;
  1654.   for x:= 0 to 15 do
  1655.   begin
  1656.     pOut^:= p^* MulBy;
  1657.     Inc(pOut); Inc(p);
  1658.   end;
  1659.   Result:= @mOut;
  1660. end;
  1661. function D3DXMatrixEqual(const m1, m2: TD3DXMatrix): Boolean;
  1662. begin
  1663.   Result:= CompareMem(@m1, @m2, SizeOf(TD3DXMatrix));
  1664. end;
  1665. //--------------------------
  1666. // Quaternion
  1667. //--------------------------
  1668. function D3DXQuaternion(_x, _y, _z, _w: Single): TD3DXQuaternion;
  1669. begin
  1670.   with Result do
  1671.   begin
  1672.     x:= _x; y:= _y; z:= _z; w:= _w;
  1673.   end;
  1674. end;
  1675. function D3DXQuaternionAdd(const q1, q2: TD3DXQuaternion): TD3DXQuaternion;
  1676. begin
  1677.   with Result do
  1678.   begin
  1679.     x:= q1.x+q2.x; y:= q1.y+q2.y; z:= q1.z+q2.z; w:= q1.w+q2.w;
  1680.   end;
  1681. end;
  1682. function D3DXQuaternionSubtract(const q1, q2: TD3DXQuaternion): TD3DXQuaternion;
  1683. begin
  1684.   with Result do
  1685.   begin
  1686.     x:= q1.x-q2.x; y:= q1.y-q2.y; z:= q1.z-q2.z; w:= q1.w-q2.w;
  1687.   end;
  1688. end;
  1689. function D3DXQuaternionEqual(const q1, q2: TD3DXQuaternion): Boolean;
  1690. begin
  1691.   Result:= (q1.x = q2.x) and (q1.y = q2.y) and
  1692.     (q1.z = q2.z) and (q1.w = q2.w);
  1693. end;
  1694. function D3DXQuaternionScale(out qOut: TD3DXQuaternion; const q: TD3DXQuaternion;
  1695.   s: Single): PD3DXQuaternion;
  1696. begin
  1697.   with qOut do
  1698.   begin
  1699.     x:= q.x*s; y:= q.y*s; z:= q.z*s; w:= q.w*s;
  1700.   end;
  1701.   Result:= @qOut;
  1702. end;
  1703. //--------------------------
  1704. // Plane
  1705. //--------------------------
  1706. function D3DXPlane(_a, _b, _c, _d: Single): TD3DXPlane;
  1707. begin
  1708.   with Result do
  1709.   begin
  1710.     a:= _a; b:= _b; c:= _c; d:= _d;
  1711.   end;
  1712. end;
  1713. function D3DXPlaneEqual(const p1, p2: TD3DXPlane): Boolean;
  1714. begin
  1715.   Result:=
  1716.     (p1.a = p2.a) and (p1.b = p2.b) and
  1717.     (p1.c = p2.c) and (p1.d = p2.d);
  1718. end;
  1719. //--------------------------
  1720. // Color
  1721. //--------------------------
  1722. function D3DXColor(_r, _g, _b, _a: Single): TD3DXColor;
  1723. begin
  1724.   with Result do
  1725.   begin
  1726.     r:= _r; g:= _g; b:= _b; a:= _a;
  1727.   end;
  1728. end;
  1729. function D3DXColorToDWord(c: TD3DXColor): DWord;
  1730.   function ColorLimit(const x: Single): DWord;
  1731.   begin
  1732.     if x > 1.0 then Result:= 255
  1733.      else if x < 0 then Result:= 0
  1734.       else Result:= Trunc(x * 255.0 + 0.5);
  1735.   end;
  1736. begin
  1737.   Result:= ColorLimit(c.a) shl 24 or ColorLimit(c.r) shl 16
  1738.     or ColorLimit(c.g) shl 8 or ColorLimit(c.b);
  1739. end;
  1740. function D3DXColorFromDWord(c: DWord): TD3DXColor;
  1741. const
  1742.   f: Single = 1/255;
  1743. begin
  1744.   with Result do
  1745.   begin
  1746.     r:= f * Byte(c shr 16);
  1747.     g:= f * Byte(c shr  8);
  1748.     b:= f * Byte(c shr  0);
  1749.     a:= f * Byte(c shr 24);
  1750.   end;
  1751. end;
  1752. function D3DXColorEqual(const c1, c2: TD3DXColor): Boolean;
  1753. begin
  1754.   Result:= (c1.r = c2.r) and (c1.g = c2.g) and (c1.b = c2.b) and (c1.a = c2.a);
  1755. end;
  1756. //===========================================================================
  1757. //
  1758. // D3DX math functions:
  1759. //
  1760. // NOTE:
  1761. //  * All these functions can take the same object as in and out parameters.
  1762. //
  1763. //  * Out parameters are typically also returned as return values, so that
  1764. //    the output of one function may be used as a parameter to another.
  1765. //
  1766. //===========================================================================
  1767. //--------------------------
  1768. // 2D Vector
  1769. //--------------------------
  1770. // "inline"
  1771. function D3DXVec2Length(const v: TD3DXVector2): Single;
  1772. begin
  1773.   with v do Result:= Sqrt(x*x + y*y);
  1774. end;
  1775. function D3DXVec2LengthSq(const v: TD3DXVector2): Single;
  1776. begin
  1777.   with v do Result:= x*x + y*y;
  1778. end;
  1779. function D3DXVec2Dot(const v1, v2: TD3DXVector2): Single;
  1780. begin
  1781.   Result:= v1.x*v2.x + v1.y*v2.y;
  1782. end;
  1783. // Z component of ((x1,y1,0) cross (x2,y2,0))
  1784. function D3DXVec2CCW(const v1, v2: TD3DXVector2): Single;
  1785. begin
  1786.   Result:= v1.x*v2.y - v1.y*v2.x;
  1787. end;
  1788. function D3DXVec2Add(const v1, v2: TD3DXVector2): TD3DXVector2;
  1789. begin
  1790.   Result.x:= v1.x + v2.x;
  1791.   Result.y:= v1.y + v2.y;
  1792. end;
  1793. function D3DXVec2Subtract(const v1, v2: TD3DXVector2): TD3DXVector2;
  1794. begin
  1795.   Result.x:= v1.x - v2.x;
  1796.   Result.y:= v1.y - v2.y;
  1797. end;
  1798. // Minimize each component.  x = min(x1, x2), y = min(y1, y2)
  1799. function D3DXVec2Minimize(out vOut: TD3DXVector2; const v1, v2: TD3DXVEctor2): PD3DXVector2;
  1800. begin
  1801.   if v1.x < v2.x then vOut.x:= v1.x else vOut.y:= v2.x;
  1802.   if v1.y < v2.y then vOut.y:= v1.y else vOut.y:= v2.y;
  1803.   Result:= @vOut;
  1804. end;
  1805. // Maximize each component.  x = max(x1, x2), y = max(y1, y2)
  1806. function D3DXVec2Maximize(out vOut: TD3DXVector2; const v1, v2: TD3DXVector2): PD3DXVector2;
  1807. begin
  1808.   if v1.x > v2.x then vOut.x:= v1.x else vOut.y:= v2.x;
  1809.   if v1.y > v2.y then vOut.y:= v1.y else vOut.y:= v2.y;
  1810.   Result:= @vOut;
  1811. end;
  1812. function D3DXVec2Scale(out vOut: TD3DXVector2; const v: TD3DXVector2; s: Single): PD3DXVector2;
  1813. begin
  1814.   vOut.x:= v.x*s; vOut.y:= v.y*s;
  1815.   Result:= @vOut;
  1816. end;
  1817. // Linear interpolation. V1 + s(V2-V1)
  1818. function D3DXVec2Lerp(out vOut: TD3DXVector2; const v1, v2: TD3DXVector2; s: Single): PD3DXVector2;
  1819. begin
  1820.   vOut.x:= v1.x + s * (v2.x-v1.x);
  1821.   vOut.y:= v1.y + s * (v2.y-v1.y);
  1822.   Result:= @vOut;
  1823. end;
  1824. //--------------------------
  1825. // 3D Vector
  1826. //--------------------------
  1827. function D3DXVec3Length(const v: TD3DXVector3): Single;
  1828. begin
  1829.   with v do Result:= Sqrt(x*x + y*y + z*z);
  1830. end;
  1831. function D3DXVec3LengthSq(const v: TD3DXVector3): Single;
  1832. begin
  1833.   with v do Result:= x*x + y*y + z*z;
  1834. end;
  1835. function D3DXVec3Dot(const v1, v2: TD3DXVector3): Single;
  1836. begin
  1837.   Result:= v1.x * v2.x + v1.y * v2.y + v1.z * v2.z;
  1838. end;
  1839. function D3DXVec3Cross(out vOut: TD3DXVector3; const v1, v2: TD3DXVector3): PD3DXVector3;
  1840. begin
  1841.   vOut.x:= v1.y * v2.z - v1.z * v2.y;
  1842.   vOut.y:= v1.z * v2.x - v1.x * v2.z;
  1843.   vOut.z:= v1.x * v2.y - v1.y * v2.x;
  1844.   Result:= @vOut;
  1845. end;
  1846. function D3DXVec3Add(out vOut: TD3DXVector3; const v1, v2: TD3DXVector3): PD3DXVector3;
  1847. begin
  1848.   with vOut do
  1849.   begin
  1850.     x:= v1.x + v2.x;
  1851.     y:= v1.y + v2.y;
  1852.     z:= v1.z + v2.z;
  1853.   end;
  1854.   Result:= @vOut;
  1855. end;
  1856. function D3DXVec3Subtract(out vOut: TD3DXVector3; const v1, v2: TD3DXVector3): PD3DXVector3;
  1857. begin
  1858.   with vOut do
  1859.   begin
  1860.     x:= v1.x - v2.x;
  1861.     y:= v1.y - v2.y;
  1862.     z:= v1.z - v2.z;
  1863.   end;
  1864.   Result:= @vOut;
  1865. end;
  1866. // Minimize each component.  x = min(x1, x2), y = min(y1, y2)
  1867. function D3DXVec3Minimize(out vOut: TD3DXVector3; const v1, v2: TD3DXVector3): PD3DXVector3;
  1868. begin
  1869.   if v1.x < v2.x then vOut.x:= v1.x else vOut.x:= v2.x;
  1870.   if v1.y < v2.y then vOut.y:= v1.y else vOut.y:= v2.y;
  1871.   if v1.z < v2.z then vOut.z:= v1.z else vOut.z:= v2.z;
  1872.   Result:= @vOut;
  1873. end;
  1874. // Maximize each component.  x = max(x1, x2), y = max(y1, y2)
  1875. function D3DXVec3Maximize(out vOut: TD3DXVector3; const v1, v2: TD3DXVector3): PD3DXVector3;
  1876. begin
  1877.   if v1.x > v2.x then vOut.x:= v1.x else vOut.x:= v2.x;
  1878.   if v1.y > v2.y then vOut.y:= v1.y else vOut.y:= v2.y;
  1879.   if v1.z > v2.z then vOut.z:= v1.z else vOut.z:= v2.z;
  1880.   Result:= @vOut;
  1881. end;
  1882. function D3DXVec3Scale(out vOut: TD3DXVector3; const v: TD3DXVector3; s: Single): PD3DXVector3;
  1883. begin
  1884.   with vOut do
  1885.   begin
  1886.     x:= v.x * s; y:= v.y * s; z:= v.z * s;
  1887.   end;
  1888.   Result:= @vOut;
  1889. end;
  1890. // Linear interpolation. V1 + s(V2-V1)
  1891. function D3DXVec3Lerp(out vOut: TD3DXVector3; const v1, v2: TD3DXVector3; s: Single): PD3DXVector3;
  1892. begin
  1893.   vOut.x:= v1.x + s * (v2.x-v1.x);
  1894.   vOut.y:= v1.y + s * (v2.y-v1.y);
  1895.   vOut.z:= v1.z + s * (v2.z-v1.z);
  1896.   Result:= @vOut;
  1897. end;
  1898. //--------------------------
  1899. // 4D Vector
  1900. //--------------------------
  1901. function D3DXVec4Length(const v: TD3DXVector4): Single;
  1902. begin
  1903.   with v do Result:= Sqrt(x*x + y*y + z*z + w*w);
  1904. end;
  1905. function D3DXVec4LengthSq(const v: TD3DXVector4): Single;
  1906. begin
  1907.   with v do Result:= x*x + y*y + z*z + w*w
  1908. end;
  1909. function D3DXVec4Dot(const v1, v2: TD3DXVector4): Single;
  1910. begin
  1911.   Result:= v1.x * v2.x + v1.y * v2.y + v1.z * v2.z + v1.w * v2.w;
  1912. end;
  1913. function D3DXVec4Add(out vOut: TD3DXVector4; const v1, v2: TD3DXVector4): PD3DXVector4;
  1914. begin
  1915.   with vOut do
  1916.   begin
  1917.     x:= v1.x + v2.x;
  1918.     y:= v1.y + v2.y;
  1919.     z:= v1.z + v2.z;
  1920.     w:= v1.w + v2.w;
  1921.   end;
  1922.   Result:= @vOut;
  1923. end;
  1924. function D3DXVec4Subtract(out vOut: TD3DXVector4; const v1, v2: TD3DXVector4): PD3DXVector4;
  1925. begin
  1926.   with vOut do
  1927.   begin
  1928.     x:= v1.x - v2.x;
  1929.     y:= v1.y - v2.y;
  1930.     z:= v1.z - v2.z;
  1931.     w:= v1.w - v2.w;
  1932.   end;
  1933.   Result:= @vOut;
  1934. end;
  1935. // Minimize each component.  x = min(x1, x2), y = min(y1, y2)
  1936. function D3DXVec4Minimize(out vOut: TD3DXVector4; const v1, v2: TD3DXVector4): PD3DXVector4;
  1937. begin
  1938.   if v1.x < v2.x then vOut.x:= v1.x else vOut.x:= v2.x;
  1939.   if v1.y < v2.y then vOut.y:= v1.y else vOut.y:= v2.y;
  1940.   if v1.z < v2.z then vOut.z:= v1.z else vOut.z:= v2.z;
  1941.   if v1.w < v2.w then vOut.w:= v1.w else vOut.w:= v2.w;
  1942.   Result:= @vOut;
  1943. end;
  1944. // Maximize each component.  x = max(x1, x2), y = max(y1, y2)
  1945. function D3DXVec4Maximize(out vOut: TD3DXVector4; const v1, v2: TD3DXVector4): PD3DXVector4;
  1946. begin
  1947.   if v1.x > v2.x then vOut.x:= v1.x else vOut.x:= v2.x;
  1948.   if v1.y > v2.y then vOut.y:= v1.y else vOut.y:= v2.y;
  1949.   if v1.z > v2.z then vOut.z:= v1.z else vOut.z:= v2.z;
  1950.   if v1.w > v2.w then vOut.w:= v1.w else vOut.w:= v2.w;
  1951.   Result:= @vOut;
  1952. end;
  1953. function D3DXVec4Scale(out vOut: TD3DXVector4; const v: TD3DXVector4; s: Single): PD3DXVector4;
  1954. begin
  1955.   with vOut do
  1956.   begin
  1957.     x:= v.x * s; y:= v.y * s; z:= v.z * s; w:= v.w * s;
  1958.   end;
  1959.   Result:= @vOut;
  1960. end;
  1961. // Linear interpolation. V1 + s(V2-V1)
  1962. function D3DXVec4Lerp(out vOut: TD3DXVector4;
  1963.   const v1, v2: TD3DXVector4; s: Single): PD3DXVector4;
  1964. begin
  1965.   with vOut do
  1966.   begin
  1967.     x:= v1.x + s * (v2.x - v1.x);
  1968.     y:= v1.y + s * (v2.y - v1.y);
  1969.     z:= v1.z + s * (v2.z - v1.z);
  1970.     w:= v1.w + s * (v2.w - v1.w);
  1971.   end;
  1972.   Result:= @vOut;
  1973. end;
  1974. //--------------------------
  1975. // 4D Matrix
  1976. //--------------------------
  1977. // inline
  1978. function D3DXMatrixIdentity(out mOut: TD3DXMatrix): PD3DXMatrix;
  1979. begin
  1980.   FillChar(mOut, SizeOf(mOut), 0);
  1981.   mOut._11:= 1; mOut._22:= 1; mOut._33:= 1; mOut._44:= 1;
  1982.   Result:= @mOut;
  1983. end;
  1984. function D3DXMatrixIsIdentity(const m: TD3DXMatrix): BOOL;
  1985. begin
  1986.   with m do Result:=
  1987.     (_11 = 1) and (_12 = 0) and (_13 = 0) and (_14 = 0) and
  1988.     (_21 = 0) and (_22 = 1) and (_23 = 0) and (_24 = 0) and
  1989.     (_31 = 0) and (_32 = 0) and (_33 = 1) and (_34 = 0) and
  1990.     (_41 = 0) and (_42 = 0) and (_43 = 0) and (_44 = 1);
  1991. end;
  1992. //--------------------------
  1993. // Quaternion
  1994. //--------------------------
  1995. // inline
  1996. function D3DXQuaternionLength(const q: TD3DXQuaternion): Single;
  1997. begin
  1998.   with q do Result:= Sqrt(x*x + y*y + z*z + w*w);
  1999. end;
  2000. // Length squared, or "norm"
  2001. function D3DXQuaternionLengthSq(const q: TD3DXQuaternion): Single;
  2002. begin
  2003.   with q do Result:= x*x + y*y + z*z + w*w;
  2004. end;
  2005. function D3DXQuaternionDot(const q1, q2: TD3DXQuaternion): Single;
  2006. begin
  2007.   Result:= q1.x * q2.x + q1.y * q2.y + q1.z * q2.z + q1.w * q2.w;
  2008. end;
  2009. function D3DXQuaternionIdentity(out qOut: TD3DXQuaternion): PD3DXQuaternion;
  2010. begin
  2011.   with qOut do
  2012.   begin
  2013.     x:= 0; y:= 0; z:= 0; w:= 1.0;
  2014.   end;
  2015.   Result:= @qOut;
  2016. end;
  2017. function D3DXQuaternionIsIdentity(const q: TD3DXQuaternion): BOOL;
  2018. begin
  2019.   with q do Result:= (x = 0) and (y = 0) and (z = 0) and (w = 1);
  2020. end;
  2021. // (-x, -y, -z, w)
  2022. function D3DXQuaternionConjugate(out qOut: TD3DXQuaternion;
  2023.   const q: TD3DXQuaternion): PD3DXQuaternion;
  2024. begin
  2025.   with qOut do
  2026.   begin
  2027.     x:= -q.x; y:= -q.y; z:= -q.z; w:= q.w;
  2028.   end;
  2029.   Result:= @qOut;
  2030. end;
  2031. //--------------------------
  2032. // Plane
  2033. //--------------------------
  2034. // ax + by + cz + dw
  2035. function D3DXPlaneDot(const p: TD3DXPlane; const v: TD3DXVector4): Single;
  2036. begin
  2037.   with p,v do Result:= a*x + b*y + c*z + d*w;
  2038. end;
  2039. // ax + by + cz + d
  2040. function D3DXPlaneDotCoord(const p: TD3DXPlane; const v: TD3DXVector3): Single;
  2041. begin
  2042.   with p,v do Result:= a*x + b*y + c*z + d;
  2043. end;
  2044. // ax + by + cz
  2045. function D3DXPlaneDotNormal(const p: TD3DXPlane; const v: TD3DXVector3): Single;
  2046. begin
  2047.   with p,v do Result:= a*x + b*y + c*z;
  2048. end;
  2049. //--------------------------
  2050. // Color
  2051. //--------------------------
  2052. // inline
  2053. function D3DXColorNegative(out cOut: TD3DXColor; const c: TD3DXColor): PD3DXColor;
  2054. begin
  2055.  with cOut do
  2056.  begin
  2057.    r:= 1.0 - c.r; g:= 1.0 - c.g; b:= 1.0 - c.b;
  2058.    a:= c.a;
  2059.  end;
  2060.  Result:= @cOut;
  2061. end;
  2062. function D3DXColorAdd(out cOut: TD3DXColor; const c1,c2: TD3DXColor): PD3DXColor;
  2063. begin
  2064.   with cOut do
  2065.   begin
  2066.     r:= c1.r + c2.r; g:= c1.g + c2.g; b:= c1.b + c2.b;
  2067.     a:= c1.a + c2.a;
  2068.   end;
  2069.   Result:= @cOut;
  2070. end;
  2071. function D3DXColorSubtract(out cOut: TD3DXColor; const c1,c2: TD3DXColor): PD3DXColor;
  2072. begin
  2073.   with cOut do
  2074.   begin
  2075.     r:= c1.r - c2.r; g:= c1.g - c2.g; b:= c1.b - c2.b;
  2076.     a:= c1.a - c2.a;
  2077.   end;
  2078.   Result:= @cOut;
  2079. end;
  2080. function D3DXColorScale(out cOut: TD3DXColor; const c: TD3DXColor; s: Single): PD3DXColor;
  2081. begin
  2082.   with cOut do
  2083.   begin
  2084.     r:= c.r * s; g:= c.g * s;
  2085.     b:= c.b * s; a:= c.a * s;
  2086.   end;
  2087.   Result:= @cOut;
  2088. end;
  2089. // (r1*r2, g1*g2, b1*b2, a1*a2)
  2090. function D3DXColorModulate(out cOut: TD3DXColor; const c1,c2: TD3DXColor): PD3DXColor;
  2091. begin
  2092.   with cOut do
  2093.   begin
  2094.     r:= c1.r * c2.r; g:= c1.g * c2.g;
  2095.     b:= c1.b * c2.b; a:= c1.a * c2.a;
  2096.   end;
  2097.   Result:= @cOut;
  2098. end;
  2099. // Linear interpolation of r,g,b, and a. C1 + s(C2-C1)
  2100. function D3DXColorLerp(out cOut: TD3DXColor; const c1,c2: TD3DXColor; s: Single): PD3DXColor;
  2101. begin
  2102.   with cOut do
  2103.   begin
  2104.     r:= c1.r + s * (c2.r - c1.r);
  2105.     g:= c1.g + s * (c2.g - c1.g);
  2106.     b:= c1.b + s * (c2.b - c1.b);
  2107.     a:= c1.a + s * (c2.a - c1.a);
  2108.   end;
  2109.   Result:= @cOut;
  2110. end;
  2111. ///////////////////////////////////////////////////////////////////////////
  2112. //
  2113. //  Copyright (C) Microsoft Corporation.  All Rights Reserved.
  2114. //
  2115. //  File:       d3dx8core.h
  2116. //  Content:    D3DX core types and functions
  2117. //
  2118. ///////////////////////////////////////////////////////////////////////////
  2119. // Object Pascal support functions for D3DXGetErrorString
  2120. function D3DXGetErrorStringA(hr: HResult): String;
  2121. var
  2122.   Buffer: array [0..254] of Char;
  2123. begin
  2124.   D3DXGetErrorString(hr, PAnsiChar(@Buffer), 255);
  2125.   SetLength(Result, StrLen(PAnsiChar(@Buffer)));
  2126.   Move(Buffer, Result[1], Length(Result));
  2127. end;
  2128. function D3DXGetErrorStringW(hr: HResult): WideString;
  2129.  function WStrLen(Str: PWideChar): Integer;
  2130.  begin
  2131.    Result := 0;
  2132.    while Str[Result] <> #0 do Inc(Result);
  2133.  end;
  2134. begin
  2135.   SetLength(Result, 255);
  2136.   D3DXGetErrorStringW(hr, PWideChar(Result), Length(Result));
  2137.   SetLength(Result, WStrLen(PWideChar(Result)));
  2138. end;
  2139. {$IFNDEF UNICODE}
  2140. function D3DXGetErrorString(hr: HResult): String;
  2141. var
  2142.   Buffer: array [0..254] of Char;
  2143. begin
  2144.   D3DXGetErrorString(hr, PAnsiChar(@Buffer), 255);
  2145.   SetLength(Result, StrLen(PAnsiChar(@Buffer)));
  2146.   Move(Buffer, Result[1], Length(Result));
  2147. end;
  2148. {$ELSE}
  2149. function D3DXGetErrorString(hr: HResult): WideString;
  2150.  function WStrLen(Str: PWideChar): Integer;
  2151.  begin
  2152.    Result := 0;
  2153.    while Str[Result] <> #0 do Inc(Result);
  2154.  end;
  2155. begin
  2156.   SetLength(Result, 255);
  2157.   D3DXGetErrorStringW(hr, PWideChar(Result), Length(Result));
  2158.   SetLength(Result, WStrLen(PWideChar(Result)));
  2159. end;
  2160. {$ENDIF}
  2161. end.