--- /dev/null
+USING: alien.c-types alien.syntax classes.struct windows.com
+windows.com.syntax windows.directx.d3d10
+windows.directx.d3d10misc windows.types ;
+IN: windows.directx.d3dx10mesh
+
+LIBRARY: d3dx10
+
+CONSTANT: D3DX10_MESH_32_BIT 1
+CONSTANT: D3DX10_MESH_GS_ADJACENCY 4
+
+TYPEDEF: int D3DX10_MESH
+
+STRUCT: D3DX10_ATTRIBUTE_RANGE
+ { AttribId UINT }
+ { FaceStart UINT }
+ { FaceCount UINT }
+ { VertexStart UINT }
+ { VertexCount UINT } ;
+
+TYPEDEF: D3DX10_ATTRIBUTE_RANGE* LPD3DX10_ATTRIBUTE_RANGE
+
+CONSTANT: D3DX10_MESH_DISCARD_ATTRIBUTE_BUFFER HEX: 01
+CONSTANT: D3DX10_MESH_DISCARD_ATTRIBUTE_TABLE HEX: 02
+CONSTANT: D3DX10_MESH_DISCARD_POINTREPS HEX: 04
+CONSTANT: D3DX10_MESH_DISCARD_ADJACENCY HEX: 08
+CONSTANT: D3DX10_MESH_DISCARD_DEVICE_BUFFERS HEX: 10
+TYPEDEF: int D3DX10_MESH_DISCARD_FLAGS
+
+STRUCT: D3DX10_WELD_EPSILONS
+ { Position FLOAT }
+ { BlendWeights FLOAT }
+ { Normal FLOAT }
+ { PSize FLOAT }
+ { Specular FLOAT }
+ { Diffuse FLOAT }
+ { Texcoord FLOAT[8] }
+ { Tangent FLOAT }
+ { Binormal FLOAT }
+ { TessFactor FLOAT } ;
+
+TYPEDEF: D3DX10_WELD_EPSILONS* LPD3DX10_WELD_EPSILONS
+
+STRUCT: D3DX10_INTERSECT_INFO
+ { FaceIndex UINT }
+ { U FLOAT }
+ { V FLOAT }
+ { Dist FLOAT } ;
+TYPEDEF: D3DX10_INTERSECT_INFO* LPD3DX10_INTERSECT_INFO
+
+COM-INTERFACE: ID3DX10MeshBuffer IUnknown {04B0D117-1041-46b1-AA8A-3952848BA22E}
+ HRESULT Map ( void** ppData, SIZE_T* pSize )
+ HRESULT Unmap ( )
+ SIZE_T GetSize ( ) ;
+
+COM-INTERFACE: ID3DX10Mesh IUnknown {4020E5C2-1403-4929-883F-E2E849FAC195}
+ UINT GetFaceCount ( )
+ UINT GetVertexCount ( )
+ UINT GetVertexBufferCount ( )
+ UINT GetFlags ( )
+ HRESULT GetVertexDescription ( D3D10_INPUT_ELEMENT_DESC** ppDesc, UINT* pDeclCount )
+ HRESULT SetVertexData ( UINT iBuffer, void* pData )
+ HRESULT GetVertexBuffer ( UINT iBuffer, ID3DX10MeshBuffer** ppVertexBuffer )
+ HRESULT SetIndexData ( void* pData, UINT cIndices )
+ HRESULT GetIndexBuffer ( ID3DX10MeshBuffer** ppIndexBuffer )
+ HRESULT SetAttributeData ( UINT* pData )
+ HRESULT GetAttributeBuffer ( ID3DX10MeshBuffer** ppAttributeBuffer )
+ HRESULT SetAttributeTable ( D3DX10_ATTRIBUTE_RANGE* pAttribTable, UINT cAttribTableSize )
+ HRESULT GetAttributeTable ( D3DX10_ATTRIBUTE_RANGE* pAttribTable, UINT* pAttribTableSize )
+ HRESULT GenerateAdjacencyAndPointReps ( FLOAT Epsilon )
+ HRESULT GenerateGSAdjacency ( )
+ HRESULT SetAdjacencyData ( UINT* pAdjacency )
+ HRESULT GetAdjacencyBuffer ( ID3DX10MeshBuffer** ppAdjacency )
+ HRESULT SetPointRepData ( UINT* pPointReps )
+ HRESULT GetPointRepBuffer ( ID3DX10MeshBuffer** ppPointReps )
+ HRESULT Discard ( D3DX10_MESH_DISCARD_FLAGS dwDiscard )
+ HRESULT CloneMesh ( UINT Flags, LPCSTR pPosSemantic, D3D10_INPUT_ELEMENT_DESC* pDesc, UINT DeclCount, ID3DX10Mesh** ppCloneMesh )
+ HRESULT Optimize ( UINT Flags, UINT* pFaceRemap, LPD3D10BLOB* ppVertexRemap )
+ HRESULT GenerateAttributeBufferFromTable ( )
+ HRESULT Intersect ( D3DXVECTOR3* pRayPos, D3DXVECTOR3* pRayDir,
+ UINT* pHitCount, UINT* pFaceIndex, float* pU, float* pV, float* pDist, ID3D10Blob** ppAllHits )
+ HRESULT IntersectSubset ( UINT AttribId, D3DXVECTOR3* pRayPos, D3DXVECTOR3* pRayDir,
+ UINT* pHitCount, UINT* pFaceIndex, float* pU, float* pV, float* pDist, ID3D10Blob** ppAllHits )
+ HRESULT CommitToDevice ( )
+ HRESULT DrawSubset ( UINT AttribId )
+ HRESULT DrawSubsetInstanced ( UINT AttribId, UINT InstanceCount, UINT StartInstanceLocation )
+ HRESULT GetDeviceVertexBuffer ( UINT iBuffer, ID3D10Buffer** ppVertexBuffer )
+ HRESULT GetDeviceIndexBuffer ( ID3D10Buffer** ppIndexBuffer ) ;
+
+FUNCTION: HRESULT
+ D3DX10CreateMesh (
+ ID3D10Device* pDevice,
+ D3D10_INPUT_ELEMENT_DESC* pDeclaration,
+ UINT DeclCount,
+ LPCSTR pPositionSemantic,
+ UINT VertexCount,
+ UINT FaceCount,
+ UINT Options,
+ ID3DX10Mesh** ppMesh ) ;
+
+CONSTANT: D3DX10_MESHOPT_COMPACT HEX: 01000000
+CONSTANT: D3DX10_MESHOPT_ATTR_SORT HEX: 02000000
+CONSTANT: D3DX10_MESHOPT_VERTEX_CACHE HEX: 04000000
+CONSTANT: D3DX10_MESHOPT_STRIP_REORDER HEX: 08000000
+CONSTANT: D3DX10_MESHOPT_IGNORE_VERTS HEX: 10000000
+CONSTANT: D3DX10_MESHOPT_DO_NOT_SPLIT HEX: 20000000
+CONSTANT: D3DX10_MESHOPT_DEVICE_INDEPENDENT HEX: 00400000
+
+CONSTANT: D3DX10_SKININFO_NO_SCALING 0
+CONSTANT: D3DX10_SKININFO_SCALE_TO_1 1
+CONSTANT: D3DX10_SKININFO_SCALE_TO_TOTAL 2
+
+STRUCT: D3DX10_SKINNING_CHANNEL
+ { SrcOffset UINT }
+ { DestOffset UINT }
+ { IsNormal BOOL } ;
+
+COM-INTERFACE: ID3DX10SkinInfo IUnknown {420BD604-1C76-4a34-A466-E45D0658A32C}
+ UINT GetNumVertices ( )
+ UINT GetNumBones ( )
+ UINT GetMaxBoneInfluences ( )
+ HRESULT AddVertices ( UINT Count )
+ HRESULT RemapVertices ( UINT NewVertexCount, UINT* pVertexRemap )
+ HRESULT AddBones ( UINT Count )
+ HRESULT RemoveBone ( UINT Index )
+ HRESULT RemapBones ( UINT NewBoneCount, UINT* pBoneRemap )
+ HRESULT AddBoneInfluences ( UINT BoneIndex, UINT InfluenceCount, UINT* pIndices, float* pWeights )
+ HRESULT ClearBoneInfluences ( UINT BoneIndex )
+ UINT GetBoneInfluenceCount ( UINT BoneIndex )
+ HRESULT GetBoneInfluences ( UINT BoneIndex, UINT Offset, UINT Count, UINT* pDestIndices, float* pDestWeights )
+ HRESULT FindBoneInfluenceIndex ( UINT BoneIndex, UINT VertexIndex, UINT* pInfluenceIndex )
+ HRESULT SetBoneInfluence ( UINT BoneIndex, UINT InfluenceIndex, float Weight )
+ HRESULT GetBoneInfluence ( UINT BoneIndex, UINT InfluenceIndex, float* pWeight )
+ HRESULT Compact ( UINT MaxPerVertexInfluences, UINT ScaleMode, float MinWeight )
+ HRESULT DoSoftwareSkinning ( UINT StartVertex, UINT VertexCount, void* pSrcVertices, UINT SrcStride, void* pDestVertices, UINT DestStride, D3DXMATRIX* pBoneMatrices, D3DXMATRIX* pInverseTransposeBoneMatrices, D3DX10_SKINNING_CHANNEL* pChannelDescs, UINT NumChannels ) ;
+
+TYPEDEF: ID3DX10SkinInfo* LPD3DX10SKININFO
+
+FUNCTION: HRESULT
+ D3DX10CreateSkinInfo ( LPD3DX10SKININFO* ppSkinInfo ) ;
+
+STRUCT: D3DX10_ATTRIBUTE_WEIGHTS
+ { Position FLOAT }
+ { Boundary FLOAT }
+ { Normal FLOAT }
+ { Diffuse FLOAT }
+ { Specular FLOAT }
+ { Texcoord FLOAT[8] }
+ { Tangent FLOAT }
+ { Binormal FLOAT } ;