home *** CD-ROM | disk | FTP | other *** search
/ Beginning Direct3D Game Programming / Direct3D.iso / directx / dxf / include / d3dx8mesh.h < prev    next >
C/C++ Source or Header  |  2000-10-20  |  21KB  |  566 lines

  1. //////////////////////////////////////////////////////////////////////////////
  2. //
  3. //  Copyright (C) 1998 Microsoft Corporation.  All Rights Reserved.
  4. //
  5. //  File:       d3dx8mesh.h
  6. //  Content:    D3DX mesh types and functions
  7. //
  8. //////////////////////////////////////////////////////////////////////////////
  9.  
  10. #include "d3dx8.h"
  11.  
  12. #ifndef __D3DX8MESH_H__
  13. #define __D3DX8MESH_H__
  14.  
  15. #include "dxfile.h"     // defines LPDIRECTXFILEDATA
  16.  
  17. // {A69BA991-1F7D-11d3-B929-00C04F68DC23}
  18. DEFINE_GUID(IID_ID3DXBaseMesh,
  19. 0xa69ba991, 0x1f7d, 0x11d3, 0xb9, 0x29, 0x0, 0xc0, 0x4f, 0x68, 0xdc, 0x23);
  20.  
  21. // {9D84AC46-6B90-49a9-A721-085C7A3E3DAE}
  22. DEFINE_GUID(IID_ID3DXMesh, 
  23. 0x9d84ac46, 0x6b90, 0x49a9, 0xa7, 0x21, 0x8, 0x5c, 0x7a, 0x3e, 0x3d, 0xae);
  24.  
  25. // {15981AA8-1A05-48e3-BBE7-FF5D49654E3F}
  26. DEFINE_GUID(IID_ID3DXPMesh, 
  27. 0x15981aa8, 0x1a05, 0x48e3, 0xbb, 0xe7, 0xff, 0x5d, 0x49, 0x65, 0x4e, 0x3f);
  28.  
  29. // {BC3BBDE2-1F7D-11d3-B929-00C04F68DC23}
  30. DEFINE_GUID(IID_ID3DXSPMesh, 
  31. 0xbc3bbde2, 0x1f7d, 0x11d3, 0xb9, 0x29, 0x0, 0xc0, 0x4f, 0x68, 0xdc, 0x23);
  32.  
  33. // {82A53844-F322-409e-A2E9-992E1104069D}
  34. DEFINE_GUID(IID_ID3DXSkinMesh, 
  35. 0x82a53844, 0xf322, 0x409e, 0xa2, 0xe9, 0x99, 0x2e, 0x11, 0x4, 0x6, 0x9d);
  36.  
  37.  
  38. enum _D3DXMESH {
  39.     D3DXMESH_32BIT                    = 0x001, // If set, then use 32 bit indices, if not set use 16 bit indices. 32BIT meshes currently not supported on ID3DXSkinMesh object
  40.     D3DXMESH_DONOTCLIP              = 0x002, // Use D3DUSAGE_DONOTCLIP for VB & IB.
  41.     D3DXMESH_POINTS                 = 0x004, // Use D3DUSAGE_POINTS for VB & IB. 
  42.     D3DXMESH_RTPATCHES              = 0x008, // Use D3DUSAGE_RTPATCHES for VB & IB. 
  43.     D3DXMESH_NPATCHES                = 0x4000,// Use D3DUSAGE_NPATCHES for VB & IB. 
  44.     D3DXMESH_VB_SYSTEMMEM            = 0x010, // Use D3DPOOL_SYSTEMMEM for VB. Overrides D3DXMESH_MANAGEDVERTEXBUFFER
  45.     D3DXMESH_VB_MANAGED             = 0x020, // Use D3DPOOL_MANAGED for VB. 
  46.     D3DXMESH_VB_WRITEONLY           = 0x040, // Use D3DUSAGE_WRITEONLY for VB.
  47.     D3DXMESH_VB_DYNAMIC             = 0x080, // Use D3DUSAGE_DYNAMIC for VB.
  48.     D3DXMESH_IB_SYSTEMMEM            = 0x100, // Use D3DPOOL_SYSTEMMEM for IB. Overrides D3DXMESH_MANAGEDINDEXBUFFER
  49.     D3DXMESH_IB_MANAGED             = 0x200, // Use D3DPOOL_MANAGED for IB.
  50.     D3DXMESH_IB_WRITEONLY           = 0x400, // Use D3DUSAGE_WRITEONLY for IB.
  51.     D3DXMESH_IB_DYNAMIC             = 0x800, // Use D3DUSAGE_DYNAMIC for IB.
  52.  
  53.     D3DXMESH_VB_SHARE               = 0x1000, // Valid for Clone* calls only, forces cloned mesh/pmesh to share vertex buffer
  54.  
  55.     D3DXMESH_USEHWONLY              = 0x2000, // Valid for ID3DXSkinMesh::ConvertToBlendedMesh
  56.  
  57.     // Helper options
  58.     D3DXMESH_SYSTEMMEM                = 0x110, // D3DXMESH_VB_SYSTEMMEM | D3DXMESH_IB_SYSTEMMEM
  59.     D3DXMESH_MANAGED                = 0x220, // D3DXMESH_VB_MANAGED | D3DXMESH_IB_MANAGED
  60.     D3DXMESH_WRITEONLY              = 0x440, // D3DXMESH_VB_WRITEONLY | D3DXMESH_IB_WRITEONLY
  61.     D3DXMESH_DYNAMIC                = 0x880, // D3DXMESH_VB_DYNAMIC | D3DXMESH_IB_DYNAMIC
  62.  
  63. };
  64.  
  65. // option field values for specifying min value in D3DXGeneratePMesh and D3DXSimplifyMesh
  66. enum _D3DXMESHSIMP
  67. {
  68.     D3DXMESHSIMP_VERTEX   = 0x1,
  69.     D3DXMESHSIMP_FACE     = 0x2,
  70.  
  71. };
  72.  
  73. enum _MAX_FVF_DECL_SIZE
  74. {
  75.     MAX_FVF_DECL_SIZE = 20
  76. };
  77.  
  78. typedef struct ID3DXBaseMesh *LPD3DXBASEMESH;
  79. typedef struct ID3DXMesh *LPD3DXMESH;
  80. typedef struct ID3DXPMesh *LPD3DXPMESH;
  81. typedef struct ID3DXSPMesh *LPD3DXSPMESH;
  82. typedef struct ID3DXSkinMesh *LPD3DXSKINMESH;
  83.  
  84. typedef struct _D3DXATTRIBUTERANGE
  85. {
  86.     DWORD AttribId;
  87.     DWORD FaceStart;
  88.     DWORD FaceCount;
  89.     DWORD VertexStart;
  90.     DWORD VertexCount;
  91. } D3DXATTRIBUTERANGE;
  92.  
  93. typedef D3DXATTRIBUTERANGE* LPD3DXATTRIBUTERANGE;
  94.  
  95. #ifdef __cplusplus
  96. extern "C" {
  97. #endif //__cplusplus
  98. struct D3DXMATERIAL
  99. {
  100.     D3DMATERIAL8  MatD3D;
  101.     LPSTR         pTextureFilename;
  102. };
  103. typedef struct D3DXMATERIAL *LPD3DXMATERIAL;
  104. #ifdef __cplusplus
  105. }
  106. #endif //__cplusplus
  107.  
  108. typedef struct _D3DXATTRIBUTEWEIGHTS
  109. {
  110.     FLOAT Position;
  111.     FLOAT Boundary;
  112.     FLOAT Normal;
  113.     FLOAT Diffuse;
  114.     FLOAT Specular;
  115.     FLOAT Tex[8];
  116. } D3DXATTRIBUTEWEIGHTS;
  117.  
  118. typedef D3DXATTRIBUTEWEIGHTS* LPD3DXATTRIBUTEWEIGHTS;
  119.  
  120. DECLARE_INTERFACE_(ID3DXBaseMesh, IUnknown)
  121. {
  122.     // IUnknown
  123.     STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
  124.     STDMETHOD_(ULONG, AddRef)(THIS) PURE;
  125.     STDMETHOD_(ULONG, Release)(THIS) PURE;
  126.  
  127.     // ID3DXBaseMesh
  128.     STDMETHOD(DrawSubset)(THIS_ DWORD AttribId) PURE;
  129.     STDMETHOD_(DWORD, GetNumFaces)(THIS) PURE;
  130.     STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE;
  131.     STDMETHOD_(DWORD, GetFVF)(THIS) PURE;
  132.     STDMETHOD(GetDeclaration)(THIS_ DWORD Declaration[MAX_FVF_DECL_SIZE]) PURE;
  133.     STDMETHOD_(DWORD, GetOptions)(THIS) PURE;
  134.     STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE8* ppDevice) PURE;
  135.     STDMETHOD(CloneMeshFVF)(THIS_ DWORD Options, 
  136.                 DWORD FVF, LPDIRECT3DDEVICE8 pD3DDevice, LPD3DXMESH* ppCloneMesh) PURE;
  137.     STDMETHOD(CloneMesh)(THIS_ DWORD Options, 
  138.                 CONST DWORD *pDeclaration, LPDIRECT3DDEVICE8 pD3DDevice, LPD3DXMESH* ppCloneMesh) PURE;
  139.     STDMETHOD(GetVertexBuffer)(THIS_ LPDIRECT3DVERTEXBUFFER8* ppVB) PURE;
  140.     STDMETHOD(GetIndexBuffer)(THIS_ LPDIRECT3DINDEXBUFFER8* ppIB) PURE;
  141.     STDMETHOD(LockVertexBuffer)(THIS_ DWORD Flags, BYTE** ppData) PURE;
  142.     STDMETHOD(UnlockVertexBuffer)(THIS) PURE;
  143.     STDMETHOD(LockIndexBuffer)(THIS_ DWORD Flags, BYTE** ppData) PURE;
  144.     STDMETHOD(UnlockIndexBuffer)(THIS) PURE;
  145.     STDMETHOD(GetAttributeTable)(
  146.                 THIS_ D3DXATTRIBUTERANGE *pAttribTable, DWORD* pAttribTableSize) PURE;
  147. };
  148.  
  149. DECLARE_INTERFACE_(ID3DXMesh, ID3DXBaseMesh)
  150. {
  151.     // IUnknown
  152.     STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
  153.     STDMETHOD_(ULONG, AddRef)(THIS) PURE;
  154.     STDMETHOD_(ULONG, Release)(THIS) PURE;
  155.  
  156.     // ID3DXBaseMesh
  157.     STDMETHOD(DrawSubset)(THIS_ DWORD AttribId) PURE;
  158.     STDMETHOD_(DWORD, GetNumFaces)(THIS) PURE;
  159.     STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE;
  160.     STDMETHOD_(DWORD, GetFVF)(THIS) PURE;
  161.     STDMETHOD(GetDeclaration)(THIS_ DWORD Declaration[MAX_FVF_DECL_SIZE]) PURE;
  162.     STDMETHOD_(DWORD, GetOptions)(THIS) PURE;
  163.     STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE8* ppDevice) PURE;
  164.     STDMETHOD(CloneMeshFVF)(THIS_ DWORD Options, 
  165.                 DWORD FVF, LPDIRECT3DDEVICE8 pD3DDevice, LPD3DXMESH* ppCloneMesh) PURE;
  166.     STDMETHOD(CloneMesh)(THIS_ DWORD Options, 
  167.                 CONST DWORD *pDeclaration, LPDIRECT3DDEVICE8 pD3DDevice, LPD3DXMESH* ppCloneMesh) PURE;
  168.     STDMETHOD(GetVertexBuffer)(THIS_ LPDIRECT3DVERTEXBUFFER8* ppVB) PURE;
  169.     STDMETHOD(GetIndexBuffer)(THIS_ LPDIRECT3DINDEXBUFFER8* ppIB) PURE;
  170.     STDMETHOD(LockVertexBuffer)(THIS_ DWORD Flags, BYTE** ppData) PURE;
  171.     STDMETHOD(UnlockVertexBuffer)(THIS) PURE;
  172.     STDMETHOD(LockIndexBuffer)(THIS_ DWORD Flags, BYTE** ppData) PURE;
  173.     STDMETHOD(UnlockIndexBuffer)(THIS) PURE;
  174.     STDMETHOD(GetAttributeTable)(
  175.                 THIS_ D3DXATTRIBUTERANGE *pAttribTable, DWORD* pAttribTableSize) PURE;
  176.  
  177.     // ID3DXMesh
  178.     STDMETHOD(LockAttributeBuffer)(THIS_ DWORD Flags, DWORD** ppData) PURE;
  179.     STDMETHOD(UnlockAttributeBuffer)(THIS) PURE;
  180.     STDMETHOD(ConvertPointRepsToAdjacency)(THIS_ CONST DWORD* pPRep, DWORD* pAdjacency) PURE;
  181.     STDMETHOD(ConvertAdjacencyToPointReps)(THIS_ CONST DWORD* pAdjacency, DWORD* pPRep) PURE;
  182.     STDMETHOD(GenerateAdjacency)(THIS_ FLOAT fEpsilon, DWORD* pAdjacency) PURE;
  183.     STDMETHOD(Optimize)(THIS_ DWORD Flags, CONST DWORD* pAdjacencyIn, DWORD* pAdjacencyOut, 
  184.                      DWORD* pFaceRemap, LPD3DXBUFFER *ppVertexRemap,  
  185.                      LPD3DXMESH* ppOptMesh) PURE;
  186.     STDMETHOD(OptimizeInplace)(THIS_ DWORD Flags, CONST DWORD* pAdjacencyIn, DWORD* pAdjacencyOut, 
  187.                      DWORD* pFaceRemap, LPD3DXBUFFER *ppVertexRemap) PURE;
  188. };
  189.  
  190. DECLARE_INTERFACE_(ID3DXPMesh, ID3DXBaseMesh)
  191. {
  192.     // IUnknown
  193.     STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
  194.     STDMETHOD_(ULONG, AddRef)(THIS) PURE;
  195.     STDMETHOD_(ULONG, Release)(THIS) PURE;
  196.  
  197.     // ID3DXBaseMesh
  198.     STDMETHOD(DrawSubset)(THIS_ DWORD AttribId) PURE;
  199.     STDMETHOD_(DWORD, GetNumFaces)(THIS) PURE;
  200.     STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE;
  201.     STDMETHOD_(DWORD, GetFVF)(THIS) PURE;
  202.     STDMETHOD(GetDeclaration)(THIS_ DWORD Declaration[MAX_FVF_DECL_SIZE]) PURE;
  203.     STDMETHOD_(DWORD, GetOptions)(THIS) PURE;
  204.     STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE8* ppDevice) PURE;
  205.     STDMETHOD(CloneMeshFVF)(THIS_ DWORD Options, 
  206.                 DWORD FVF, LPDIRECT3DDEVICE8 pD3DDevice, LPD3DXMESH* ppCloneMesh) PURE;
  207.     STDMETHOD(CloneMesh)(THIS_ DWORD Options, 
  208.                 CONST DWORD *pDeclaration, LPDIRECT3DDEVICE8 pD3DDevice, LPD3DXMESH* ppCloneMesh) PURE;
  209.     STDMETHOD(GetVertexBuffer)(THIS_ LPDIRECT3DVERTEXBUFFER8* ppVB) PURE;
  210.     STDMETHOD(GetIndexBuffer)(THIS_ LPDIRECT3DINDEXBUFFER8* ppIB) PURE;
  211.     STDMETHOD(LockVertexBuffer)(THIS_ DWORD Flags, BYTE** ppData) PURE;
  212.     STDMETHOD(UnlockVertexBuffer)(THIS) PURE;
  213.     STDMETHOD(LockIndexBuffer)(THIS_ DWORD Flags, BYTE** ppData) PURE;
  214.     STDMETHOD(UnlockIndexBuffer)(THIS) PURE;
  215.     STDMETHOD(GetAttributeTable)(
  216.                 THIS_ D3DXATTRIBUTERANGE *pAttribTable, DWORD* pAttribTableSize) PURE;
  217.  
  218.     // ID3DXPMesh
  219.     STDMETHOD(ClonePMeshFVF)(THIS_ DWORD Options, 
  220.                 DWORD FVF, LPDIRECT3DDEVICE8 pD3D, LPD3DXPMESH* ppCloneMesh) PURE;
  221.     STDMETHOD(ClonePMesh)(THIS_ DWORD Options, 
  222.                 CONST DWORD *pDeclaration, LPDIRECT3DDEVICE8 pD3D, LPD3DXPMESH* ppCloneMesh) PURE;
  223.     STDMETHOD(SetNumFaces)(THIS_ DWORD Faces) PURE;
  224.     STDMETHOD(SetNumVertices)(THIS_ DWORD Vertices) PURE;
  225.     STDMETHOD_(DWORD, GetMaxFaces)(THIS) PURE;
  226.     STDMETHOD_(DWORD, GetMinFaces)(THIS) PURE;
  227.     STDMETHOD_(DWORD, GetMaxVertices)(THIS) PURE;
  228.     STDMETHOD_(DWORD, GetMinVertices)(THIS) PURE;
  229.     STDMETHOD(Save)(THIS_ IStream *pStream, LPD3DXMATERIAL pMaterials, DWORD NumMaterials) PURE;
  230.  
  231.     STDMETHOD(Optimize)(THIS_ DWORD Flags, DWORD* pAdjacencyOut, 
  232.                      DWORD* pFaceRemap, LPD3DXBUFFER *ppVertexRemap,  
  233.                      LPD3DXMESH* ppOptMesh) PURE;
  234.     STDMETHOD(GetAdjacency)(THIS_ DWORD* pAdjacency) PURE;
  235. };
  236.  
  237. DECLARE_INTERFACE_(ID3DXSPMesh, IUnknown)
  238. {
  239.     // IUnknown
  240.     STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
  241.     STDMETHOD_(ULONG, AddRef)(THIS) PURE;
  242.     STDMETHOD_(ULONG, Release)(THIS) PURE;
  243.  
  244.     // ID3DXSPMesh
  245.     STDMETHOD_(DWORD, GetNumFaces)(THIS) PURE;
  246.     STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE;
  247.     STDMETHOD_(DWORD, GetFVF)(THIS) PURE;
  248.     STDMETHOD(GetDeclaration)(THIS_ DWORD Declaration[MAX_FVF_DECL_SIZE]) PURE;
  249.     STDMETHOD_(DWORD, GetOptions)(THIS) PURE;
  250.     STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE8* ppDevice) PURE;
  251.     STDMETHOD(CloneMeshFVF)(THIS_ DWORD Options, 
  252.                 DWORD FVF, LPDIRECT3DDEVICE8 pD3D, DWORD *pAdjacencyOut, DWORD *pVertexRemapOut, LPD3DXMESH* ppCloneMesh) PURE;
  253.     STDMETHOD(CloneMesh)(THIS_ DWORD Options, 
  254.                 CONST DWORD *pDeclaration, LPDIRECT3DDEVICE8 pD3DDevice, DWORD *pAdjacencyOut, DWORD *pVertexRemapOut, LPD3DXMESH* ppCloneMesh) PURE;
  255.     STDMETHOD(ClonePMeshFVF)(THIS_ DWORD Options, 
  256.                 DWORD FVF, LPDIRECT3DDEVICE8 pD3D, DWORD *pVertexRemapOut, LPD3DXPMESH* ppCloneMesh) PURE;
  257.     STDMETHOD(ClonePMesh)(THIS_ DWORD Options, 
  258.                 CONST DWORD *pDeclaration, LPDIRECT3DDEVICE8 pD3D, DWORD *pVertexRemapOut, LPD3DXPMESH* ppCloneMesh) PURE;
  259.     STDMETHOD(ReduceFaces)(THIS_ DWORD Faces) PURE;
  260.     STDMETHOD(ReduceVertices)(THIS_ DWORD Vertices) PURE;
  261.     STDMETHOD_(DWORD, GetMaxFaces)(THIS) PURE;
  262.     STDMETHOD_(DWORD, GetMaxVertices)(THIS) PURE;
  263. };
  264.  
  265. #define UNUSED16 (0xffff)
  266. #define UNUSED32 (0xffffffff)
  267.  
  268. // ID3DXMesh::Optimize options
  269. enum _D3DXMESHOPT {
  270.     D3DXMESHOPT_COMPACT       = 0x001,
  271.     D3DXMESHOPT_ATTRSORT      = 0x002,
  272.     D3DXMESHOPT_VERTEXCACHE   = 0x004,
  273.     D3DXMESHOPT_STRIPREORDER  = 0x008,
  274.     D3DXMESHOPT_IGNOREVERTS   = 0x010,  // optimize faces only, don't touch vertices
  275.     D3DXMESHOPT_SHAREVB       = 0x020,
  276. };
  277.  
  278. // Subset of the mesh that has the same attribute and bone combination.
  279. // This subset can be rendered in a single draw call
  280. typedef struct _D3DXBONECOMBINATION
  281. {
  282.     DWORD AttribId;
  283.     DWORD FaceStart;
  284.     DWORD FaceCount;
  285.     DWORD VertexStart;
  286.     DWORD VertexCount;
  287.     DWORD* BoneId;
  288. } D3DXBONECOMBINATION, *LPD3DXBONECOMBINATION;
  289.  
  290. DECLARE_INTERFACE_(ID3DXSkinMesh, IUnknown)
  291. {
  292.     // IUnknown
  293.     STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
  294.     STDMETHOD_(ULONG, AddRef)(THIS) PURE;
  295.     STDMETHOD_(ULONG, Release)(THIS) PURE;
  296.  
  297.     // ID3DXMesh
  298.     STDMETHOD_(DWORD, GetNumFaces)(THIS) PURE;
  299.     STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE;
  300.     STDMETHOD_(DWORD, GetFVF)(THIS) PURE;
  301.     STDMETHOD(GetDeclaration)(THIS_ DWORD Declaration[MAX_FVF_DECL_SIZE]) PURE;
  302.     STDMETHOD_(DWORD, GetOptions)(THIS) PURE;
  303.     STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE8* ppDevice) PURE;
  304.     STDMETHOD(GetVertexBuffer)(THIS_ LPDIRECT3DVERTEXBUFFER8* ppVB) PURE;
  305.     STDMETHOD(GetIndexBuffer)(THIS_ LPDIRECT3DINDEXBUFFER8* ppIB) PURE;
  306.     STDMETHOD(LockVertexBuffer)(THIS_ DWORD flags, BYTE** ppData) PURE;
  307.     STDMETHOD(UnlockVertexBuffer)(THIS) PURE;
  308.     STDMETHOD(LockIndexBuffer)(THIS_ DWORD flags, BYTE** ppData) PURE;
  309.     STDMETHOD(UnlockIndexBuffer)(THIS) PURE;
  310.     STDMETHOD(LockAttributeBuffer)(THIS_ DWORD flags, DWORD** ppData) PURE;
  311.     STDMETHOD(UnlockAttributeBuffer)(THIS) PURE;
  312.     // ID3DXSkinMesh
  313.     STDMETHOD_(DWORD, GetNumBones)(THIS) PURE;
  314.     STDMETHOD(GetOriginalMesh)(THIS_ LPD3DXMESH* ppMesh) PURE;
  315.     STDMETHOD(SetBoneInfluence)(THIS_ DWORD bone, DWORD numInfluences, CONST DWORD* vertices, CONST FLOAT* weights) PURE;
  316.     STDMETHOD_(DWORD, GetNumBoneInfluences)(THIS_ DWORD bone) PURE;
  317.     STDMETHOD(GetBoneInfluence)(THIS_ DWORD bone, DWORD* vertices, FLOAT* weights) PURE;
  318.     STDMETHOD(GetMaxVertexInfluences)(THIS_ DWORD* maxVertexInfluences) PURE;
  319.     STDMETHOD(GetMaxFaceInfluences)(THIS_ DWORD* maxFaceInfluences) PURE;
  320.     STDMETHOD(ConvertToBlendedMesh)(THIS_ DWORD options, CONST LPDWORD pAdjacencyIn, LPDWORD pAdjacencyOut,
  321.                             DWORD* pNumBoneCombinations, LPD3DXBUFFER* ppBoneCombinationTable, LPD3DXMESH* ppMesh) PURE;
  322.     STDMETHOD(ConvertToIndexedBlendedMesh)(THIS_ DWORD options, 
  323.                                            CONST LPDWORD pAdjacencyIn, 
  324.                                            DWORD paletteSize, 
  325.                                            LPDWORD pAdjacencyOut, 
  326.                                             DWORD* pNumBoneCombinations, 
  327.                                            LPD3DXBUFFER* ppBoneCombinationTable, 
  328.                                            LPD3DXMESH* ppMesh) PURE;
  329.     STDMETHOD(GenerateSkinnedMesh)(THIS_ DWORD options, FLOAT minWeight, CONST LPDWORD pAdjacencyIn, LPDWORD pAdjacencyOut, LPD3DXMESH* ppMesh) PURE;
  330.     STDMETHOD(UpdateSkinnedMesh)(THIS_ CONST D3DXMATRIX* pBoneTransforms, LPD3DXMESH pMesh) PURE;
  331. };
  332.  
  333. #ifdef __cplusplus
  334. extern "C" {
  335. #endif //__cplusplus
  336.  
  337. HRESULT WINAPI 
  338.     D3DXCreateMesh(
  339.         DWORD NumFaces, 
  340.         DWORD NumVertices, 
  341.         DWORD Options, 
  342.         CONST DWORD *pDeclaration, 
  343.         LPDIRECT3DDEVICE8 pD3D, 
  344.         LPD3DXMESH* ppMesh);
  345.  
  346. HRESULT WINAPI 
  347.     D3DXCreateMeshFVF(
  348.         DWORD NumFaces, 
  349.         DWORD NumVertices, 
  350.         DWORD Options, 
  351.         DWORD FVF, 
  352.         LPDIRECT3DDEVICE8 pD3D, 
  353.         LPD3DXMESH* ppMesh);
  354.  
  355. HRESULT WINAPI 
  356.     D3DXCreateSPMesh(
  357.         LPD3DXMESH pMesh, 
  358.         CONST DWORD* pAdjacency, 
  359.         CONST LPD3DXATTRIBUTEWEIGHTS pVertexAttributeWeights,
  360.         CONST FLOAT *pVertexWeights,
  361.         LPD3DXSPMESH* ppSMesh);
  362.  
  363. // clean a mesh up for simplification, try to make manifold
  364. HRESULT WINAPI
  365.     D3DXCleanMesh(
  366.     LPD3DXMESH pMeshIn,
  367.     CONST DWORD* pAdjacency,
  368.     LPD3DXMESH* ppMeshOut);
  369.  
  370. HRESULT WINAPI
  371.     D3DXValidMesh(
  372.     LPD3DXMESH pMeshIn,
  373.     CONST DWORD* pAdjacency);
  374.  
  375. HRESULT WINAPI 
  376.     D3DXGeneratePMesh(
  377.         LPD3DXMESH pMesh, 
  378.         CONST DWORD* pAdjacency, 
  379.         CONST LPD3DXATTRIBUTEWEIGHTS pVertexAttributeWeights,
  380.         CONST FLOAT *pVertexWeights,
  381.         DWORD MinValue, 
  382.         DWORD Options, 
  383.         LPD3DXPMESH* ppPMesh);
  384.  
  385. HRESULT WINAPI 
  386.     D3DXSimplifyMesh(
  387.         LPD3DXMESH pMesh, 
  388.         CONST DWORD* pAdjacency, 
  389.         CONST LPD3DXATTRIBUTEWEIGHTS pVertexAttributeWeights,
  390.         CONST FLOAT *pVertexWeights,
  391.         DWORD MinValue, 
  392.         DWORD Options, 
  393.         LPD3DXMESH* ppMesh);
  394.  
  395. HRESULT WINAPI 
  396.     D3DXComputeBoundingSphere(
  397.         PVOID pPointsFVF, 
  398.         DWORD NumVertices, 
  399.         DWORD FVF,
  400.         D3DXVECTOR3 *pCenter, 
  401.         FLOAT *pRadius);
  402.  
  403. HRESULT WINAPI 
  404.     D3DXComputeBoundingBox(
  405.         PVOID pPointsFVF, 
  406.         DWORD NumVertices, 
  407.         DWORD FVF,
  408.         D3DXVECTOR3 *pMin, 
  409.         D3DXVECTOR3 *pMax);
  410.  
  411. HRESULT WINAPI 
  412.     D3DXComputeNormals(
  413.         LPD3DXBASEMESH pMesh);
  414.  
  415. HRESULT WINAPI 
  416.     D3DXCreateBuffer(
  417.         DWORD NumBytes, 
  418.         LPD3DXBUFFER *ppBuffer);
  419.  
  420.  
  421. HRESULT WINAPI
  422.     D3DXLoadMeshFromX(
  423.         LPSTR pFilename, 
  424.         DWORD Options, 
  425.         LPDIRECT3DDEVICE8 pD3D, 
  426.         LPD3DXBUFFER *ppAdjacency,
  427.         LPD3DXBUFFER *ppMaterials, 
  428.         PDWORD pNumMaterials,
  429.         LPD3DXMESH *ppMesh);
  430.  
  431. HRESULT WINAPI 
  432.     D3DXSaveMeshToX(
  433.         LPSTR pFilename,
  434.         LPD3DXMESH pMesh,
  435.         CONST DWORD* pAdjacency,
  436.         CONST LPD3DXMATERIAL pMaterials,
  437.         DWORD NumMaterials,
  438.         DWORD Format
  439.         );
  440.  
  441. HRESULT WINAPI 
  442.     D3DXCreatePMeshFromStream(
  443.         IStream *pStream, 
  444.     DWORD Options,
  445.         LPDIRECT3DDEVICE8 pD3DDevice, 
  446.         LPD3DXBUFFER *ppMaterials,
  447.         DWORD* pNumMaterials,
  448.         LPD3DXPMESH *ppPMesh);
  449.  
  450. HRESULT WINAPI
  451.     D3DXCreateSkinMesh(
  452.         DWORD numFaces, 
  453.         DWORD numVertices, 
  454.         DWORD numBones,
  455.         DWORD options, 
  456.         CONST DWORD *pDeclaration, 
  457.         LPDIRECT3DDEVICE8 pD3D, 
  458.         LPD3DXSKINMESH* ppSkinMesh);
  459.  
  460. HRESULT WINAPI
  461.     D3DXCreateSkinMeshFVF(
  462.         DWORD numFaces, 
  463.         DWORD numVertices, 
  464.         DWORD numBones,
  465.         DWORD options, 
  466.         DWORD fvf, 
  467.         LPDIRECT3DDEVICE8 pD3D, 
  468.         LPD3DXSKINMESH* ppSkinMesh);
  469.  
  470. HRESULT WINAPI
  471.     D3DXCreateSkinMeshFromMesh(
  472.         LPD3DXMESH pMesh,
  473.         DWORD numBones,
  474.         LPD3DXSKINMESH* ppSkinMesh);
  475.  
  476. HRESULT WINAPI 
  477.     D3DXLoadMeshFromXof(
  478.         LPDIRECTXFILEDATA pXofObjMesh, 
  479.         DWORD Options, 
  480.         LPDIRECT3DDEVICE8 pD3DDevice, 
  481.         LPD3DXBUFFER *ppAdjacency,
  482.         LPD3DXBUFFER *ppMaterials, 
  483.         PDWORD pNumMaterials,
  484.         LPD3DXMESH *ppMesh);
  485.  
  486. HRESULT WINAPI
  487.     D3DXLoadSkinMeshFromXof(
  488.         LPDIRECTXFILEDATA pxofobjMesh, 
  489.         DWORD options,
  490.         LPDIRECT3DDEVICE8 pD3D,
  491.         LPD3DXBUFFER* ppAdjacency,
  492.         LPD3DXBUFFER* ppMaterials,
  493.         PDWORD pMatOut,
  494.         LPD3DXBUFFER* ppBoneNames,
  495.         LPD3DXBUFFER* ppBoneTransforms,
  496.         LPD3DXSKINMESH* ppMesh);
  497.  
  498. HRESULT WINAPI
  499.     D3DXTesselateMesh(
  500.         LPD3DXMESH pMeshIn,             
  501.         CONST DWORD* pAdjacency,             
  502.         FLOAT NumSegs,                    
  503.         BOOL  QuadraticInterpNormals,     // if false use linear intrep for normals, if true use quadratic
  504.         LPD3DXMESH *ppMeshOut);         
  505.  
  506. HRESULT WINAPI
  507.     D3DXDeclaratorFromFVF(
  508.         DWORD FVF,
  509.         DWORD Declaration[MAX_FVF_DECL_SIZE]);
  510.  
  511. HRESULT WINAPI
  512.     D3DXFVFFromDeclarator(
  513.         CONST DWORD *pDeclarator,
  514.         DWORD *pFVF);
  515.  
  516. HRESULT WINAPI 
  517.     D3DXWeldVertices(
  518.         CONST LPD3DXMESH pMesh,         
  519.         float fEpsilon,                 
  520.         CONST DWORD *rgdwAdjacencyIn, 
  521.         DWORD *rgdwAdjacencyOut,
  522.         DWORD* pFaceRemap, 
  523.         LPD3DXBUFFER *ppbufVertexRemap);
  524.  
  525. HRESULT WINAPI
  526.     D3DXIntersect(
  527.         LPD3DXBASEMESH pMesh,
  528.         CONST D3DXVECTOR3 *pRayPos,
  529.         CONST D3DXVECTOR3 *pRayDir,
  530.         BOOL    *pHit,
  531.         DWORD   *pFaceIndex,
  532.         FLOAT   *pU,
  533.         FLOAT   *pV,
  534.         FLOAT   *pDist);
  535.  
  536. BOOL WINAPI
  537.     D3DXSphereBoundProbe(
  538.         CONST D3DXVECTOR3 *pvCenter,
  539.         FLOAT fRadius,
  540.         D3DXVECTOR3 *pvRayPosition,
  541.         D3DXVECTOR3 *pvRayDirection);
  542.  
  543. BOOL WINAPI 
  544.     D3DXBoxBoundProbe(
  545.         CONST D3DXVECTOR3 *pvMin, 
  546.         CONST D3DXVECTOR3 *pvMax,
  547.         D3DXVECTOR3 *pvRayPosition,
  548.         D3DXVECTOR3 *pvRayDirection);
  549.  
  550. enum _D3DXERR {
  551.     D3DXERR_CANNOTMODIFYINDEXBUFFER        = MAKE_DDHRESULT(2900),
  552.     D3DXERR_INVALIDMESH                    = MAKE_DDHRESULT(2901),
  553.     D3DXERR_CANNOTATTRSORT              = MAKE_DDHRESULT(2902),
  554.     D3DXERR_SKINNINGNOTSUPPORTED        = MAKE_DDHRESULT(2903),
  555.     D3DXERR_TOOMANYINFLUENCES            = MAKE_DDHRESULT(2904),
  556.     D3DXERR_INVALIDDATA                 = MAKE_DDHRESULT(2905),
  557. };
  558.  
  559. #ifdef __cplusplus
  560. }
  561. #endif //__cplusplus
  562.  
  563. #endif //__D3DX8MESH_H__
  564.  
  565.  
  566.