/[cvs]/api/include/d3drmdef.h
ViewVC logotype

Annotation of /api/include/d3drmdef.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide annotations)
Sun Jul 1 20:47:59 2001 UTC (23 years, 4 months ago) by bearsoft
Branch point for: lazy, MAIN
File MIME type: text/plain
Initial revision

1 bearsoft 1.1 /*==========================================================================;
2     *
3     * Copyright (C) 1995-1997 Microsoft Corporation. All Rights Reserved.
4     *
5     * File: d3drm.h
6     * Content: Direct3DRM include file
7     *
8     ***************************************************************************/
9    
10     #ifndef __D3DRMDEFS_H__
11     #define __D3DRMDEFS_H__
12    
13     #include <stddef.h>
14     #include "d3dtypes.h"
15    
16     #ifdef WIN32
17     #define D3DRMAPI __stdcall
18     #else
19     #define D3DRMAPI
20     #endif
21    
22     #if defined(__cplusplus)
23     extern "C" {
24     #endif
25    
26     #ifndef TRUE
27     #define FALSE 0
28     #define TRUE 1
29     #endif
30    
31     typedef struct _D3DRMVECTOR4D
32     { D3DVALUE x, y, z, w;
33     } D3DRMVECTOR4D, *LPD3DRMVECTOR4D;
34    
35     typedef D3DVALUE D3DRMMATRIX4D[4][4];
36    
37     typedef struct _D3DRMQUATERNION
38     { D3DVALUE s;
39     D3DVECTOR v;
40     } D3DRMQUATERNION, *LPD3DRMQUATERNION;
41    
42     typedef struct _D3DRMRAY
43     { D3DVECTOR dvDir;
44     D3DVECTOR dvPos;
45     } D3DRMRAY, *LPD3DRMRAY;
46    
47     typedef struct _D3DRMBOX
48     { D3DVECTOR min, max;
49     } D3DRMBOX, *LPD3DRMBOX;
50    
51     typedef void (*D3DRMWRAPCALLBACK)
52     (LPD3DVECTOR, int* u, int* v, LPD3DVECTOR a, LPD3DVECTOR b, LPVOID);
53    
54     typedef enum _D3DRMLIGHTTYPE
55     { D3DRMLIGHT_AMBIENT,
56     D3DRMLIGHT_POINT,
57     D3DRMLIGHT_SPOT,
58     D3DRMLIGHT_DIRECTIONAL,
59     D3DRMLIGHT_PARALLELPOINT
60     } D3DRMLIGHTTYPE, *LPD3DRMLIGHTTYPE;
61    
62     typedef enum _D3DRMSHADEMODE {
63     D3DRMSHADE_FLAT = 0,
64     D3DRMSHADE_GOURAUD = 1,
65     D3DRMSHADE_PHONG = 2,
66    
67     D3DRMSHADE_MASK = 7,
68     D3DRMSHADE_MAX = 8
69     } D3DRMSHADEMODE, *LPD3DRMSHADEMODE;
70    
71     typedef enum _D3DRMLIGHTMODE {
72     D3DRMLIGHT_OFF = 0 * D3DRMSHADE_MAX,
73     D3DRMLIGHT_ON = 1 * D3DRMSHADE_MAX,
74    
75     D3DRMLIGHT_MASK = 7 * D3DRMSHADE_MAX,
76     D3DRMLIGHT_MAX = 8 * D3DRMSHADE_MAX
77     } D3DRMLIGHTMODE, *LPD3DRMLIGHTMODE;
78    
79     typedef enum _D3DRMFILLMODE {
80     D3DRMFILL_POINTS = 0 * D3DRMLIGHT_MAX,
81     D3DRMFILL_WIREFRAME = 1 * D3DRMLIGHT_MAX,
82     D3DRMFILL_SOLID = 2 * D3DRMLIGHT_MAX,
83    
84     D3DRMFILL_MASK = 7 * D3DRMLIGHT_MAX,
85     D3DRMFILL_MAX = 8 * D3DRMLIGHT_MAX
86     } D3DRMFILLMODE, *LPD3DRMFILLMODE;
87    
88     typedef DWORD D3DRMRENDERQUALITY, *LPD3DRMRENDERQUALITY;
89    
90     #define D3DRMRENDER_WIREFRAME (D3DRMSHADE_FLAT+D3DRMLIGHT_OFF+D3DRMFILL_WIREFRAME)
91     #define D3DRMRENDER_UNLITFLAT (D3DRMSHADE_FLAT+D3DRMLIGHT_OFF+D3DRMFILL_SOLID)
92     #define D3DRMRENDER_FLAT (D3DRMSHADE_FLAT+D3DRMLIGHT_ON+D3DRMFILL_SOLID)
93     #define D3DRMRENDER_GOURAUD (D3DRMSHADE_GOURAUD+D3DRMLIGHT_ON+D3DRMFILL_SOLID)
94     #define D3DRMRENDER_PHONG (D3DRMSHADE_PHONG+D3DRMLIGHT_ON+D3DRMFILL_SOLID)
95    
96     #define D3DRMRENDERMODE_BLENDEDTRANSPARENCY 1
97     #define D3DRMRENDERMODE_SORTEDTRANSPARENCY 2
98     #define D3DRMRENDERMODE_LIGHTINMODELSPACE 8
99     #define D3DRMRENDERMODE_VIEWDEPENDENTSPECULAR 16
100     #define D3DRMRENDERMODE_DISABLESORTEDALPHAZWRITE 32
101    
102     typedef enum _D3DRMTEXTUREQUALITY
103     { D3DRMTEXTURE_NEAREST, /* choose nearest texel */
104     D3DRMTEXTURE_LINEAR, /* interpolate 4 texels */
105     D3DRMTEXTURE_MIPNEAREST, /* nearest texel in nearest mipmap */
106     D3DRMTEXTURE_MIPLINEAR, /* interpolate 2 texels from 2 mipmaps */
107     D3DRMTEXTURE_LINEARMIPNEAREST, /* interpolate 4 texels in nearest mipmap */
108     D3DRMTEXTURE_LINEARMIPLINEAR /* interpolate 8 texels from 2 mipmaps */
109     } D3DRMTEXTUREQUALITY, *LPD3DRMTEXTUREQUALITY;
110    
111     /*
112     * Texture flags
113     */
114     #define D3DRMTEXTURE_FORCERESIDENT 0x00000001 /* texture should be kept in video memory */
115     #define D3DRMTEXTURE_STATIC 0x00000002 /* texture will not change */
116     #define D3DRMTEXTURE_DOWNSAMPLEPOINT 0x00000004 /* point filtering should be used when downsampling */
117     #define D3DRMTEXTURE_DOWNSAMPLEBILINEAR 0x00000008 /* bilinear filtering should be used when downsampling */
118     #define D3DRMTEXTURE_DOWNSAMPLEREDUCEDEPTH 0x00000010 /* reduce bit depth when downsampling */
119     #define D3DRMTEXTURE_DOWNSAMPLENONE 0x00000020 /* texture should never be downsampled */
120     #define D3DRMTEXTURE_CHANGEDPIXELS 0x00000040 /* pixels have changed */
121     #define D3DRMTEXTURE_CHANGEDPALETTE 0x00000080 /* palette has changed */
122     #define D3DRMTEXTURE_INVALIDATEONLY 0x00000100 /* dirty regions are invalid */
123    
124     /*
125     * Shadow flags
126     */
127     #define D3DRMSHADOW_TRUEALPHA 0x00000001 /* shadow should render without artifacts when true alpha is on */
128    
129     typedef enum _D3DRMCOMBINETYPE
130     { D3DRMCOMBINE_REPLACE,
131     D3DRMCOMBINE_BEFORE,
132     D3DRMCOMBINE_AFTER
133     } D3DRMCOMBINETYPE, *LPD3DRMCOMBINETYPE;
134    
135     typedef D3DCOLORMODEL D3DRMCOLORMODEL, *LPD3DRMCOLORMODEL;
136    
137     typedef enum _D3DRMPALETTEFLAGS
138     { D3DRMPALETTE_FREE, /* renderer may use this entry freely */
139     D3DRMPALETTE_READONLY, /* fixed but may be used by renderer */
140     D3DRMPALETTE_RESERVED /* may not be used by renderer */
141     } D3DRMPALETTEFLAGS, *LPD3DRMPALETTEFLAGS;
142    
143     typedef struct _D3DRMPALETTEENTRY
144     { unsigned char red; /* 0 .. 255 */
145     unsigned char green; /* 0 .. 255 */
146     unsigned char blue; /* 0 .. 255 */
147     unsigned char flags; /* one of D3DRMPALETTEFLAGS */
148     } D3DRMPALETTEENTRY, *LPD3DRMPALETTEENTRY;
149    
150     typedef struct _D3DRMIMAGE
151     { int width, height; /* width and height in pixels */
152     int aspectx, aspecty; /* aspect ratio for non-square pixels */
153     int depth; /* bits per pixel */
154     int rgb; /* if false, pixels are indices into a
155     palette otherwise, pixels encode
156     RGB values. */
157     int bytes_per_line; /* number of bytes of memory for a
158     scanline. This must be a multiple
159     of 4. */
160     void* buffer1; /* memory to render into (first buffer). */
161     void* buffer2; /* second rendering buffer for double
162     buffering, set to NULL for single
163     buffering. */
164     unsigned long red_mask;
165     unsigned long green_mask;
166     unsigned long blue_mask;
167     unsigned long alpha_mask; /* if rgb is true, these are masks for
168     the red, green and blue parts of a
169     pixel. Otherwise, these are masks
170     for the significant bits of the
171     red, green and blue elements in the
172     palette. For instance, most SVGA
173     displays use 64 intensities of red,
174     green and blue, so the masks should
175     all be set to 0xfc. */
176     int palette_size; /* number of entries in palette */
177     D3DRMPALETTEENTRY* palette; /* description of the palette (only if
178     rgb is false). Must be (1<<depth)
179     elements. */
180     } D3DRMIMAGE, *LPD3DRMIMAGE;
181    
182     typedef enum _D3DRMWRAPTYPE
183     { D3DRMWRAP_FLAT,
184     D3DRMWRAP_CYLINDER,
185     D3DRMWRAP_SPHERE,
186     D3DRMWRAP_CHROME,
187     D3DRMWRAP_SHEET,
188     D3DRMWRAP_BOX
189     } D3DRMWRAPTYPE, *LPD3DRMWRAPTYPE;
190    
191     #define D3DRMWIREFRAME_CULL 1 /* cull backfaces */
192     #define D3DRMWIREFRAME_HIDDENLINE 2 /* lines are obscured by closer objects */
193    
194     /*
195     * Do not use righthanded perspective in Viewport2::SetProjection().
196     * Set up righthanded mode by using IDirect3DRM3::SetOptions().
197     */
198     typedef enum _D3DRMPROJECTIONTYPE
199     { D3DRMPROJECT_PERSPECTIVE,
200     D3DRMPROJECT_ORTHOGRAPHIC,
201     D3DRMPROJECT_RIGHTHANDPERSPECTIVE, /* Only valid pre-DX6 */
202     D3DRMPROJECT_RIGHTHANDORTHOGRAPHIC /* Only valid pre-DX6 */
203     } D3DRMPROJECTIONTYPE, *LPD3DRMPROJECTIONTYPE;
204    
205     #define D3DRMOPTIONS_LEFTHANDED 0x00000001L /* Default */
206     #define D3DRMOPTIONS_RIGHTHANDED 0x00000002L
207    
208     typedef enum _D3DRMXOFFORMAT
209     { D3DRMXOF_BINARY,
210     D3DRMXOF_COMPRESSED,
211     D3DRMXOF_TEXT
212     } D3DRMXOFFORMAT, *LPD3DRMXOFFORMAT;
213    
214     typedef DWORD D3DRMSAVEOPTIONS;
215     #define D3DRMXOFSAVE_NORMALS 1
216     #define D3DRMXOFSAVE_TEXTURECOORDINATES 2
217     #define D3DRMXOFSAVE_MATERIALS 4
218     #define D3DRMXOFSAVE_TEXTURENAMES 8
219     #define D3DRMXOFSAVE_ALL 15
220     #define D3DRMXOFSAVE_TEMPLATES 16
221     #define D3DRMXOFSAVE_TEXTURETOPOLOGY 32
222    
223     typedef enum _D3DRMCOLORSOURCE
224     { D3DRMCOLOR_FROMFACE,
225     D3DRMCOLOR_FROMVERTEX
226     } D3DRMCOLORSOURCE, *LPD3DRMCOLORSOURCE;
227    
228     typedef enum _D3DRMFRAMECONSTRAINT
229     { D3DRMCONSTRAIN_Z, /* use only X and Y rotations */
230     D3DRMCONSTRAIN_Y, /* use only X and Z rotations */
231     D3DRMCONSTRAIN_X /* use only Y and Z rotations */
232     } D3DRMFRAMECONSTRAINT, *LPD3DRMFRAMECONSTRAINT;
233    
234     typedef enum _D3DRMMATERIALMODE
235     { D3DRMMATERIAL_FROMMESH,
236     D3DRMMATERIAL_FROMPARENT,
237     D3DRMMATERIAL_FROMFRAME
238     } D3DRMMATERIALMODE, *LPD3DRMMATERIALMODE;
239    
240     typedef enum _D3DRMFOGMODE
241     { D3DRMFOG_LINEAR, /* linear between start and end */
242     D3DRMFOG_EXPONENTIAL, /* density * exp(-distance) */
243     D3DRMFOG_EXPONENTIALSQUARED /* density * exp(-distance*distance) */
244     } D3DRMFOGMODE, *LPD3DRMFOGMODE;
245    
246     typedef enum _D3DRMZBUFFERMODE {
247     D3DRMZBUFFER_FROMPARENT, /* default */
248     D3DRMZBUFFER_ENABLE, /* enable zbuffering */
249     D3DRMZBUFFER_DISABLE /* disable zbuffering */
250     } D3DRMZBUFFERMODE, *LPD3DRMZBUFFERMODE;
251    
252     typedef enum _D3DRMSORTMODE {
253     D3DRMSORT_FROMPARENT, /* default */
254     D3DRMSORT_NONE, /* don't sort child frames */
255     D3DRMSORT_FRONTTOBACK, /* sort child frames front-to-back */
256     D3DRMSORT_BACKTOFRONT /* sort child frames back-to-front */
257     } D3DRMSORTMODE, *LPD3DRMSORTMODE;
258    
259     typedef struct _D3DRMMATERIALOVERRIDE
260     {
261     DWORD dwSize; /* Size of this structure */
262     DWORD dwFlags; /* Indicate which fields are valid */
263     D3DCOLORVALUE dcDiffuse; /* RGBA */
264     D3DCOLORVALUE dcAmbient; /* RGB */
265     D3DCOLORVALUE dcEmissive; /* RGB */
266     D3DCOLORVALUE dcSpecular; /* RGB */
267     D3DVALUE dvPower;
268     LPUNKNOWN lpD3DRMTex;
269     } D3DRMMATERIALOVERRIDE, *LPD3DRMMATERIALOVERRIDE;
270    
271     #define D3DRMMATERIALOVERRIDE_DIFFUSE_ALPHAONLY 0x00000001L
272     #define D3DRMMATERIALOVERRIDE_DIFFUSE_RGBONLY 0x00000002L
273     #define D3DRMMATERIALOVERRIDE_DIFFUSE 0x00000003L
274     #define D3DRMMATERIALOVERRIDE_AMBIENT 0x00000004L
275     #define D3DRMMATERIALOVERRIDE_EMISSIVE 0x00000008L
276     #define D3DRMMATERIALOVERRIDE_SPECULAR 0x00000010L
277     #define D3DRMMATERIALOVERRIDE_POWER 0x00000020L
278     #define D3DRMMATERIALOVERRIDE_TEXTURE 0x00000040L
279     #define D3DRMMATERIALOVERRIDE_DIFFUSE_ALPHAMULTIPLY 0x00000080L
280     #define D3DRMMATERIALOVERRIDE_ALL 0x000000FFL
281    
282     #define D3DRMFPTF_ALPHA 0x00000001L
283     #define D3DRMFPTF_NOALPHA 0x00000002L
284     #define D3DRMFPTF_PALETTIZED 0x00000004L
285     #define D3DRMFPTF_NOTPALETTIZED 0x00000008L
286    
287     #define D3DRMSTATECHANGE_UPDATEONLY 0x000000001L
288     #define D3DRMSTATECHANGE_VOLATILE 0x000000002L
289     #define D3DRMSTATECHANGE_NONVOLATILE 0x000000004L
290     #define D3DRMSTATECHANGE_RENDER 0x000000020L
291     #define D3DRMSTATECHANGE_LIGHT 0x000000040L
292    
293     /*
294     * Values for flags in RM3::CreateDeviceFromSurface
295     */
296     #define D3DRMDEVICE_NOZBUFFER 0x00000001L
297    
298     /*
299     * Values for flags in Object2::SetClientData
300     */
301     #define D3DRMCLIENTDATA_NONE 0x00000001L
302     #define D3DRMCLIENTDATA_LOCALFREE 0x00000002L
303     #define D3DRMCLIENTDATA_IUNKNOWN 0x00000004L
304    
305     /*
306     * Values for flags in Frame2::AddMoveCallback.
307     */
308     #define D3DRMCALLBACK_PREORDER 0
309     #define D3DRMCALLBACK_POSTORDER 1
310    
311     /*
312     * Values for flags in MeshBuilder2::RayPick.
313     */
314     #define D3DRMRAYPICK_ONLYBOUNDINGBOXES 1
315     #define D3DRMRAYPICK_IGNOREFURTHERPRIMITIVES 2
316     #define D3DRMRAYPICK_INTERPOLATEUV 4
317     #define D3DRMRAYPICK_INTERPOLATECOLOR 8
318     #define D3DRMRAYPICK_INTERPOLATENORMAL 0x10
319    
320     /*
321     * Values for flags in MeshBuilder3::AddFacesIndexed.
322     */
323     #define D3DRMADDFACES_VERTICESONLY 1
324    
325     /*
326     * Values for flags in MeshBuilder2::GenerateNormals.
327     */
328     #define D3DRMGENERATENORMALS_PRECOMPACT 1
329     #define D3DRMGENERATENORMALS_USECREASEANGLE 2
330    
331     /*
332     * Values for MeshBuilder3::GetParentMesh
333     */
334     #define D3DRMMESHBUILDER_DIRECTPARENT 1
335     #define D3DRMMESHBUILDER_ROOTMESH 2
336    
337     /*
338     * Flags for MeshBuilder3::Enable
339     */
340     #define D3DRMMESHBUILDER_RENDERENABLE 0x00000001L
341     #define D3DRMMESHBUILDER_PICKENABLE 0x00000002L
342    
343     /*
344     * Flags for MeshBuilder3::AddMeshBuilder
345     */
346     #define D3DRMADDMESHBUILDER_DONTCOPYAPPDATA 1
347     #define D3DRMADDMESHBUILDER_FLATTENSUBMESHES 2
348     #define D3DRMADDMESHBUILDER_NOSUBMESHES 4
349    
350     /*
351     * Flags for Object2::GetAge when used with MeshBuilders
352     */
353     #define D3DRMMESHBUILDERAGE_GEOMETRY 0x00000001L
354     #define D3DRMMESHBUILDERAGE_MATERIALS 0x00000002L
355     #define D3DRMMESHBUILDERAGE_TEXTURES 0x00000004L
356    
357     /*
358     * Format flags for MeshBuilder3::AddTriangles.
359     */
360     #define D3DRMFVF_TYPE 0x00000001L
361     #define D3DRMFVF_NORMAL 0x00000002L
362     #define D3DRMFVF_COLOR 0x00000004L
363     #define D3DRMFVF_TEXTURECOORDS 0x00000008L
364    
365     #define D3DRMVERTEX_STRIP 0x00000001L
366     #define D3DRMVERTEX_FAN 0x00000002L
367     #define D3DRMVERTEX_LIST 0x00000004L
368    
369     /*
370     * Values for flags in Viewport2::Clear2
371     */
372     #define D3DRMCLEAR_TARGET 0x00000001L
373     #define D3DRMCLEAR_ZBUFFER 0x00000002L
374     #define D3DRMCLEAR_DIRTYRECTS 0x00000004L
375     #define D3DRMCLEAR_ALL (D3DRMCLEAR_TARGET | \
376     D3DRMCLEAR_ZBUFFER | \
377     D3DRMCLEAR_DIRTYRECTS)
378    
379     /*
380     * Values for flags in Frame3::SetSceneFogMethod
381     */
382     #define D3DRMFOGMETHOD_VERTEX 0x00000001L
383     #define D3DRMFOGMETHOD_TABLE 0x00000002L
384     #define D3DRMFOGMETHOD_ANY 0x00000004L
385    
386     /*
387     * Values for flags in Frame3::SetTraversalOptions
388     */
389     #define D3DRMFRAME_RENDERENABLE 0x00000001L
390     #define D3DRMFRAME_PICKENABLE 0x00000002L
391    
392     typedef DWORD D3DRMANIMATIONOPTIONS;
393     #define D3DRMANIMATION_OPEN 0x01L
394     #define D3DRMANIMATION_CLOSED 0x02L
395     #define D3DRMANIMATION_LINEARPOSITION 0x04L
396     #define D3DRMANIMATION_SPLINEPOSITION 0x08L
397     #define D3DRMANIMATION_SCALEANDROTATION 0x00000010L
398     #define D3DRMANIMATION_POSITION 0x00000020L
399    
400     typedef DWORD D3DRMINTERPOLATIONOPTIONS;
401     #define D3DRMINTERPOLATION_OPEN 0x01L
402     #define D3DRMINTERPOLATION_CLOSED 0x02L
403     #define D3DRMINTERPOLATION_NEAREST 0x0100L
404     #define D3DRMINTERPOLATION_LINEAR 0x04L
405     #define D3DRMINTERPOLATION_SPLINE 0x08L
406     #define D3DRMINTERPOLATION_VERTEXCOLOR 0x40L
407     #define D3DRMINTERPOLATION_SLERPNORMALS 0x80L
408    
409     typedef DWORD D3DRMLOADOPTIONS;
410    
411     #define D3DRMLOAD_FROMFILE 0x00L
412     #define D3DRMLOAD_FROMRESOURCE 0x01L
413     #define D3DRMLOAD_FROMMEMORY 0x02L
414     #define D3DRMLOAD_FROMSTREAM 0x04L
415     #define D3DRMLOAD_FROMURL 0x08L
416    
417     #define D3DRMLOAD_BYNAME 0x10L
418     #define D3DRMLOAD_BYPOSITION 0x20L
419     #define D3DRMLOAD_BYGUID 0x40L
420     #define D3DRMLOAD_FIRST 0x80L
421    
422     #define D3DRMLOAD_INSTANCEBYREFERENCE 0x100L
423     #define D3DRMLOAD_INSTANCEBYCOPYING 0x200L
424    
425     #define D3DRMLOAD_ASYNCHRONOUS 0x400L
426    
427     typedef struct _D3DRMLOADRESOURCE {
428     HMODULE hModule;
429     LPCTSTR lpName;
430     LPCTSTR lpType;
431     } D3DRMLOADRESOURCE, *LPD3DRMLOADRESOURCE;
432    
433     typedef struct _D3DRMLOADMEMORY {
434     LPVOID lpMemory;
435     DWORD dSize;
436     } D3DRMLOADMEMORY, *LPD3DRMLOADMEMORY;
437    
438     #define D3DRMPMESHSTATUS_VALID 0x01L
439     #define D3DRMPMESHSTATUS_INTERRUPTED 0x02L
440     #define D3DRMPMESHSTATUS_BASEMESHCOMPLETE 0x04L
441     #define D3DRMPMESHSTATUS_COMPLETE 0x08L
442     #define D3DRMPMESHSTATUS_RENDERABLE 0x10L
443    
444     #define D3DRMPMESHEVENT_BASEMESH 0x01L
445     #define D3DRMPMESHEVENT_COMPLETE 0x02L
446    
447     typedef struct _D3DRMPMESHLOADSTATUS {
448     DWORD dwSize; // Size of this structure
449     DWORD dwPMeshSize; // Total Size (bytes)
450     DWORD dwBaseMeshSize; // Total Size of the Base Mesh
451     DWORD dwBytesLoaded; // Total bytes loaded
452     DWORD dwVerticesLoaded; // Number of vertices loaded
453     DWORD dwFacesLoaded; // Number of faces loaded
454     HRESULT dwLoadResult; // Result of the load operation
455     DWORD dwFlags;
456     } D3DRMPMESHLOADSTATUS, *LPD3DRMPMESHLOADSTATUS;
457    
458     typedef enum _D3DRMUSERVISUALREASON {
459     D3DRMUSERVISUAL_CANSEE,
460     D3DRMUSERVISUAL_RENDER
461     } D3DRMUSERVISUALREASON, *LPD3DRMUSERVISUALREASON;
462    
463    
464     typedef struct _D3DRMANIMATIONKEY
465     {
466     DWORD dwSize;
467     DWORD dwKeyType;
468     D3DVALUE dvTime;
469     DWORD dwID;
470     #if (!defined __cplusplus) || (!defined D3D_OVERLOADS)
471     union
472     {
473     D3DRMQUATERNION dqRotateKey;
474     D3DVECTOR dvScaleKey;
475     D3DVECTOR dvPositionKey;
476     };
477     #else
478     /*
479     * We do this as D3D_OVERLOADS defines constructors for D3DVECTOR,
480     * this can then not be used in a union. Use the inlines provided
481     * to extract and set the required component.
482     */
483     D3DVALUE dvK[4];
484     #endif
485     } D3DRMANIMATIONKEY;
486     typedef D3DRMANIMATIONKEY *LPD3DRMANIMATIONKEY;
487    
488     #if (defined __cplusplus) && (defined D3D_OVERLOADS)
489     inline VOID
490     D3DRMAnimationGetRotateKey(const D3DRMANIMATIONKEY& rmKey,
491     D3DRMQUATERNION& rmQuat)
492     {
493     rmQuat.s = rmKey.dvK[0];
494     rmQuat.v = D3DVECTOR(rmKey.dvK[1], rmKey.dvK[2], rmKey.dvK[3]);
495     }
496    
497     inline VOID
498     D3DRMAnimationGetScaleKey(const D3DRMANIMATIONKEY& rmKey,
499     D3DVECTOR& dvVec)
500     {
501     dvVec = D3DVECTOR(rmKey.dvK[0], rmKey.dvK[1], rmKey.dvK[2]);
502     }
503    
504     inline VOID
505     D3DRMAnimationGetPositionKey(const D3DRMANIMATIONKEY& rmKey,
506     D3DVECTOR& dvVec)
507     {
508     dvVec = D3DVECTOR(rmKey.dvK[0], rmKey.dvK[1], rmKey.dvK[2]);
509     }
510     inline VOID
511     D3DRMAnimationSetRotateKey(D3DRMANIMATIONKEY& rmKey,
512     const D3DRMQUATERNION& rmQuat)
513     {
514     rmKey.dvK[0] = rmQuat.s;
515     rmKey.dvK[1] = rmQuat.v.x;
516     rmKey.dvK[2] = rmQuat.v.y;
517     rmKey.dvK[3] = rmQuat.v.z;
518     }
519    
520     inline VOID
521     D3DRMAnimationSetScaleKey(D3DRMANIMATIONKEY& rmKey,
522     const D3DVECTOR& dvVec)
523     {
524     rmKey.dvK[0] = dvVec.x;
525     rmKey.dvK[1] = dvVec.y;
526     rmKey.dvK[2] = dvVec.z;
527     }
528    
529     inline VOID
530     D3DRMAnimationSetPositionKey(D3DRMANIMATIONKEY& rmKey,
531     const D3DVECTOR& dvVec)
532     {
533     rmKey.dvK[0] = dvVec.x;
534     rmKey.dvK[1] = dvVec.y;
535     rmKey.dvK[2] = dvVec.z;
536     }
537     #endif
538    
539     #define D3DRMANIMATION_ROTATEKEY 0x01
540     #define D3DRMANIMATION_SCALEKEY 0x02
541     #define D3DRMANIMATION_POSITIONKEY 0x03
542    
543    
544     typedef DWORD D3DRMMAPPING, D3DRMMAPPINGFLAG, *LPD3DRMMAPPING;
545     static const D3DRMMAPPINGFLAG D3DRMMAP_WRAPU = 1;
546     static const D3DRMMAPPINGFLAG D3DRMMAP_WRAPV = 2;
547     static const D3DRMMAPPINGFLAG D3DRMMAP_PERSPCORRECT = 4;
548    
549     typedef struct _D3DRMVERTEX
550     { D3DVECTOR position;
551     D3DVECTOR normal;
552     D3DVALUE tu, tv;
553     D3DCOLOR color;
554     } D3DRMVERTEX, *LPD3DRMVERTEX;
555    
556     typedef LONG D3DRMGROUPINDEX; /* group indexes begin a 0 */
557     static const D3DRMGROUPINDEX D3DRMGROUP_ALLGROUPS = -1;
558    
559     /*
560     * Create a color from three components in the range 0-1 inclusive.
561     */
562     extern D3DCOLOR D3DRMAPI D3DRMCreateColorRGB(D3DVALUE red,
563     D3DVALUE green,
564     D3DVALUE blue);
565    
566     /*
567     * Create a color from four components in the range 0-1 inclusive.
568     */
569     extern D3DCOLOR D3DRMAPI D3DRMCreateColorRGBA(D3DVALUE red,
570     D3DVALUE green,
571     D3DVALUE blue,
572     D3DVALUE alpha);
573    
574     /*
575     * Get the red component of a color.
576     */
577     extern D3DVALUE D3DRMAPI D3DRMColorGetRed(D3DCOLOR);
578    
579     /*
580     * Get the green component of a color.
581     */
582     extern D3DVALUE D3DRMAPI D3DRMColorGetGreen(D3DCOLOR);
583    
584     /*
585     * Get the blue component of a color.
586     */
587     extern D3DVALUE D3DRMAPI D3DRMColorGetBlue(D3DCOLOR);
588    
589     /*
590     * Get the alpha component of a color.
591     */
592     extern D3DVALUE D3DRMAPI D3DRMColorGetAlpha(D3DCOLOR);
593    
594     /*
595     * Add two vectors. Returns its first argument.
596     */
597     extern LPD3DVECTOR D3DRMAPI D3DRMVectorAdd(LPD3DVECTOR d,
598     LPD3DVECTOR s1,
599     LPD3DVECTOR s2);
600    
601     /*
602     * Subtract two vectors. Returns its first argument.
603     */
604     extern LPD3DVECTOR D3DRMAPI D3DRMVectorSubtract(LPD3DVECTOR d,
605     LPD3DVECTOR s1,
606     LPD3DVECTOR s2);
607     /*
608     * Reflect a ray about a given normal. Returns its first argument.
609     */
610     extern LPD3DVECTOR D3DRMAPI D3DRMVectorReflect(LPD3DVECTOR d,
611     LPD3DVECTOR ray,
612     LPD3DVECTOR norm);
613    
614     /*
615     * Calculate the vector cross product. Returns its first argument.
616     */
617     extern LPD3DVECTOR D3DRMAPI D3DRMVectorCrossProduct(LPD3DVECTOR d,
618     LPD3DVECTOR s1,
619     LPD3DVECTOR s2);
620     /*
621     * Return the vector dot product.
622     */
623     extern D3DVALUE D3DRMAPI D3DRMVectorDotProduct(LPD3DVECTOR s1,
624     LPD3DVECTOR s2);
625    
626     /*
627     * Scale a vector so that its modulus is 1. Returns its argument or
628     * NULL if there was an error (e.g. a zero vector was passed).
629     */
630     extern LPD3DVECTOR D3DRMAPI D3DRMVectorNormalize(LPD3DVECTOR);
631     #define D3DRMVectorNormalise D3DRMVectorNormalize
632    
633     /*
634     * Return the length of a vector (e.g. sqrt(x*x + y*y + z*z)).
635     */
636     extern D3DVALUE D3DRMAPI D3DRMVectorModulus(LPD3DVECTOR v);
637    
638     /*
639     * Set the rotation part of a matrix to be a rotation of theta radians
640     * around the given axis.
641     */
642    
643     extern LPD3DVECTOR D3DRMAPI D3DRMVectorRotate(LPD3DVECTOR r, LPD3DVECTOR v, LPD3DVECTOR axis, D3DVALUE theta);
644    
645     /*
646     * Scale a vector uniformly in all three axes
647     */
648     extern LPD3DVECTOR D3DRMAPI D3DRMVectorScale(LPD3DVECTOR d, LPD3DVECTOR s, D3DVALUE factor);
649    
650     /*
651     * Return a random unit vector
652     */
653     extern LPD3DVECTOR D3DRMAPI D3DRMVectorRandom(LPD3DVECTOR d);
654    
655     /*
656     * Returns a unit quaternion that represents a rotation of theta radians
657     * around the given axis.
658     */
659    
660     extern LPD3DRMQUATERNION D3DRMAPI D3DRMQuaternionFromRotation(LPD3DRMQUATERNION quat,
661     LPD3DVECTOR v,
662     D3DVALUE theta);
663    
664     /*
665     * Calculate the product of two quaternions
666     */
667     extern LPD3DRMQUATERNION D3DRMAPI D3DRMQuaternionMultiply(LPD3DRMQUATERNION q,
668     LPD3DRMQUATERNION a,
669     LPD3DRMQUATERNION b);
670    
671     /*
672     * Interpolate between two quaternions
673     */
674     extern LPD3DRMQUATERNION D3DRMAPI D3DRMQuaternionSlerp(LPD3DRMQUATERNION q,
675     LPD3DRMQUATERNION a,
676     LPD3DRMQUATERNION b,
677     D3DVALUE alpha);
678    
679     /*
680     * Calculate the matrix for the rotation that a unit quaternion represents
681     */
682     extern void D3DRMAPI D3DRMMatrixFromQuaternion(D3DRMMATRIX4D dmMat, LPD3DRMQUATERNION lpDqQuat);
683    
684     /*
685     * Calculate the quaternion that corresponds to a rotation matrix
686     */
687     extern LPD3DRMQUATERNION D3DRMAPI D3DRMQuaternionFromMatrix(LPD3DRMQUATERNION, D3DRMMATRIX4D);
688    
689    
690     #if defined(__cplusplus)
691     };
692     #endif
693    
694     #endif
695    

root@recompile.se
ViewVC Help
Powered by ViewVC 1.1.26