1 // D3DX Types and Constants ---------------------------------------------------------------------------------------
2
3 module win32.directx.d3dx9;
4 version(Windows):
5
6 public import win32.directx.d3d9;
7 public import win32.windows;
8
9 alias D3DMATRIX D3DXMATRIX;
10
11 const uint MAXD3DDECLLENGTH = 64;
12 const uint MAX_FVF_DECL_SIZE = MAXD3DDECLLENGTH + 1;
13
14 align(4) struct D3DXATTRIBUTERANGE
15 {
16 DWORD AttribId;
17 DWORD FaceStart;
18 DWORD FaceCount;
19 DWORD VertexStart;
20 DWORD VertexCount;
21 }
22
23 align(4) struct D3DXVECTOR2
24 {
25 float x = 0, y = 0;
26
27 static D3DXVECTOR2 opCall(float x, float y)
28 {
29 D3DXVECTOR2 v;
30 v.x = x;
31 v.y = y;
32 return v;
33 }
34 }
35
36 alias D3DVECTOR D3DXVECTOR3;
37
38 align(4) struct D3DXVECTOR4
39 {
40 float x = 0, y = 0, z = 0, w = 0;
41
42 static D3DXVECTOR4 opCall(float x, float y, float z, float w)
43 {
44 D3DXVECTOR4 v;
45 v.x = x;
46 v.y = y;
47 v.z = z;
48 v.w = w;
49 return v;
50 }
51 }
52
53 align(4) struct D3DXQUATERNION
54 {
55 float x = 0, y = 0, z = 0, w = 0;
56 }
57
58 align(4) struct D3DXFRAME
59 {
60 LPSTR Name;
61 D3DXMATRIX TransformationMatrix;
62
63 D3DXMESHCONTAINER* pMeshContainer;
64
65 D3DXFRAME *pFrameSibling;
66 D3DXFRAME *pFrameFirstChild;
67 }
68
69 align(4) struct D3DXMESHCONTAINER
70 {
71 LPSTR Name;
72
73 D3DXMESHDATA MeshData;
74
75 D3DXMATERIAL* pMaterials;
76 D3DXEFFECTINSTANCE* pEffects;
77 DWORD NumMaterials;
78 DWORD *pAdjacency;
79
80 ID3DXSkinInfo pSkinInfo;
81
82 D3DXMESHCONTAINER* pNextMeshContainer;
83 }
84
85 align(4) struct D3DXMESHDATA
86 {
87 D3DXMESHDATATYPE Type;
88
89 // current mesh data interface
90 union
91 {
92 ID3DXMesh pMesh;
93 ID3DXPMesh pPMesh;
94 ID3DXPatchMesh pPatchMesh;
95 }
96 }
97
98 alias uint D3DXMESHDATATYPE;
99 enum : uint
100 {
101 D3DXMESHTYPE_MESH = 0x001, // Normal ID3DXMesh data
102 D3DXMESHTYPE_PMESH = 0x002, // Progressive Mesh - ID3DXPMesh
103 D3DXMESHTYPE_PATCHMESH = 0x003 // Patch Mesh - ID3DXPatchMesh
104 }
105
106 align(4) struct D3DXMATERIAL
107 {
108 D3DMATERIAL9 MatD3D;
109 LPSTR pTextureFilename;
110 }
111
112 alias uint D3DXEFFECTDEFAULTTYPE;
113 enum : uint
114 {
115 D3DXEDT_STRING = 0x1, // pValue points to a null terminated ASCII string
116 D3DXEDT_FLOATS = 0x2, // pValue points to an array of floats - number of floats is NumBytes / sizeof(float)
117 D3DXEDT_DWORD = 0x3 // pValue points to a DWORD
118 }
119
120 align(4) struct D3DXEFFECTDEFAULT
121 {
122 LPSTR pParamName;
123 D3DXEFFECTDEFAULTTYPE Type; // type of the data pointed to by pValue
124 DWORD NumBytes; // size in bytes of the data pointed to by pValue
125 LPVOID pValue; // data for the default of the effect
126 }
127
128 align(4) struct D3DXEFFECTINSTANCE
129 {
130 LPSTR pEffectFilename;
131 DWORD NumDefaults;
132 D3DXEFFECTDEFAULT* pDefaults;
133 }
134
135 alias uint D3DXPATCHMESHTYPE;
136 enum : uint
137 {
138 D3DXPATCHMESH_RECT = 0x001,
139 D3DXPATCHMESH_TRI = 0x002,
140 D3DXPATCHMESH_NPATCH = 0x003
141 }
142
143 align(4) struct D3DXPATCHINFO
144 {
145 D3DXPATCHMESHTYPE PatchType;
146 D3DDEGREETYPE Degree;
147 D3DBASISTYPE Basis;
148 }
149
150 const uint LF_FACESIZE = 32;
151
152 align(4) struct D3DXFONT_DESCA
153 {
154 INT Height;
155 UINT Width;
156 UINT Weight;
157 UINT MipLevels;
158 BOOL Italic;
159 BYTE CharSet;
160 BYTE OutputPrecision;
161 BYTE Quality;
162 BYTE PitchAndFamily;
163 CHAR[LF_FACESIZE] FaceName;
164 }
165
166 align(4) struct D3DXFONT_DESCW
167 {
168 INT Height;
169 UINT Width;
170 UINT Weight;
171 UINT MipLevels;
172 BOOL Italic;
173 BYTE CharSet;
174 BYTE OutputPrecision;
175 BYTE Quality;
176 BYTE PitchAndFamily;
177 WCHAR[LF_FACESIZE] FaceName;
178 }
179
180 align(4) struct TEXTMETRICA
181 {
182 LONG tmHeight;
183 LONG tmAscent;
184 LONG tmDescent;
185 LONG tmInternalLeading;
186 LONG tmExternalLeading;
187 LONG tmAveCharWidth;
188 LONG tmMaxCharWidth;
189 LONG tmWeight;
190 LONG tmOverhang;
191 LONG tmDigitizedAspectX;
192 LONG tmDigitizedAspectY;
193 BYTE tmFirstChar;
194 BYTE tmLastChar;
195 BYTE tmDefaultChar;
196 BYTE tmBreakChar;
197 BYTE tmItalic;
198 BYTE tmUnderlined;
199 BYTE tmStruckOut;
200 BYTE tmPitchAndFamily;
201 BYTE tmCharSet;
202 }
203
204 align(4) struct TEXTMETRICW
205 {
206 LONG tmHeight;
207 LONG tmAscent;
208 LONG tmDescent;
209 LONG tmInternalLeading;
210 LONG tmExternalLeading;
211 LONG tmAveCharWidth;
212 LONG tmMaxCharWidth;
213 LONG tmWeight;
214 LONG tmOverhang;
215 LONG tmDigitizedAspectX;
216 LONG tmDigitizedAspectY;
217 WCHAR tmFirstChar;
218 WCHAR tmLastChar;
219 WCHAR tmDefaultChar;
220 WCHAR tmBreakChar;
221 BYTE tmItalic;
222 BYTE tmUnderlined;
223 BYTE tmStruckOut;
224 BYTE tmPitchAndFamily;
225 BYTE tmCharSet;
226 }
227
228 align(4) struct D3DXEFFECT_DESC
229 {
230 LPCSTR Creator; // Creator string
231 UINT Parameters; // Number of parameters
232 UINT Techniques; // Number of techniques
233 UINT Functions; // Number of function entrypoints
234 }
235
236 alias char* D3DXHANDLE;
237
238 align(4) struct D3DXPARAMETER_DESC
239 {
240 LPCSTR Name; // Parameter name
241 LPCSTR Semantic; // Parameter semantic
242 D3DXPARAMETER_CLASS Class; // Class
243 D3DXPARAMETER_TYPE Type; // Component type
244 UINT Rows; // Number of rows
245 UINT Columns; // Number of columns
246 UINT Elements; // Number of array elements
247 UINT Annotations; // Number of annotations
248 UINT StructMembers; // Number of structure member sub-parameters
249 DWORD Flags; // D3DX_PARAMETER_* flags
250 UINT Bytes; // Parameter size, in bytes
251 }
252
253 alias uint D3DXPARAMETER_CLASS;
254 enum : uint
255 {
256 D3DXPC_SCALAR,
257 D3DXPC_VECTOR,
258 D3DXPC_MATRIX_ROWS,
259 D3DXPC_MATRIX_COLUMNS,
260 D3DXPC_OBJECT,
261 D3DXPC_STRUCT
262 }
263
264 alias uint D3DXPARAMETER_TYPE;
265 enum : uint
266 {
267 D3DXPT_VOID,
268 D3DXPT_BOOL,
269 D3DXPT_INT,
270 D3DXPT_FLOAT,
271 D3DXPT_STRING,
272 D3DXPT_TEXTURE,
273 D3DXPT_TEXTURE1D,
274 D3DXPT_TEXTURE2D,
275 D3DXPT_TEXTURE3D,
276 D3DXPT_TEXTURECUBE,
277 D3DXPT_SAMPLER,
278 D3DXPT_SAMPLER1D,
279 D3DXPT_SAMPLER2D,
280 D3DXPT_SAMPLER3D,
281 D3DXPT_SAMPLERCUBE,
282 D3DXPT_PIXELSHADER,
283 D3DXPT_VERTEXSHADER,
284 D3DXPT_PIXELFRAGMENT,
285 D3DXPT_VERTEXFRAGMENT
286 }
287
288 align(4) struct D3DXTECHNIQUE_DESC
289 {
290 LPCSTR Name; // Technique name
291 UINT Passes; // Number of passes
292 UINT Annotations; // Number of annotations
293 }
294
295 align(4) struct D3DXPASS_DESC
296 {
297 LPCSTR Name; // Pass name
298 UINT Annotations; // Number of annotations
299
300 DWORD *pVertexShaderFunction; // Vertex shader function
301 DWORD *pPixelShaderFunction; // Pixel shader function
302 }
303
304 align(4) struct D3DXFUNCTION_DESC
305 {
306 LPCSTR Name; // Function name
307 UINT Annotations; // Number of annotations
308 }
309
310 struct D3DXTRACK_DESC
311 {
312 DWORD Priority;
313 FLOAT Weight = 0;
314 FLOAT Speed = 0;
315 double Position = 0;
316 BOOL Enable;
317 }
318
319 align(4) struct D3DXEVENT_DESC
320 {
321 DWORD Type;
322 UINT Track;
323 double StartTime = 0;
324 double Duration = 0;
325 DWORD Transition;
326 union
327 {
328 FLOAT Weight = 0;
329 FLOAT Speed;
330 double Position;
331 BOOL Enable;
332 };
333 }
334
335 align(4) struct D3DXKEY_VECTOR3
336 {
337 FLOAT Time = 0;
338 D3DXVECTOR3 Value;
339 }
340
341 align(4) struct D3DXKEY_QUATERNION
342 {
343 FLOAT Time = 0;
344 D3DXQUATERNION Value;
345 }
346
347 align(4) struct D3DXKEY_CALLBACK
348 {
349 FLOAT Time = 0;
350 LPVOID pCallbackData;
351 }
352
353 align(4) struct D3DXIMAGE_INFO
354 {
355 UINT Width;
356 UINT Height;
357 UINT Depth;
358 UINT MipLevels;
359 D3DFORMAT Format;
360 D3DRESOURCETYPE ResourceType;
361 D3DXIMAGE_FILEFORMAT ImageFileFormat;
362 }
363
364 alias uint D3DXIMAGE_FILEFORMAT;
365 enum : uint
366 {
367 D3DXIFF_BMP = 0,
368 D3DXIFF_JPG = 1,
369 D3DXIFF_TGA = 2,
370 D3DXIFF_PNG = 3,
371 D3DXIFF_DDS = 4,
372 D3DXIFF_PPM = 5,
373 D3DXIFF_DIB = 6,
374 }
375
376 align(4) struct D3DXATTRIBUTEWEIGHTS
377 {
378 FLOAT Position = 0;
379 FLOAT Boundary = 0;
380 FLOAT Normal = 0;
381 FLOAT Diffuse = 0;
382 FLOAT Specular = 0;
383 FLOAT Texcoord[8] = 0;
384 FLOAT Tangent = 0;
385 FLOAT Binormal = 0;
386 }
387
388 align(4) struct D3DXPLANE
389 {
390 FLOAT a = 0, b = 0, c = 0, d = 0;
391 }
392
393 alias uint D3DXMESH;
394 enum : uint
395 {
396 D3DXMESH_32BIT = 0x001,
397 D3DXMESH_DONOTCLIP = 0x002,
398 D3DXMESH_POINTS = 0x004,
399 D3DXMESH_RTPATCHES = 0x008,
400 D3DXMESH_NPATCHES = 0x4000,
401 D3DXMESH_VB_SYSTEMMEM = 0x010,
402 D3DXMESH_VB_MANAGED = 0x020,
403 D3DXMESH_VB_WRITEONLY = 0x040,
404 D3DXMESH_VB_DYNAMIC = 0x080,
405 D3DXMESH_VB_SOFTWAREPROCESSING = 0x8000,
406 D3DXMESH_IB_SYSTEMMEM = 0x100,
407 D3DXMESH_IB_MANAGED = 0x200,
408 D3DXMESH_IB_WRITEONLY = 0x400,
409 D3DXMESH_IB_DYNAMIC = 0x800,
410 D3DXMESH_IB_SOFTWAREPROCESSING= 0x10000,
411 D3DXMESH_VB_SHARE = 0x1000,
412 D3DXMESH_USEHWONLY = 0x2000,
413 D3DXMESH_SYSTEMMEM = 0x110,
414 D3DXMESH_MANAGED = 0x220,
415 D3DXMESH_WRITEONLY = 0x440,
416 D3DXMESH_DYNAMIC = 0x880,
417 D3DXMESH_SOFTWAREPROCESSING = 0x18000,
418 }
419
420 align(4) struct D3DXMACRO
421 {
422 LPCSTR Name;
423 LPCSTR Definition;
424 }
425
426 align(4) struct D3DXSEMANTIC
427 {
428 UINT Usage;
429 UINT UsageIndex;
430 }
431
432 alias uint D3DXINCLUDE_TYPE;
433 enum : uint
434 {
435 D3DXINC_LOCAL,
436 D3DXINC_SYSTEM,
437 }
438
439 enum : uint
440 {
441 D3DXFX_DONOTSAVESTATE = (1 << 0),
442 D3DXFX_DONOTSAVESHADERSTATE = (1 << 1),
443 D3DXFX_DONOTSAVESAMPLERSTATE = (1 << 2),
444 D3DXFX_NOT_CLONEABLE = (1 << 11)
445 }
446
447 alias uint D3DXMESHSIMP;
448 enum : uint
449 {
450 D3DXMESHSIMP_VERTEX = 0x1,
451 D3DXMESHSIMP_FACE = 0x2
452 }
453
454 enum : uint
455 {
456 DT_TOP = 0x00000000,
457 DT_LEFT = 0x00000000,
458 DT_CENTER = 0x00000001,
459 DT_RIGHT = 0x00000002,
460 DT_VCENTER = 0x00000004,
461 DT_BOTTOM = 0x00000008,
462 DT_WORDBREAK = 0x00000010,
463 DT_SINGLELINE = 0x00000020,
464 DT_EXPANDTABS = 0x00000040,
465 DT_TABSTOP = 0x00000080,
466 DT_NOCLIP = 0x00000100,
467 DT_EXTERNALLEADING = 0x00000200,
468 DT_CALCRECT = 0x00000400,
469 DT_NOPREFIX = 0x00000800,
470 DT_INTERNAL = 0x00001000
471 }
472
473 enum : uint
474 {
475 D3DXSPRITE_DONOTSAVESTATE = (1 << 0),
476 D3DXSPRITE_DONOTMODIFY_RENDERSTATE = (1 << 1),
477 D3DXSPRITE_OBJECTSPACE = (1 << 2),
478 D3DXSPRITE_BILLBOARD = (1 << 3),
479 D3DXSPRITE_ALPHABLEND = (1 << 4),
480 D3DXSPRITE_SORT_TEXTURE = (1 << 5),
481 D3DXSPRITE_SORT_DEPTH_FRONTTOBACK = (1 << 6),
482 D3DXSPRITE_SORT_DEPTH_BACKTOFRONT = (1 << 7)
483 }
484
485 enum : uint
486 {
487 D3DX_FILTER_NONE = (1 << 0),
488 D3DX_FILTER_POINT = (2 << 0),
489 D3DX_FILTER_LINEAR = (3 << 0),
490 D3DX_FILTER_TRIANGLE = (4 << 0),
491 D3DX_FILTER_BOX = (5 << 0),
492 D3DX_FILTER_MIRROR_U = (1 << 16),
493 D3DX_FILTER_MIRROR_V = (2 << 16),
494 D3DX_FILTER_MIRROR_W = (4 << 16),
495 D3DX_FILTER_MIRROR = (7 << 16),
496 D3DX_FILTER_DITHER = (1 << 19),
497 D3DX_FILTER_DITHER_DIFFUSION = (2 << 19),
498 D3DX_FILTER_SRGB_IN = (1 << 21),
499 D3DX_FILTER_SRGB_OUT = (2 << 21),
500 D3DX_FILTER_SRGB = (3 << 21)
501 }
502
503 const uint D3DX_DEFAULT = cast(UINT) -1;
504
505 alias uint D3DXMESHOPT;
506 enum : uint
507 {
508 D3DXMESHOPT_COMPACT = 0x01000000,
509 D3DXMESHOPT_ATTRSORT = 0x02000000,
510 D3DXMESHOPT_VERTEXCACHE = 0x04000000,
511 D3DXMESHOPT_STRIPREORDER = 0x08000000,
512 D3DXMESHOPT_IGNOREVERTS = 0x10000000, // optimize faces only, don't touch vertices
513 D3DXMESHOPT_DONOTSPLIT = 0x20000000, // do not split vertices shared between attribute groups when attribute sorting
514 D3DXMESHOPT_DEVICEINDEPENDENT = 0x00400000 // Only affects VCache. uses a static known good cache size for all cards
515 }
516
517 enum : uint
518 {
519 D3DXPLAY_LOOP = 0,
520 D3DXPLAY_ONCE = 1,
521 D3DXPLAY_PINGPONG = 2
522 }
523 alias uint D3DXPLAYBACK_TYPE;
524
525
526 // D3DX Interfaces ---------------------------------------------------------------------------------------
527
528 interface ID3DXSkinInfo : IUnknown
529 {
530 extern(Windows):
531
532 // Specify the which vertices do each bones influence and by how much
533 HRESULT SetBoneInfluence(DWORD bone, DWORD numInfluences, DWORD* vertices, FLOAT* weights);
534 HRESULT SetBoneVertexInfluence(DWORD boneNum, DWORD influenceNum, float weight);
535 DWORD GetNumBoneInfluences(DWORD bone);
536 HRESULT GetBoneInfluence(DWORD bone, DWORD* vertices, FLOAT* weights);
537 HRESULT GetBoneVertexInfluence(DWORD boneNum, DWORD influenceNum, float *pWeight, DWORD *pVertexNum);
538 HRESULT GetMaxVertexInfluences(DWORD* maxVertexInfluences);
539 DWORD GetNumBones();
540 HRESULT FindBoneVertexInfluenceIndex(DWORD boneNum, DWORD vertexNum, DWORD *pInfluenceIndex);
541
542 // This gets the max face influences based on a triangle mesh with the specified index buffer
543 HRESULT GetMaxFaceInfluences(IDirect3DIndexBuffer9 pIB, DWORD NumFaces, DWORD* maxFaceInfluences);
544
545 // Set min bone influence. Bone influences that are smaller than this are ignored
546 HRESULT SetMinBoneInfluence(FLOAT MinInfl);
547 // Get min bone influence.
548 FLOAT GetMinBoneInfluence();
549
550 // Bone names are returned by D3DXLoadSkinMeshFromXof. They are not used by any other method of this object
551 HRESULT SetBoneName(DWORD Bone, LPCSTR pName); // pName is copied to an internal string buffer
552 LPCSTR GetBoneName(DWORD Bone); // A pointer to an internal string buffer is returned. Do not free this.
553
554 // Bone offset matrices are returned by D3DXLoadSkinMeshFromXof. They are not used by any other method of this object
555 HRESULT SetBoneOffsetMatrix(DWORD Bone, D3DXMATRIX *pBoneTransform); // pBoneTransform is copied to an internal buffer
556 D3DXMATRIX* GetBoneOffsetMatrix(DWORD Bone); // A pointer to an internal matrix is returned. Do not free this.
557
558 // Clone a skin info object
559 HRESULT Clone(ID3DXSkinInfo* ppSkinInfo);
560
561 // Update bone influence information to match vertices after they are reordered. This should be called
562 // if the target vertex buffer has been reordered externally.
563 HRESULT Remap(DWORD NumVertices, DWORD* pVertexRemap);
564
565 // These methods enable the modification of the vertex layout of the vertices that will be skinned
566 HRESULT SetFVF(DWORD FVF);
567 HRESULT SetDeclaration(D3DVERTEXELEMENT9 *pDeclaration);
568 DWORD GetFVF();
569 HRESULT GetDeclaration(D3DVERTEXELEMENT9 Declaration[MAX_FVF_DECL_SIZE]);
570
571 // Apply SW skinning based on current pose matrices to the target vertices.
572 HRESULT UpdateSkinnedMesh(
573 D3DXMATRIX* pBoneTransforms,
574 D3DXMATRIX* pBoneInvTransposeTransforms,
575 LPCVOID pVerticesSrc,
576 PVOID pVerticesDst);
577
578 // Takes a mesh and returns a new mesh with per vertex blend weights and a bone combination
579 // table that describes which bones affect which subsets of the mesh
580 HRESULT ConvertToBlendedMesh(
581 ID3DXMesh pMesh,
582 DWORD Options,
583 DWORD *pAdjacencyIn,
584 LPDWORD pAdjacencyOut,
585 DWORD* pFaceRemap,
586 ID3DXBuffer* ppVertexRemap,
587 DWORD* pMaxFaceInfl,
588 DWORD* pNumBoneCombinations,
589 ID3DXBuffer* ppBoneCombinationTable,
590 ID3DXMesh* ppMesh);
591
592 // Takes a mesh and returns a new mesh with per vertex blend weights and indices
593 // and a bone combination table that describes which bones palettes affect which subsets of the mesh
594 HRESULT ConvertToIndexedBlendedMesh(
595 ID3DXMesh pMesh,
596 DWORD Options,
597 DWORD paletteSize,
598 DWORD *pAdjacencyIn,
599 LPDWORD pAdjacencyOut,
600 DWORD* pFaceRemap,
601 ID3DXBuffer* ppVertexRemap,
602 DWORD* pMaxVertexInfl,
603 DWORD *pNumBoneCombinations,
604 ID3DXBuffer* ppBoneCombinationTable,
605 ID3DXMesh* ppMesh);
606 }
607
608 interface ID3DXBaseMesh : IUnknown
609 {
610 extern(Windows):
611
612 // ID3DXBaseMesh
613 HRESULT DrawSubset( DWORD AttribId) ;
614 DWORD GetNumFaces() ;
615 DWORD GetNumVertices() ;
616 DWORD GetFVF() ;
617 HRESULT GetDeclaration( D3DVERTEXELEMENT9 Declaration[MAX_FVF_DECL_SIZE]) ;
618 DWORD GetNumBytesPerVertex() ;
619 DWORD GetOptions() ;
620 HRESULT GetDevice( IDirect3DDevice9* ppDevice) ;
621 HRESULT CloneMeshFVF( DWORD Options,
622 DWORD FVF, IDirect3DDevice9 pD3DDevice, ID3DXMesh* ppCloneMesh) ;
623 HRESULT CloneMesh( DWORD Options,
624 D3DVERTEXELEMENT9 *pDeclaration, IDirect3DDevice9 pD3DDevice, ID3DXMesh* ppCloneMesh) ;
625 HRESULT GetVertexBuffer( IDirect3DVertexBuffer9* ppVB) ;
626 HRESULT GetIndexBuffer( IDirect3DIndexBuffer9* ppIB) ;
627 HRESULT LockVertexBuffer( DWORD Flags, LPVOID *ppData) ;
628 HRESULT UnlockVertexBuffer() ;
629 HRESULT LockIndexBuffer( DWORD Flags, LPVOID *ppData) ;
630 HRESULT UnlockIndexBuffer() ;
631 HRESULT GetAttributeTable(
632 D3DXATTRIBUTERANGE *pAttribTable, DWORD* pAttribTableSize) ;
633
634 HRESULT ConvertPointRepsToAdjacency( DWORD* pPRep, DWORD* pAdjacency) ;
635 HRESULT ConvertAdjacencyToPointReps( DWORD* pAdjacency, DWORD* pPRep) ;
636 HRESULT GenerateAdjacency( FLOAT Epsilon, DWORD* pAdjacency) ;
637
638 HRESULT UpdateSemantics( D3DVERTEXELEMENT9 Declaration[MAX_FVF_DECL_SIZE]) ;
639 }
640
641 interface ID3DXMesh : ID3DXBaseMesh
642 {
643 extern(Windows):
644
645 // ID3DXMesh
646 HRESULT LockAttributeBuffer( DWORD Flags, DWORD** ppData) ;
647 HRESULT UnlockAttributeBuffer() ;
648 HRESULT Optimize( DWORD Flags, DWORD* pAdjacencyIn, DWORD* pAdjacencyOut,
649 DWORD* pFaceRemap, ID3DXBuffer *ppVertexRemap,
650 ID3DXMesh* ppOptMesh) ;
651 HRESULT OptimizeInplace( DWORD Flags, DWORD* pAdjacencyIn, DWORD* pAdjacencyOut,
652 DWORD* pFaceRemap, ID3DXBuffer *ppVertexRemap) ;
653 HRESULT SetAttributeTable( D3DXATTRIBUTERANGE *pAttribTable, DWORD cAttribTableSize) ;
654 }
655
656 interface ID3DXBuffer : IUnknown
657 {
658 extern(Windows):
659
660 // ID3DXBuffer
661 LPVOID GetBufferPointer();
662 DWORD GetBufferSize();
663 }
664
665 interface ID3DXPMesh : ID3DXBaseMesh
666 {
667 extern(Windows):
668
669 // ID3DXPMesh
670 HRESULT ClonePMeshFVF( DWORD Options,
671 DWORD FVF, IDirect3DDevice9 pD3DDevice, ID3DXPMesh* ppCloneMesh) ;
672 HRESULT ClonePMesh( DWORD Options,
673 D3DVERTEXELEMENT9 *pDeclaration, IDirect3DDevice9 pD3DDevice, ID3DXPMesh* ppCloneMesh) ;
674 HRESULT SetNumFaces( DWORD Faces) ;
675 HRESULT SetNumVertices( DWORD Vertices) ;
676 DWORD GetMaxFaces() ;
677 DWORD GetMinFaces() ;
678 DWORD GetMaxVertices() ;
679 DWORD GetMinVertices() ;
680 HRESULT Save( void *pStream, D3DXMATERIAL* pMaterials, D3DXEFFECTINSTANCE* pEffectInstances, DWORD NumMaterials) ;
681
682 HRESULT Optimize( DWORD Flags, DWORD* pAdjacencyOut,
683 DWORD* pFaceRemap, ID3DXBuffer *ppVertexRemap,
684 ID3DXMesh* ppOptMesh) ;
685
686 HRESULT OptimizeBaseLOD( DWORD Flags, DWORD* pFaceRemap) ;
687 HRESULT TrimByFaces( DWORD NewFacesMin, DWORD NewFacesMax, DWORD *rgiFaceRemap, DWORD *rgiVertRemap) ;
688 HRESULT TrimByVertices( DWORD NewVerticesMin, DWORD NewVerticesMax, DWORD *rgiFaceRemap, DWORD *rgiVertRemap) ;
689
690 HRESULT GetAdjacency( DWORD* pAdjacency) ;
691
692 // Used to generate the immediate "ancestor" for each vertex when it is removed by a vsplit. Allows generation of geomorphs
693 // Vertex buffer must be equal to or greater than the maximum number of vertices in the pmesh
694 HRESULT GenerateVertexHistory( DWORD* pVertexHistory) ;
695 }
696
697 interface ID3DXPatchMesh : IUnknown
698 {
699 extern(Windows):
700
701 // ID3DXPatchMesh
702
703 // Return creation parameters
704 DWORD GetNumPatches() ;
705 DWORD GetNumVertices() ;
706 HRESULT GetDeclaration( D3DVERTEXELEMENT9 Declaration[MAX_FVF_DECL_SIZE]) ;
707 DWORD GetControlVerticesPerPatch() ;
708 DWORD GetOptions() ;
709 HRESULT GetDevice( IDirect3DDevice9 *ppDevice) ;
710 HRESULT GetPatchInfo( D3DXPATCHINFO* PatchInfo) ;
711
712 // Control mesh access
713 HRESULT GetVertexBuffer( IDirect3DVertexBuffer9* ppVB) ;
714 HRESULT GetIndexBuffer( IDirect3DIndexBuffer9* ppIB) ;
715 HRESULT LockVertexBuffer( DWORD flags, LPVOID *ppData) ;
716 HRESULT UnlockVertexBuffer() ;
717 HRESULT LockIndexBuffer( DWORD flags, LPVOID *ppData) ;
718 HRESULT UnlockIndexBuffer() ;
719 HRESULT LockAttributeBuffer( DWORD flags, DWORD** ppData) ;
720 HRESULT UnlockAttributeBuffer() ;
721
722 // function returns the size of the tessellated mesh given a tessellation level.
723 // assumes uniform tessellation. For adaptive tessellation the Adaptive parameter must
724 // be set to TRUE and TessellationLevel should be the max tessellation.
725 // will result in the max mesh size necessary for adaptive tessellation.
726 HRESULT GetTessSize( FLOAT fTessLevel,DWORD Adaptive, DWORD *NumTriangles,DWORD *NumVertices) ;
727
728 //GenerateAdjacency determines which patches are adjacent with provided tolerance
729 // information is used internally to optimize tessellation
730 HRESULT GenerateAdjacency( FLOAT Tolerance) ;
731
732 //CloneMesh Creates a new patchmesh with the specified decl, and converts the vertex buffer
733 //to the new decl. Entries in the new decl which are new are set to 0. If the current mesh
734 //has adjacency, the new mesh will also have adjacency
735 HRESULT CloneMesh( DWORD Options, D3DVERTEXELEMENT9 *pDecl, ID3DXPatchMesh *pMesh) ;
736
737 // Optimizes the patchmesh for efficient tessellation. function is designed
738 // to perform one time optimization for patch meshes that need to be tessellated
739 // repeatedly by calling the Tessellate() method. The optimization performed is
740 // independent of the actual tessellation level used.
741 // Currently Flags is unused.
742 // If vertices are changed, Optimize must be called again
743 HRESULT Optimize( DWORD flags) ;
744
745 //gets and sets displacement parameters
746 //displacement maps can only be 2D textures MIP-MAPPING is ignored for non adapative tessellation
747 HRESULT SetDisplaceParam( IDirect3DBaseTexture9 Texture,
748 D3DTEXTUREFILTERTYPE MinFilter,
749 D3DTEXTUREFILTERTYPE MagFilter,
750 D3DTEXTUREFILTERTYPE MipFilter,
751 D3DTEXTUREADDRESS Wrap,
752 DWORD dwLODBias) ;
753
754 HRESULT GetDisplaceParam( IDirect3DBaseTexture9 *Texture,
755 D3DTEXTUREFILTERTYPE *MinFilter,
756 D3DTEXTUREFILTERTYPE *MagFilter,
757 D3DTEXTUREFILTERTYPE *MipFilter,
758 D3DTEXTUREADDRESS *Wrap,
759 DWORD *dwLODBias) ;
760
761 // Performs the uniform tessellation based on the tessellation level.
762 // function will perform more efficiently if the patch mesh has been optimized using the Optimize() call.
763 HRESULT Tessellate( FLOAT fTessLevel,ID3DXMesh pMesh) ;
764
765 // Performs adaptive tessellation based on the Z based adaptive tessellation criterion.
766 // pTrans specifies a 4D vector that is dotted with the vertices to get the per vertex
767 // adaptive tessellation amount. Each edge is tessellated to the average of the criterion
768 // at the 2 vertices it connects.
769 // MaxTessLevel specifies the upper limit for adaptive tesselation.
770 // function will perform more efficiently if the patch mesh has been optimized using the Optimize() call.
771 HRESULT TessellateAdaptive(
772 D3DXVECTOR4 *pTrans,
773 DWORD dwMaxTessLevel,
774 DWORD dwMinTessLevel,
775 ID3DXMesh pMesh) ;
776
777 }
778
779 interface ID3DXFont : IUnknown
780 {
781 extern(Windows):
782
783 // ID3DXFont
784 HRESULT GetDevice( IDirect3DDevice9 *ppDevice) ;
785 HRESULT GetDescA( D3DXFONT_DESCA *pDesc) ;
786 HRESULT GetDescW( D3DXFONT_DESCW *pDesc) ;
787 BOOL GetTextMetricsA( TEXTMETRICA *pTextMetrics) ;
788 BOOL GetTextMetricsW( TEXTMETRICW *pTextMetrics) ;
789
790 HDC GetDC() ;
791 HRESULT GetGlyphData( UINT Glyph, IDirect3DTexture9 *ppTexture, RECT *pBlackBox, POINT *pCellInc) ;
792
793 HRESULT PreloadCharacters( UINT First, UINT Last) ;
794 HRESULT PreloadGlyphs( UINT First, UINT Last) ;
795 HRESULT PreloadTextA( LPCSTR pString, INT Count) ;
796 HRESULT PreloadTextW( LPCWSTR pString, INT Count) ;
797
798 INT DrawTextA( ID3DXSprite pSprite, LPCSTR pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color) ;
799 INT DrawTextW( ID3DXSprite pSprite, LPCWSTR pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color) ;
800
801 HRESULT OnLostDevice() ;
802 HRESULT OnResetDevice() ;
803 }
804
805 interface ID3DXSprite : IUnknown
806 {
807 extern(Windows):
808
809 // ID3DXSprite
810 HRESULT GetDevice( IDirect3DDevice9* ppDevice) ;
811
812 HRESULT GetTransform( D3DXMATRIX *pTransform) ;
813 HRESULT SetTransform( D3DXMATRIX *pTransform) ;
814
815 HRESULT SetWorldViewRH( D3DXMATRIX *pWorld, D3DXMATRIX *pView) ;
816 HRESULT SetWorldViewLH( D3DXMATRIX *pWorld, D3DXMATRIX *pView) ;
817
818 HRESULT Begin( DWORD Flags) ;
819 HRESULT Draw( IDirect3DTexture9 pTexture, RECT *pSrcRect, D3DXVECTOR3 *pCenter, D3DXVECTOR3 *pPosition, D3DCOLOR Color) ;
820 HRESULT Flush() ;
821 HRESULT End() ;
822
823 HRESULT OnLostDevice() ;
824 HRESULT OnResetDevice() ;
825 }
826
827 interface ID3DXBaseEffect : IUnknown
828 {
829 extern(Windows):
830
831 // Descs
832 HRESULT GetDesc( D3DXEFFECT_DESC* pDesc) ;
833 HRESULT GetParameterDesc( D3DXHANDLE hParameter, D3DXPARAMETER_DESC* pDesc) ;
834 HRESULT GetTechniqueDesc( D3DXHANDLE hTechnique, D3DXTECHNIQUE_DESC* pDesc) ;
835 HRESULT GetPassDesc( D3DXHANDLE hPass, D3DXPASS_DESC* pDesc) ;
836 HRESULT GetFunctionDesc( D3DXHANDLE hShader, D3DXFUNCTION_DESC* pDesc) ;
837
838 // Handle operations
839 D3DXHANDLE GetParameter( D3DXHANDLE hParameter, UINT Index) ;
840 D3DXHANDLE GetParameterByName( D3DXHANDLE hParameter, LPCSTR pName) ;
841 D3DXHANDLE GetParameterBySemantic( D3DXHANDLE hParameter, LPCSTR pSemantic) ;
842 D3DXHANDLE GetParameterElement( D3DXHANDLE hParameter, UINT Index) ;
843 D3DXHANDLE GetTechnique( UINT Index) ;
844 D3DXHANDLE GetTechniqueByName( LPCSTR pName) ;
845 D3DXHANDLE GetPass( D3DXHANDLE hTechnique, UINT Index) ;
846 D3DXHANDLE GetPassByName( D3DXHANDLE hTechnique, LPCSTR pName) ;
847 D3DXHANDLE GetFunction( UINT Index) ;
848 D3DXHANDLE GetFunctionByName( LPCSTR pName) ;
849 D3DXHANDLE GetAnnotation( D3DXHANDLE hObject, UINT Index) ;
850 D3DXHANDLE GetAnnotationByName( D3DXHANDLE hObject, LPCSTR pName) ;
851
852 // Get/Set Parameters
853 HRESULT SetValue( D3DXHANDLE hParameter, LPCVOID pData, UINT Bytes) ;
854 HRESULT GetValue( D3DXHANDLE hParameter, LPVOID pData, UINT Bytes) ;
855 HRESULT SetBool( D3DXHANDLE hParameter, BOOL b) ;
856 HRESULT GetBool( D3DXHANDLE hParameter, BOOL* pb) ;
857 HRESULT SetBoolArray( D3DXHANDLE hParameter, BOOL* pb, UINT Count) ;
858 HRESULT GetBoolArray( D3DXHANDLE hParameter, BOOL* pb, UINT Count) ;
859 HRESULT SetInt( D3DXHANDLE hParameter, INT n) ;
860 HRESULT GetInt( D3DXHANDLE hParameter, INT* pn) ;
861 HRESULT SetIntArray( D3DXHANDLE hParameter, INT* pn, UINT Count) ;
862 HRESULT GetIntArray( D3DXHANDLE hParameter, INT* pn, UINT Count) ;
863 HRESULT SetFloat( D3DXHANDLE hParameter, FLOAT f) ;
864 HRESULT GetFloat( D3DXHANDLE hParameter, FLOAT* pf) ;
865 HRESULT SetFloatArray( D3DXHANDLE hParameter, FLOAT* pf, UINT Count) ;
866 HRESULT GetFloatArray( D3DXHANDLE hParameter, FLOAT* pf, UINT Count) ;
867 HRESULT SetVector( D3DXHANDLE hParameter, D3DXVECTOR4* pVector) ;
868 HRESULT GetVector( D3DXHANDLE hParameter, D3DXVECTOR4* pVector) ;
869 HRESULT SetVectorArray( D3DXHANDLE hParameter, D3DXVECTOR4* pVector, UINT Count) ;
870 HRESULT GetVectorArray( D3DXHANDLE hParameter, D3DXVECTOR4* pVector, UINT Count) ;
871 HRESULT SetMatrix( D3DXHANDLE hParameter, D3DXMATRIX* pMatrix) ;
872 HRESULT GetMatrix( D3DXHANDLE hParameter, D3DXMATRIX* pMatrix) ;
873 HRESULT SetMatrixArray( D3DXHANDLE hParameter, D3DXMATRIX* pMatrix, UINT Count) ;
874 HRESULT GetMatrixArray( D3DXHANDLE hParameter, D3DXMATRIX* pMatrix, UINT Count) ;
875 HRESULT SetMatrixPointerArray( D3DXHANDLE hParameter, D3DXMATRIX** ppMatrix, UINT Count) ;
876 HRESULT GetMatrixPointerArray( D3DXHANDLE hParameter, D3DXMATRIX** ppMatrix, UINT Count) ;
877 HRESULT SetMatrixTranspose( D3DXHANDLE hParameter, D3DXMATRIX* pMatrix) ;
878 HRESULT GetMatrixTranspose( D3DXHANDLE hParameter, D3DXMATRIX* pMatrix) ;
879 HRESULT SetMatrixTransposeArray( D3DXHANDLE hParameter, D3DXMATRIX* pMatrix, UINT Count) ;
880 HRESULT GetMatrixTransposeArray( D3DXHANDLE hParameter, D3DXMATRIX* pMatrix, UINT Count) ;
881 HRESULT SetMatrixTransposePointerArray( D3DXHANDLE hParameter, D3DXMATRIX** ppMatrix, UINT Count) ;
882 HRESULT GetMatrixTransposePointerArray( D3DXHANDLE hParameter, D3DXMATRIX** ppMatrix, UINT Count) ;
883 HRESULT SetString( D3DXHANDLE hParameter, LPCSTR pString) ;
884 HRESULT GetString( D3DXHANDLE hParameter, LPCSTR* ppString) ;
885 HRESULT SetTexture( D3DXHANDLE hParameter, IDirect3DBaseTexture9 pTexture) ;
886 HRESULT GetTexture( D3DXHANDLE hParameter, IDirect3DBaseTexture9 *ppTexture) ;
887 HRESULT GetPixelShader( D3DXHANDLE hParameter, IDirect3DPixelShader9 *ppPShader) ;
888 HRESULT GetVertexShader( D3DXHANDLE hParameter, IDirect3DVertexShader9 *ppVShader) ;
889
890 //Set Range of an Array to pass to device
891 //Useful for sending only a subrange of an array down to the device
892 HRESULT SetArrayRange( D3DXHANDLE hParameter, UINT uStart, UINT uEnd) ;
893
894 }
895
896 interface ID3DXEffect : ID3DXBaseEffect
897 {
898 extern(Windows):
899
900 // Pool
901 HRESULT GetPool( ID3DXEffectPool* ppPool) ;
902
903 // Selecting and setting a technique
904 HRESULT SetTechnique( D3DXHANDLE hTechnique) ;
905 D3DXHANDLE GetCurrentTechnique() ;
906 HRESULT ValidateTechnique( D3DXHANDLE hTechnique) ;
907 HRESULT FindNextValidTechnique( D3DXHANDLE hTechnique, D3DXHANDLE *pTechnique) ;
908 BOOL IsParameterUsed( D3DXHANDLE hParameter, D3DXHANDLE hTechnique) ;
909
910 // Using current technique
911 // Begin starts active technique
912 // BeginPass begins a pass
913 // CommitChanges updates changes to any set calls in the pass. should be called before
914 // any DrawPrimitive call to d3d
915 // EndPass ends a pass
916 // End ends active technique
917 HRESULT Begin( UINT *pPasses, DWORD Flags) ;
918 HRESULT BeginPass( UINT Pass) ;
919 HRESULT CommitChanges() ;
920 HRESULT EndPass() ;
921 HRESULT End() ;
922
923 // Managing D3D Device
924 HRESULT GetDevice( IDirect3DDevice9* ppDevice) ;
925 HRESULT OnLostDevice() ;
926 HRESULT OnResetDevice() ;
927
928 // Logging device calls
929 HRESULT SetStateManager( ID3DXEffectStateManager pManager) ;
930 HRESULT GetStateManager( ID3DXEffectStateManager *ppManager) ;
931
932 // Parameter blocks
933 HRESULT BeginParameterBlock() ;
934 D3DXHANDLE EndParameterBlock() ;
935 HRESULT ApplyParameterBlock( D3DXHANDLE hParameterBlock) ;
936 HRESULT DeleteParameterBlock( D3DXHANDLE hParameterBlock) ;
937
938 // Cloning
939 HRESULT CloneEffect( IDirect3DDevice9 pDevice, ID3DXEffect* ppEffect) ;
940 }
941
942 interface ID3DXEffectPool : IUnknown
943 {
944 extern(Windows):
945
946 // No public methods
947 }
948
949 interface ID3DXEffectStateManager : IUnknown
950 {
951 extern(Windows):
952
953 // The following methods are called by the Effect when it wants to make
954 // the corresponding device call. Note that:
955 // 1. Users manage the state and are therefore responsible for making the
956 // the corresponding device calls themselves inside their callbacks.
957 // 2. Effects pay attention to the return values of the callbacks, and so
958 // users must pay attention to what they return in their callbacks.
959
960 HRESULT SetTransform( D3DTRANSFORMSTATETYPE State, D3DMATRIX *pMatrix) ;
961 HRESULT SetMaterial( D3DMATERIAL9 *pMaterial) ;
962 HRESULT SetLight( DWORD Index, D3DLIGHT9 *pLight) ;
963 HRESULT LightEnable( DWORD Index, BOOL Enable) ;
964 HRESULT SetRenderState( D3DRENDERSTATETYPE State, DWORD Value) ;
965 HRESULT SetTexture( DWORD Stage, IDirect3DBaseTexture9 pTexture) ;
966 HRESULT SetTextureStageState( DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD Value) ;
967 HRESULT SetSamplerState( DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD Value) ;
968 HRESULT SetNPatchMode( FLOAT NumSegments) ;
969 HRESULT SetFVF( DWORD FVF) ;
970 HRESULT SetVertexShader( IDirect3DVertexShader9 pShader) ;
971 HRESULT SetVertexShaderConstantF( UINT RegisterIndex, FLOAT *pConstantData, UINT RegisterCount) ;
972 HRESULT SetVertexShaderConstantI( UINT RegisterIndex, INT *pConstantData, UINT RegisterCount) ;
973 HRESULT SetVertexShaderConstantB( UINT RegisterIndex, BOOL *pConstantData, UINT RegisterCount) ;
974 HRESULT SetPixelShader( IDirect3DPixelShader9 pShader) ;
975 HRESULT SetPixelShaderConstantF( UINT RegisterIndex, FLOAT *pConstantData, UINT RegisterCount) ;
976 HRESULT SetPixelShaderConstantI( UINT RegisterIndex, INT *pConstantData, UINT RegisterCount) ;
977 HRESULT SetPixelShaderConstantB( UINT RegisterIndex, BOOL *pConstantData, UINT RegisterCount) ;
978 }
979
980 interface ID3DXInclude
981 {
982 HRESULT Open(D3DXINCLUDE_TYPE IncludeType, LPCSTR pFileName, LPCVOID pParentData, LPCVOID *ppData, UINT *pBytes);
983 HRESULT Close(LPCVOID pData);
984 }
985
986 // D3DX Functions ---------------------------------------------------------------------------------------
987 extern(Windows)
988 {
989 uint D3DXGetShaderVersion(uint* pFunction);
990
991 HRESULT D3DXCheckTextureRequirements(
992 IDirect3DDevice9 pDevice,
993 UINT* pWidth,
994 UINT* pHeight,
995 UINT* pNumMipLevels,
996 DWORD Usage,
997 D3DFORMAT* pFormat,
998 D3DPOOL Pool) ;
999
1000 HRESULT D3DXCreateTexture(
1001 IDirect3DDevice9 pDevice,
1002 UINT Width,
1003 UINT Height,
1004 UINT MipLevels,
1005 DWORD Usage,
1006 D3DFORMAT Format,
1007 D3DPOOL Pool,
1008 IDirect3DTexture9* ppTexture);
1009
1010 HRESULT D3DXCreateCubeTexture(
1011 IDirect3DDevice9 pDevice,
1012 UINT Size,
1013 UINT MipLevels,
1014 DWORD Usage,
1015 D3DFORMAT Format,
1016 D3DPOOL Pool,
1017 IDirect3DCubeTexture9* ppCubeTexture);
1018
1019 HRESULT D3DXCreateTextureFromFileA(
1020 LPDIRECT3DDEVICE9 pDevice,
1021 LPCTSTR pSrcFile,
1022 LPDIRECT3DTEXTURE9 * ppTexture);
1023
1024 HRESULT D3DXCreateTextureFromFileExA(
1025 IDirect3DDevice9 pDevice,
1026 LPCSTR pSrcFile,
1027 UINT Width,
1028 UINT Height,
1029 UINT MipLevels,
1030 DWORD Usage,
1031 D3DFORMAT Format,
1032 D3DPOOL Pool,
1033 DWORD Filter,
1034 DWORD MipFilter,
1035 D3DCOLOR ColorKey,
1036 D3DXIMAGE_INFO* pSrcInfo,
1037 PALETTEENTRY* pPalette,
1038 IDirect3DTexture9* ppTexture);
1039
1040 HRESULT D3DXCreateCubeTextureFromFileExA(
1041 IDirect3DDevice9 pDevice,
1042 LPCSTR pSrcFile,
1043 UINT Size,
1044 UINT MipLevels,
1045 DWORD Usage,
1046 D3DFORMAT Format,
1047 D3DPOOL Pool,
1048 DWORD Filter,
1049 DWORD MipFilter,
1050 D3DCOLOR ColorKey,
1051 D3DXIMAGE_INFO* pSrcInfo,
1052 PALETTEENTRY* pPalette,
1053 IDirect3DCubeTexture9* ppCubeTexture);
1054
1055 HRESULT D3DXSimplifyMesh(
1056 ID3DXMesh pMesh,
1057 DWORD* pAdjacency,
1058 D3DXATTRIBUTEWEIGHTS *pVertexAttributeWeights,
1059 FLOAT *pVertexWeights,
1060 DWORD MinValue,
1061 DWORD Options,
1062 ID3DXMesh* ppMesh);
1063
1064 HRESULT D3DXCreateSkinInfoFVF(
1065 DWORD NumVertices,
1066 DWORD FVF,
1067 DWORD NumBones,
1068 ID3DXSkinInfo* ppSkinInfo);
1069
1070 D3DXVECTOR2* D3DXVec2TransformCoord( D3DXVECTOR2 *pOut, D3DXVECTOR2 *pV, D3DXMATRIX *pM );
1071
1072 D3DXVECTOR4* D3DXVec3Transform( D3DXVECTOR4 *pOut, D3DXVECTOR3 *pV, D3DXMATRIX *pM );
1073
1074 D3DXVECTOR3* D3DXVec3TransformCoord( D3DXVECTOR3 *pOut, D3DXVECTOR3 *pV, D3DXMATRIX *pM );
1075
1076 D3DXVECTOR4* D3DXVec4Transform( D3DXVECTOR4 *pOut, D3DXVECTOR4 *pV, D3DXMATRIX *pM );
1077
1078 D3DXMATRIX* D3DXMatrixTranspose( D3DXMATRIX *pOut, D3DXMATRIX *pM );
1079
1080 D3DXMATRIX* D3DXMatrixMultiply( D3DXMATRIX *pOut, D3DXMATRIX *pM1, D3DXMATRIX *pM2 );
1081
1082 D3DXMATRIX* D3DXMatrixInverse( D3DXMATRIX *pOut, FLOAT *pDeterminant, D3DXMATRIX *pM );
1083
1084 D3DXMATRIX* D3DXMatrixScaling( D3DXMATRIX *pOut, FLOAT sx, FLOAT sy, FLOAT sz );
1085
1086 D3DXMATRIX* D3DXMatrixTranslation( D3DXMATRIX *pOut, FLOAT x, FLOAT y, FLOAT z );
1087
1088 D3DXMATRIX* D3DXMatrixRotationX( D3DXMATRIX *pOut, FLOAT Angle );
1089
1090 D3DXMATRIX* D3DXMatrixRotationY( D3DXMATRIX *pOut, FLOAT Angle );
1091
1092 D3DXMATRIX* D3DXMatrixRotationZ( D3DXMATRIX *pOut, FLOAT Angle );
1093
1094 D3DXMATRIX* D3DXMatrixRotationQuaternion( D3DXMATRIX *pOut, D3DXQUATERNION *pQ);
1095
1096 D3DXMATRIX* D3DXMatrixRotationYawPitchRoll( D3DXMATRIX *pOut, FLOAT Yaw, FLOAT Pitch, FLOAT Roll );
1097
1098 D3DXMATRIX* D3DXMatrixAffineTransformation2D( D3DXMATRIX *pOut, FLOAT Scaling, D3DXVECTOR2 *pRotationCenter,
1099 float Rotation, D3DXVECTOR2 *pTranslation);
1100
1101 D3DXMATRIX* D3DXMatrixPerspectiveFovLH( D3DXMATRIX *pOut, FLOAT fovy, FLOAT Aspect, FLOAT zn, FLOAT zf );
1102
1103 D3DXMATRIX* D3DXMatrixOrthoLH( D3DXMATRIX *pOut, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf );
1104
1105 D3DXMATRIX* D3DXMatrixOrthoOffCenterLH( D3DXMATRIX *pOut, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT zn,
1106 FLOAT zf );
1107
1108 void D3DXQuaternionToAxisAngle( D3DXQUATERNION *pQ, D3DXVECTOR3 *pAxis, FLOAT *pAngle );
1109
1110 D3DXQUATERNION* D3DXQuaternionRotationMatrix( D3DXQUATERNION *pOut, D3DXMATRIX *pM);
1111
1112 D3DXQUATERNION* D3DXQuaternionNormalize( D3DXQUATERNION *pOut, D3DXQUATERNION *pQ );
1113
1114 D3DXPLANE* D3DXPlaneNormalize( D3DXPLANE *pOut, D3DXPLANE *pP);
1115
1116 char* DXGetErrorDescription9A(HRESULT hr);
1117
1118 HRESULT D3DXCreateEffectFromFileA(
1119 IDirect3DDevice9 pDevice,
1120 LPCSTR pSrcFile,
1121 D3DXMACRO* pDefines,
1122 ID3DXInclude pInclude,
1123 DWORD Flags,
1124 ID3DXEffectPool pPool,
1125 ID3DXEffect* ppEffect,
1126 ID3DXBuffer* ppCompilationErrors);
1127
1128 D3DXMATRIX* D3DXMatrixTransformation2D( D3DXMATRIX *pOut, D3DXVECTOR2 *pScalingCenter,
1129 float *pScalingRotation, D3DXVECTOR2 *pScaling,
1130 D3DXVECTOR2 *pRotationCenter, float Rotation,
1131 D3DXVECTOR2 *pTranslation);
1132
1133 HRESULT D3DXLoadMeshFromXA(
1134 LPCSTR pFilename,
1135 DWORD Options,
1136 IDirect3DDevice9 pD3D,
1137 ID3DXBuffer *ppAdjacency,
1138 ID3DXBuffer *ppMaterials,
1139 ID3DXBuffer *ppEffectInstances,
1140 DWORD *pNumMaterials,
1141 ID3DXMesh *ppMesh);
1142
1143 HRESULT D3DXCreatePolygon(
1144 IDirect3DDevice9 pDevice,
1145 FLOAT Length,
1146 UINT Sides,
1147 ID3DXMesh* ppMesh,
1148 ID3DXBuffer* ppAdjacency);
1149
1150 HRESULT D3DXCreateBox(
1151 IDirect3DDevice9 pDevice,
1152 FLOAT Width,
1153 FLOAT Height,
1154 FLOAT Depth,
1155 ID3DXMesh* ppMesh,
1156 ID3DXBuffer* ppAdjacency);
1157
1158 HRESULT D3DXCreateCylinder(
1159 IDirect3DDevice9 pDevice,
1160 FLOAT Radius1,
1161 FLOAT Radius2,
1162 FLOAT Length,
1163 UINT Slices,
1164 UINT Stacks,
1165 ID3DXMesh* ppMesh,
1166 ID3DXBuffer* ppAdjacency);
1167
1168 HRESULT D3DXCreateSphere(
1169 IDirect3DDevice9 pDevice,
1170 FLOAT Radius,
1171 UINT Slices,
1172 UINT Stacks,
1173 ID3DXMesh* ppMesh,
1174 ID3DXBuffer* ppAdjacency);
1175
1176 HRESULT D3DXCreateTorus(
1177 IDirect3DDevice9 pDevice,
1178 FLOAT InnerRadius,
1179 FLOAT OuterRadius,
1180 UINT Sides,
1181 UINT Rings,
1182 ID3DXMesh* ppMesh,
1183 ID3DXBuffer* ppAdjacency);
1184
1185 HRESULT D3DXCreateTeapot(
1186 IDirect3DDevice9 pDevice,
1187 ID3DXMesh* ppMesh,
1188 ID3DXBuffer* ppAdjacency);
1189
1190 HRESULT D3DXCreateFontA(
1191 IDirect3DDevice9 pDevice,
1192 UINT Height,
1193 UINT Width,
1194 UINT Weight,
1195 UINT MipLevels,
1196 BOOL Italic,
1197 DWORD CharSet,
1198 DWORD OutputPrecision,
1199 DWORD Quality,
1200 DWORD PitchAndFamily,
1201 LPCTSTR pFacename,
1202 ID3DXFont *ppFont);
1203
1204 HRESULT D3DXCreateSprite(
1205 IDirect3DDevice9 pDevice,
1206 ID3DXSprite* ppSprite) ;
1207
1208 HRESULT D3DXCreateEffect(
1209 IDirect3DDevice9 pDevice,
1210 LPCVOID pSrcData,
1211 UINT SrcDataLen,
1212 D3DXMACRO* pDefines,
1213 ID3DXInclude pInclude,
1214 DWORD Flags,
1215 ID3DXEffectPool pPool,
1216 ID3DXEffect* ppEffect,
1217 ID3DXBuffer* ppCompilationErrors);
1218
1219 HRESULT D3DXCreateEffectPool(
1220 ID3DXEffectPool* pEffectPool);
1221
1222 HRESULT D3DXGetShaderInputSemantics(
1223 DWORD* pFunction,
1224 D3DXSEMANTIC* pSemantics,
1225 UINT* pCount);
1226
1227 HRESULT
1228 D3DXCreateMeshFVF(
1229 DWORD NumFaces,
1230 DWORD NumVertices,
1231 DWORD Options,
1232 DWORD FVF,
1233 IDirect3DDevice9 pD3DDevice,
1234 ID3DXMesh* ppMesh);
1235
1236 UINT D3DXGetFVFVertexSize(DWORD FVF);
1237
1238 HRESULT D3DXFileCreate(ID3DXFile* lplpDirectXFile);
1239
1240 HRESULT D3DXLoadMeshFromXof(
1241 ID3DXFileData pxofMesh,
1242 DWORD Options,
1243 IDirect3DDevice9 pD3DDevice,
1244 ID3DXBuffer *ppAdjacency,
1245 ID3DXBuffer *ppMaterials,
1246 ID3DXBuffer *ppEffectInstances,
1247 DWORD *pNumMaterials,
1248 ID3DXMesh *ppMesh);
1249
1250 HRESULT D3DXConcatenateMeshes(
1251 ID3DXMesh * ppMeshes,
1252 UINT NumMeshes,
1253 DWORD Options,
1254 D3DXMATRIX * pGeomXForms,
1255 D3DXMATRIX * pTextureXForms,
1256 D3DVERTEXELEMENT9 * pDecl,
1257 IDirect3DDevice9 pD3DDevice,
1258 ID3DXMesh * ppMeshOut);
1259
1260 HRESULT D3DXDeclaratorFromFVF(DWORD FVF, D3DVERTEXELEMENT9* Declaration);
1261
1262 D3DXQUATERNION* D3DXQuaternionSlerp(D3DXQUATERNION* pOut, D3DXQUATERNION* pQ1, D3DXQUATERNION* pQ2, float t);
1263
1264 D3DXVECTOR3* D3DXVec3CatmullRom(D3DXVECTOR3 *pOut, D3DXVECTOR3 *pV0, D3DXVECTOR3 *pV1, D3DXVECTOR3 *pV2, D3DXVECTOR3 *pV3, float s);
1265
1266 void D3DXQuaternionSquadSetup( D3DXQUATERNION *pAOut,
1267 D3DXQUATERNION *pBOut,
1268 D3DXQUATERNION *pCOut,
1269 D3DXQUATERNION *pQ0,
1270 D3DXQUATERNION *pQ1,
1271 D3DXQUATERNION *pQ2,
1272 D3DXQUATERNION *pQ3);
1273
1274 D3DXQUATERNION* D3DXQuaternionSquad(D3DXQUATERNION *pOut,
1275 D3DXQUATERNION *pQ1,
1276 D3DXQUATERNION *pA,
1277 D3DXQUATERNION *pB,
1278 D3DXQUATERNION *pC,
1279 float t);
1280
1281 HRESULT D3DXMatrixDecompose(D3DXVECTOR3 *pOutScale,
1282 D3DXQUATERNION *pOutRotation,
1283 D3DXVECTOR3 *pOutTranslation,
1284 D3DXMATRIX *pM
1285 );
1286
1287 D3DXQUATERNION* D3DXQuaternionRotationYawPitchRoll(D3DXQUATERNION *pOut,
1288 FLOAT Yaw,
1289 FLOAT Pitch,
1290 FLOAT Roll
1291 );
1292
1293 UINT D3DXGetDeclVertexSize(D3DVERTEXELEMENT9 *pDecl, DWORD Stream );
1294 } // extern(Windows)
1295
1296 D3DXMATRIX* D3DXMatrixIdentity( D3DXMATRIX *pOut )
1297 {
1298 pOut.m[0][1] = pOut.m[0][2] = pOut.m[0][3] =
1299 pOut.m[1][0] = pOut.m[1][2] = pOut.m[1][3] =
1300 pOut.m[2][0] = pOut.m[2][1] = pOut.m[2][3] =
1301 pOut.m[3][0] = pOut.m[3][1] = pOut.m[3][2] = 0.0f;
1302
1303 pOut.m[0][0] = pOut.m[1][1] = pOut.m[2][2] = pOut.m[3][3] = 1.0f;
1304 return pOut;
1305 }
1306
1307 FLOAT D3DXVec3LengthSq(D3DXVECTOR3* v)
1308 {
1309 return (v.x * v.x) + (v.y * v.y) + (v.z * v.z);
1310 }
1311
1312 template DEFINE_GUID(uint d1, ushort d2, ushort d3, ubyte d4, ubyte d5, ubyte d6, ubyte d7, ubyte d8, ubyte d9, ubyte d10, ubyte d11)
1313 {
1314 const GUID DEFINE_GUID = {d1, d2, d3, [d4, d5, d6, d7, d8, d9, d10, d11]};
1315 }
1316
1317 const GUID TID_D3DRMInfo = DEFINE_GUID!(0x2b957100, 0x9e9a, 0x11cf, 0xab, 0x39, 0x0, 0x20, 0xaf, 0x71, 0xe4, 0x33);
1318 const GUID TID_D3DRMMesh = DEFINE_GUID!(0x3d82ab44, 0x62da, 0x11cf, 0xab, 0x39, 0x0, 0x20, 0xaf, 0x71, 0xe4, 0x33);
1319 const GUID TID_D3DRMVector = DEFINE_GUID!(0x3d82ab5e, 0x62da, 0x11cf, 0xab, 0x39, 0x0, 0x20, 0xaf, 0x71, 0xe4, 0x33);
1320 const GUID TID_D3DRMMeshFace = DEFINE_GUID!(0x3d82ab5f, 0x62da, 0x11cf, 0xab, 0x39, 0x0, 0x20, 0xaf, 0x71, 0xe4, 0x33);
1321 const GUID TID_D3DRMMaterial = DEFINE_GUID!(0x3d82ab4d, 0x62da, 0x11cf, 0xab, 0x39, 0x0, 0x20, 0xaf, 0x71, 0xe4, 0x33);
1322 const GUID TID_D3DRMMaterialArray = DEFINE_GUID!(0x35ff44e1, 0x6c7c, 0x11cf, 0x8F, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3);
1323 const GUID TID_D3DRMFrame = DEFINE_GUID!(0x3d82ab46, 0x62da, 0x11cf, 0xab, 0x39, 0x0, 0x20, 0xaf, 0x71, 0xe4, 0x33);
1324 const GUID TID_D3DRMFrameTransformMatrix = DEFINE_GUID!(0xf6f23f41, 0x7686, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3);
1325 const GUID TID_D3DRMMeshMaterialList = DEFINE_GUID!(0xf6f23f42, 0x7686, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3);
1326 const GUID TID_D3DRMMeshTextureCoords = DEFINE_GUID!(0xf6f23f40, 0x7686, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3);
1327 const GUID TID_D3DRMMeshNormals = DEFINE_GUID!(0xf6f23f43, 0x7686, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3);
1328 const GUID TID_D3DRMCoords2d = DEFINE_GUID!(0xf6f23f44, 0x7686, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3);
1329 const GUID TID_D3DRMMatrix4x4 = DEFINE_GUID!(0xf6f23f45, 0x7686, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3);
1330 const GUID TID_D3DRMAnimation = DEFINE_GUID!(0x3d82ab4f, 0x62da, 0x11cf, 0xab, 0x39, 0x0, 0x20, 0xaf, 0x71, 0xe4, 0x33);
1331 const GUID TID_D3DRMAnimationSet = DEFINE_GUID!(0x3d82ab50, 0x62da, 0x11cf, 0xab, 0x39, 0x0, 0x20, 0xaf, 0x71, 0xe4, 0x33);
1332 const GUID TID_D3DRMAnimationKey = DEFINE_GUID!(0x10dd46a8, 0x775b, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xA3);
1333 const GUID TID_D3DRMFloatKeys = DEFINE_GUID!(0x10dd46a9, 0x775b, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xA3);
1334 const GUID TID_D3DRMMaterialAmbientColor = DEFINE_GUID!(0x01411840, 0x7786, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xA3);
1335 const GUID TID_D3DRMMaterialDiffuseColor = DEFINE_GUID!(0x01411841, 0x7786, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xA3);
1336 const GUID TID_D3DRMMaterialSpecularColor = DEFINE_GUID!(0x01411842, 0x7786, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xA3);
1337 const GUID TID_D3DRMMaterialEmissiveColor = DEFINE_GUID!(0xd3e16e80, 0x7835, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3);
1338 const GUID TID_D3DRMMaterialPower = DEFINE_GUID!(0x01411843, 0x7786, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xA3);
1339 const GUID TID_D3DRMColorRGBA = DEFINE_GUID!(0x35ff44e0, 0x6c7c, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xA3);
1340 const GUID TID_D3DRMColorRGB = DEFINE_GUID!(0xd3e16e81, 0x7835, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3);
1341 const GUID TID_D3DRMGuid = DEFINE_GUID!(0xa42790e0, 0x7810, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3);
1342 const GUID TID_D3DRMTextureFilename = DEFINE_GUID!(0xa42790e1, 0x7810, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3);
1343 const GUID TID_D3DRMTextureReference = DEFINE_GUID!(0xa42790e2, 0x7810, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3);
1344 const GUID TID_D3DRMIndexedColor = DEFINE_GUID!(0x1630b820, 0x7842, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3);
1345 const GUID TID_D3DRMMeshVertexColors = DEFINE_GUID!(0x1630b821, 0x7842, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3);
1346 const GUID TID_D3DRMMaterialWrap = DEFINE_GUID!(0x4885ae60, 0x78e8, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3);
1347 const GUID TID_D3DRMBoolean = DEFINE_GUID!(0x537da6a0, 0xca37, 0x11d0, 0x94, 0x1c, 0x0, 0x80, 0xc8, 0xc, 0xfa, 0x7b);
1348 const GUID TID_D3DRMMeshFaceWraps = DEFINE_GUID!(0xed1ec5c0, 0xc0a8, 0x11d0, 0x94, 0x1c, 0x0, 0x80, 0xc8, 0xc, 0xfa, 0x7b);
1349 const GUID TID_D3DRMBoolean2d = DEFINE_GUID!(0x4885ae63, 0x78e8, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3);
1350 const GUID TID_D3DRMTimedFloatKeys = DEFINE_GUID!(0xf406b180, 0x7b3b, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3);
1351 const GUID TID_D3DRMAnimationOptions = DEFINE_GUID!(0xe2bf56c0, 0x840f, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3);
1352 const GUID TID_D3DRMFramePosition = DEFINE_GUID!(0xe2bf56c1, 0x840f, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3);
1353 const GUID TID_D3DRMFrameVelocity = DEFINE_GUID!(0xe2bf56c2, 0x840f, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3);
1354 const GUID TID_D3DRMFrameRotation = DEFINE_GUID!(0xe2bf56c3, 0x840f, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3);
1355 const GUID TID_D3DRMLight = DEFINE_GUID!(0x3d82ab4a, 0x62da, 0x11cf, 0xab, 0x39, 0x0, 0x20, 0xaf, 0x71, 0xe4, 0x33);
1356 const GUID TID_D3DRMCamera = DEFINE_GUID!(0x3d82ab51, 0x62da, 0x11cf, 0xab, 0x39, 0x0, 0x20, 0xaf, 0x71, 0xe4, 0x33);
1357 const GUID TID_D3DRMAppData = DEFINE_GUID!(0xe5745280, 0xb24f, 0x11cf, 0x9d, 0xd5, 0x0, 0xaa, 0x0, 0xa7, 0x1a, 0x2f);
1358 const GUID TID_D3DRMLightUmbra = DEFINE_GUID!(0xaed22740, 0xb31f, 0x11cf, 0x9d, 0xd5, 0x0, 0xaa, 0x0, 0xa7, 0x1a, 0x2f);
1359 const GUID TID_D3DRMLightRange = DEFINE_GUID!(0xaed22742, 0xb31f, 0x11cf, 0x9d, 0xd5, 0x0, 0xaa, 0x0, 0xa7, 0x1a, 0x2f);
1360 const GUID TID_D3DRMLightPenumbra = DEFINE_GUID!(0xaed22741, 0xb31f, 0x11cf, 0x9d, 0xd5, 0x0, 0xaa, 0x0, 0xa7, 0x1a, 0x2f);
1361 const GUID TID_D3DRMLightAttenuation = DEFINE_GUID!(0xa8a98ba0, 0xc5e5, 0x11cf, 0xb9, 0x41, 0x0, 0x80, 0xc8, 0xc, 0xfa, 0x7b);
1362 const GUID TID_D3DRMInlineData = DEFINE_GUID!(0x3a23eea0, 0x94b1, 0x11d0, 0xab, 0x39, 0x0, 0x20, 0xaf, 0x71, 0xe4, 0x33);
1363 const GUID TID_D3DRMUrl = DEFINE_GUID!(0x3a23eea1, 0x94b1, 0x11d0, 0xab, 0x39, 0x0, 0x20, 0xaf, 0x71, 0xe4, 0x33);
1364 const GUID TID_D3DRMProgressiveMesh = DEFINE_GUID!(0x8A63C360, 0x997D, 0x11d0, 0x94, 0x1C, 0x0, 0x80, 0xC8, 0x0C, 0xFA, 0x7B);
1365 const GUID TID_D3DRMExternalVisual = DEFINE_GUID!(0x98116AA0, 0xBDBA, 0x11d1, 0x82, 0xC0, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x71);
1366 const GUID TID_D3DRMStringProperty = DEFINE_GUID!(0x7f0f21e0, 0xbfe1, 0x11d1, 0x82, 0xc0, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x71);
1367 const GUID TID_D3DRMPropertyBag = DEFINE_GUID!(0x7f0f21e1, 0xbfe1, 0x11d1, 0x82, 0xc0, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x71);
1368 const GUID TID_D3DRMRightHanded = DEFINE_GUID!(0x7f5d5ea0, 0xd53a, 0x11d1, 0x82, 0xc0, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x71);
1369
1370 ubyte D3DRM_XTEMPLATES[] =
1371 [
1372 0x78, 0x6f, 0x66, 0x20, 0x30, 0x33, 0x30, 0x32, 0x62,
1373 0x69, 0x6e, 0x20, 0x30, 0x30, 0x36, 0x34, 0x1f, 0, 0x1,
1374 0, 0x6, 0, 0, 0, 0x48, 0x65, 0x61, 0x64, 0x65,
1375 0x72, 0xa, 0, 0x5, 0, 0x43, 0xab, 0x82, 0x3d, 0xda,
1376 0x62, 0xcf, 0x11, 0xab, 0x39, 0, 0x20, 0xaf, 0x71, 0xe4,
1377 0x33, 0x28, 0, 0x1, 0, 0x5, 0, 0, 0, 0x6d,
1378 0x61, 0x6a, 0x6f, 0x72, 0x14, 0, 0x28, 0, 0x1, 0,
1379 0x5, 0, 0, 0, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x14,
1380 0, 0x29, 0, 0x1, 0, 0x5, 0, 0, 0, 0x66,
1381 0x6c, 0x61, 0x67, 0x73, 0x14, 0, 0xb, 0, 0x1f, 0,
1382 0x1, 0, 0x6, 0, 0, 0, 0x56, 0x65, 0x63, 0x74,
1383 0x6f, 0x72, 0xa, 0, 0x5, 0, 0x5e, 0xab, 0x82, 0x3d,
1384 0xda, 0x62, 0xcf, 0x11, 0xab, 0x39, 0, 0x20, 0xaf, 0x71,
1385 0xe4, 0x33, 0x2a, 0, 0x1, 0, 0x1, 0, 0, 0,
1386 0x78, 0x14, 0, 0x2a, 0, 0x1, 0, 0x1, 0, 0,
1387 0, 0x79, 0x14, 0, 0x2a, 0, 0x1, 0, 0x1, 0,
1388 0, 0, 0x7a, 0x14, 0, 0xb, 0, 0x1f, 0, 0x1,
1389 0, 0x8, 0, 0, 0, 0x43, 0x6f, 0x6f, 0x72, 0x64,
1390 0x73, 0x32, 0x64, 0xa, 0, 0x5, 0, 0x44, 0x3f, 0xf2,
1391 0xf6, 0x86, 0x76, 0xcf, 0x11, 0x8f, 0x52, 0, 0x40, 0x33,
1392 0x35, 0x94, 0xa3, 0x2a, 0, 0x1, 0, 0x1, 0, 0,
1393 0, 0x75, 0x14, 0, 0x2a, 0, 0x1, 0, 0x1, 0,
1394 0, 0, 0x76, 0x14, 0, 0xb, 0, 0x1f, 0, 0x1,
1395 0, 0x9, 0, 0, 0, 0x4d, 0x61, 0x74, 0x72, 0x69,
1396 0x78, 0x34, 0x78, 0x34, 0xa, 0, 0x5, 0, 0x45, 0x3f,
1397 0xf2, 0xf6, 0x86, 0x76, 0xcf, 0x11, 0x8f, 0x52, 0, 0x40,
1398 0x33, 0x35, 0x94, 0xa3, 0x34, 0, 0x2a, 0, 0x1, 0,
1399 0x6, 0, 0, 0, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78,
1400 0xe, 0, 0x3, 0, 0x10, 0, 0, 0, 0xf, 0,
1401 0x14, 0, 0xb, 0, 0x1f, 0, 0x1, 0, 0x9, 0,
1402 0, 0, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x52, 0x47, 0x42,
1403 0x41, 0xa, 0, 0x5, 0, 0xe0, 0x44, 0xff, 0x35, 0x7c,
1404 0x6c, 0xcf, 0x11, 0x8f, 0x52, 0, 0x40, 0x33, 0x35, 0x94,
1405 0xa3, 0x2a, 0, 0x1, 0, 0x3, 0, 0, 0, 0x72,
1406 0x65, 0x64, 0x14, 0, 0x2a, 0, 0x1, 0, 0x5, 0,
1407 0, 0, 0x67, 0x72, 0x65, 0x65, 0x6e, 0x14, 0, 0x2a,
1408 0, 0x1, 0, 0x4, 0, 0, 0, 0x62, 0x6c, 0x75,
1409 0x65, 0x14, 0, 0x2a, 0, 0x1, 0, 0x5, 0, 0,
1410 0, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x14, 0, 0xb, 0,
1411 0x1f, 0, 0x1, 0, 0x8, 0, 0, 0, 0x43, 0x6f,
1412 0x6c, 0x6f, 0x72, 0x52, 0x47, 0x42, 0xa, 0, 0x5, 0,
1413 0x81, 0x6e, 0xe1, 0xd3, 0x35, 0x78, 0xcf, 0x11, 0x8f, 0x52,
1414 0, 0x40, 0x33, 0x35, 0x94, 0xa3, 0x2a, 0, 0x1, 0,
1415 0x3, 0, 0, 0, 0x72, 0x65, 0x64, 0x14, 0, 0x2a,
1416 0, 0x1, 0, 0x5, 0, 0, 0, 0x67, 0x72, 0x65,
1417 0x65, 0x6e, 0x14, 0, 0x2a, 0, 0x1, 0, 0x4, 0,
1418 0, 0, 0x62, 0x6c, 0x75, 0x65, 0x14, 0, 0xb, 0,
1419 0x1f, 0, 0x1, 0, 0xc, 0, 0, 0, 0x49, 0x6e,
1420 0x64, 0x65, 0x78, 0x65, 0x64, 0x43, 0x6f, 0x6c, 0x6f, 0x72,
1421 0xa, 0, 0x5, 0, 0x20, 0xb8, 0x30, 0x16, 0x42, 0x78,
1422 0xcf, 0x11, 0x8f, 0x52, 0, 0x40, 0x33, 0x35, 0x94, 0xa3,
1423 0x29, 0, 0x1, 0, 0x5, 0, 0, 0, 0x69, 0x6e,
1424 0x64, 0x65, 0x78, 0x14, 0, 0x1, 0, 0x9, 0, 0,
1425 0, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x52, 0x47, 0x42, 0x41,
1426 0x1, 0, 0xa, 0, 0, 0, 0x69, 0x6e, 0x64, 0x65,
1427 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x14, 0, 0xb, 0,
1428 0x1f, 0, 0x1, 0, 0x7, 0, 0, 0, 0x42, 0x6f,
1429 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0xa, 0, 0x5, 0, 0xa0,
1430 0xa6, 0x7d, 0x53, 0x37, 0xca, 0xd0, 0x11, 0x94, 0x1c, 0,
1431 0x80, 0xc8, 0xc, 0xfa, 0x7b, 0x29, 0, 0x1, 0, 0x9,
1432 0, 0, 0, 0x74, 0x72, 0x75, 0x65, 0x66, 0x61, 0x6c,
1433 0x73, 0x65, 0x14, 0, 0xb, 0, 0x1f, 0, 0x1, 0,
1434 0x9, 0, 0, 0, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61,
1435 0x6e, 0x32, 0x64, 0xa, 0, 0x5, 0, 0x63, 0xae, 0x85,
1436 0x48, 0xe8, 0x78, 0xcf, 0x11, 0x8f, 0x52, 0, 0x40, 0x33,
1437 0x35, 0x94, 0xa3, 0x1, 0, 0x7, 0, 0, 0, 0x42,
1438 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x1, 0, 0x1, 0,
1439 0, 0, 0x75, 0x14, 0, 0x1, 0, 0x7, 0, 0,
1440 0, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x1, 0,
1441 0x1, 0, 0, 0, 0x76, 0x14, 0, 0xb, 0, 0x1f,
1442 0, 0x1, 0, 0xc, 0, 0, 0, 0x4d, 0x61, 0x74,
1443 0x65, 0x72, 0x69, 0x61, 0x6c, 0x57, 0x72, 0x61, 0x70, 0xa,
1444 0, 0x5, 0, 0x60, 0xae, 0x85, 0x48, 0xe8, 0x78, 0xcf,
1445 0x11, 0x8f, 0x52, 0, 0x40, 0x33, 0x35, 0x94, 0xa3, 0x1,
1446 0, 0x7, 0, 0, 0, 0x42, 0x6f, 0x6f, 0x6c, 0x65,
1447 0x61, 0x6e, 0x1, 0, 0x1, 0, 0, 0, 0x75, 0x14,
1448 0, 0x1, 0, 0x7, 0, 0, 0, 0x42, 0x6f, 0x6f,
1449 0x6c, 0x65, 0x61, 0x6e, 0x1, 0, 0x1, 0, 0, 0,
1450 0x76, 0x14, 0, 0xb, 0, 0x1f, 0, 0x1, 0, 0xf,
1451 0, 0, 0, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65,
1452 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0xa, 0,
1453 0x5, 0, 0xe1, 0x90, 0x27, 0xa4, 0x10, 0x78, 0xcf, 0x11,
1454 0x8f, 0x52, 0, 0x40, 0x33, 0x35, 0x94, 0xa3, 0x31, 0,
1455 0x1, 0, 0x8, 0, 0, 0, 0x66, 0x69, 0x6c, 0x65,
1456 0x6e, 0x61, 0x6d, 0x65, 0x14, 0, 0xb, 0, 0x1f, 0,
1457 0x1, 0, 0x8, 0, 0, 0, 0x4d, 0x61, 0x74, 0x65,
1458 0x72, 0x69, 0x61, 0x6c, 0xa, 0, 0x5, 0, 0x4d, 0xab,
1459 0x82, 0x3d, 0xda, 0x62, 0xcf, 0x11, 0xab, 0x39, 0, 0x20,
1460 0xaf, 0x71, 0xe4, 0x33, 0x1, 0, 0x9, 0, 0, 0,
1461 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x52, 0x47, 0x42, 0x41, 0x1,
1462 0, 0x9, 0, 0, 0, 0x66, 0x61, 0x63, 0x65, 0x43,
1463 0x6f, 0x6c, 0x6f, 0x72, 0x14, 0, 0x2a, 0, 0x1, 0,
1464 0x5, 0, 0, 0, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x14,
1465 0, 0x1, 0, 0x8, 0, 0, 0, 0x43, 0x6f, 0x6c,
1466 0x6f, 0x72, 0x52, 0x47, 0x42, 0x1, 0, 0xd, 0, 0,
1467 0, 0x73, 0x70, 0x65, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x43,
1468 0x6f, 0x6c, 0x6f, 0x72, 0x14, 0, 0x1, 0, 0x8, 0,
1469 0, 0, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x52, 0x47, 0x42,
1470 0x1, 0, 0xd, 0, 0, 0, 0x65, 0x6d, 0x69, 0x73,
1471 0x73, 0x69, 0x76, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x14,
1472 0, 0xe, 0, 0x12, 0, 0x12, 0, 0x12, 0, 0xf,
1473 0, 0xb, 0, 0x1f, 0, 0x1, 0, 0x8, 0, 0,
1474 0, 0x4d, 0x65, 0x73, 0x68, 0x46, 0x61, 0x63, 0x65, 0xa,
1475 0, 0x5, 0, 0x5f, 0xab, 0x82, 0x3d, 0xda, 0x62, 0xcf,
1476 0x11, 0xab, 0x39, 0, 0x20, 0xaf, 0x71, 0xe4, 0x33, 0x29,
1477 0, 0x1, 0, 0x12, 0, 0, 0, 0x6e, 0x46, 0x61,
1478 0x63, 0x65, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x49, 0x6e,
1479 0x64, 0x69, 0x63, 0x65, 0x73, 0x14, 0, 0x34, 0, 0x29,
1480 0, 0x1, 0, 0x11, 0, 0, 0, 0x66, 0x61, 0x63,
1481 0x65, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x49, 0x6e, 0x64,
1482 0x69, 0x63, 0x65, 0x73, 0xe, 0, 0x1, 0, 0x12, 0,
1483 0, 0, 0x6e, 0x46, 0x61, 0x63, 0x65, 0x56, 0x65, 0x72,
1484 0x74, 0x65, 0x78, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73,
1485 0xf, 0, 0x14, 0, 0xb, 0, 0x1f, 0, 0x1, 0,
1486 0xd, 0, 0, 0, 0x4d, 0x65, 0x73, 0x68, 0x46, 0x61,
1487 0x63, 0x65, 0x57, 0x72, 0x61, 0x70, 0x73, 0xa, 0, 0x5,
1488 0, 0xc0, 0xc5, 0x1e, 0xed, 0xa8, 0xc0, 0xd0, 0x11, 0x94,
1489 0x1c, 0, 0x80, 0xc8, 0xc, 0xfa, 0x7b, 0x29, 0, 0x1,
1490 0, 0xf, 0, 0, 0, 0x6e, 0x46, 0x61, 0x63, 0x65,
1491 0x57, 0x72, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73,
1492 0x14, 0, 0x34, 0, 0x1, 0, 0x9, 0, 0, 0,
1493 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x32, 0x64, 0x1,
1494 0, 0xe, 0, 0, 0, 0x66, 0x61, 0x63, 0x65, 0x57,
1495 0x72, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0xe,
1496 0, 0x1, 0, 0xf, 0, 0, 0, 0x6e, 0x46, 0x61,
1497 0x63, 0x65, 0x57, 0x72, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75,
1498 0x65, 0x73, 0xf, 0, 0x14, 0, 0xb, 0, 0x1f, 0,
1499 0x1, 0, 0x11, 0, 0, 0, 0x4d, 0x65, 0x73, 0x68,
1500 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x6f,
1501 0x72, 0x64, 0x73, 0xa, 0, 0x5, 0, 0x40, 0x3f, 0xf2,
1502 0xf6, 0x86, 0x76, 0xcf, 0x11, 0x8f, 0x52, 0, 0x40, 0x33,
1503 0x35, 0x94, 0xa3, 0x29, 0, 0x1, 0, 0xe, 0, 0,
1504 0, 0x6e, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x43,
1505 0x6f, 0x6f, 0x72, 0x64, 0x73, 0x14, 0, 0x34, 0, 0x1,
1506 0, 0x8, 0, 0, 0, 0x43, 0x6f, 0x6f, 0x72, 0x64,
1507 0x73, 0x32, 0x64, 0x1, 0, 0xd, 0, 0, 0, 0x74,
1508 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x6f, 0x72,
1509 0x64, 0x73, 0xe, 0, 0x1, 0, 0xe, 0, 0, 0,
1510 0x6e, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x43, 0x6f,
1511 0x6f, 0x72, 0x64, 0x73, 0xf, 0, 0x14, 0, 0xb, 0,
1512 0x1f, 0, 0x1, 0, 0x10, 0, 0, 0, 0x4d, 0x65,
1513 0x73, 0x68, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c,
1514 0x4c, 0x69, 0x73, 0x74, 0xa, 0, 0x5, 0, 0x42, 0x3f,
1515 0xf2, 0xf6, 0x86, 0x76, 0xcf, 0x11, 0x8f, 0x52, 0, 0x40,
1516 0x33, 0x35, 0x94, 0xa3, 0x29, 0, 0x1, 0, 0xa, 0,
1517 0, 0, 0x6e, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61,
1518 0x6c, 0x73, 0x14, 0, 0x29, 0, 0x1, 0, 0xc, 0,
1519 0, 0, 0x6e, 0x46, 0x61, 0x63, 0x65, 0x49, 0x6e, 0x64,
1520 0x65, 0x78, 0x65, 0x73, 0x14, 0, 0x34, 0, 0x29, 0,
1521 0x1, 0, 0xb, 0, 0, 0, 0x66, 0x61, 0x63, 0x65,
1522 0x49, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0xe, 0, 0x1,
1523 0, 0xc, 0, 0, 0, 0x6e, 0x46, 0x61, 0x63, 0x65,
1524 0x49, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0xf, 0, 0x14,
1525 0, 0xe, 0, 0x1, 0, 0x8, 0, 0, 0, 0x4d,
1526 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0xf, 0, 0xb,
1527 0, 0x1f, 0, 0x1, 0, 0xb, 0, 0, 0, 0x4d,
1528 0x65, 0x73, 0x68, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x73,
1529 0xa, 0, 0x5, 0, 0x43, 0x3f, 0xf2, 0xf6, 0x86, 0x76,
1530 0xcf, 0x11, 0x8f, 0x52, 0, 0x40, 0x33, 0x35, 0x94, 0xa3,
1531 0x29, 0, 0x1, 0, 0x8, 0, 0, 0, 0x6e, 0x4e,
1532 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x73, 0x14, 0, 0x34, 0,
1533 0x1, 0, 0x6, 0, 0, 0, 0x56, 0x65, 0x63, 0x74,
1534 0x6f, 0x72, 0x1, 0, 0x7, 0, 0, 0, 0x6e, 0x6f,
1535 0x72, 0x6d, 0x61, 0x6c, 0x73, 0xe, 0, 0x1, 0, 0x8,
1536 0, 0, 0, 0x6e, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c,
1537 0x73, 0xf, 0, 0x14, 0, 0x29, 0, 0x1, 0, 0xc,
1538 0, 0, 0, 0x6e, 0x46, 0x61, 0x63, 0x65, 0x4e, 0x6f,
1539 0x72, 0x6d, 0x61, 0x6c, 0x73, 0x14, 0, 0x34, 0, 0x1,
1540 0, 0x8, 0, 0, 0, 0x4d, 0x65, 0x73, 0x68, 0x46,
1541 0x61, 0x63, 0x65, 0x1, 0, 0xb, 0, 0, 0, 0x66,
1542 0x61, 0x63, 0x65, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x73,
1543 0xe, 0, 0x1, 0, 0xc, 0, 0, 0, 0x6e, 0x46,
1544 0x61, 0x63, 0x65, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x73,
1545 0xf, 0, 0x14, 0, 0xb, 0, 0x1f, 0, 0x1, 0,
1546 0x10, 0, 0, 0, 0x4d, 0x65, 0x73, 0x68, 0x56, 0x65,
1547 0x72, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x73,
1548 0xa, 0, 0x5, 0, 0x21, 0xb8, 0x30, 0x16, 0x42, 0x78,
1549 0xcf, 0x11, 0x8f, 0x52, 0, 0x40, 0x33, 0x35, 0x94, 0xa3,
1550 0x29, 0, 0x1, 0, 0xd, 0, 0, 0, 0x6e, 0x56,
1551 0x65, 0x72, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72,
1552 0x73, 0x14, 0, 0x34, 0, 0x1, 0, 0xc, 0, 0,
1553 0, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x64, 0x43, 0x6f,
1554 0x6c, 0x6f, 0x72, 0x1, 0, 0xc, 0, 0, 0, 0x76,
1555 0x65, 0x72, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72,
1556 0x73, 0xe, 0, 0x1, 0, 0xd, 0, 0, 0, 0x6e,
1557 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f,
1558 0x72, 0x73, 0xf, 0, 0x14, 0, 0xb, 0, 0x1f, 0,
1559 0x1, 0, 0x4, 0, 0, 0, 0x4d, 0x65, 0x73, 0x68,
1560 0xa, 0, 0x5, 0, 0x44, 0xab, 0x82, 0x3d, 0xda, 0x62,
1561 0xcf, 0x11, 0xab, 0x39, 0, 0x20, 0xaf, 0x71, 0xe4, 0x33,
1562 0x29, 0, 0x1, 0, 0x9, 0, 0, 0, 0x6e, 0x56,
1563 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0x14, 0, 0x34,
1564 0, 0x1, 0, 0x6, 0, 0, 0, 0x56, 0x65, 0x63,
1565 0x74, 0x6f, 0x72, 0x1, 0, 0x8, 0, 0, 0, 0x76,
1566 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0xe, 0, 0x1,
1567 0, 0x9, 0, 0, 0, 0x6e, 0x56, 0x65, 0x72, 0x74,
1568 0x69, 0x63, 0x65, 0x73, 0xf, 0, 0x14, 0, 0x29, 0,
1569 0x1, 0, 0x6, 0, 0, 0, 0x6e, 0x46, 0x61, 0x63,
1570 0x65, 0x73, 0x14, 0, 0x34, 0, 0x1, 0, 0x8, 0,
1571 0, 0, 0x4d, 0x65, 0x73, 0x68, 0x46, 0x61, 0x63, 0x65,
1572 0x1, 0, 0x5, 0, 0, 0, 0x66, 0x61, 0x63, 0x65,
1573 0x73, 0xe, 0, 0x1, 0, 0x6, 0, 0, 0, 0x6e,
1574 0x46, 0x61, 0x63, 0x65, 0x73, 0xf, 0, 0x14, 0, 0xe,
1575 0, 0x12, 0, 0x12, 0, 0x12, 0, 0xf, 0, 0xb,
1576 0, 0x1f, 0, 0x1, 0, 0x14, 0, 0, 0, 0x46,
1577 0x72, 0x61, 0x6d, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66,
1578 0x6f, 0x72, 0x6d, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0xa,
1579 0, 0x5, 0, 0x41, 0x3f, 0xf2, 0xf6, 0x86, 0x76, 0xcf,
1580 0x11, 0x8f, 0x52, 0, 0x40, 0x33, 0x35, 0x94, 0xa3, 0x1,
1581 0, 0x9, 0, 0, 0, 0x4d, 0x61, 0x74, 0x72, 0x69,
1582 0x78, 0x34, 0x78, 0x34, 0x1, 0, 0xb, 0, 0, 0,
1583 0x66, 0x72, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69,
1584 0x78, 0x14, 0, 0xb, 0, 0x1f, 0, 0x1, 0, 0x5,
1585 0, 0, 0, 0x46, 0x72, 0x61, 0x6d, 0x65, 0xa, 0,
1586 0x5, 0, 0x46, 0xab, 0x82, 0x3d, 0xda, 0x62, 0xcf, 0x11,
1587 0xab, 0x39, 0, 0x20, 0xaf, 0x71, 0xe4, 0x33, 0xe, 0,
1588 0x12, 0, 0x12, 0, 0x12, 0, 0xf, 0, 0xb, 0,
1589 0x1f, 0, 0x1, 0, 0x9, 0, 0, 0, 0x46, 0x6c,
1590 0x6f, 0x61, 0x74, 0x4b, 0x65, 0x79, 0x73, 0xa, 0, 0x5,
1591 0, 0xa9, 0x46, 0xdd, 0x10, 0x5b, 0x77, 0xcf, 0x11, 0x8f,
1592 0x52, 0, 0x40, 0x33, 0x35, 0x94, 0xa3, 0x29, 0, 0x1,
1593 0, 0x7, 0, 0, 0, 0x6e, 0x56, 0x61, 0x6c, 0x75,
1594 0x65, 0x73, 0x14, 0, 0x34, 0, 0x2a, 0, 0x1, 0,
1595 0x6, 0, 0, 0, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73,
1596 0xe, 0, 0x1, 0, 0x7, 0, 0, 0, 0x6e, 0x56,
1597 0x61, 0x6c, 0x75, 0x65, 0x73, 0xf, 0, 0x14, 0, 0xb,
1598 0, 0x1f, 0, 0x1, 0, 0xe, 0, 0, 0, 0x54,
1599 0x69, 0x6d, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x4b,
1600 0x65, 0x79, 0x73, 0xa, 0, 0x5, 0, 0x80, 0xb1, 0x6,
1601 0xf4, 0x3b, 0x7b, 0xcf, 0x11, 0x8f, 0x52, 0, 0x40, 0x33,
1602 0x35, 0x94, 0xa3, 0x29, 0, 0x1, 0, 0x4, 0, 0,
1603 0, 0x74, 0x69, 0x6d, 0x65, 0x14, 0, 0x1, 0, 0x9,
1604 0, 0, 0, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x4b, 0x65,
1605 0x79, 0x73, 0x1, 0, 0x6, 0, 0, 0, 0x74, 0x66,
1606 0x6b, 0x65, 0x79, 0x73, 0x14, 0, 0xb, 0, 0x1f, 0,
1607 0x1, 0, 0xc, 0, 0, 0, 0x41, 0x6e, 0x69, 0x6d,
1608 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0xa, 0,
1609 0x5, 0, 0xa8, 0x46, 0xdd, 0x10, 0x5b, 0x77, 0xcf, 0x11,
1610 0x8f, 0x52, 0, 0x40, 0x33, 0x35, 0x94, 0xa3, 0x29, 0,
1611 0x1, 0, 0x7, 0, 0, 0, 0x6b, 0x65, 0x79, 0x54,
1612 0x79, 0x70, 0x65, 0x14, 0, 0x29, 0, 0x1, 0, 0x5,
1613 0, 0, 0, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x14, 0,
1614 0x34, 0, 0x1, 0, 0xe, 0, 0, 0, 0x54, 0x69,
1615 0x6d, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x4b, 0x65,
1616 0x79, 0x73, 0x1, 0, 0x4, 0, 0, 0, 0x6b, 0x65,
1617 0x79, 0x73, 0xe, 0, 0x1, 0, 0x5, 0, 0, 0,
1618 0x6e, 0x4b, 0x65, 0x79, 0x73, 0xf, 0, 0x14, 0, 0xb,
1619 0, 0x1f, 0, 0x1, 0, 0x10, 0, 0, 0, 0x41,
1620 0x6e, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70,
1621 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xa, 0, 0x5, 0, 0xc0,
1622 0x56, 0xbf, 0xe2, 0xf, 0x84, 0xcf, 0x11, 0x8f, 0x52, 0,
1623 0x40, 0x33, 0x35, 0x94, 0xa3, 0x29, 0, 0x1, 0, 0xa,
1624 0, 0, 0, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6c, 0x6f,
1625 0x73, 0x65, 0x64, 0x14, 0, 0x29, 0, 0x1, 0, 0xf,
1626 0, 0, 0, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f,
1627 0x6e, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x14, 0,
1628 0xb, 0, 0x1f, 0, 0x1, 0, 0x9, 0, 0, 0,
1629 0x41, 0x6e, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xa,
1630 0, 0x5, 0, 0x4f, 0xab, 0x82, 0x3d, 0xda, 0x62, 0xcf,
1631 0x11, 0xab, 0x39, 0, 0x20, 0xaf, 0x71, 0xe4, 0x33, 0xe,
1632 0, 0x12, 0, 0x12, 0, 0x12, 0, 0xf, 0, 0xb,
1633 0, 0x1f, 0, 0x1, 0, 0xc, 0, 0, 0, 0x41,
1634 0x6e, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65,
1635 0x74, 0xa, 0, 0x5, 0, 0x50, 0xab, 0x82, 0x3d, 0xda,
1636 0x62, 0xcf, 0x11, 0xab, 0x39, 0, 0x20, 0xaf, 0x71, 0xe4,
1637 0x33, 0xe, 0, 0x1, 0, 0x9, 0, 0, 0, 0x41,
1638 0x6e, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xf, 0,
1639 0xb, 0, 0x1f, 0, 0x1, 0, 0xa, 0, 0, 0,
1640 0x49, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x61, 0x74, 0x61,
1641 0xa, 0, 0x5, 0, 0xa0, 0xee, 0x23, 0x3a, 0xb1, 0x94,
1642 0xd0, 0x11, 0xab, 0x39, 0, 0x20, 0xaf, 0x71, 0xe4, 0x33,
1643 0xe, 0, 0x1, 0, 0x6, 0, 0, 0, 0x42, 0x49,
1644 0x4e, 0x41, 0x52, 0x59, 0xf, 0, 0xb, 0, 0x1f, 0,
1645 0x1, 0, 0x3, 0, 0, 0, 0x55, 0x72, 0x6c, 0xa,
1646 0, 0x5, 0, 0xa1, 0xee, 0x23, 0x3a, 0xb1, 0x94, 0xd0,
1647 0x11, 0xab, 0x39, 0, 0x20, 0xaf, 0x71, 0xe4, 0x33, 0x29,
1648 0, 0x1, 0, 0x5, 0, 0, 0, 0x6e, 0x55, 0x72,
1649 0x6c, 0x73, 0x14, 0, 0x34, 0, 0x31, 0, 0x1, 0,
1650 0x4, 0, 0, 0, 0x75, 0x72, 0x6c, 0x73, 0xe, 0,
1651 0x1, 0, 0x5, 0, 0, 0, 0x6e, 0x55, 0x72, 0x6c,
1652 0x73, 0xf, 0, 0x14, 0, 0xb, 0, 0x1f, 0, 0x1,
1653 0, 0xf, 0, 0, 0, 0x50, 0x72, 0x6f, 0x67, 0x72,
1654 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x4d, 0x65, 0x73, 0x68,
1655 0xa, 0, 0x5, 0, 0x60, 0xc3, 0x63, 0x8a, 0x7d, 0x99,
1656 0xd0, 0x11, 0x94, 0x1c, 0, 0x80, 0xc8, 0xc, 0xfa, 0x7b,
1657 0xe, 0, 0x1, 0, 0x3, 0, 0, 0, 0x55, 0x72,
1658 0x6c, 0x13, 0, 0x1, 0, 0xa, 0, 0, 0, 0x49,
1659 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x61, 0x74, 0x61, 0xf,
1660 0, 0xb, 0, 0x1f, 0, 0x1, 0, 0x4, 0, 0,
1661 0, 0x47, 0x75, 0x69, 0x64, 0xa, 0, 0x5, 0, 0xe0,
1662 0x90, 0x27, 0xa4, 0x10, 0x78, 0xcf, 0x11, 0x8f, 0x52, 0,
1663 0x40, 0x33, 0x35, 0x94, 0xa3, 0x29, 0, 0x1, 0, 0x5,
1664 0, 0, 0, 0x64, 0x61, 0x74, 0x61, 0x31, 0x14, 0,
1665 0x28, 0, 0x1, 0, 0x5, 0, 0, 0, 0x64, 0x61,
1666 0x74, 0x61, 0x32, 0x14, 0, 0x28, 0, 0x1, 0, 0x5,
1667 0, 0, 0, 0x64, 0x61, 0x74, 0x61, 0x33, 0x14, 0,
1668 0x34, 0, 0x2d, 0, 0x1, 0, 0x5, 0, 0, 0,
1669 0x64, 0x61, 0x74, 0x61, 0x34, 0xe, 0, 0x3, 0, 0x8,
1670 0, 0, 0, 0xf, 0, 0x14, 0, 0xb, 0, 0x1f,
1671 0, 0x1, 0, 0xe, 0, 0, 0, 0x53, 0x74, 0x72,
1672 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
1673 0x79, 0xa, 0, 0x5, 0, 0xe0, 0x21, 0xf, 0x7f, 0xe1,
1674 0xbf, 0xd1, 0x11, 0x82, 0xc0, 0, 0xa0, 0xc9, 0x69, 0x72,
1675 0x71, 0x31, 0, 0x1, 0, 0x3, 0, 0, 0, 0x6b,
1676 0x65, 0x79, 0x14, 0, 0x31, 0, 0x1, 0, 0x5, 0,
1677 0, 0, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x14, 0, 0xb,
1678 0, 0x1f, 0, 0x1, 0, 0xb, 0, 0, 0, 0x50,
1679 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x42, 0x61, 0x67,
1680 0xa, 0, 0x5, 0, 0xe1, 0x21, 0xf, 0x7f, 0xe1, 0xbf,
1681 0xd1, 0x11, 0x82, 0xc0, 0, 0xa0, 0xc9, 0x69, 0x72, 0x71,
1682 0xe, 0, 0x1, 0, 0xe, 0, 0, 0, 0x53, 0x74,
1683 0x72, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72,
1684 0x74, 0x79, 0xf, 0, 0xb, 0, 0x1f, 0, 0x1, 0,
1685 0xe, 0, 0, 0, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e,
1686 0x61, 0x6c, 0x56, 0x69, 0x73, 0x75, 0x61, 0x6c, 0xa, 0,
1687 0x5, 0, 0xa0, 0x6a, 0x11, 0x98, 0xba, 0xbd, 0xd1, 0x11,
1688 0x82, 0xc0, 0, 0xa0, 0xc9, 0x69, 0x72, 0x71, 0x1, 0,
1689 0x4, 0, 0, 0, 0x47, 0x75, 0x69, 0x64, 0x1, 0,
1690 0x12, 0, 0, 0, 0x67, 0x75, 0x69, 0x64, 0x45, 0x78,
1691 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x56, 0x69, 0x73, 0x75,
1692 0x61, 0x6c, 0x14, 0, 0xe, 0, 0x12, 0, 0x12, 0,
1693 0x12, 0, 0xf, 0, 0xb, 0, 0x1f, 0, 0x1, 0,
1694 0xb, 0, 0, 0, 0x52, 0x69, 0x67, 0x68, 0x74, 0x48,
1695 0x61, 0x6e, 0x64, 0x65, 0x64, 0xa, 0, 0x5, 0, 0xa0,
1696 0x5e, 0x5d, 0x7f, 0x3a, 0xd5, 0xd1, 0x11, 0x82, 0xc0, 0,
1697 0xa0, 0xc9, 0x69, 0x72, 0x71, 0x29, 0, 0x1, 0, 0xc,
1698 0, 0, 0, 0x62, 0x52, 0x69, 0x67, 0x68, 0x74, 0x48,
1699 0x61, 0x6e, 0x64, 0x65, 0x64, 0x14, 0, 0xb, 0
1700 ];
1701
1702 const GUID DXFILEOBJ_XSkinMeshHeader = DEFINE_GUID!(0x3cf169ce, 0xff7c, 0x44ab, 0x93, 0xc0, 0xf7, 0x8f, 0x62, 0xd1, 0x72, 0xe2);
1703 const GUID DXFILEOBJ_VertexDuplicationIndices = DEFINE_GUID!(0xb8d65549, 0xd7c9, 0x4995, 0x89, 0xcf, 0x53, 0xa9, 0xa8, 0xb0, 0x31, 0xe3);
1704 const GUID DXFILEOBJ_FaceAdjacency = DEFINE_GUID!(0xa64c844a, 0xe282, 0x4756, 0x8b, 0x80, 0x25, 0xc, 0xde, 0x4, 0x39, 0x8c);
1705 const GUID DXFILEOBJ_SkinWeights = DEFINE_GUID!(0x6f0d123b, 0xbad2, 0x4167, 0xa0, 0xd0, 0x80, 0x22, 0x4f, 0x25, 0xfa, 0xbb);
1706 const GUID DXFILEOBJ_Patch = DEFINE_GUID!(0xa3eb5d44, 0xfc22, 0x429d, 0x9a, 0xfb, 0x32, 0x21, 0xcb, 0x97, 0x19, 0xa6);
1707 const GUID DXFILEOBJ_PatchMesh = DEFINE_GUID!(0xd02c95cc, 0xedba, 0x4305, 0x9b, 0x5d, 0x18, 0x20, 0xd7, 0x70, 0x4b, 0xbf);
1708 const GUID DXFILEOBJ_PatchMesh9 = DEFINE_GUID!(0xb9ec94e1, 0xb9a6, 0x4251, 0xba, 0x18, 0x94, 0x89, 0x3f, 0x2, 0xc0, 0xea);
1709 const GUID DXFILEOBJ_PMInfo = DEFINE_GUID!(0xb6c3e656, 0xec8b, 0x4b92, 0x9b, 0x62, 0x68, 0x16, 0x59, 0x52, 0x29, 0x47);
1710 const GUID DXFILEOBJ_PMAttributeRange = DEFINE_GUID!(0x917e0427, 0xc61e, 0x4a14, 0x9c, 0x64, 0xaf, 0xe6, 0x5f, 0x9e, 0x98, 0x44);
1711 const GUID DXFILEOBJ_PMVSplitRecord = DEFINE_GUID!(0x574ccc14, 0xf0b3, 0x4333, 0x82, 0x2d, 0x93, 0xe8, 0xa8, 0xa0, 0x8e, 0x4c);
1712 const GUID DXFILEOBJ_FVFData = DEFINE_GUID!(0xb6e70a0e, 0x8ef9, 0x4e83, 0x94, 0xad, 0xec, 0xc8, 0xb0, 0xc0, 0x48, 0x97);
1713 const GUID DXFILEOBJ_VertexElement = DEFINE_GUID!(0xf752461c, 0x1e23, 0x48f6, 0xb9, 0xf8, 0x83, 0x50, 0x85, 0xf, 0x33, 0x6f);
1714 const GUID DXFILEOBJ_DeclData = DEFINE_GUID!(0xbf22e553, 0x292c, 0x4781, 0x9f, 0xea, 0x62, 0xbd, 0x55, 0x4b, 0xdd, 0x93);
1715 const GUID DXFILEOBJ_EffectFloats = DEFINE_GUID!(0xf1cfe2b3, 0xde3, 0x4e28, 0xaf, 0xa1, 0x15, 0x5a, 0x75, 0xa, 0x28, 0x2d);
1716 const GUID DXFILEOBJ_EffectString = DEFINE_GUID!(0xd55b097e, 0xbdb6, 0x4c52, 0xb0, 0x3d, 0x60, 0x51, 0xc8, 0x9d, 0xe, 0x42);
1717 const GUID DXFILEOBJ_EffectDWord = DEFINE_GUID!(0x622c0ed0, 0x956e, 0x4da9, 0x90, 0x8a, 0x2a, 0xf9, 0x4f, 0x3c, 0xe7, 0x16);
1718 const GUID DXFILEOBJ_EffectParamFloats = DEFINE_GUID!(0x3014b9a0, 0x62f5, 0x478c, 0x9b, 0x86, 0xe4, 0xac, 0x9f, 0x4e, 0x41, 0x8b);
1719 const GUID DXFILEOBJ_EffectParamString = DEFINE_GUID!(0x1dbc4c88, 0x94c1, 0x46ee, 0x90, 0x76, 0x2c, 0x28, 0x81, 0x8c, 0x94, 0x81);
1720 const GUID DXFILEOBJ_EffectParamDWord = DEFINE_GUID!(0xe13963bc, 0xae51, 0x4c5d, 0xb0, 0xf, 0xcf, 0xa3, 0xa9, 0xd9, 0x7c, 0xe5);
1721 const GUID DXFILEOBJ_EffectInstance = DEFINE_GUID!(0xe331f7e4, 0x559, 0x4cc2, 0x8e, 0x99, 0x1c, 0xec, 0x16, 0x57, 0x92, 0x8f);
1722 const GUID DXFILEOBJ_AnimTicksPerSecond = DEFINE_GUID!(0x9e415a43, 0x7ba6, 0x4a73, 0x87, 0x43, 0xb7, 0x3d, 0x47, 0xe8, 0x84, 0x76);
1723 const GUID DXFILEOBJ_CompressedAnimationSet = DEFINE_GUID!(0x7f9b00b3, 0xf125, 0x4890, 0x87, 0x6e, 0x1c, 0x42, 0xbf, 0x69, 0x7c, 0x4d);
1724
1725 align(1) struct XFILECOMPRESSEDANIMATIONSET
1726 {
1727 DWORD CompressedBlockSize;
1728 FLOAT TicksPerSec;
1729 DWORD PlaybackType;
1730 DWORD BufferLength;
1731 }
1732
1733 const char[] XSKINEXP_TEMPLATES =
1734 "xof 0303txt 0032
1735 template XSkinMeshHeader
1736 {
1737 <3CF169CE-FF7C-44ab-93C0-F78F62D172E2>
1738 WORD nMaxSkinWeightsPerVertex;
1739 WORD nMaxSkinWeightsPerFace;
1740 WORD nBones;
1741 }
1742 template VertexDuplicationIndices
1743 {
1744 <B8D65549-D7C9-4995-89CF-53A9A8B031E3>
1745 DWORD nIndices;
1746 DWORD nOriginalVertices;
1747 array DWORD[nIndices] indices;
1748 }
1749 template FaceAdjacency
1750 {
1751 <A64C844A-E282-4756-8B80-250CDE04398C>
1752 DWORD nIndices;
1753 array DWORD[nIndices] indices;
1754 }
1755 template SkinWeights
1756 {
1757 <6F0D123B-BAD2-4167-A0D0-80224F25FABB>
1758 STRING transformNodeName;
1759 DWORD nWeights;
1760 array DWORD[nWeights] vertexIndices;
1761 array float[nWeights] weights;
1762 Matrix4x4 matrixOffset;
1763 }
1764 template Patch
1765 {
1766 <A3EB5D44-FC22-429D-9AFB-3221CB9719A6>
1767 DWORD nControlIndices;
1768 array DWORD[nControlIndices] controlIndices;
1769 }
1770 template PatchMesh
1771 {
1772 <D02C95CC-EDBA-4305-9B5D-1820D7704BBF>
1773 DWORD nVertices;
1774 array Vector[nVertices] vertices;
1775 DWORD nPatches;
1776 array Patch[nPatches] patches;
1777 [ ... ]
1778 }
1779 template PatchMesh9
1780 {
1781 <B9EC94E1-B9A6-4251-BA18-94893F02C0EA>
1782 DWORD Type;
1783 DWORD Degree;
1784 DWORD Basis;
1785 DWORD nVertices;
1786 array Vector[nVertices] vertices;
1787 DWORD nPatches;
1788 array Patch[nPatches] patches;
1789 [ ... ]
1790 } "
1791 "template EffectFloats
1792 {
1793 <F1CFE2B3-0DE3-4e28-AFA1-155A750A282D>
1794 DWORD nFloats;
1795 array float[nFloats] Floats;
1796 }
1797 template EffectString
1798 {
1799 <D55B097E-BDB6-4c52-B03D-6051C89D0E42>
1800 STRING Value;
1801 }
1802 template EffectDWord
1803 {
1804 <622C0ED0-956E-4da9-908A-2AF94F3CE716>
1805 DWORD Value;
1806 } "
1807 "template EffectParamFloats
1808 {
1809 <3014B9A0-62F5-478c-9B86-E4AC9F4E418B>
1810 STRING ParamName;
1811 DWORD nFloats;
1812 array float[nFloats] Floats;
1813 } "
1814 "template EffectParamString
1815 {
1816 <1DBC4C88-94C1-46ee-9076-2C28818C9481>
1817 STRING ParamName;
1818 STRING Value;
1819 }
1820 template EffectParamDWord
1821 {
1822 <E13963BC-AE51-4c5d-B00F-CFA3A9D97CE5>
1823 STRING ParamName;
1824 DWORD Value;
1825 }
1826 template EffectInstance
1827 {
1828 <E331F7E4-0559-4cc2-8E99-1CEC1657928F>
1829 STRING EffectFilename;
1830 [ ... ]
1831 } "
1832 "template AnimTicksPerSecond
1833 {
1834 <9E415A43-7BA6-4a73-8743-B73D47E88476>
1835 DWORD AnimTicksPerSecond;
1836 }
1837 template CompressedAnimationSet
1838 {
1839 <7F9B00B3-F125-4890-876E-1C42BF697C4D>
1840 DWORD CompressedBlockSize;
1841 FLOAT TicksPerSec;
1842 DWORD PlaybackType;
1843 DWORD BufferLength;
1844 array DWORD[BufferLength] CompressedData;
1845 } ";
1846
1847 const char[] XEXTENSIONS_TEMPLATES =
1848 "xof 0303txt 0032
1849 template FVFData
1850 {
1851 <B6E70A0E-8EF9-4e83-94AD-ECC8B0C04897>
1852 DWORD dwFVF;
1853 DWORD nDWords;
1854 array DWORD[nDWords] data;
1855 }
1856 template VertexElement
1857 {
1858 <F752461C-1E23-48f6-B9F8-8350850F336F>
1859 DWORD Type;
1860 DWORD Method;
1861 DWORD Usage;
1862 DWORD UsageIndex;
1863 }
1864 template DeclData
1865 {
1866 <BF22E553-292C-4781-9FEA-62BD554BDD93>
1867 DWORD nElements;
1868 array VertexElement[nElements] Elements;
1869 DWORD nDWords;
1870 array DWORD[nDWords] data;
1871 }
1872 template PMAttributeRange
1873 {
1874 <917E0427-C61E-4a14-9C64-AFE65F9E9844>
1875 DWORD iFaceOffset;
1876 DWORD nFacesMin;
1877 DWORD nFacesMax;
1878 DWORD iVertexOffset;
1879 DWORD nVerticesMin;
1880 DWORD nVerticesMax;
1881 }
1882 template PMVSplitRecord
1883 {
1884 <574CCC14-F0B3-4333-822D-93E8A8A08E4C>
1885 DWORD iFaceCLW;
1886 DWORD iVlrOffset;
1887 DWORD iCode;
1888 }
1889 template PMInfo
1890 {
1891 <B6C3E656-EC8B-4b92-9B62-681659522947>
1892 DWORD nAttributes;
1893 array PMAttributeRange[nAttributes] attributeRanges;
1894 DWORD nMaxValence;
1895 DWORD nMinLogicalVertices;
1896 DWORD nMaxLogicalVertices;
1897 DWORD nVSplits;
1898 array PMVSplitRecord[nVSplits] splitRecords;
1899 DWORD nAttributeMispredicts;
1900 array DWORD[nAttributeMispredicts] attributeMispredicts;
1901 } ";
1902
1903 enum : uint
1904 {
1905 D3DXF_FILEFORMAT_BINARY = 0,
1906 D3DXF_FILEFORMAT_TEXT = 1,
1907 D3DXF_FILEFORMAT_COMPRESSED = 2
1908 }
1909 alias uint D3DXF_FILEFORMAT;
1910
1911 enum : uint
1912 {
1913 D3DXF_FILESAVE_TOFILE = 0x00L,
1914 D3DXF_FILESAVE_TOWFILE = 0x01L
1915 }
1916 alias uint D3DXF_FILESAVEOPTIONS;
1917
1918 enum : uint
1919 {
1920 D3DXF_FILELOAD_FROMFILE = 0x00L,
1921 D3DXF_FILELOAD_FROMWFILE = 0x01L,
1922 D3DXF_FILELOAD_FROMRESOURCE = 0x02L,
1923 D3DXF_FILELOAD_FROMMEMORY = 0x03L
1924 }
1925 alias uint D3DXF_FILELOADOPTIONS;
1926
1927 struct D3DXF_FILELOADRESOURCE
1928 {
1929 HMODULE hModule; // Desc
1930 LPCSTR lpName; // Desc
1931 LPCSTR lpType; // Desc
1932 }
1933
1934 struct D3DXF_FILELOADMEMORY
1935 {
1936 LPCVOID lpMemory; // Desc
1937 size_t dSize; // Desc
1938 }
1939
1940 const GUID IID_ID3DXFile = DEFINE_GUID!(0xcef08cf9, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01 );
1941 const GUID IID_ID3DXFileSaveObject = DEFINE_GUID!(0xcef08cfa, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01 );
1942 const GUID IID_ID3DXFileSaveData = DEFINE_GUID!(0xcef08cfb, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01 );
1943 const GUID IID_ID3DXFileEnumObject = DEFINE_GUID!(0xcef08cfc, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01 );
1944 const GUID IID_ID3DXFileData = DEFINE_GUID!(0xcef08cfd, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01 );
1945
1946 interface ID3DXFile : IUnknown
1947 {
1948 HRESULT CreateEnumObject(LPCVOID, D3DXF_FILELOADOPTIONS, ID3DXFileEnumObject*);
1949 HRESULT CreateSaveObject(LPCVOID, D3DXF_FILESAVEOPTIONS, D3DXF_FILEFORMAT, ID3DXFileSaveObject*);
1950 HRESULT RegisterTemplates(LPCVOID, size_t);
1951 HRESULT RegisterEnumTemplates(ID3DXFileEnumObject);
1952 }
1953
1954 interface ID3DXFileSaveObject : IUnknown
1955 {
1956 HRESULT GetFile(ID3DXFile*);
1957 HRESULT AddDataObject(GUID*, LPCSTR, GUID*, size_t, LPCVOID, ID3DXFileSaveData*);
1958 HRESULT Save();
1959 }
1960
1961 interface ID3DXFileSaveData : IUnknown
1962 {
1963 HRESULT GetSave(ID3DXFileSaveObject*);
1964 HRESULT GetName(LPSTR, size_t*);
1965 HRESULT GetId(GUID*);
1966 HRESULT GetType(GUID*);
1967 HRESULT AddDataObject(GUID*, LPCSTR, GUID*, size_t, LPCVOID, ID3DXFileSaveData*);
1968 HRESULT AddDataReference(LPCSTR, GUID* );
1969 }
1970
1971 interface ID3DXFileEnumObject : IUnknown
1972 {
1973 HRESULT GetFile(ID3DXFile*);
1974 HRESULT GetChildren(size_t*);
1975 HRESULT GetChild(size_t, ID3DXFileData*);
1976 HRESULT GetDataObjectById(REFGUID, ID3DXFileData*);
1977 HRESULT GetDataObjectByName(LPCSTR, ID3DXFileData*);
1978 }
1979
1980 interface ID3DXFileData : IUnknown
1981 {
1982 HRESULT GetEnum(ID3DXFileEnumObject*);
1983 HRESULT GetName(LPSTR, size_t*);
1984 HRESULT GetId(GUID*);
1985 HRESULT Lock(size_t*, LPCVOID*);
1986 HRESULT Unlock();
1987 HRESULT GetType(GUID*);
1988 BOOL IsReference();
1989 HRESULT GetChildren(size_t*);
1990 HRESULT GetChild(size_t, ID3DXFileData*);
1991 }