Subversion Repositories Games.Chess Giants

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 pmbaty 1
//////////////////////////////////////////////////////////////////////////////
2
//
3
//  Copyright (C) Microsoft Corporation.  All Rights Reserved.
4
//
5
//  File:       d3dx10mesh.h
6
//  Content:    D3DX10 mesh types and functions
7
//
8
//////////////////////////////////////////////////////////////////////////////
9
 
10
#include "d3dx10.h"
11
 
12
#ifndef __D3DX10MESH_H__
13
#define __D3DX10MESH_H__
14
 
15
// {7ED943DD-52E8-40b5-A8D8-76685C406330}
16
DEFINE_GUID(IID_ID3DX10BaseMesh,
17
0x7ed943dd, 0x52e8, 0x40b5, 0xa8, 0xd8, 0x76, 0x68, 0x5c, 0x40, 0x63, 0x30);
18
 
19
// {04B0D117-1041-46b1-AA8A-3952848BA22E}
20
DEFINE_GUID(IID_ID3DX10MeshBuffer,
21
0x4b0d117, 0x1041, 0x46b1, 0xaa, 0x8a, 0x39, 0x52, 0x84, 0x8b, 0xa2, 0x2e);
22
 
23
// {4020E5C2-1403-4929-883F-E2E849FAC195}
24
DEFINE_GUID(IID_ID3DX10Mesh,
25
0x4020e5c2, 0x1403, 0x4929, 0x88, 0x3f, 0xe2, 0xe8, 0x49, 0xfa, 0xc1, 0x95);
26
 
27
// {8875769A-D579-4088-AAEB-534D1AD84E96}
28
DEFINE_GUID(IID_ID3DX10PMesh,
29
0x8875769a, 0xd579, 0x4088, 0xaa, 0xeb, 0x53, 0x4d, 0x1a, 0xd8, 0x4e, 0x96);
30
 
31
// {667EA4C7-F1CD-4386-B523-7C0290B83CC5}
32
DEFINE_GUID(IID_ID3DX10SPMesh,
33
0x667ea4c7, 0xf1cd, 0x4386, 0xb5, 0x23, 0x7c, 0x2, 0x90, 0xb8, 0x3c, 0xc5);
34
 
35
// {3CE6CC22-DBF2-44f4-894D-F9C34A337139}
36
DEFINE_GUID(IID_ID3DX10PatchMesh,
37
0x3ce6cc22, 0xdbf2, 0x44f4, 0x89, 0x4d, 0xf9, 0xc3, 0x4a, 0x33, 0x71, 0x39);
38
 
39
 
40
// Mesh options - lower 3 bytes only, upper byte used by _D3DX10MESHOPT option flags
41
enum _D3DX10_MESH {
42
    D3DX10_MESH_32_BIT                  = 0x001, // If set, then use 32 bit indices, if not set use 16 bit indices.
43
    D3DX10_MESH_GS_ADJACENCY                    = 0x004, // If set, mesh contains GS adjacency info. Not valid on input.
44
 
45
};
46
 
47
typedef struct _D3DX10_ATTRIBUTE_RANGE
48
{
49
    UINT  AttribId;
50
    UINT  FaceStart;
51
    UINT  FaceCount;
52
    UINT  VertexStart;
53
    UINT  VertexCount;
54
} D3DX10_ATTRIBUTE_RANGE;
55
 
56
typedef D3DX10_ATTRIBUTE_RANGE* LPD3DX10_ATTRIBUTE_RANGE;
57
 
58
typedef enum _D3DX10_MESH_DISCARD_FLAGS
59
{
60
    D3DX10_MESH_DISCARD_ATTRIBUTE_BUFFER = 0x01,
61
    D3DX10_MESH_DISCARD_ATTRIBUTE_TABLE = 0x02,
62
    D3DX10_MESH_DISCARD_POINTREPS = 0x04,
63
    D3DX10_MESH_DISCARD_ADJACENCY = 0x08,
64
    D3DX10_MESH_DISCARD_DEVICE_BUFFERS = 0x10,
65
 
66
} D3DX10_MESH_DISCARD_FLAGS;
67
 
68
typedef struct _D3DX10_WELD_EPSILONS
69
{
70
    FLOAT Position;                 // NOTE: This does NOT replace the epsilon in GenerateAdjacency
71
                                            // in general, it should be the same value or greater than the one passed to GeneratedAdjacency
72
    FLOAT BlendWeights;
73
    FLOAT Normal;
74
    FLOAT PSize;
75
    FLOAT Specular;
76
    FLOAT Diffuse;
77
    FLOAT Texcoord[8];
78
    FLOAT Tangent;
79
    FLOAT Binormal;
80
    FLOAT TessFactor;
81
} D3DX10_WELD_EPSILONS;
82
 
