Ada计算机图形DirectX之d3dx9mesh

----------------------------------------
-- File : d3dx9mesh.ads               --
-- Translator:Dongfeng.Gu,2018/10/20  --
-- Mail: 515639@qq.com                --
-- Progress:100%                      --
----------------------------------------

with win32;                             use win32;
with win32.rpcdce;                      use win32.rpcdce;
with win32.objbase;                     use win32.objbase;
with win32.windef;                      use win32.windef;

with d3d9;                              use d3d9;
with d3d9types;                         use d3d9types;
with d3dx9xof;                          use d3dx9xof;
with d3dx9core;                         use d3dx9core;

package d3dx9mesh is
   
   type float_Array is array(Natural range<>) of float;

   --
   -- Predefined IIDs
   --
   IID_ID3DXBaseMesh:constant win32.rpcdce.GUID:=(16#7ed943dd#,16#52e8#,16#40b5#,(16#a8#,16#d8#,16#76#,16#68#,16#5c#,16#40#,16#63#,16#30#));
   IID_ID3DXMesh:constant win32.rpcdce.GUID:=(16#4020e5c2#,16#1403#,16#4929#,(16#88#,16#3f#,16#e2#,16#e8#,16#49#,16#fa#,16#c1#,16#95#));
   IID_ID3DXPMesh:constant win32.rpcdce.GUID:=(16#8875769a#,16#d579#,16#4088#,(16#aa#,16#eb#,16#53#,16#4d#,16#1a#,16#d8#,16#4e#,16#96#));
   IID_ID3DXSPMesh:constant win32.rpcdce.GUID:=(16#667ea4c7#,16#f1cd#,16#4386#,(16#b5#,16#23#,16#7c#,16#2#,16#90#,16#b8#,16#3c#,16#c5#));
   IID_ID3DXSkinInfo:constant win32.rpcdce.GUID:=(16#11eaa540#,16#f9a6#,16#4d49#,(16#ae#,16#6a#,16#e1#,16#92#,16#21#,16#f7#,16#c#,16#c4#));
   IID_ID3DXPatchMesh:constant win32.rpcdce.GUID:=(16#3ce6cc22#,16#dbf2#,16#44f4#,(16#89#,16#4d#,16#f9#,16#c3#,16#4a#,16#33#,16#71#,16#39#));
   
   DXFILEOBJ_XSkinMeshHeader:constant win32.rpcdce.GUID:=(16#3cf169ce#,16#ff7c#,16#44ab#,(16#93#,16#c0#,16#f7#,16#8f#,16#62#,16#d1#,16#72#,16#e2#));
   DXFILEOBJ_VertexDuplicationIndices:constant win32.rpcdce.GUID:=(16#b8d65549#,16#d7c9#,16#4995#,(16#89#,16#cf#,16#53#,16#a9#,16#a8#,16#b0#,16#31#,16#e3#));
   DXFILEOBJ_FaceAdjacency:constant win32.rpcdce.GUID:=(16#a64c844a#,16#e282#,16#4756#,(16#8b#,16#80#,16#25#,16#c#,16#de#,16#4#,16#39#,16#8c#));
   DXFILEOBJ_SkinWeights:constant win32.rpcdce.GUID:=(16#6f0d123b#,16#bad2#,16#4167#,(16#a0#,16#d0#,16#80#,16#22#,16#4f#,16#25#,16#fa#,16#bb#));
   DXFILEOBJ_Patch:constant win32.rpcdce.GUID:=(16#a3eb5d44#,16#fc22#,16#429d#,(16#9a#,16#fb#,16#32#,16#21#,16#cb#,16#97#,16#19#,16#a6#));
   DXFILEOBJ_PatchMesh:constant win32.rpcdce.GUID:=(16#d02c95cc#,16#edba#,16#4305#,(16#9b#,16#5d#,16#18#,16#20#,16#d7#,16#70#,16#4b#,16#bf#));
   DXFILEOBJ_PatchMesh9:constant win32.rpcdce.GUID:=(16#b9ec94e1#,16#b9a6#,16#4251#,(16#ba#,16#18#,16#94#,16#89#,16#3f#,16#2#,16#c0#,16#ea#));
   DXFILEOBJ_PMInfo:constant win32.rpcdce.GUID:=(16#b6c3e656#,16#ec8b#,16#4b92#,(16#9b#,16#62#,16#68#,16#16#,16#59#,16#52#,16#29#,16#47#));
   DXFILEOBJ_PMAttributeRange:constant win32.rpcdce.GUID:=(16#917e0427#,16#c61e#,16#4a14#,(16#9c#,16#64#,16#af#,16#e6#,16#5f#,16#9e#,16#98#,16#44#));
   DXFILEOBJ_PMVSplitRecord:constant win32.rpcdce.GUID:=(16#574ccc14#,16#f0b3#,16#4333#,(16#82#,16#2d#,16#93#,16#e8#,16#a8#,16#a0#,16#8e#,16#4c#));
   DXFILEOBJ_FVFData:constant win32.rpcdce.GUID:=(16#b6e70a0e#,16#8ef9#,16#4e83#,(16#94#,16#ad#,16#ec#,16#c8#,16#b0#,16#c0#,16#48#,16#97#));
   DXFILEOBJ_VertexElement:constant win32.rpcdce.GUID:=(16#f752461c#,16#1e23#,16#48f6#,(16#b9#,16#f8#,16#83#,16#50#,16#85#,16#f#,16#33#,16#6f#));
   DXFILEOBJ_DeclData:constant win32.rpcdce.GUID:=(16#bf22e553#,16#292c#,16#4781#,(16#9f#,16#ea#,16#62#,16#bd#,16#55#,16#4b#,16#dd#,16#93#));
   DXFILEOBJ_EffectFloats:constant win32.rpcdce.GUID:=(16#f1cfe2b3#,16#de3#,16#4e28#,(16#af#,16#a1#,16#15#,16#5a#,16#75#,16#a#,16#28#,16#2d#));
   DXFILEOBJ_EffectString:constant win32.rpcdce.GUID:=(16#d55b097e#,16#bdb6#,16#4c52#,(16#b0#,16#3d#,16#60#,16#51#,16#c8#,16#9d#,16#e#,16#42#));
   DXFILEOBJ_EffectDWord:constant win32.rpcdce.GUID:=(16#622c0ed0#,16#956e#,16#4da9#,(16#90#,16#8a#,16#2a#,16#f9#,16#4f#,16#3c#,16#e7#,16#16#));
   DXFILEOBJ_EffectParamFloats:constant win32.rpcdce.GUID:=(16#3014b9a0#,16#62f5#,16#478c#,(16#9b#,16#86#,16#e4#,16#ac#,16#9f#,16#4e#,16#41#,16#8b#));
   DXFILEOBJ_EffectParamString:constant win32.rpcdce.GUID:=(16#1dbc4c88#,16#94c1#,16#46ee#,(16#90#,16#76#,16#2c#,16#28#,16#81#,16#8c#,16#94#,16#81#));
   DXFILEOBJ_EffectParamDWord:constant win32.rpcdce.GUID:=(16#e13963bc#,16#ae51#,16#4c5d#,(16#b0#,16#f#,16#cf#,16#a3#,16#a9#,16#d9#,16#7c#,16#e5#));
   DXFILEOBJ_EffectInstance:constant win32.rpcdce.GUID:=(16#e331f7e4#,16#559#,16#4cc2#,(16#8e#,16#99#,16#1c#,16#ec#,16#16#,16#57#,16#92#,16#8f#));
   DXFILEOBJ_AnimTicksPerSecond:constant win32.rpcdce.GUID:=(16#9e415a43#,16#7ba6#,16#4a73#,(16#87#,16#43#,16#b7#,16#3d#,16#47#,16#e8#,16#84#,16#76#));
   DXFILEOBJ_CompressedAnimationSet:constant win32.rpcdce.GUID:=(16#7f9b00b3#,16#f125#,16#4890#,(16#87#,16#6e#,16#1c#,16#42#,16#bf#,16#69#,16#7c#,16#4d#));

   type tagD3DXPATCHMESHTYPE is (D3DXPATCHMESH_RECT,
                               D3DXPATCHMESH_TRI,
                               D3DXPATCHMESH_NPATCH,
                               D3DXPATCHMESH_FORCE_DWORD);
   for tagD3DXPATCHMESHTYPE use (D3DXPATCHMESH_RECT=>16#001#,
                               D3DXPATCHMESH_TRI=>16#002#,
                               D3DXPATCHMESH_NPATCH=>16#003#,
                               D3DXPATCHMESH_FORCE_DWORD=>16#7fffffff#);

   subtype D3DXPATCHMESHTYPE is tagD3DXPATCHMESHTYPE;

   type tagD3DXCLEANTYPE is (D3DXCLEAN_BACKFACING,
                           D3DXCLEAN_BOWTIES,
                           --D3DXCLEAN_SKINNING,
                           --D3DXCLEAN_OPTIMIZATION,
                           D3DXCLEAN_SIMPLIFICATION);
   for tagD3DXCLEANTYPE use (D3DXCLEAN_BACKFACING=>16#00000001#,
                           D3DXCLEAN_BOWTIES=>16#00000002#,
                           --D3DXCLEAN_SKINNING=>D3DXCLEAN_BACKFACING,
                           --D3DXCLEAN_OPTIMIZATION=>D3DXCLEAN_BACKFACING,
                             D3DXCLEAN_SIMPLIFICATION=>3);
   
   D3DXCLEAN_SKINNING:constant tagD3DXCLEANTYPE:=D3DXCLEAN_BACKFACING;
   
   D3DXCLEAN_OPTIMIZATION:constant tagD3DXCLEANTYPE:=D3DXCLEAN_BACKFACING;

   subtype D3DXCLEANTYPE is tagD3DXCLEANTYPE;

   type tagD3DXTANGENT is (D3DXTANGENT_WRAP_U,
                         D3DXTANGENT_WRAP_V,
                         D3DXTANGENT_WRAP_UV,
                         D3DXTANGENT_DONT_NORMALIZE_PARTIALS,
                         D3DXTANGENT_DONT_ORTHOGONALIZE,
                         D3DXTANGENT_ORTHOGONALIZE_FROM_V,
                         D3DXTANGENT_ORTHOGONALIZE_FROM_U,
                         D3DXTANGENT_WEIGHT_BY_AREA,
                         D3DXTANGENT_WEIGHT_EQUAL,
                         D3DXTANGENT_WIND_CW,
                         D3DXTANGENT_CALCULATE_NORMALS,
                         D3DXTANGENT_GENERATE_IN_PLACE);
   for tagD3DXTANGENT use (D3DXTANGENT_WRAP_U=>16#01#,
                         D3DXTANGENT_WRAP_V=>16#02#,
                         D3DXTANGENT_WRAP_UV=>16#03#,
                         D3DXTANGENT_DONT_NORMALIZE_PARTIALS=>16#04#,
                         D3DXTANGENT_DONT_ORTHOGONALIZE=>16#08#,
                         D3DXTANGENT_ORTHOGONALIZE_FROM_V=>16#010#,
                         D3DXTANGENT_ORTHOGONALIZE_FROM_U=>16#020#,
                         D3DXTANGENT_WEIGHT_BY_AREA=>16#040#,
                         D3DXTANGENT_WEIGHT_EQUAL=>16#080#,
                         D3DXTANGENT_WIND_CW=>16#0100#,
                         D3DXTANGENT_CALCULATE_NORMALS=>16#0200#,
                         D3DXTANGENT_GENERATE_IN_PLACE=>16#0400#);

   subtype D3DXTANGENT is tagD3DXTANGENT;

   type tagD3DXIMT is (D3DXIMT_WRAP_U,
                     D3DXIMT_WRAP_V,
                     D3DXIMT_WRAP_UV);
   for tagD3DXIMT use (D3DXIMT_WRAP_U=>16#01#,
                     D3DXIMT_WRAP_V=>16#02#,
                     D3DXIMT_WRAP_UV=>16#03#);

   subtype D3DXIMT is tagD3DXIMT;

   type tagD3DXUVATLAS is (D3DXUVATLAS_DEFAULT,
                         D3DXUVATLAS_GEODESIC_FAST,
                         D3DXUVATLAS_GEODESIC_QUALITY);
   for tagD3DXUVATLAS use (D3DXUVATLAS_DEFAULT=>16#00#,
                         D3DXUVATLAS_GEODESIC_FAST=>16#01#,
                         D3DXUVATLAS_GEODESIC_QUALITY=>16#02#);

   subtype D3DXUVATLAS is tagD3DXUVATLAS;

   
   --
   -- Ô¤¶¨Òå½Ó¿Ú
   --
   
   
   type ID3DXBaseMesh;
   type LPID3DXBaseMesh is access all ID3DXBaseMesh;
   subtype LPD3DXBaseMesh is LPID3DXBaseMesh;
   subtype PD3DXBaseMesh is LPID3DXBaseMesh;
   type LPLPID3DXBaseMesh is access all LPID3DXBaseMesh;
   subtype LPLPD3DXBaseMesh is LPLPID3DXBaseMesh;
   subtype PPIDID3DXBaseMesh is LPLPID3DXBaseMesh;
   subtype PPD3DXBaseMesh is LPLPID3DXBaseMesh;
   
   
   type ID3DXMesh;
   type LPID3DXMesh is access all ID3DXMesh;
   subtype LPD3DXMesh is LPID3DXMesh;
   type LPLPID3DXMesh is access all LPID3DXMesh;
   subtype LPLPD3DXMesh is LPLPID3DXMesh;
   
   
   type ID3DXPMesh;
   TYPE LPID3DXPMesh is access all ID3DXPMesh;
   subtype LPD3DXPMesh is LPID3DXPMesh;
   type LPLPID3DXPMesh is access all LPID3DXPMesh;
   subtype LPLPD3DXPMesh is LPLPID3DXPMesh;
   
   
   type ID3DXSPMesh;
   type LPID3DXSPMesh is access all ID3DXSPMesh;
   subtype LPD3DXSPMesh is LPID3DXSPMesh;
   type LPLPID3DXSPMesh is access all LPID3DXSPMesh;
   subtype LPLPD3DXSPMesh is LPLPID3DXSPMesh;
   
   
   type ID3DXSkinInfo;
   type LPID3DXSkinInfo is access all ID3DXSkinInfo;
   subtype LPD3DXSkinInfo is LPID3DXSkinInfo;
   type LPLPID3DXSkinInfo is access all LPID3DXSkinInfo;
   subtype LPLPD3DXSkinInfo is LPLPID3DXSkinInfo;
   
   
   type ID3DXPatchMesh;
   type LPID3DXPatchMesh is access all ID3DXPatchMesh;
   subtype LPD3DXPatchMesh is LPID3DXPatchMesh;
   type LPLPID3DXPatchMesh is access all LPID3DXPatchMesh;
   subtype LPLPD3DXPatchMesh is LPLPID3DXPatchMesh;
   

   type ID3DXTextureGutterHelper;
   type LPID3DXTextureGutterHelper is access all ID3DXTextureGutterHelper;
   subtype LPD3DXTextureGutterHelper is LPID3DXTextureGutterHelper;
   type LPLPID3DXTextureGutterHelper is access all LPID3DXTextureGutterHelper;
   subtype LPLPD3DXTextureGutterHelper is LPLPID3DXTextureGutterHelper;
   
   
   type ID3DXPRTBuffer;
   type LPID3DXPRTBuffer is access all ID3DXPRTBuffer;
   subtype LPD3DXPRTBuffer is LPID3DXPRTBuffer;
   type LPLPID3DXPRTBuffer is access all LPID3DXPRTBuffer;
   subtype LPLPD3DXPRTBuffer is LPLPID3DXPRTBuffer;
   
   
   

   type tagD3DXATTRIBUTERANGE is record
      AttribId:DWORD;
      FaceStart:DWORD;
      FaceCount:DWORD;
      VertexStart:DWORD;
      VertexCount:DWORD;
   end record;

   subtype D3DXATTRIBUTERANGE is tagD3DXATTRIBUTERANGE;

   type LPD3DXATTRIBUTERANGE is access all D3DXATTRIBUTERANGE;

   type tagD3DXMATERIAL is record
      MatD3D:D3DMATERIAL9;
      pTextureFilename:LPSTR;
   end record;

   subtype D3DXMATERIAL is tagD3DXMATERIAL;

   type LPD3DXMATERIAL is access all D3DXMATERIAL;
   type LPLPD3DXMATERIAL is access all LPD3DXMATERIAL;
   type LPCD3DXMATERIAL is access constant D3DXMATERIAL;

   type tagD3DXEFFECTDEFAULTTYPE is (D3DXEDT_STRING,
                                   D3DXEDT_FLOATS,
                                   D3DXEDT_DWORD,
                                   D3DXEDT_FORCEDWORD);
   for tagD3DXEFFECTDEFAULTTYPE use (D3DXEDT_STRING=>16#1#,
                                   D3DXEDT_FLOATS=>16#2#,
                                   D3DXEDT_DWORD=>16#3#,
                                   D3DXEDT_FORCEDWORD=>16#7fffffff#);

   subtype D3DXEFFECTDEFAULTTYPE is tagD3DXEFFECTDEFAULTTYPE;

   type tagD3DXEFFECTDEFAULT is record
      pParamName:LPSTR;
      Typ:D3DXEFFECTDEFAULTTYPE;
      NumBytes:DWORD;
      pValue:LPVOID;
   end record;

   subtype D3DXEFFECTDEFAULT is tagD3DXEFFECTDEFAULT;

   type LPD3DXEFFECTDEFAULT is access all tagD3DXEFFECTDEFAULT;

   type tagD3DXEFFECTINSTANCE is record
      pEffectFilename:LPSTR;
      NumDefaults:DWORD;
      pDefaults:LPD3DXEFFECTDEFAULT;
   end record;

   subtype D3DXEFFECTINSTANCE is tagD3DXEFFECTINSTANCE;

   type LPD3DXEFFECTINSTANCE is access all tagD3DXEFFECTINSTANCE;
   type LPCD3DXEFFECTINSTANCE is access constant D3DXEFFECTINSTANCE;

   type tagD3DXATTRIBUTEWEIGHTS is record
      Position:FLOAT;
      Boundary:FLOAT;
      Normal:FLOAT;
      Diffuse:FLOAT;
      Specular:FLOAT;
      Texcoord:FLOAT_Array(0..7);
      Tangent:FLOAT;
      Binormal:FLOAT;
   end record;

   subtype D3DXATTRIBUTEWEIGHTS is tagD3DXATTRIBUTEWEIGHTS;
   type LPD3DXATTRIBUTEWEIGHTS is access all tagD3DXATTRIBUTEWEIGHTS;
   type LPCD3DXATTRIBUTEWEIGHTS is access constant D3DXATTRIBUTEWEIGHTS;

   type tagD3DXWELDEPSILONS is record
      Position:FLOAT;
      BlendWeights:FLOAT;
      Normal:FLOAT;
      PSize:FLOAT;
      Specular:FLOAT;
      Diffuse:FLOAT;
      Texcoord:FLOAT_Array(0..7);
      Tangent:FLOAT;
      Binormal:FLOAT;
      TessFactor:FLOAT;
   end record;

   subtype D3DXWELDEPSILONS is tagD3DXWELDEPSILONS;

   type LPD3DXWELDEPSILONS is access all D3DXWELDEPSILONS;
   type LPCD3DXWELDEPSILONS is access constant D3DXWELDEPSILONS;
   
   subtype D3DVERTEXELEMENT9_Array_x is D3DVERTEXELEMENT9_Array(0..64);
   
   


   type ID3DXBaseMesh is record
      QueryInterface:access procedure(THIS:LPID3DXBaseMesh;iid:REFIID;ppv:WIN32.LPLPVOID) with Convention=>Stdcall;
      AddRef:access function(THIS:LPID3DXBaseMesh) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPID3DXBaseMesh) return ULONG with Convention=>Stdcall;
      DrawSubset:access procedure(THIS:LPID3DXBaseMesh;AttribId:DWORD) with Convention=>Stdcall;
      GetNumFaces:access function(THIS:LPID3DXBaseMesh) return DWORD with Convention=>Stdcall;
      GetNumVertices:access function(THIS:LPID3DXBaseMesh) return DWORD with Convention=>Stdcall;
      GetFVF:access function(THIS:LPID3DXBaseMesh) return DWORD with Convention=>Stdcall;
      GetDeclaration:access procedure(THIS:LPID3DXBaseMesh;Declaration:D3DVERTEXELEMENT9_Array_x) with Convention=>Stdcall;
      GetNumBytesPerVertex:access function(THIS:LPID3DXBaseMesh) return DWORD with Convention=>Stdcall;
      GetOptions:access function(THIS:LPID3DXBaseMesh) return DWORD with Convention=>Stdcall;
      GetDevice:access procedure(THIS:LPID3DXBaseMesh;ppDevice:LPLPDIRECT3DDEVICE9) with Convention=>Stdcall;
      CloneMeshFVF:access procedure(THIS:LPID3DXBaseMesh;Options:DWORD;FVF:DWORD;pD3DDevice:LPDIRECT3DDEVICE9;ppCloneMesh:access LPD3DXMESH) with Convention=>Stdcall;
      CloneMesh:access procedure(THIS:LPID3DXBaseMesh;Options:DWORD;pDeclaration:access constant D3DVERTEXELEMENT9;pD3DDevice:LPDIRECT3DDEVICE9;ppCloneMesh:access LPD3DXMESH) with Convention=>Stdcall;
      GetVertexBuffer:access procedure(THIS:LPID3DXBaseMesh;ppVB:access LPDIRECT3DVERTEXBUFFER9) with Convention=>Stdcall;
      GetIndexBuffer:access procedure(THIS:LPID3DXBaseMesh;ppIB:access LPDIRECT3DINDEXBUFFER9) with Convention=>Stdcall;
      LockVertexBuffer:access procedure(THIS:LPID3DXBaseMesh;Flags:DWORD;ppData:WIN32.LPLPVOID) with Convention=>Stdcall;
      UnlockVertexBuffer:access procedure(THIS:LPID3DXBaseMesh) with Convention=>Stdcall;
      LockIndexBuffer:access procedure(THIS:LPID3DXBaseMesh;Flags:DWORD;ppData:WIN32.LPLPVOID) with Convention=>Stdcall;
      UnlockIndexBuffer:access procedure(THIS:LPID3DXBaseMesh) with Convention=>Stdcall;
      GetAttributeTable:access procedure(THIS:LPID3DXBaseMesh;pAttribTable:LPD3DXATTRIBUTERANGE;pAttribTableSize:LPDWORD) with Convention=>Stdcall;
      ConvertPointRepsToAdjacency:access procedure(THIS:LPID3DXBaseMesh;pPRep:access constant DWORD;pAdjacency:LPDWORD) with Convention=>Stdcall;
      ConvertAdjacencyToPointReps:access procedure(THIS:LPID3DXBaseMesh;pAdjacency:access constant DWORD;pPRep:LPDWORD) with Convention=>Stdcall;
      GenerateAdjacency:access procedure(THIS:LPID3DXBaseMesh;Epsilon:FLOAT;pAdjacency:LPDWORD) with Convention=>Stdcall;
      UpdateSemantics:access procedure(THIS:LPID3DXBaseMesh;Declaration:D3DVERTEXELEMENT9_Array_x) with Convention=>Stdcall;
   end record;
  
   
   type ID3DXMesh is record
      QueryInterface:access procedure(THIS:LPID3DXMesh;iid:REFIID;ppv:WIN32.LPLPVOID) with Convention=>Stdcall;
      AddRef:access function(THIS:LPID3DXMesh) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPID3DXMesh) return ULONG with Convention=>Stdcall;
      DrawSubset:access procedure(THIS:LPID3DXMesh;AttribId:DWORD) with Convention=>Stdcall;
      GetNumFaces:access function(THIS:LPID3DXMesh) return DWORD with Convention=>Stdcall;
      GetNumVertices:access function(THIS:LPID3DXMesh) return DWORD with Convention=>Stdcall;
      GetFVF:access function(THIS:LPID3DXMesh) return DWORD with Convention=>Stdcall;
      GetDeclaration:access procedure(THIS:LPID3DXMesh;Declaration:D3DVERTEXELEMENT9_Array_x) with Convention=>Stdcall;
      GetNumBytesPerVertex:access function(THIS:LPID3DXMesh) return DWORD with Convention=>Stdcall;
      GetOptions:access function(THIS:LPID3DXMesh) return DWORD with Convention=>Stdcall;
      GetDevice:access procedure(THIS:LPID3DXMesh;ppDevice:LPLPDIRECT3DDEVICE9) with Convention=>Stdcall;
      CloneMeshFVF:access procedure(THIS:LPID3DXMesh;Options:DWORD;FVF:DWORD;pD3DDevice:LPDIRECT3DDEVICE9;ppCloneMesh:access LPD3DXMESH) with Convention=>Stdcall;
      CloneMesh:access procedure(THIS:LPID3DXMesh;Options:DWORD;pDeclaration:access constant D3DVERTEXELEMENT9;pD3DDevice:LPDIRECT3DDEVICE9;ppCloneMesh:access LPD3DXMESH) with Convention=>Stdcall;
      GetVertexBuffer:access procedure(THIS:LPID3DXMesh;ppVB:access LPDIRECT3DVERTEXBUFFER9) with Convention=>Stdcall;
      GetIndexBuffer:access procedure(THIS:LPID3DXMesh;ppIB:access LPDIRECT3DINDEXBUFFER9) with Convention=>Stdcall;
      LockVertexBuffer:access procedure(THIS:LPID3DXMesh;Flags:DWORD;ppData:WIN32.LPLPVOID) with Convention=>Stdcall;
      UnlockVertexBuffer:access procedure(THIS:LPID3DXMesh) with Convention=>Stdcall;
      LockIndexBuffer:access procedure(THIS:LPID3DXMesh;Flags:DWORD;ppData:WIN32.LPLPVOID) with Convention=>Stdcall;
      UnlockIndexBuffer:access procedure(THIS:LPID3DXMesh) with Convention=>Stdcall;
      GetAttributeTable:access procedure(THIS:LPID3DXMesh;pAttribTable:LPD3DXATTRIBUTERANGE;pAttribTableSize:LPDWORD) with Convention=>Stdcall;
      ConvertPointRepsToAdjacency:access procedure(THIS:LPID3DXMesh;pPRep:access constant DWORD;pAdjacency:LPDWORD) with Convention=>Stdcall;
      ConvertAdjacencyToPointReps:access procedure(THIS:LPID3DXMesh;pAdjacency:access constant DWORD;pPRep:LPDWORD) with Convention=>Stdcall;
      GenerateAdjacency:access procedure(THIS:LPID3DXMesh;Epsilon:FLOAT;pAdjacency:LPDWORD) with Convention=>Stdcall;
      UpdateSemantics:access procedure(THIS:LPID3DXMesh;Declaration:D3DVERTEXELEMENT9_Array_x) with Convention=>Stdcall;
      LockAttributeBuffer:access procedure(THIS:LPID3DXMesh;Flags:DWORD;ppData:access LPDWORD) with Convention=>Stdcall;
      UnlockAttributeBuffer:access procedure(THIS:LPID3DXMesh) with Convention=>Stdcall;
      Optimize:access procedure(THIS:LPID3DXMesh;Flags:DWORD;pAdjacencyIn:access constant DWORD;pAdjacencyOut:LPDWORD;pFaceRemap:LPDWORD;ppVertexRemap:access LPD3DXBUFFER;ppOptMesh:access LPD3DXMESH) with Convention=>Stdcall;
      OptimizeInplace:access procedure(THIS:LPID3DXMesh;Flags:DWORD;pAdjacencyIn:access constant DWORD;pAdjacencyOut:LPDWORD;pFaceRemap:LPDWORD;ppVertexRemap:LPLPD3DXBUFFER) with Convention=>Stdcall;
      SetAttributeTable:access procedure(THIS:LPID3DXMesh;pAttribTable:access constant D3DXATTRIBUTERANGE;cAttribTableSize:DWORD) with Convention=>Stdcall;
   end record;


   type ID3DXPMesh is record
      QueryInterface:access procedure(THIS:LPID3DXPMesh;iid:REFIID;ppv:WIN32.LPLPVOID) with Convention=>Stdcall;
      AddRef:access function(THIS:LPID3DXPMesh) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPID3DXPMesh) return ULONG with Convention=>Stdcall;
      DrawSubset:access procedure(THIS:LPID3DXPMesh;AttribId:DWORD) with Convention=>Stdcall;
      GetNumFaces:access function(THIS:LPID3DXPMesh) return DWORD with Convention=>Stdcall;
      GetNumVertices:access function(THIS:LPID3DXPMesh) return DWORD with Convention=>Stdcall;
      GetFVF:access function(THIS:LPID3DXPMesh) return DWORD with Convention=>Stdcall;
      GetDeclaration:access procedure(THIS:LPID3DXPMesh;Declaration:D3DVERTEXELEMENT9_Array_x) with Convention=>Stdcall;
      GetNumBytesPerVertex:access function(THIS:LPID3DXPMesh) return DWORD with Convention=>Stdcall;
      GetOptions:access function(THIS:LPID3DXPMesh) return DWORD with Convention=>Stdcall;
      GetDevice:access procedure(THIS:LPID3DXPMesh;ppDevice:LPLPDIRECT3DDEVICE9) with Convention=>Stdcall;
      CloneMeshFVF:access procedure(THIS:LPID3DXPMesh;Options:DWORD;FVF:DWORD;pD3DDevice:LPDIRECT3DDEVICE9;ppCloneMesh:access LPD3DXMESH) with Convention=>Stdcall;
      CloneMesh:access procedure(THIS:LPID3DXPMesh;Options:DWORD;pDeclaration:access constant D3DVERTEXELEMENT9;pD3DDevice:LPDIRECT3DDEVICE9;ppCloneMesh:access LPD3DXMESH) with Convention=>Stdcall;
      GetVertexBuffer:access procedure(THIS:LPID3DXPMesh;ppVB:access LPDIRECT3DVERTEXBUFFER9) with Convention=>Stdcall;
      GetIndexBuffer:access procedure(THIS:LPID3DXPMesh;ppIB:access LPDIRECT3DINDEXBUFFER9) with Convention=>Stdcall;
      LockVertexBuffer:access procedure(THIS:LPID3DXPMesh;Flags:DWORD;ppData:WIN32.LPLPVOID) with Convention=>Stdcall;
      UnlockVertexBuffer:access procedure(THIS:LPID3DXPMesh) with Convention=>Stdcall;
      LockIndexBuffer:access procedure(THIS:LPID3DXPMesh;Flags:DWORD;ppData:WIN32.LPLPVOID) with Convention=>Stdcall;
      UnlockIndexBuffer:access procedure(THIS:LPID3DXPMesh) with Convention=>Stdcall;
      GetAttributeTable:access procedure(THIS:LPID3DXPMesh;pAttribTable:LPD3DXATTRIBUTERANGE;pAttribTableSize:LPDWORD) with Convention=>Stdcall;
      ConvertPointRepsToAdjacency:access procedure(THIS:LPID3DXPMesh;pPRep:access constant DWORD;pAdjacency:LPDWORD) with Convention=>Stdcall;
      ConvertAdjacencyToPointReps:access procedure(THIS:LPID3DXPMesh;pAdjacency:access constant DWORD;pPRep:LPDWORD) with Convention=>Stdcall;
      GenerateAdjacency:access procedure(THIS:LPID3DXPMesh;Epsilon:FLOAT;pAdjacency:LPDWORD) with Convention=>Stdcall;
      UpdateSemantics:access procedure(THIS:LPID3DXPMesh;Declaration:D3DVERTEXELEMENT9_Array_x) with Convention=>Stdcall;
      ClonePMeshFVF:access procedure(THIS:LPID3DXPMesh;Options:DWORD;FVF:DWORD;pD3DDevice:LPDIRECT3DDEVICE9;ppCloneMesh:LPLPD3DXPMESH) with Convention=>Stdcall;
      ClonePMesh:access procedure(THIS:LPID3DXPMesh;Options:DWORD;pDeclaration:access constant D3DVERTEXELEMENT9;pD3DDevice:LPDIRECT3DDEVICE9;ppCloneMesh:LPLPD3DXPMESH) with Convention=>Stdcall;
      SetNumFaces:access procedure(THIS:LPID3DXPMesh;Faces:DWORD) with Convention=>Stdcall;
      SetNumVertices:access procedure(THIS:LPID3DXPMesh;Vertices:DWORD) with Convention=>Stdcall;
      GetMaxFaces:access function(THIS:LPID3DXPMesh) return DWORD with Convention=>Stdcall;
      GetMinFaces:access function(THIS:LPID3DXPMesh) return DWORD with Convention=>Stdcall;
      GetMaxVertices:access function(THIS:LPID3DXPMesh) return DWORD with Convention=>Stdcall;
      GetMinVertices:access function(THIS:LPID3DXPMesh) return DWORD with Convention=>Stdcall;
      Save:access procedure(THIS:LPID3DXPMesh;pStream:access IStream;pMaterials:LPCD3DXMATERIAL;pEffectInstances:LPCD3DXEFFECTINSTANCE;NumMaterials:DWORD) with Convention=>Stdcall;
      Optimize:access procedure(THIS:LPID3DXPMesh;Flags:DWORD;pAdjacencyOut:LPDWORD;pFaceRemap:LPDWORD;ppVertexRemap:LPLPD3DXBUFFER;ppOptMesh:access LPD3DXMESH) with Convention=>Stdcall;
      OptimizeBaseLOD:access procedure(THIS:LPID3DXPMesh;Flags:DWORD;pFaceRemap:LPDWORD) with Convention=>Stdcall;
      TrimByFaces:access procedure(THIS:LPID3DXPMesh;NewFacesMin:DWORD;NewFacesMax:DWORD;rgiFaceRemap:LPDWORD;rgiVertRemap:LPDWORD) with Convention=>Stdcall;
      TrimByVertices:access procedure(THIS:LPID3DXPMesh;NewVerticesMin:DWORD;NewVerticesMax:DWORD;rgiFaceRemap:LPDWORD;rgiVertRemap:LPDWORD) with Convention=>Stdcall;
      GetAdjacency:access procedure(THIS:LPID3DXPMesh;pAdjacency:LPDWORD) with Convention=>Stdcall;
      GenerateVertexHistory:access procedure(THIS:LPID3DXPMesh;pVertexHistory:LPDWORD) with Convention=>Stdcall;
   end record;

   type ID3DXSPMesh is record
      QueryInterface:access procedure(THIS:LPID3DXSPMesh;iid:REFIID;ppv:WIN32.LPLPVOID) with Convention=>Stdcall;
      AddRef:access function(THIS:LPID3DXSPMesh) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPID3DXSPMesh) return ULONG with Convention=>Stdcall;
      GetNumFaces:access function(THIS:LPID3DXSPMesh) return DWORD with Convention=>Stdcall;
      GetNumVertices:access function(THIS:LPID3DXSPMesh) return DWORD with Convention=>Stdcall;
      GetFVF:access function(THIS:LPID3DXSPMesh) return DWORD with Convention=>Stdcall;
      GetDeclaration:access procedure(THIS:LPID3DXSPMesh;Declaration:D3DVERTEXELEMENT9_Array_x) with Convention=>Stdcall;
      GetOptions:access function(THIS:LPID3DXSPMesh) return DWORD with Convention=>Stdcall;
      GetDevice:access procedure(THIS:LPID3DXSPMesh;ppDevice:LPLPDIRECT3DDEVICE9) with Convention=>Stdcall;
      CloneMeshFVF:access procedure(THIS:LPID3DXSPMesh;Options:DWORD;FVF:DWORD;pD3DDevice:LPDIRECT3DDEVICE9;pAdjacencyOut:LPDWORD;pVertexRemapOut:LPDWORD;ppCloneMesh:access LPD3DXMESH) with Convention=>Stdcall;
      CloneMesh:access procedure(THIS:LPID3DXSPMesh;Options:DWORD;pDeclaration:access constant D3DVERTEXELEMENT9;pD3DDevice:LPDIRECT3DDEVICE9;pAdjacencyOut:LPDWORD;pVertexRemapOut:LPDWORD;ppCloneMesh:access LPD3DXMESH) with Convention=>Stdcall;
      ClonePMeshFVF:access procedure(THIS:LPID3DXSPMesh;Options:DWORD;FVF:DWORD;pD3DDevice:LPDIRECT3DDEVICE9;pVertexRemapOut:LPDWORD;pErrorsByFace:win32.LPFLOAT;ppCloneMesh:LPLPD3DXPMESH) with Convention=>Stdcall;
      ClonePMesh:access procedure(THIS:LPID3DXSPMesh;Options:DWORD;pDeclaration:access constant D3DVERTEXELEMENT9;pD3DDevice:LPDIRECT3DDEVICE9;pVertexRemapOut:LPDWORD;pErrorsbyFace:win32.LPFLOAT;ppCloneMesh:LPLPD3DXPMESH) with Convention=>Stdcall;
      ReduceFaces:access procedure(THIS:LPID3DXSPMesh;Faces:DWORD) with Convention=>Stdcall;
      ReduceVertices:access procedure(THIS:LPID3DXSPMesh;Vertices:DWORD) with Convention=>Stdcall;
      GetMaxFaces:access function(THIS:LPID3DXSPMesh) return DWORD with Convention=>Stdcall;
      GetMaxVertices:access function(THIS:LPID3DXSPMesh) return DWORD with Convention=>Stdcall;
      GetVertexAttributeWeights:access procedure(THIS:LPID3DXSPMesh;pVertexAttributeWeights:LPD3DXATTRIBUTEWEIGHTS) with Convention=>Stdcall;
      GetVertexWeights:access procedure(THIS:LPID3DXSPMesh;pVertexWeights:win32.LPFLOAT) with Convention=>Stdcall;
   end record;

   UNUSED16 : constant := (16#ffff#);

   UNUSED32 : constant := (16#ffffffff#);

   type tagD3DXBONECOMBINATION is record
      AttribId:DWORD;
      FaceStart:DWORD;
      FaceCount:DWORD;
      VertexStart:DWORD;
      VertexCount:DWORD;
      BoneId:LPDWORD;
   end record;

   subtype D3DXBONECOMBINATION is tagD3DXBONECOMBINATION;

   type LPD3DXBONECOMBINATION is access all tagD3DXBONECOMBINATION;
   type LPCD3DXBONECOMBINATION is access constant D3DXBONECOMBINATION;

   type tagD3DXPATCHINFO is record
      PatchType:D3DXPATCHMESHTYPE;
      Degree:D3DDEGREETYPE;
      Basis:D3DBASISTYPE;
   end record;

   subtype D3DXPATCHINFO is tagD3DXPATCHINFO;

   type LPD3DXPATCHINFO is access all tagD3DXPATCHINFO;
   type LPCD3DXPATCHINFO is access constant D3DXPATCHINFO;

   type ID3DXPatchMesh is record
      QueryInterface:access procedure(THIS:LPID3DXPatchMesh;iid:REFIID;ppv:WIN32.LPLPVOID) with Convention=>Stdcall;
      AddRef:access function(THIS:LPID3DXPatchMesh) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPID3DXPatchMesh) return ULONG with Convention=>Stdcall;
      GetNumPatches:access function(THIS:LPID3DXPatchMesh) return DWORD with Convention=>Stdcall;
      GetNumVertices:access function(THIS:LPID3DXPatchMesh) return DWORD with Convention=>Stdcall;
      GetDeclaration:access procedure(THIS:LPID3DXPatchMesh;Declaration:D3DVERTEXELEMENT9_Array_x) with Convention=>Stdcall;
      GetControlVerticesPerPatch:access function(THIS:LPID3DXPatchMesh) return DWORD with Convention=>Stdcall;
      GetOptions:access function(THIS:LPID3DXPatchMesh) return DWORD with Convention=>Stdcall;
      GetDevice:access procedure(THIS:LPID3DXPatchMesh;ppDevice:LPLPDIRECT3DDEVICE9) with Convention=>Stdcall;
      GetPatchInfo:access procedure(THIS:LPID3DXPatchMesh;PatchInfo:LPD3DXPATCHINFO) with Convention=>Stdcall;
      GetVertexBuffer:access procedure(THIS:LPID3DXPatchMesh;ppVB:access LPDIRECT3DVERTEXBUFFER9) with Convention=>Stdcall;
      GetIndexBuffer:access procedure(THIS:LPID3DXPatchMesh;ppIB:access LPDIRECT3DINDEXBUFFER9) with Convention=>Stdcall;
      LockVertexBuffer:access procedure(THIS:LPID3DXPatchMesh;flags:DWORD;ppData:WIN32.LPLPVOID) with Convention=>Stdcall;
      UnlockVertexBuffer:access procedure(THIS:LPID3DXPatchMesh) with Convention=>Stdcall;
      LockIndexBuffer:access procedure(THIS:LPID3DXPatchMesh;flags:DWORD;ppData:WIN32.LPLPVOID) with Convention=>Stdcall;
      UnlockIndexBuffer:access procedure(THIS:LPID3DXPatchMesh) with Convention=>Stdcall;
      LockAttributeBuffer:access procedure(THIS:LPID3DXPatchMesh;flags:DWORD;ppData:LPLPDWORD) with Convention=>Stdcall;
      UnlockAttributeBuffer:access procedure(THIS:LPID3DXPatchMesh) with Convention=>Stdcall;
      GetTessSize:access procedure(THIS:LPID3DXPatchMesh;fTessLevel:FLOAT;Adaptive:DWORD;NumTriangles:LPDWORD;NumVertices:LPDWORD) with Convention=>Stdcall;
      GenerateAdjacency:access procedure(THIS:LPID3DXPatchMesh;Tolerance:FLOAT) with Convention=>Stdcall;
      CloneMesh:access procedure(THIS:LPID3DXPatchMesh;Options:DWORD;pDecl:access constant D3DVERTEXELEMENT9;pMesh:LPLPD3DXPATCHMESH) with Convention=>Stdcall;
      Optimize:access procedure(THIS:LPID3DXPatchMesh;flags:DWORD) with Convention=>Stdcall;
      SetDisplaceParam:access procedure(THIS:LPID3DXPatchMesh;Texture:LPDIRECT3DBASETEXTURE9;MinFilter:D3DTEXTUREFILTERTYPE;MagFilter:D3DTEXTUREFILTERTYPE;MipFilter:D3DTEXTUREFILTERTYPE;Wrap:D3DTEXTUREADDRESS;dwLODBias:DWORD) with Convention=>Stdcall;
      GetDisplaceParam:access procedure(THIS:LPID3DXPatchMesh;Texture:LPLPDIRECT3DBASETEXTURE9;MinFilter:LPD3DTEXTUREFILTERTYPE;MagFilter:LPD3DTEXTUREFILTERTYPE;MipFilter:LPD3DTEXTUREFILTERTYPE;Wrap:LPD3DTEXTUREADDRESS;dwLODBias:LPDWORD) with Convention=>Stdcall;
      Tessellate:access procedure(THIS:LPID3DXPatchMesh;fTessLevel:FLOAT;pMesh:LPD3DXMESH) with Convention=>Stdcall;
      TessellateAdaptive:access procedure(THIS:LPID3DXPatchMesh;pTrans:LPCD3DXVECTOR4;dwMaxTessLevel:DWORD;dwMinTessLevel:DWORD;pMesh:LPD3DXMESH) with Convention=>Stdcall;
   end record;

   --
   -- Interface ID3DXSkinInfo
   --
   
   type ID3DXSkinInfo is record
      QueryInterface:access procedure(THIS:LPID3DXSkinInfo;iid:REFIID;ppv:WIN32.LPLPVOID) with Convention=>Stdcall;
      AddRef:access function(THIS:LPID3DXSkinInfo) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPID3DXSkinInfo) return ULONG with Convention=>Stdcall;
      SetBoneInfluence:access procedure(THIS:LPID3DXSkinInfo;bone:DWORD;numInfluences:DWORD;vertices:access constant DWORD;weights:LPCFLOAT) with Convention=>Stdcall;
      SetBoneVertexInfluence:access procedure(THIS:LPID3DXSkinInfo;boneNum:DWORD;influenceNum:DWORD;weight:float) with Convention=>Stdcall;
      GetNumBoneInfluences:access function(THIS:LPID3DXSkinInfo;bone:DWORD) return DWORD with Convention=>Stdcall;
      GetBoneInfluence:access procedure(THIS:LPID3DXSkinInfo;bone:DWORD;vertices:LPDWORD;weights:win32.LPFLOAT) with Convention=>Stdcall;
      GetBoneVertexInfluence:access procedure(THIS:LPID3DXSkinInfo;boneNum:DWORD;influenceNum:DWORD;pWeight:win32.LPfloat;pVertexNum:LPDWORD) with Convention=>Stdcall;
      GetMaxVertexInfluences:access procedure(THIS:LPID3DXSkinInfo;maxVertexInfluences:LPDWORD) with Convention=>Stdcall;
      GetNumBones:access function(THIS:LPID3DXSkinInfo) return DWORD with Convention=>Stdcall;
      FindBoneVertexInfluenceIndex:access procedure(THIS:LPID3DXSkinInfo;boneNum:DWORD;vertexNum:DWORD;pInfluenceIndex:LPDWORD) with Convention=>Stdcall;
      GetMaxFaceInfluences:access procedure(THIS:LPID3DXSkinInfo;pIB:LPDIRECT3DINDEXBUFFER9;NumFaces:DWORD;maxFaceInfluences:LPDWORD) with Convention=>Stdcall;
      SetMinBoneInfluence:access procedure(THIS:LPID3DXSkinInfo;MinInfl:FLOAT) with Convention=>Stdcall;
      GetMinBoneInfluence:access function(THIS:LPID3DXSkinInfo) return FLOAT with Convention=>Stdcall;
      SetBoneName:access procedure(THIS:LPID3DXSkinInfo;Bone:DWORD;pName:LPCSTR) with Convention=>Stdcall;
      GetBoneName:access function(THIS:LPID3DXSkinInfo;Bone:DWORD) return LPCSTR with Convention=>Stdcall;
      SetBoneOffsetMatrix:access procedure(THIS:LPID3DXSkinInfo;Bone:DWORD;pBoneTransform:LPCD3DXMATRIX) with Convention=>Stdcall;
      GetBoneOffsetMatrix:access function(THIS:LPID3DXSkinInfo;Bone:DWORD) return LPD3DMATRIX with Convention=>Stdcall;
      Clone:access procedure(THIS:LPID3DXSkinInfo;ppSkinInfo:LPLPD3DXSKININFO) with Convention=>Stdcall;
      Remap:access procedure(THIS:LPID3DXSkinInfo;NumVertices:DWORD;pVertexRemap:LPDWORD) with Convention=>Stdcall;
      SetFVF:access procedure(THIS:LPID3DXSkinInfo;FVF:DWORD) with Convention=>Stdcall;
      SetDeclaration:access procedure(THIS:LPID3DXSkinInfo;pDeclaration:access constant D3DVERTEXELEMENT9) with Convention=>Stdcall;
      GetFVF:access function(THIS:LPID3DXSkinInfo) return DWORD with Convention=>Stdcall;
      GetDeclaration:access procedure(THIS:LPID3DXSkinInfo;Declaration:D3DVERTEXELEMENT9_Array_x) with Convention=>Stdcall;
      UpdateSkinnedMesh:access procedure(THIS:LPID3DXSkinInfo;pBoneTransforms:LPCD3DXMATRIX;pBoneInvTransposeTransforms:LPCD3DXMATRIX;pVerticesSrc:LPCVOID;pVerticesDst:PVOID) with Convention=>Stdcall;
      ConvertToBlendedMesh:access procedure(THIS:LPID3DXSkinInfo;pMesh:LPD3DXMESH;Options:DWORD;pAdjacencyIn:access constant DWORD;pAdjacencyOut:LPDWORD;pFaceRemap:LPDWORD;ppVertexRemap:LPLPD3DXBUFFER;pMaxFaceInfl:LPDWORD;pNumBoneCombinations:LPDWORD;ppBoneCombinationTable:LPLPD3DXBUFFER;ppMesh:access LPD3DXMESH) with Convention=>Stdcall;
      ConvertToIndexedBlendedMesh:access procedure(THIS:LPID3DXSkinInfo;pMesh:LPD3DXMESH;Options:DWORD;paletteSize:DWORD;pAdjacencyIn:access constant DWORD;pAdjacencyOut:LPDWORD;pFaceRemap:LPDWORD;ppVertexRemap:LPLPD3DXBUFFER;pMaxVertexInfl:LPDWORD;pNumBoneCombinations:LPDWORD;ppBoneCombinationTable:LPLPD3DXBUFFER;ppMesh:access LPD3DXMESH) with Convention=>Stdcall;
   end record;

   
   type tagD3DXINTERSECTINFO is record
      FaceIndex:DWORD;
      U:FLOAT;
      V:FLOAT;
      Dist:FLOAT;
   end record;

   subtype D3DXINTERSECTINFO is tagD3DXINTERSECTINFO;

   type LPD3DXINTERSECTINFO is access all tagD3DXINTERSECTINFO;

   
   type tagD3DXSHCOMPRESSQUALITYTYPE is (D3DXSHCQUAL_FASTLOWQUALITY,
                                       D3DXSHCQUAL_SLOWHIGHQUALITY,
                                       D3DXSHCQUAL_FORCE_DWORD);
   for tagD3DXSHCOMPRESSQUALITYTYPE use (D3DXSHCQUAL_FASTLOWQUALITY=>1,
                                       D3DXSHCQUAL_SLOWHIGHQUALITY=>2,
                                       D3DXSHCQUAL_FORCE_DWORD=>16#7fffffff#);

   subtype D3DXSHCOMPRESSQUALITYTYPE is tagD3DXSHCOMPRESSQUALITYTYPE;

   type tagD3DXSHGPUSIMOPT is (D3DXSHGPUSIMOPT_SHADOWRES512,
                              D3DXSHGPUSIMOPT_SHADOWRES256,
                             
                             D3DXSHGPUSIMOPT_SHADOWRES1024,
                             D3DXSHGPUSIMOPT_SHADOWRES2048,
                             D3DXSHGPUSIMOPT_HIGHQUALITY,
                             D3DXSHGPUSIMOPT_FORCE_DWORD);
   for tagD3DXSHGPUSIMOPT use (D3DXSHGPUSIMOPT_SHADOWRES512=>0,
                               D3DXSHGPUSIMOPT_SHADOWRES256=>1,
                             
                             D3DXSHGPUSIMOPT_SHADOWRES1024=>2,
                             D3DXSHGPUSIMOPT_SHADOWRES2048=>3,
                             D3DXSHGPUSIMOPT_HIGHQUALITY=>4,
                             D3DXSHGPUSIMOPT_FORCE_DWORD=>16#7fffffff#);

   subtype D3DXSHGPUSIMOPT is tagD3DXSHGPUSIMOPT;

   type tagD3DXSHMATERIAL is record
      Diffuse:D3DCOLORVALUE;
      bMirror:BOOL;
      bSubSurf:BOOL;
      RelativeIndexOfRefraction:FLOAT;
      Absorption:D3DCOLORVALUE;
      ReducedScattering:D3DCOLORVALUE;
   end record;

   subtype D3DXSHMATERIAL is tagD3DXSHMATERIAL;
   type LPD3DXSHMATERIAL is access all D3DXSHMATERIAL;
   type LPCD3DXSHMATERIAL is access constant D3DXSHMATERIAL;
   type LPLPD3DXSHMATERIAL is access all LPD3DXSHMATERIAL;


   type tagD3DXSHPRTSPLITMESHVERTDATA is record
      uVertRemap:UINT;
      uSubCluster:UINT;
      ucVertStatus:UCHAR;
   end record;

   subtype D3DXSHPRTSPLITMESHVERTDATA is tagD3DXSHPRTSPLITMESHVERTDATA;
   type LPD3DXSHPRTSPLITMESHVERTDATA is access all D3DXSHPRTSPLITMESHVERTDATA;
   type LPCD3DXSHPRTSPLITMESHVERTDATA is access constant D3DXSHPRTSPLITMESHVERTDATA;
   
   

   type tagD3DXSHPRTSPLITMESHCLUSTERDATA is record
      uVertStart:UINT;
      uVertLength:UINT;
      uFaceStart:UINT;
      uFaceLength:UINT;
      uClusterStart:UINT;
      uClusterLength:UINT;
   end record;

   subtype D3DXSHPRTSPLITMESHCLUSTERDATA is tagD3DXSHPRTSPLITMESHCLUSTERDATA;
   type LPD3DXSHPRTSPLITMESHCLUSTERDATA is access all D3DXSHPRTSPLITMESHCLUSTERDATA;
   type LPCD3DXSHPRTSPLITMESHCLUSTERDATA is access constant D3DXSHPRTSPLITMESHCLUSTERDATA;
   
   type LPD3DXSHPRTSIMCB is access function(fPercentDone:float;lpUserContext:LPVOID) return HRESULT with Convention=>stdcall;
   

   IID_ID3DXPRTBuffer:constant win32.rpcdce.GUID:=(16#f1827e47#,16#a8#,16#49cd#,(16#90#,16#8c#,16#9d#,16#11#,16#95#,16#5f#,16#87#,16#28#));
   IID_ID3DXPRTCompBuffer:constant win32.rpcdce.GUID:=(16#a758d465#,16#fe8d#,16#45ad#,(16#9c#,16#f0#,16#d0#,16#1e#,16#56#,16#26#,16#6a#,16#7#));
   IID_ID3DXTextureGutterHelper:constant win32.rpcdce.GUID:=(16#838f01ec#,16#9729#,16#4527#,(16#aa#,16#db#,16#df#,16#70#,16#ad#,16#e7#,16#fe#,16#a9#));
   IID_ID3DXPRTEngine:constant win32.rpcdce.GUID:=(16#683a4278#,16#cd5f#,16#4d24#,(16#90#,16#ad#,16#c4#,16#e1#,16#b6#,16#85#,16#5d#,16#53#));
   
   
   --
   -- Interface ID3DXPRTBuffer
   --

   type ID3DXPRTBuffer is record
      QueryInterface:access procedure(THIS:LPID3DXPRTBuffer;iid:REFIID;ppv:WIN32.LPLPVOID) with Convention=>Stdcall;
      AddRef:access function(THIS:LPID3DXPRTBuffer) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPID3DXPRTBuffer) return ULONG with Convention=>Stdcall;
      GetNumSamples:access function(THIS:LPID3DXPRTBuffer) return UINT with Convention=>Stdcall;
      GetNumCoeffs:access function(THIS:LPID3DXPRTBuffer) return UINT with Convention=>Stdcall;
      GetNumChannels:access function(THIS:LPID3DXPRTBuffer) return UINT with Convention=>Stdcall;
      IsTexture:access function(THIS:LPID3DXPRTBuffer) return BOOL with Convention=>Stdcall;
      GetWidth:access function(THIS:LPID3DXPRTBuffer) return UINT with Convention=>Stdcall;
      GetHeight:access function(THIS:LPID3DXPRTBuffer) return UINT with Convention=>Stdcall;
      Resize:access procedure(THIS:LPID3DXPRTBuffer;NewSize:UINT) with Convention=>Stdcall;
      LockBuffer:access procedure(THIS:LPID3DXPRTBuffer;Start:UINT;NumSamples:UINT;ppData:access win32.LPFLOAT) with Convention=>Stdcall;
      UnlockBuffer:access procedure(THIS:LPID3DXPRTBuffer) with Convention=>Stdcall;
      ScaleBuffer:access procedure(THIS:LPID3DXPRTBuffer;Scale:FLOAT) with Convention=>Stdcall;
      AddBuffer:access procedure(THIS:LPID3DXPRTBuffer;pBuffer:LPD3DXPRTBUFFER) with Convention=>Stdcall;
      AttachGH:access procedure(THIS:LPID3DXPRTBuffer;hlp:LPD3DXTEXTUREGUTTERHELPER) with Convention=>Stdcall;
      ReleaseGH:access procedure(THIS:LPID3DXPRTBuffer) with Convention=>Stdcall;
      EvalGH:access procedure(THIS:LPID3DXPRTBuffer) with Convention=>Stdcall;
      ExtractTexture:access procedure(THIS:LPID3DXPRTBuffer;Channel:UINT;StartCoefficient:UINT;NumCoefficients:UINT;pTexture:LPDIRECT3DTEXTURE9) with Convention=>Stdcall;
      ExtractToMesh:access procedure(THIS:LPID3DXPRTBuffer;NumCoefficients:UINT;Usage:D3DDECLUSAGE;UsageIndexStart:UINT;pScene:LPD3DXMESH) with Convention=>Stdcall;
   end record;

   --
   -- Interface ID3DXPRTCompBuffer
   --
   
   type ID3DXPRTCompBuffer;
   type LPID3DXPRTCompBuffer is access all ID3DXPRTCompBuffer;
   type LPD3DXPRTCOMPBUFFER is access all ID3DXPRTCompBuffer;
   type LPLPD3DXPRTCompBuffer is access all LPD3DXPRTCompBuffer;

   type ID3DXPRTCompBuffer is record
      QueryInterface:access procedure(THIS:LPID3DXPRTCompBuffer;iid:REFIID;ppv:WIN32.LPLPVOID) with Convention=>Stdcall;
      AddRef:access function(THIS:LPID3DXPRTCompBuffer) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPID3DXPRTCompBuffer) return ULONG with Convention=>Stdcall;
      GetNumSamples:access function(THIS:LPID3DXPRTCompBuffer) return UINT with Convention=>Stdcall;
      GetNumCoeffs:access function(THIS:LPID3DXPRTCompBuffer) return UINT with Convention=>Stdcall;
      GetNumChannels:access function(THIS:LPID3DXPRTCompBuffer) return UINT with Convention=>Stdcall;
      IsTexture:access function(THIS:LPID3DXPRTCompBuffer) return BOOL with Convention=>Stdcall;
      GetWidth:access function(THIS:LPID3DXPRTCompBuffer) return UINT with Convention=>Stdcall;
      GetHeight:access function(THIS:LPID3DXPRTCompBuffer) return UINT with Convention=>Stdcall;
      GetNumClusters:access function(THIS:LPID3DXPRTCompBuffer) return UINT with Convention=>Stdcall;
      GetNumPCA:access function(THIS:LPID3DXPRTCompBuffer) return UINT with Convention=>Stdcall;
      NormalizeData:access procedure(THIS:LPID3DXPRTCompBuffer) with Convention=>Stdcall;
      ExtractBasis:access procedure(THIS:LPID3DXPRTCompBuffer;Cluster:UINT;pClusterBasis:win32.LPFLOAT) with Convention=>Stdcall;
      ExtractClusterIDs:access procedure(THIS:LPID3DXPRTCompBuffer;pClusterIDs:win32.LPUINT) with Convention=>Stdcall;
      ExtractPCA:access procedure(THIS:LPID3DXPRTCompBuffer;StartPCA:UINT;NumExtract:UINT;pPCACoefficients:win32.LPFLOAT) with Convention=>Stdcall;
      ExtractTexture:access procedure(THIS:LPID3DXPRTCompBuffer;StartPCA:UINT;NumpPCA:UINT;pTexture:LPDIRECT3DTEXTURE9) with Convention=>Stdcall;
      ExtractToMesh:access procedure(THIS:LPID3DXPRTCompBuffer;NumPCA:UINT;Usage:D3DDECLUSAGE;UsageIndexStart:UINT;pScene:LPD3DXMESH) with Convention=>Stdcall;
   end record;

   --
   -- Interface ID3DXTextureGutterHelper
   --
   
   type ID3DXTextureGutterHelper is record
      QueryInterface:access procedure(THIS:LPID3DXTextureGutterHelper;iid:REFIID;ppv:WIN32.LPLPVOID) with Convention=>Stdcall;
      AddRef:access function(THIS:LPID3DXTextureGutterHelper) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPID3DXTextureGutterHelper) return ULONG with Convention=>Stdcall;
      GetWidth:access function(THIS:LPID3DXTextureGutterHelper) return UINT with Convention=>Stdcall;
      GetHeight:access function(THIS:LPID3DXTextureGutterHelper) return UINT with Convention=>Stdcall;
      ApplyGuttersFloat:access procedure(THIS:LPID3DXTextureGutterHelper;pDataIn:win32.LPFLOAT;NumCoeffs:UINT;Width:UINT;Height:UINT) with Convention=>Stdcall;
      ApplyGuttersTex:access procedure(THIS:LPID3DXTextureGutterHelper;pTexture:LPDIRECT3DTEXTURE9) with Convention=>Stdcall;
      ApplyGuttersPRT:access procedure(THIS:LPID3DXTextureGutterHelper;pBuffer:LPD3DXPRTBUFFER) with Convention=>Stdcall;
      ResampleTex:access procedure(THIS:LPID3DXTextureGutterHelper;pTextureIn:LPDIRECT3DTEXTURE9;pMeshIn:LPD3DXMESH;Usage:D3DDECLUSAGE;UsageIndex:UINT;pTextureOut:LPDIRECT3DTEXTURE9) with Convention=>Stdcall;
      GetFaceMap:access procedure(THIS:LPID3DXTextureGutterHelper;pFaceData:win32.LPUINT) with Convention=>Stdcall;
      GetBaryMap:access procedure(THIS:LPID3DXTextureGutterHelper;pBaryData:LPD3DXVECTOR2) with Convention=>Stdcall;
      GetTexelMap:access procedure(THIS:LPID3DXTextureGutterHelper;pTexelData:LPD3DXVECTOR2) with Convention=>Stdcall;
      GetGutterMap:access procedure(THIS:LPID3DXTextureGutterHelper;pGutterData:LPBYTE) with Convention=>Stdcall;
      SetFaceMap:access procedure(THIS:LPID3DXTextureGutterHelper;pFaceData:win32.LPUINT) with Convention=>Stdcall;
      SetBaryMap:access procedure(THIS:LPID3DXTextureGutterHelper;pBaryData:LPD3DXVECTOR2) with Convention=>Stdcall;
      SetTexelMap:access procedure(THIS:LPID3DXTextureGutterHelper;pTexelData:LPD3DXVECTOR2) with Convention=>Stdcall;
      SetGutterMap:access procedure(THIS:LPID3DXTextureGutterHelper;pGutterData:LPBYTE) with Convention=>Stdcall;
   end record;


   --
   -- Interface ID3DXPRTEngine
   --
   type ID3DXPRTEngine;
   type LPID3DXPRTEngine is access all ID3DXPRTEngine;
   type LPD3DXPRTENGINE is access all ID3DXPRTEngine;
   type LPLPD3DXPRTENGINE is access all ID3DXPRTEngine;

   type ID3DXPRTEngine is record
      QueryInterface:access procedure(THIS:LPID3DXPRTEngine;iid:REFIID;ppv:WIN32.LPLPVOID) with Convention=>Stdcall;
      AddRef:access function(THIS:LPID3DXPRTEngine) return ULONG with Convention=>Stdcall;
      Release:access function(THIS:LPID3DXPRTEngine) return ULONG with Convention=>Stdcall;
      SetMeshMaterials:access procedure(THIS:LPID3DXPRTEngine;ppMaterials:access LPCD3DXSHMATERIAL;NumMeshes:UINT;NumChannels:UINT;bSetAlbedo:BOOL;fLengthScale:FLOAT) with Convention=>Stdcall;
      SetPerVertexAlbedo:access procedure(THIS:LPID3DXPRTEngine;pDataIn:LPCVOID;NumChannels:UINT;Stride:UINT) with Convention=>Stdcall;
      SetPerTexelAlbedo:access procedure(THIS:LPID3DXPRTEngine;pAlbedoTexture:LPDIRECT3DTEXTURE9;NumChannels:UINT;pGH:LPD3DXTEXTUREGUTTERHELPER) with Convention=>Stdcall;
      GetVertexAlbedo:access procedure(THIS:LPID3DXPRTEngine;pVertColors:LPD3DXCOLOR;NumVerts:UINT) with Convention=>Stdcall;
      SetPerTexelNormal:access procedure(THIS:LPID3DXPRTEngine;pNormalTexture:LPDIRECT3DTEXTURE9) with Convention=>Stdcall;
      ExtractPerVertexAlbedo:access procedure(THIS:LPID3DXPRTEngine;pMesh:LPD3DXMESH;Usage:D3DDECLUSAGE;NumChannels:UINT) with Convention=>Stdcall;
      ResampleBuffer:access procedure(THIS:LPID3DXPRTEngine;pBufferIn:LPD3DXPRTBUFFER;pBufferOut:LPD3DXPRTBUFFER) with Convention=>Stdcall;
      GetAdaptedMesh:access procedure(THIS:LPID3DXPRTEngine;pD3DDevice:LPDIRECT3DDEVICE9;pFaceRemap:win32.LPUINT;pVertRemap:win32.LPUINT;pfVertWeights:win32.LPFLOAT;ppMesh:access LPD3DXMESH) with Convention=>Stdcall;
      GetNumVerts:access function(THIS:LPID3DXPRTEngine) return UINT with Convention=>Stdcall;
      GetNumFaces:access function(THIS:LPID3DXPRTEngine) return UINT with Convention=>Stdcall;
      SetMinMaxIntersection:access procedure(THIS:LPID3DXPRTEngine;fMin:FLOAT;fMax:FLOAT) with Convention=>Stdcall;
      RobustMeshRefine:access procedure(THIS:LPID3DXPRTEngine;MinEdgeLength:FLOAT;MaxSubdiv:UINT) with Convention=>Stdcall;
      SetSamplingInfo:access procedure(THIS:LPID3DXPRTEngine;NumRays:UINT;UseSphere:BOOL;UseCosine:BOOL;Adaptive:BOOL;AdaptiveThresh:FLOAT) with Convention=>Stdcall;
      ComputeDirectLightingSH:access procedure(THIS:LPID3DXPRTEngine;SHOrder:UINT;pDataOut:LPD3DXPRTBUFFER) with Convention=>Stdcall;
      ComputeDirectLightingSHAdaptive:access procedure(THIS:LPID3DXPRTEngine;SHOrder:UINT;AdaptiveThresh:FLOAT;MinEdgeLength:FLOAT;MaxSubdiv:UINT;pDataOut:LPD3DXPRTBUFFER) with Convention=>Stdcall;
      ComputeDirectLightingSHGPU:access procedure(THIS:LPID3DXPRTEngine;pD3DDevice:LPDIRECT3DDEVICE9;Flags:UINT;SHOrder:UINT;ZBias:FLOAT;ZAngleBias:FLOAT;pDataOut:LPD3DXPRTBUFFER) with Convention=>Stdcall;
      ComputeSS:access procedure(THIS:LPID3DXPRTEngine;pDataIn:LPD3DXPRTBUFFER;pDataOut:LPD3DXPRTBUFFER;pDataTotal:LPD3DXPRTBUFFER) with Convention=>Stdcall;
      ComputeSSAdaptive:access procedure(THIS:LPID3DXPRTEngine;pDataIn:LPD3DXPRTBUFFER;AdaptiveThresh:FLOAT;MinEdgeLength:FLOAT;MaxSubdiv:UINT;pDataOut:LPD3DXPRTBUFFER;pDataTotal:LPD3DXPRTBUFFER) with Convention=>Stdcall;
      ComputeBounce:access procedure(THIS:LPID3DXPRTEngine;pDataIn:LPD3DXPRTBUFFER;pDataOut:LPD3DXPRTBUFFER;pDataTotal:LPD3DXPRTBUFFER) with Convention=>Stdcall;
      ComputeBounceAdaptive:access procedure(THIS:LPID3DXPRTEngine;pDataIn:LPD3DXPRTBUFFER;AdaptiveThresh:FLOAT;MinEdgeLength:FLOAT;MaxSubdiv:UINT;pDataOut:LPD3DXPRTBUFFER;pDataTotal:LPD3DXPRTBUFFER) with Convention=>Stdcall;
      ComputeVolumeSamplesDirectSH:access procedure(THIS:LPID3DXPRTEngine;SHOrderIn:UINT;SHOrderOut:UINT;NumVolSamples:UINT;pSampleLocs:LPCD3DXVECTOR3;pDataOut:LPD3DXPRTBUFFER) with Convention=>Stdcall;
      ComputeVolumeSamples:access procedure(THIS:LPID3DXPRTEngine;pSurfDataIn:LPD3DXPRTBUFFER;SHOrder:UINT;NumVolSamples:UINT;pSampleLocs:LPCD3DXVECTOR3;pDataOut:LPD3DXPRTBUFFER) with Convention=>Stdcall;
      ComputeSurfSamplesDirectSH:access procedure(THIS:LPID3DXPRTEngine;SHOrder:UINT;NumSamples:UINT;pSampleLocs:LPCD3DXVECTOR3;pSampleNorms:LPCD3DXVECTOR3;pDataOut:LPD3DXPRTBUFFER) with Convention=>Stdcall;
      ComputeSurfSamplesBounce:access procedure(THIS:LPID3DXPRTEngine;pSurfDataIn:LPD3DXPRTBUFFER;NumSamples:UINT;pSampleLocs:LPCD3DXVECTOR3;pSampleNorms:LPCD3DXVECTOR3;pDataOut:LPD3DXPRTBUFFER;pDataTotal:LPD3DXPRTBUFFER) with Convention=>Stdcall;
      FreeSSData:access procedure(THIS:LPID3DXPRTEngine) with Convention=>Stdcall;
      FreeBounceData:access procedure(THIS:LPID3DXPRTEngine) with Convention=>Stdcall;
      ComputeLDPRTCoeffs:access procedure(THIS:LPID3DXPRTEngine;pDataIn:LPD3DXPRTBUFFER;SHOrder:UINT;pNormOut:LPD3DXVECTOR3;pDataOut:LPD3DXPRTBUFFER) with Convention=>Stdcall;
      ScaleMeshChunk:access procedure(THIS:LPID3DXPRTEngine;uMeshChunk:UINT;fScale:FLOAT;pDataOut:LPD3DXPRTBUFFER) with Convention=>Stdcall;
      MultiplyAlbedo:access procedure(THIS:LPID3DXPRTEngine;pDataOut:LPD3DXPRTBUFFER) with Convention=>Stdcall;
      SetCallBack:access procedure(THIS:LPID3DXPRTEngine;pCB:LPD3DXSHPRTSIMCB;Frequency:FLOAT;lpUserContext:LPVOID) with Convention=>Stdcall;
      ShadowRayIntersects:access function(THIS:LPID3DXPRTEngine;pRayPos:LPCD3DXVECTOR3;pRayDir:LPCD3DXVECTOR3) return BOOL with Convention=>Stdcall;
      ClosestRayIntersects:access function(THIS:LPID3DXPRTEngine;pRayPos:LPCD3DXVECTOR3;pRayDir:LPCD3DXVECTOR3;pFaceIndex:LPDWORD;pU:WIN32.LPFLOAT;pV:LPFLOAT;pDist:WIN32.LPFLOAT) return BOOL with Convention=>Stdcall;
   end record;

   
   
   type tagXFILECOMPRESSEDANIMATIONSET is record
      CompressedBlockSize:DWORD;
      TicksPerSec:FLOAT;
      PlaybackType:DWORD;
      BufferLength:DWORD;
   end record;

   subtype XFILECOMPRESSEDANIMATIONSET is tagXFILECOMPRESSEDANIMATIONSET;
   type LPXFILECOMPRESSEDANIMATIONSET is access all XFILECOMPRESSEDANIMATIONSET;
   
   --
   -- APIs
   --
   
   function D3DXCreateMesh(NumFaces:DWORD;NumVertices:DWORD;Options:DWORD;pDeclaration:access constant D3DVERTEXELEMENT9;pD3DDevice:LPDIRECT3DDEVICE9;ppMesh:access LPD3DXMESH) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXCreateMesh";

   function D3DXCreateMeshFVF(NumFaces:DWORD;NumVertices:DWORD;Options:DWORD;FVF:DWORD;pD3DDevice:LPDIRECT3DDEVICE9;ppMesh:access LPD3DXMESH) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXCreateMeshFVF";

   function D3DXCreateSPMesh(pMesh:LPD3DXMESH;pAdjacency:access constant DWORD;pVertexAttributeWeights:LPCD3DXATTRIBUTEWEIGHTS;pVertexWeights:LPCFLOAT;ppSMesh:LPLPD3DXSPMESH) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXCreateSPMesh";

   function D3DXCleanMesh(CleanType:D3DXCLEANTYPE;pMeshIn:LPD3DXMESH;pAdjacencyIn:access constant DWORD;ppMeshOut:access LPD3DXMESH;pAdjacencyOut:LPDWORD;ppErrorsAndWarnings:LPLPD3DXBUFFER) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXCleanMesh";

   function D3DXValidMesh(pMeshIn:LPD3DXMESH;pAdjacency:access constant DWORD;ppErrorsAndWarnings:LPLPD3DXBUFFER) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXValidMesh";

   function D3DXGeneratePMesh(pMesh:LPD3DXMESH;pAdjacency:access constant DWORD;pVertexAttributeWeights:LPCD3DXATTRIBUTEWEIGHTS;pVertexWeights:LPCFLOAT;MinValue:DWORD;Options:DWORD;ppPMesh:LPLPD3DXPMESH) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXGeneratePMesh";

   function D3DXSimplifyMesh(pMesh:LPD3DXMESH;pAdjacency:access constant DWORD;pVertexAttributeWeights:LPCD3DXATTRIBUTEWEIGHTS;pVertexWeights:LPCFLOAT;MinValue:DWORD;Options:DWORD;ppMesh:access LPD3DXMESH) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXSimplifyMesh";

   function D3DXComputeBoundingSphere(pFirstPosition:LPCD3DXVECTOR3;NumVertices:DWORD;dwStride:DWORD;pCenter:LPD3DXVECTOR3;pRadius:LPFLOAT) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXComputeBoundingSphere";

   function D3DXComputeBoundingBox(pFirstPosition:LPCD3DXVECTOR3;NumVertices:DWORD;dwStride:DWORD;pMin:LPD3DXVECTOR3;pMax:LPD3DXVECTOR3) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXComputeBoundingBox";

   function D3DXComputeNormals(pMesh:LPD3DXBASEMESH;pAdjacency:access constant DWORD) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXComputeNormals";

   function D3DXCreateBuffer(NumBytes:DWORD;ppBuffer:LPLPD3DXBUFFER) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXCreateBuffer";

   function D3DXLoadMeshFromXA(pFilename:LPCSTR;Options:DWORD;pD3DDevice:LPDIRECT3DDEVICE9;ppAdjacency:LPLPD3DXBUFFER;ppMaterials:LPLPD3DXBUFFER;ppEffectInstances:LPLPD3DXBUFFER;pNumMaterials:LPDWORD;ppMesh:access LPD3DXMESH) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXLoadMeshFromXA";
   
   function D3DXLoadMeshFromX(pFilename:LPCSTR;Options:DWORD;pD3DDevice:LPDIRECT3DDEVICE9;ppAdjacency:LPLPD3DXBUFFER;ppMaterials:LPLPD3DXBUFFER;ppEffectInstances:LPLPD3DXBUFFER;pNumMaterials:LPDWORD;ppMesh:access LPD3DXMESH) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXLoadMeshFromXA";

   function D3DXLoadMeshFromXW(pFilename:LPCWSTR;Options:DWORD;pD3DDevice:LPDIRECT3DDEVICE9;ppAdjacency:LPLPD3DXBUFFER;ppMaterials:LPLPD3DXBUFFER;ppEffectInstances:LPLPD3DXBUFFER;pNumMaterials:LPDWORD;ppMesh:access LPD3DXMESH) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXLoadMeshFromXW";

   function D3DXLoadMeshFromXInMemory(Memory:LPCVOID;SizeOfMemory:DWORD;Options:DWORD;pD3DDevice:LPDIRECT3DDEVICE9;ppAdjacency:LPLPD3DXBUFFER;ppMaterials:LPLPD3DXBUFFER;ppEffectInstances:LPLPD3DXBUFFER;pNumMaterials:LPDWORD;ppMesh:access LPD3DXMESH) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXLoadMeshFromXInMemory";

   function D3DXLoadMeshFromXResource(Module:HMODULE;Name:LPCSTR;Typ:LPCSTR;Options:DWORD;pD3DDevice:LPDIRECT3DDEVICE9;ppAdjacency:LPLPD3DXBUFFER;ppMaterials:LPLPD3DXBUFFER;ppEffectInstances:LPLPD3DXBUFFER;pNumMaterials:LPDWORD;ppMesh:access LPD3DXMESH) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXLoadMeshFromXResource";

   function D3DXSaveMeshToXA(pFilename:LPCSTR;pMesh:LPD3DXMESH;pAdjacency:access constant DWORD;pMaterials:LPCD3DXMATERIAL;pEffectInstances:LPCD3DXEFFECTINSTANCE;NumMaterials:DWORD;Format:DWORD) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXSaveMeshToXA";
   
   function D3DXSaveMeshToX(pFilename:LPCSTR;pMesh:LPD3DXMESH;pAdjacency:access constant DWORD;pMaterials:LPCD3DXMATERIAL;pEffectInstances:LPCD3DXEFFECTINSTANCE;NumMaterials:DWORD;Format:DWORD) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXSaveMeshToXA";

   function D3DXSaveMeshToXW(pFilename:LPCWSTR;pMesh:LPD3DXMESH;pAdjacency:access constant DWORD;pMaterials:LPCD3DXMATERIAL;pEffectInstances:LPCD3DXEFFECTINSTANCE;NumMaterials:DWORD;Format:DWORD) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXSaveMeshToXW";

   function D3DXCreatePMeshFromStream(pStream:access IStream;Options:DWORD;pD3DDevice:LPDIRECT3DDEVICE9;ppMaterials:LPLPD3DXBUFFER;ppEffectInstances:LPLPD3DXBUFFER;pNumMaterials:LPDWORD;ppPMesh:LPLPD3DXPMESH) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXCreatePMeshFromStream";

   function D3DXCreateSkinInfo(NumVertices:DWORD;pDeclaration:access constant D3DVERTEXELEMENT9;NumBones:DWORD;ppSkinInfo:LPLPD3DXSKININFO) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXCreateSkinInfo";

   function D3DXCreateSkinInfoFVF(NumVertices:DWORD;FVF:DWORD;NumBones:DWORD;ppSkinInfo:LPLPD3DXSKININFO) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXCreateSkinInfoFVF";

   function D3DXLoadMeshFromXof(pxofMesh:LPD3DXFILEDATA;Options:DWORD;pD3DDevice:LPDIRECT3DDEVICE9;ppAdjacency:LPLPD3DXBUFFER;ppMaterials:LPLPD3DXBUFFER;ppEffectInstances:LPLPD3DXBUFFER;pNumMaterials:LPDWORD;ppMesh:access LPD3DXMESH) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXLoadMeshFromXof";

   function D3DXLoadSkinMeshFromXof(pxofMesh:LPD3DXFILEDATA;Options:DWORD;pD3DDevice:LPDIRECT3DDEVICE9;ppAdjacency:LPLPD3DXBUFFER;ppMaterials:LPLPD3DXBUFFER;ppEffectInstances:LPLPD3DXBUFFER;pMatOut:LPDWORD;ppSkinInfo:LPLPD3DXSKININFO;ppMesh:access LPD3DXMESH) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXLoadSkinMeshFromXof";

   function D3DXCreateSkinInfoFromBlendedMesh(pMesh:LPD3DXBASEMESH;NumBones:DWORD;pBoneCombinationTable:LPCD3DXBONECOMBINATION;ppSkinInfo:LPLPD3DXSKININFO) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXCreateSkinInfoFromBlendedMesh";

   function D3DXTessellateNPatches(pMeshIn:LPD3DXMESH;pAdjacencyIn:access constant DWORD;NumSegs:FLOAT;QuadraticInterpNormals:BOOL;ppMeshOut:access LPD3DXMESH;ppAdjacencyOut:LPLPD3DXBUFFER) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXTessellateNPatches";

   function D3DXGenerateOutputDecl(pOutput:LPD3DVERTEXELEMENT9;pInput:access constant D3DVERTEXELEMENT9) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXGenerateOutputDecl";

   function D3DXLoadPatchMeshFromXof(pXofObjMesh:LPD3DXFILEDATA;Options:DWORD;pD3DDevice:LPDIRECT3DDEVICE9;ppMaterials:LPLPD3DXBUFFER;ppEffectInstances:LPLPD3DXBUFFER;pNumMaterials:PDWORD;ppMesh:LPLPD3DXPATCHMESH) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXLoadPatchMeshFromXof";

   function D3DXRectPatchSize(pfNumSegs:LPCFLOAT;pdwTriangles:LPDWORD;pdwVertices:LPDWORD) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXRectPatchSize";

   function D3DXTriPatchSize(pfNumSegs:LPCFLOAT;pdwTriangles:LPDWORD;pdwVertices:LPDWORD) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXTriPatchSize";

   function D3DXTessellateRectPatch(pVB:LPDIRECT3DVERTEXBUFFER9;pNumSegs:LPCFLOAT;pdwInDecl:access constant D3DVERTEXELEMENT9;pRectPatchInfo:LPCD3DRECTPATCH_INFO;pMesh:LPD3DXMESH) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXTessellateRectPatch";

   function D3DXTessellateTriPatch(pVB:LPDIRECT3DVERTEXBUFFER9;pNumSegs:LPCFLOAT;pInDecl:access constant D3DVERTEXELEMENT9;pTriPatchInfo:LPCD3DTRIPATCH_INFO;pMesh:LPD3DXMESH) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXTessellateTriPatch";

   function D3DXCreateNPatchMesh(pMeshSysMem:LPD3DXMESH;pPatchMesh:LPLPD3DXPATCHMESH) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXCreateNPatchMesh";

   function D3DXCreatePatchMesh(pInfo:LPCD3DXPATCHINFO;dwNumPatches:DWORD;dwNumVertices:DWORD;dwOptions:DWORD;pDecl:access constant D3DVERTEXELEMENT9;pD3DDevice:LPDIRECT3DDEVICE9;pPatchMesh:LPLPD3DXPATCHMESH) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXCreatePatchMesh";

   function D3DXValidPatchMesh(pMesh:LPD3DXPATCHMESH;dwcDegenerateVertices:LPDWORD;dwcDegeneratePatches:LPDWORD;ppErrorsAndWarnings:LPLPD3DXBUFFER) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXValidPatchMesh";

   function D3DXGetFVFVertexSize(FVF:DWORD) return UINT with Import,Convention=>stdcall,external_name=>"D3DXGetFVFVertexSize";

   function D3DXGetDeclVertexSize(pDecl:access constant D3DVERTEXELEMENT9;Stream:DWORD) return UINT with Import,Convention=>stdcall,external_name=>"D3DXGetDeclVertexSize";

   function D3DXGetDeclLength(pDecl:access constant D3DVERTEXELEMENT9) return UINT with Import,Convention=>stdcall,external_name=>"D3DXGetDeclLength";

   function D3DXDeclaratorFromFVF(FVF:DWORD;pDeclarator:D3DVERTEXELEMENT9_Array) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXDeclaratorFromFVF";

   function D3DXFVFFromDeclarator(pDeclarator:access constant D3DVERTEXELEMENT9;pFVF:LPDWORD) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXFVFFromDeclarator";

   function D3DXWeldVertices(pMesh:LPD3DXMESH;Flags:DWORD;pEpsilons:LPCD3DXWELDEPSILONS;pAdjacencyIn:access constant DWORD;pAdjacencyOut:LPDWORD;pFaceRemap:LPDWORD;ppVertexRemap:LPLPD3DXBUFFER) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXWeldVertices";

   function D3DXIntersect(pMesh:LPD3DXBASEMESH;pRayPos:LPCD3DXVECTOR3;pRayDir:LPCD3DXVECTOR3;pHit:LPBOOL;pFaceIndex:LPDWORD;pU:LPFLOAT;pV:LPFLOAT;pDist:LPFLOAT;ppAllHits:LPLPD3DXBUFFER;pCountOfHits:LPDWORD) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXIntersect";

   function D3DXIntersectSubset(pMesh:LPD3DXBASEMESH;AttribId:DWORD;pRayPos:LPCD3DXVECTOR3;pRayDir:LPCD3DXVECTOR3;pHit:LPBOOL;pFaceIndex:LPDWORD;pU:LPFLOAT;pV:LPFLOAT;pDist:LPFLOAT;ppAllHits:LPLPD3DXBUFFER;pCountOfHits:LPDWORD) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXIntersectSubset";

   function D3DXSphereBoundProbe(pCenter:LPCD3DXVECTOR3;Radius:FLOAT;pRayPosition:LPCD3DXVECTOR3;pRayDirection:LPCD3DXVECTOR3) return BOOL with Import,Convention=>stdcall,external_name=>"D3DXSphereBoundProbe";

   function D3DXBoxBoundProbe(pMin:LPCD3DXVECTOR3;pMax:LPCD3DXVECTOR3;pRayPosition:LPCD3DXVECTOR3;pRayDirection:LPCD3DXVECTOR3) return BOOL with Import,Convention=>stdcall,external_name=>"D3DXBoxBoundProbe";

   function D3DXComputeTangentFrame(pMesh:LPID3DXMesh;dwOptions:DWORD) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXComputeTangentFrame";

   function D3DXComputeTangentFrameEx(pMesh:LPID3DXMesh;dwTextureInSemantic:DWORD;dwTextureInIndex:DWORD;dwUPartialOutSemantic:DWORD;dwUPartialOutIndex:DWORD;dwVPartialOutSemantic:DWORD;dwVPartialOutIndex:DWORD;dwNormalOutSemantic:DWORD;dwNormalOutIndex:DWORD;dwOptions:DWORD;pdwAdjacency:access constant DWORD;fPartialEdgeThreshold:FLOAT;fSingularPointThreshold:FLOAT;fNormalEdgeThreshold:FLOAT;ppMeshOut:LPLPID3DXMesh;ppVertexMapping:LPLPID3DXBuffer) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXComputeTangentFrameEx";

   function D3DXComputeTangent(Mesh:LPD3DXMESH;TexStage:DWORD;TangentIndex:DWORD;BinormIndex:DWORD;Wrap:DWORD;pAdjacency:access constant DWORD) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXComputeTangent";

   type LPD3DXUVATLASCB is access function(fPercentDone:float;lpUserContext:lpvoid) return HRESULT with Convention=>stdcall;
   type LPD3DXIMTSIGNALCALLBACK is access function(uv:access constant D3DXVECTOR2;uPrimitiveID:uint;uSignalDimension:uint;pUserData:LPVOID;pfSignalOut:LPFLOAT) return HRESULT with Convention=>stdcall;
   
   function D3DXUVAtlasCreate(pMesh:LPD3DXMESH;uMaxChartNumber:UINT;fMaxStretch:FLOAT;uWidth:UINT;uHeight:UINT;fGutter:FLOAT;dwTextureIndex:DWORD;pdwAdjacency:access constant DWORD;pdwFalseEdgeAdjacency:access constant DWORD;pfIMTArray:LPCFLOAT;pStatusCallback:LPD3DXUVATLASCB;fCallbackFrequency:FLOAT;pUserContext:LPVOID;dwOptions:DWORD;ppMeshOut:access LPD3DXMESH;ppFacePartitioning:LPLPD3DXBUFFER;ppVertexRemapArray:LPLPD3DXBUFFER;pfMaxStretchOut:LPFLOAT;puNumChartsOut:LPUINT) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXUVAtlasCreate";

   function D3DXUVAtlasPartition(pMesh:LPD3DXMESH;uMaxChartNumber:UINT;fMaxStretch:FLOAT;dwTextureIndex:DWORD;pdwAdjacency:access constant DWORD;pdwFalseEdgeAdjacency:access constant DWORD;pfIMTArray:LPCFLOAT;pStatusCallback:LPD3DXUVATLASCB;fCallbackFrequency:FLOAT;pUserContext:LPVOID;dwOptions:DWORD;ppMeshOut:access LPD3DXMESH;ppFacePartitioning:LPLPD3DXBUFFER;ppVertexRemapArray:LPLPD3DXBUFFER;ppPartitionResultAdjacency:LPLPD3DXBUFFER;pfMaxStretchOut:LPFLOAT;puNumChartsOut:LPUINT) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXUVAtlasPartition";

   function D3DXUVAtlasPack(pMesh:LPID3DXMesh;uWidth:UINT;uHeight:UINT;fGutter:FLOAT;dwTextureIndex:DWORD;pdwPartitionResultAdjacency:access constant DWORD;pStatusCallback:LPD3DXUVATLASCB;fCallbackFrequency:FLOAT;pUserContext:LPVOID;dwOptions:DWORD;pFacePartitioning:LPD3DXBUFFER) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXUVAtlasPack";

   function D3DXComputeIMTFromSignal(pMesh:LPD3DXMESH;dwTextureIndex:DWORD;uSignalDimension:UINT;fMaxUVDistance:FLOAT;dwOptions:DWORD;pSignalCallback:LPD3DXIMTSIGNALCALLBACK;pUserData:LPVOID;pStatusCallback:LPD3DXUVATLASCB;pUserContext:LPVOID;ppIMTData:LPLPD3DXBUFFER) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXComputeIMTFromSignal";

   function D3DXComputeIMTFromPerTexelSignal(pMesh:LPD3DXMESH;dwTextureIndex:DWORD;pfTexelSignal:LPFLOAT;uWidth:UINT;uHeight:UINT;uSignalDimension:UINT;uComponents:UINT;dwOptions:DWORD;pStatusCallback:LPD3DXUVATLASCB;pUserContext:LPVOID;ppIMTData:LPLPD3DXBUFFER) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXComputeIMTFromPerTexelSignal";

   function D3DXComputeIMTFromTexture(pMesh:LPD3DXMESH;pTexture:LPDIRECT3DTEXTURE9;dwTextureIndex:DWORD;dwOption:DWORD;pStatusCallback:LPD3DXUVATLASCB;pUserContext:LPVOID;ppIMTData:access LPD3DXBUFFER) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXComputeIMTFromTexture";
   
   function D3DXComputeIMTFromPerVertexSignal(pMesh:LPD3DXMESH;pfVertexSignal:LPCFLOAT;uSignalDimension:UINT;uSignalStride:UINT;dwOptions:DWORD;pStatusCallback:LPD3DXUVATLASCB;pUserContext:LPVOID;ppIMTData:access LPD3DXBUFFER) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXComputeIMTFromPerVertexSignal";
   
   function D3DXConvertMeshSubsetToSingleStrip(MeshIn:LPD3DXBASEMESH;AttribId:DWORD;IBOptions:DWORD;ppIndexBuffer:access LPDIRECT3DINDEXBUFFER9;pNumIndices:LPDWORD) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXConvertMeshSubsetToSingleStrip";

   function D3DXConvertMeshSubsetToStrips(MeshIn:LPD3DXBASEMESH;AttribId:DWORD;IBOptions:DWORD;ppIndexBuffer:access LPDIRECT3DINDEXBUFFER9;pNumIndices:LPDWORD;ppStripLengths:LPLPD3DXBUFFER;pNumStrips:LPDWORD) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXConvertMeshSubsetToStrips";

   function D3DXOptimizeFaces(pbIndices:LPCVOID;cFaces:UINT;cVertices:UINT;b32BitIndices:BOOL;pFaceRemap:LPDWORD) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXOptimizeFaces";

   function D3DXOptimizeVertices(pbIndices:LPCVOID;cFaces:UINT;cVertices:UINT;b32BitIndices:BOOL;pVertexRemap:LPDWORD) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXOptimizeVertices";

   function D3DXCreatePRTBuffer(NumSamples:UINT;NumCoeffs:UINT;NumChannels:UINT;ppBuffer:LPLPD3DXPRTBUFFER) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXCreatePRTBuffer";

   function D3DXCreatePRTBufferTex(Width:UINT;Height:UINT;NumCoeffs:UINT;NumChannels:UINT;ppBuffer:LPLPD3DXPRTBUFFER) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXCreatePRTBufferTex";

   function D3DXLoadPRTBufferFromFileA(pFilename:LPCSTR;ppBuffer:LPLPD3DXPRTBUFFER) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXLoadPRTBufferFromFileA";
   
   function D3DXLoadPRTBufferFromFile(pFilename:LPCSTR;ppBuffer:LPLPD3DXPRTBUFFER) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXLoadPRTBufferFromFileA";
   
   function D3DXLoadPRTBufferFromFileW(pFilename:LPCWSTR;ppBuffer:LPLPD3DXPRTBUFFER) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXLoadPRTBufferFromFileW";

   function D3DXSavePRTBufferToFileA(pFileName:LPCSTR;pBuffer:LPD3DXPRTBUFFER) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXSavePRTBufferToFileA";
   
   function D3DXSavePRTBufferToFile(pFileName:LPCSTR;pBuffer:LPD3DXPRTBUFFER) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXSavePRTBufferToFileA";
   
   function D3DXSavePRTBufferToFileW(pFileName:LPCWSTR;pBuffer:LPD3DXPRTBUFFER) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXSavePRTBufferToFileW";

   function D3DXLoadPRTCompBufferFromFileA(pFilename:LPCSTR;ppBuffer:LPLPD3DXPRTCOMPBUFFER) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXLoadPRTCompBufferFromFileA";
   
   function D3DXLoadPRTCompBufferFromFile(pFilename:LPCSTR;ppBuffer:LPLPD3DXPRTCOMPBUFFER) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXLoadPRTCompBufferFromFileA";
   
   function D3DXLoadPRTCompBufferFromFileW(pFilename:LPCWSTR;ppBuffer:LPLPD3DXPRTCOMPBUFFER) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXLoadPRTCompBufferFromFileW";

   function D3DXSavePRTCompBufferToFileA(pFileName:LPCSTR;pBuffer:LPD3DXPRTCOMPBUFFER) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXSavePRTCompBufferToFileA";
   
   function D3DXSavePRTCompBufferToFile(pFileName:LPCSTR;pBuffer:LPD3DXPRTCOMPBUFFER) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXSavePRTCompBufferToFileA";

   function D3DXSavePRTCompBufferToFileW(pFileName:LPCWSTR;pBuffer:LPD3DXPRTCOMPBUFFER) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXSavePRTCompBufferToFileW";


   function D3DXCreatePRTCompBuffer(Quality:D3DXSHCOMPRESSQUALITYTYPE;NumClusters:UINT;NumPCA:UINT;pCB:LPD3DXSHPRTSIMCB;lpUserContext:LPVOID;pBufferIn:LPD3DXPRTBUFFER;ppBufferOut:LPLPD3DXPRTCOMPBUFFER) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXCreatePRTCompBuffer";

   function D3DXCreateTextureGutterHelper(Width:UINT;Height:UINT;pMesh:LPD3DXMESH;GutterSize:FLOAT;ppBuffer:LPLPD3DXTEXTUREGUTTERHELPER) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXCreateTextureGutterHelper";

   function D3DXCreatePRTEngine(pMesh:LPD3DXMESH;pAdjacency:LPDWORD;ExtractUVs:BOOL;pBlockerMesh:LPD3DXMESH;ppEngine:LPLPD3DXPRTENGINE) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXCreatePRTEngine";

   function D3DXConcatenateMeshes(ppMeshes:access LPD3DXMESH;NumMeshes:UINT;Options:DWORD;pGeomXForms:LPCD3DXMATRIX;pTextureXForms:LPCD3DXMATRIX;pDecl:access constant D3DVERTEXELEMENT9;pD3DDevice:LPDIRECT3DDEVICE9;ppMeshOut:access LPD3DXMESH) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXConcatenateMeshes";

   function D3DXSHPRTCompSuperCluster(pClusterIDs:LPUINT;pScene:LPD3DXMESH;MaxNumClusters:UINT;NumClusters:UINT;pSuperClusterIDs:LPUINT;pNumSuperClusters:LPUINT) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXSHPRTCompSuperCluster";

   function D3DXSHPRTCompSplitMeshSC(pClusterIDs:LPUINT;NumVertices:UINT;NumClusters:UINT;pSuperClusterIDs:LPUINT;NumSuperClusters:UINT;pInputIB:LPVOID;InputIBIs32Bit:BOOL;NumFaces:UINT;ppIBData:LPLPD3DXBUFFER;pIBDataLength:LPUINT;OutputIBIs32Bit:BOOL;ppFaceRemap:LPLPD3DXBUFFER;ppVertData:LPLPD3DXBUFFER;pVertDataLength:LPUINT;pSCClusterList:LPUINT;pSCData:LPD3DXSHPRTSPLITMESHCLUSTERDATA) return HRESULT with Import,Convention=>stdcall,external_name=>"D3DXSHPRTCompSplitMeshSC";




   --
   -- THE END
   --





end d3dx9mesh;

















 

以下更改相对于 E_D3D9 1.0正式版: 1:[!]"E_D3D9" 改名为“E_DirectX".为其他DirectX组件作准备. 2:[!]调用"d3dx9_42.dll"库改为"d3dx9_39.dll"库.直接影响相关的ID3DX...类. 3:[!]优化各类(修改为继承),删除与基类重复的方法,相对减少源码体积(不多,约20KB). 3:[+]ID3DXPMesh 之前版本漏掉了(MSDN内没有,d3dx9mesh.h中有). 4 [+]ID3DXSPMesh 之前版本漏掉了(MSDN内没有,d3dx9mesh.h中有). 5:[+]IDirect3D9Ex 6:[+]IDirect3DDevice9Ex 7:[+]IDirect3DSwapChain9Ex 8:[+]IDirect3D9ExOverlayExtension 9:[+]IDirect3DDevice9Video 10:[+]IDirect3DAuthenticatedChannel9 11:[+]IDirect3DCryptoSession9 12:[+]IDirectInput8 13:[+]IDirectInputDevice8 其中DIDATAFORMAT参考了Delphi的JEDI后处理的.若有更好的方法欢迎讨论. 14:[+]IDirectInputEffect 15:[*]日后会陆续添加DirectX的其余组件,并且修复现有问题. (以后版本会整合发布,改动都将写入日志,公开免费发布,以谋求易语言完美调用原生DirectX所有组件方法. 待组件全了后,我会定期逐个类/方法测试,顺便写些Demo.) 提示: 有易友建议我使用EATL,我大致看了下原理是类似的.但它改写了易语言的类(也是其亮点),从而导致可以直接调用. 对于E_DirectX这个项目来讲,我个人感觉意义不是很大(该处理的类型还得处理!). 并不是说EATL不好,本人多重考虑后感觉不适合. 许多类方法可能存在问题 务必注意 特征/情况如下: 方法中参数类型为文本型、字节集、所有类型的数组、以及自定义类型成员中含有其他自定义类型的,这些未经处理的大多存在问题. 还有小数型参数与返回值的问题("Call"的问题),第一个版本(E_D3D9 Beta1)中存在此重大问题.其后续的版本基本都已修复. 以上问题基本皆由易独特的类型存储结构无法与之匹配而引起的.(了解C++类型存储结构的小伙伴可以很快想到处理办法.) 模块还有大量问题没有处理,本人没有那么多时间和精力去逐个测试,除了自己用到的方法以外,许多都是简单处理下(工作量异常大! 无奈之举,以后慢慢修复吧.也可以自己参照我处理过的方法自行研究,开源也是有此目的.) 若发现问题可以发送相关的代码到我的邮箱. (此文最底下或模块中的作者信息一栏),便于我整合进下一版本中. 承诺: 以后所有版本皆会以免费开源形式发布,可任意使用,无任何限制.(据我所知之前也有不少因此受益的小伙伴,才让我更有信心继续下去.) 声明: E_DirectX(E_D3D9) 从诞生以来一直是以无偿开源的形式存在,同时因此作者(Roc/xc.roc)也无法对产品和用户进行有效的约束或限制, 同时也不承担因为该产品所带来的后果,若造成任何损失/后果由使用者自行承担.请大家谨慎考虑取舍! 总而言之,一切如涛哥所言:"向正确的方向前进!". 动态: 本人最近根据某易友的建议正在开发Essen GUI(游戏界面库),主要是应用于游戏环境(Hook D3D - -!). 会以开源模块的形式小范围收费发布,并且给予相关技术支持.有相关需求的用户也可以联系我邮箱. 以后会建立相关Q群供用户交流. 大致特点:简单、易用、可扩展性(你能想到的,你能见到的组件几乎都能扩展出来.类似Ex_DUI,但也所有区别.).
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值