comparison win32/directx/d3dx9.d @ 1:4a9dcbd9e54f

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