83
typedef D3DX10_WELD_EPSILONS* LPD3DX10_WELD_EPSILONS;
84
 
85
typedef struct _D3DX10_INTERSECT_INFO
86
{
87
    UINT  FaceIndex;                // index of face intersected
88
    FLOAT U;                        // Barycentric Hit Coordinates    
89
    FLOAT V;                        // Barycentric Hit Coordinates
90
    FLOAT Dist;                     // Ray-Intersection Parameter Distance
91
} D3DX10_INTERSECT_INFO, *LPD3DX10_INTERSECT_INFO;
92
 
93
// ID3DX10MeshBuffer is used by D3DX10Mesh vertex and index buffers
94
#undef INTERFACE
95
#define INTERFACE ID3DX10MeshBuffer
96
 
97
DECLARE_INTERFACE_(ID3DX10MeshBuffer, IUnknown)
98
{
99
    // IUnknown
100
    STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
101
    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
102
    STDMETHOD_(ULONG, Release)(THIS) PURE;
103
 
104
    // ID3DX10MeshBuffer
105
    STDMETHOD(Map)(THIS_ void **ppData, SIZE_T *pSize) PURE;
106
    STDMETHOD(Unmap)(THIS) PURE;
107
    STDMETHOD_(SIZE_T, GetSize)(THIS) PURE;
108
};
109
 
110
// D3DX10 Mesh interfaces
111
#undef INTERFACE
112
#define INTERFACE ID3DX10Mesh
113
 
114
DECLARE_INTERFACE_(ID3DX10Mesh, IUnknown)
115
{
116
    // IUnknown
117
    STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
118
    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
119
    STDMETHOD_(ULONG, Release)(THIS) PURE;
120
 
121
    // ID3DX10Mesh
122
    STDMETHOD_(UINT, GetFaceCount)(THIS) PURE;
123
    STDMETHOD_(UINT, GetVertexCount)(THIS) PURE;
124
    STDMETHOD_(UINT, GetVertexBufferCount)(THIS) PURE;
125
    STDMETHOD_(UINT, GetFlags)(THIS) PURE;
126
    STDMETHOD(GetVertexDescription)(THIS_ CONST D3D10_INPUT_ELEMENT_DESC **ppDesc, UINT *pDeclCount) PURE;
127
 
128
    STDMETHOD(SetVertexData)(THIS_ UINT iBuffer, CONST void *pData) PURE;
129
    STDMETHOD(GetVertexBuffer)(THIS_ UINT iBuffer, ID3DX10MeshBuffer **ppVertexBuffer) PURE;
130
 
131
    STDMETHOD(SetIndexData)(THIS_ CONST void *pData, UINT cIndices) PURE;
132
    STDMETHOD(GetIndexBuffer)(THIS_ ID3DX10MeshBuffer **ppIndexBuffer) PURE;
133
 
134
    STDMETHOD(SetAttributeData)(THIS_ CONST UINT *pData) PURE;
135
    STDMETHOD(GetAttributeBuffer)(THIS_ ID3DX10MeshBuffer **ppAttributeBuffer) PURE;
136
 
137
    STDMETHOD(SetAttributeTable)(THIS_ CONST D3DX10_ATTRIBUTE_RANGE *pAttribTable, UINT  cAttribTableSize) PURE;
138
    STDMETHOD(GetAttributeTable)(THIS_ D3DX10_ATTRIBUTE_RANGE *pAttribTable, UINT  *pAttribTableSize) PURE;
139
 
140
    STDMETHOD(GenerateAdjacencyAndPointReps)(THIS_ FLOAT Epsilon) PURE;
141
    STDMETHOD(GenerateGSAdjacency)(THIS) PURE;
142
 
143
    STDMETHOD(SetAdjacencyData)(THIS_ CONST UINT *pAdjacency) PURE;
144
    STDMETHOD(GetAdjacencyBuffer)(THIS_ ID3DX10MeshBuffer **ppAdjacency) PURE;
145
 
146
    STDMETHOD(SetPointRepData)(THIS_ CONST UINT *pPointReps) PURE;
147
    STDMETHOD(GetPointRepBuffer)(THIS_ ID3DX10MeshBuffer **ppPointReps) PURE;
148
 
149
    STDMETHOD(Discard)(THIS_ D3DX10_MESH_DISCARD_FLAGS dwDiscard) PURE;
150
    STDMETHOD(CloneMesh)(THIS_ UINT Flags, LPCSTR pPosSemantic, CONST D3D10_INPUT_ELEMENT_DESC *pDesc, UINT  DeclCount, ID3DX10Mesh** ppCloneMesh) PURE;
151
 
152
    STDMETHOD(Optimize)(THIS_ UINT Flags, UINT * pFaceRemap, LPD3D10BLOB *ppVertexRemap) PURE;
153
    STDMETHOD(GenerateAttributeBufferFromTable)(THIS) PURE;
154
 
155
        STDMETHOD(Intersect)(THIS_ D3DXVECTOR3 *pRayPos, D3DXVECTOR3 *pRayDir,
156
                                        UINT *pHitCount, UINT *pFaceIndex, float *pU, float *pV, float *pDist, ID3D10Blob **ppAllHits);
157
    STDMETHOD(IntersectSubset)(THIS_ UINT AttribId, D3DXVECTOR3 *pRayPos, D3DXVECTOR3 *pRayDir,
158
                                        UINT *pHitCount, UINT *pFaceIndex, float *pU, float *pV, float *pDist, ID3D10Blob **ppAllHits);
159
 
160
    // ID3DX10Mesh - Device functions
161
    STDMETHOD(CommitToDevice)(THIS) PURE;
162
    STDMETHOD(DrawSubset)(THIS_ UINT AttribId) PURE;
163
    STDMETHOD(DrawSubsetInstanced)(THIS_ UINT AttribId, UINT InstanceCount, UINT StartInstanceLocation) PURE;
164
 
165
    STDMETHOD(GetDeviceVertexBuffer)(THIS_ UINT iBuffer, ID3D10Buffer **ppVertexBuffer) PURE;
166
    STDMETHOD(GetDeviceIndexBuffer)(THIS_ ID3D10Buffer **ppIndexBuffer) PURE;
167
};
168
 
169
 
170
// Flat API
171
#ifdef __cplusplus
172
extern "C" {
173
#endif //__cplusplus
174
 
175
HRESULT WINAPI
176
    D3DX10CreateMesh(
177
        ID3D10Device *pDevice,
178
        CONST D3D10_INPUT_ELEMENT_DESC *pDeclaration,
179
        UINT  DeclCount,
180
        LPCSTR pPositionSemantic,
181
        UINT  VertexCount,
182
        UINT  FaceCount,
183
        UINT  Options,
184
        ID3DX10Mesh **ppMesh);
185
 
186
#ifdef __cplusplus
187
}
188
#endif //__cplusplus
189
 
190
 
191
// ID3DX10Mesh::Optimize options - upper byte only, lower 3 bytes used from _D3DX10MESH option flags
192
enum _D3DX10_MESHOPT {
193
    D3DX10_MESHOPT_COMPACT       = 0x01000000,
194
    D3DX10_MESHOPT_ATTR_SORT     = 0x02000000,
195
    D3DX10_MESHOPT_VERTEX_CACHE   = 0x04000000,
196
    D3DX10_MESHOPT_STRIP_REORDER  = 0x08000000,
197
    D3DX10_MESHOPT_IGNORE_VERTS   = 0x10000000,  // optimize faces only, don't touch vertices
198
    D3DX10_MESHOPT_DO_NOT_SPLIT    = 0x20000000,  // do not split vertices shared between attribute groups when attribute sorting
199
    D3DX10_MESHOPT_DEVICE_INDEPENDENT = 0x00400000,  // Only affects VCache.  uses a static known good cache size for all cards
200
 
201
    // D3DX10_MESHOPT_SHAREVB has been removed, please use D3DX10MESH_VB_SHARE instead
202
 
203
};
204
 
205
 
206
//////////////////////////////////////////////////////////////////////////
207
// ID3DXSkinInfo
208
//////////////////////////////////////////////////////////////////////////
209
 
210
// {420BD604-1C76-4a34-A466-E45D0658A32C}
211
DEFINE_GUID(IID_ID3DX10SkinInfo,
212
0x420bd604, 0x1c76, 0x4a34, 0xa4, 0x66, 0xe4, 0x5d, 0x6, 0x58, 0xa3, 0x2c);
213
 
214
// scaling modes for ID3DX10SkinInfo::Compact() & ID3DX10SkinInfo::UpdateMesh()
215
#define D3DX10_SKININFO_NO_SCALING 0
216
#define D3DX10_SKININFO_SCALE_TO_1 1
217
#define D3DX10_SKININFO_SCALE_TO_TOTAL 2
218
 
219
typedef struct _D3DX10_SKINNING_CHANNEL
220
{
221
    UINT            SrcOffset;
222
    UINT            DestOffset;
223
    BOOL            IsNormal;
224
} D3DX10_SKINNING_CHANNEL;
225
 
226
#undef INTERFACE
227
#define INTERFACE ID3DX10SkinInfo
228
 
229
typedef struct ID3DX10SkinInfo *LPD3DX10SKININFO;
230
 
231
DECLARE_INTERFACE_(ID3DX10SkinInfo, IUnknown)
232
{
233
    // IUnknown
234
    STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
235
    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
236
    STDMETHOD_(ULONG, Release)(THIS) PURE;
237
 
238
    STDMETHOD_(UINT , GetNumVertices)(THIS) PURE;
239
    STDMETHOD_(UINT , GetNumBones)(THIS) PURE;
240
    STDMETHOD_(UINT , GetMaxBoneInfluences)(THIS) PURE;
241
 
242
    STDMETHOD(AddVertices)(THIS_ UINT  Count) PURE;
243
    STDMETHOD(RemapVertices)(THIS_ UINT  NewVertexCount, UINT  *pVertexRemap) PURE;
244
 
245
    STDMETHOD(AddBones)(THIS_ UINT  Count) PURE;
246
    STDMETHOD(RemoveBone)(THIS_ UINT  Index) PURE;
247
    STDMETHOD(RemapBones)(THIS_ UINT  NewBoneCount, UINT  *pBoneRemap) PURE;
248
 
249
    STDMETHOD(AddBoneInfluences)(THIS_ UINT  BoneIndex, UINT  InfluenceCount, UINT  *pIndices, float *pWeights) PURE;
250
    STDMETHOD(ClearBoneInfluences)(THIS_ UINT  BoneIndex) PURE;
251
    STDMETHOD_(UINT , GetBoneInfluenceCount)(THIS_ UINT  BoneIndex) PURE;
252
    STDMETHOD(GetBoneInfluences)(THIS_ UINT  BoneIndex, UINT  Offset, UINT  Count, UINT  *pDestIndices, float *pDestWeights) PURE;
253
    STDMETHOD(FindBoneInfluenceIndex)(THIS_ UINT  BoneIndex, UINT  VertexIndex, UINT  *pInfluenceIndex) PURE;
254
    STDMETHOD(SetBoneInfluence)(THIS_ UINT  BoneIndex, UINT  InfluenceIndex, float Weight) PURE;
255
    STDMETHOD(GetBoneInfluence)(THIS_ UINT  BoneIndex, UINT  InfluenceIndex, float *pWeight) PURE;
256
 
257
    STDMETHOD(Compact)(THIS_ UINT  MaxPerVertexInfluences, UINT  ScaleMode, float MinWeight) PURE;
258
    STDMETHOD(DoSoftwareSkinning)(UINT  StartVertex, UINT  VertexCount, void *pSrcVertices, UINT  SrcStride, void *pDestVertices, UINT  DestStride, D3DXMATRIX *pBoneMatrices, D3DXMATRIX *pInverseTransposeBoneMatrices, D3DX10_SKINNING_CHANNEL *pChannelDescs, UINT  NumChannels) PURE;
259
};
260
 
261
#ifdef __cplusplus
262
extern "C" {
263
#endif //__cplusplus
264
 
265
HRESULT WINAPI
266
    D3DX10CreateSkinInfo(LPD3DX10SKININFO* ppSkinInfo);
267
 
268
#ifdef __cplusplus
269
}
270
#endif //__cplusplus
271
 
272
typedef struct _D3DX10_ATTRIBUTE_WEIGHTS
273
{
274
    FLOAT Position;
275
    FLOAT Boundary;
276
    FLOAT Normal;
277
    FLOAT Diffuse;
278
    FLOAT Specular;
279
    FLOAT Texcoord[8];
280
    FLOAT Tangent;
281
    FLOAT Binormal;
282
} D3DX10_ATTRIBUTE_WEIGHTS, *LPD3DX10_ATTRIBUTE_WEIGHTS;
283
 
284
#endif //__D3DX10MESH_H__
285
 
286