1 /*==========================================================================;
3 * Copyright (C) 1995-1997 Microsoft Corporation. All Rights Reserved.
6 * Content: Direct3DRM include file
8 ***************************************************************************/
10 #ifndef __D3DRMDEFS_H__
11 #define __D3DRMDEFS_H__
14 #include "vd3dtypes.h"
17 #define D3DRMAPI __stdcall
22 #if defined(__cplusplus)
31 typedef struct _D3DRMVECTOR4D
32 { D3DVALUE x, y, z, w;
33 } D3DRMVECTOR4D, *LPD3DRMVECTOR4D;
35 typedef D3DVALUE D3DRMMATRIX4D[4][4];
37 typedef struct _D3DRMQUATERNION
40 } D3DRMQUATERNION, *LPD3DRMQUATERNION;
42 typedef struct _D3DRMRAY
45 } D3DRMRAY, *LPD3DRMRAY;
47 typedef struct _D3DRMBOX
49 } D3DRMBOX, *LPD3DRMBOX;
51 typedef void (*D3DRMWRAPCALLBACK)
52 (LPD3DVECTOR, int* u, int* v, LPD3DVECTOR a, LPD3DVECTOR b, LPVOID);
54 typedef enum _D3DRMLIGHTTYPE
58 D3DRMLIGHT_DIRECTIONAL,
59 D3DRMLIGHT_PARALLELPOINT
60 } D3DRMLIGHTTYPE, *LPD3DRMLIGHTTYPE;
62 typedef enum _D3DRMSHADEMODE {
64 D3DRMSHADE_GOURAUD = 1,
69 } D3DRMSHADEMODE, *LPD3DRMSHADEMODE;
71 typedef enum _D3DRMLIGHTMODE {
72 D3DRMLIGHT_OFF = 0 * D3DRMSHADE_MAX,
73 D3DRMLIGHT_ON = 1 * D3DRMSHADE_MAX,
75 D3DRMLIGHT_MASK = 7 * D3DRMSHADE_MAX,
76 D3DRMLIGHT_MAX = 8 * D3DRMSHADE_MAX
77 } D3DRMLIGHTMODE, *LPD3DRMLIGHTMODE;
79 typedef enum _D3DRMFILLMODE {
80 D3DRMFILL_POINTS = 0 * D3DRMLIGHT_MAX,
81 D3DRMFILL_WIREFRAME = 1 * D3DRMLIGHT_MAX,
82 D3DRMFILL_SOLID = 2 * D3DRMLIGHT_MAX,
84 D3DRMFILL_MASK = 7 * D3DRMLIGHT_MAX,
85 D3DRMFILL_MAX = 8 * D3DRMLIGHT_MAX
86 } D3DRMFILLMODE, *LPD3DRMFILLMODE;
88 typedef DWORD D3DRMRENDERQUALITY, *LPD3DRMRENDERQUALITY;
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)
96 #define D3DRMRENDERMODE_BLENDEDTRANSPARENCY 1
97 #define D3DRMRENDERMODE_SORTEDTRANSPARENCY 2
99 typedef enum _D3DRMTEXTUREQUALITY
100 { D3DRMTEXTURE_NEAREST, /* choose nearest texel */
101 D3DRMTEXTURE_LINEAR, /* interpolate 4 texels */
102 D3DRMTEXTURE_MIPNEAREST, /* nearest texel in nearest mipmap */
103 D3DRMTEXTURE_MIPLINEAR, /* interpolate 2 texels from 2 mipmaps */
104 D3DRMTEXTURE_LINEARMIPNEAREST, /* interpolate 4 texels in nearest mipmap */
105 D3DRMTEXTURE_LINEARMIPLINEAR /* interpolate 8 texels from 2 mipmaps */
106 } D3DRMTEXTUREQUALITY, *LPD3DRMTEXTUREQUALITY;
108 typedef enum _D3DRMCOMBINETYPE
109 { D3DRMCOMBINE_REPLACE,
112 } D3DRMCOMBINETYPE, *LPD3DRMCOMBINETYPE;
114 typedef D3DCOLORMODEL D3DRMCOLORMODEL, *LPD3DRMCOLORMODEL;
116 typedef enum _D3DRMPALETTEFLAGS
117 { D3DRMPALETTE_FREE, /* renderer may use this entry freely */
118 D3DRMPALETTE_READONLY, /* fixed but may be used by renderer */
119 D3DRMPALETTE_RESERVED /* may not be used by renderer */
120 } D3DRMPALETTEFLAGS, *LPD3DRMPALETTEFLAGS;
122 typedef struct _D3DRMPALETTEENTRY
123 { unsigned char red; /* 0 .. 255 */
124 unsigned char green; /* 0 .. 255 */
125 unsigned char blue; /* 0 .. 255 */
126 unsigned char flags; /* one of D3DRMPALETTEFLAGS */
127 } D3DRMPALETTEENTRY, *LPD3DRMPALETTEENTRY;
129 typedef struct _D3DRMIMAGE
130 { int width, height; /* width and height in pixels */
131 int aspectx, aspecty; /* aspect ratio for non-square pixels */
132 int depth; /* bits per pixel */
133 int rgb; /* if false, pixels are indices into a
134 palette otherwise, pixels encode
136 int bytes_per_line; /* number of bytes of memory for a
137 scanline. This must be a multiple
139 void* buffer1; /* memory to render into (first buffer). */
140 void* buffer2; /* second rendering buffer for double
141 buffering, set to NULL for single
143 unsigned long red_mask;
144 unsigned long green_mask;
145 unsigned long blue_mask;
146 unsigned long alpha_mask; /* if rgb is true, these are masks for
147 the red, green and blue parts of a
148 pixel. Otherwise, these are masks
149 for the significant bits of the
150 red, green and blue elements in the
151 palette. For instance, most SVGA
152 displays use 64 intensities of red,
153 green and blue, so the masks should
154 all be set to 0xfc. */
155 int palette_size; /* number of entries in palette */
156 D3DRMPALETTEENTRY* palette; /* description of the palette (only if
157 rgb is false). Must be (1<<depth)
159 } D3DRMIMAGE, *LPD3DRMIMAGE;
161 typedef enum _D3DRMWRAPTYPE
166 } D3DRMWRAPTYPE, *LPD3DRMWRAPTYPE;
168 #define D3DRMWIREFRAME_CULL 1 /* cull backfaces */
169 #define D3DRMWIREFRAME_HIDDENLINE 2 /* lines are obscured by closer objects */
171 typedef enum _D3DRMPROJECTIONTYPE
172 { D3DRMPROJECT_PERSPECTIVE,
173 D3DRMPROJECT_ORTHOGRAPHIC,
174 D3DRMPROJECT_RIGHTHANDPERSPECTIVE,
175 D3DRMPROJECT_RIGHTHANDORTHOGRAPHIC
176 } D3DRMPROJECTIONTYPE, *LPD3DRMPROJECTIONTYPE;
178 typedef enum _D3DRMXOFFORMAT
182 } D3DRMXOFFORMAT, *LPD3DRMXOFFORMAT;
184 typedef DWORD D3DRMSAVEOPTIONS;
185 #define D3DRMXOFSAVE_NORMALS 1
186 #define D3DRMXOFSAVE_TEXTURECOORDINATES 2
187 #define D3DRMXOFSAVE_MATERIALS 4
188 #define D3DRMXOFSAVE_TEXTURENAMES 8
189 #define D3DRMXOFSAVE_ALL 15
190 #define D3DRMXOFSAVE_TEMPLATES 16
191 #define D3DRMXOFSAVE_TEXTURETOPOLOGY 32
193 typedef enum _D3DRMCOLORSOURCE
194 { D3DRMCOLOR_FROMFACE,
195 D3DRMCOLOR_FROMVERTEX
196 } D3DRMCOLORSOURCE, *LPD3DRMCOLORSOURCE;
198 typedef enum _D3DRMFRAMECONSTRAINT
199 { D3DRMCONSTRAIN_Z, /* use only X and Y rotations */
200 D3DRMCONSTRAIN_Y, /* use only X and Z rotations */
201 D3DRMCONSTRAIN_X /* use only Y and Z rotations */
202 } D3DRMFRAMECONSTRAINT, *LPD3DRMFRAMECONSTRAINT;
204 typedef enum _D3DRMMATERIALMODE
205 { D3DRMMATERIAL_FROMMESH,
206 D3DRMMATERIAL_FROMPARENT,
207 D3DRMMATERIAL_FROMFRAME
208 } D3DRMMATERIALMODE, *LPD3DRMMATERIALMODE;
210 typedef enum _D3DRMFOGMODE
211 { D3DRMFOG_LINEAR, /* linear between start and end */
212 D3DRMFOG_EXPONENTIAL, /* density * exp(-distance) */
213 D3DRMFOG_EXPONENTIALSQUARED /* density * exp(-distance*distance) */
214 } D3DRMFOGMODE, *LPD3DRMFOGMODE;
216 typedef enum _D3DRMZBUFFERMODE {
217 D3DRMZBUFFER_FROMPARENT, /* default */
218 D3DRMZBUFFER_ENABLE, /* enable zbuffering */
219 D3DRMZBUFFER_DISABLE /* disable zbuffering */
220 } D3DRMZBUFFERMODE, *LPD3DRMZBUFFERMODE;
222 typedef enum _D3DRMSORTMODE {
223 D3DRMSORT_FROMPARENT, /* default */
224 D3DRMSORT_NONE, /* don't sort child frames */
225 D3DRMSORT_FRONTTOBACK, /* sort child frames front-to-back */
226 D3DRMSORT_BACKTOFRONT /* sort child frames back-to-front */
227 } D3DRMSORTMODE, *LPD3DRMSORTMODE;
230 * Values for flags in Frame2::AddMoveCallback.
232 #define D3DRMCALLBACK_PREORDER 0
233 #define D3DRMCALLBACK_POSTORDER 1
236 * Values for flags in MeshBuilder2::RayPick.
238 #define D3DRMRAYPICK_ONLYBOUNDINGBOXES 1
239 #define D3DRMRAYPICK_IGNOREFURTHERPRIMITIVES 2
240 #define D3DRMRAYPICK_INTERPOLATEUV 4
241 #define D3DRMRAYPICK_INTERPOLATECOLOR 8
242 #define D3DRMRAYPICK_INTERPOLATENORMAL 0x10
245 * Values for flags in MeshBuilder2::GenerateNormals.
247 #define D3DRMGENERATENORMALS_PRECOMPACT 1
248 #define D3DRMGENERATENORMALS_USECREASEANGLE 2
250 typedef DWORD D3DRMANIMATIONOPTIONS;
251 #define D3DRMANIMATION_OPEN 0x01L
252 #define D3DRMANIMATION_CLOSED 0x02L
253 #define D3DRMANIMATION_LINEARPOSITION 0x04L
254 #define D3DRMANIMATION_SPLINEPOSITION 0x08L
255 #define D3DRMANIMATION_SCALEANDROTATION 0x00000010L
256 #define D3DRMANIMATION_POSITION 0x00000020L
258 typedef DWORD D3DRMINTERPOLATIONOPTIONS;
259 #define D3DRMINTERPOLATION_OPEN 0x01L
260 #define D3DRMINTERPOLATION_CLOSED 0x02L
261 #define D3DRMINTERPOLATION_NEAREST 0x0100L
262 #define D3DRMINTERPOLATION_LINEAR 0x04L
263 #define D3DRMINTERPOLATION_SPLINE 0x08L
264 #define D3DRMINTERPOLATION_VERTEXCOLOR 0x40L
265 #define D3DRMINTERPOLATION_SLERPNORMALS 0x80L
267 typedef DWORD D3DRMLOADOPTIONS;
269 #define D3DRMLOAD_FROMFILE 0x00L
270 #define D3DRMLOAD_FROMRESOURCE 0x01L
271 #define D3DRMLOAD_FROMMEMORY 0x02L
272 #define D3DRMLOAD_FROMSTREAM 0x04L
273 #define D3DRMLOAD_FROMURL 0x08L
275 #define D3DRMLOAD_BYNAME 0x10L
276 #define D3DRMLOAD_BYPOSITION 0x20L
277 #define D3DRMLOAD_BYGUID 0x40L
278 #define D3DRMLOAD_FIRST 0x80L
280 #define D3DRMLOAD_INSTANCEBYREFERENCE 0x100L
281 #define D3DRMLOAD_INSTANCEBYCOPYING 0x200L
283 #define D3DRMLOAD_ASYNCHRONOUS 0x400L
285 typedef struct _D3DRMLOADRESOURCE {
289 } D3DRMLOADRESOURCE, *LPD3DRMLOADRESOURCE;
291 typedef struct _D3DRMLOADMEMORY {
294 } D3DRMLOADMEMORY, *LPD3DRMLOADMEMORY;
296 #define D3DRMPMESHSTATUS_VALID 0x01L
297 #define D3DRMPMESHSTATUS_INTERRUPTED 0x02L
298 #define D3DRMPMESHSTATUS_BASEMESHCOMPLETE 0x04L
299 #define D3DRMPMESHSTATUS_COMPLETE 0x08L
300 #define D3DRMPMESHSTATUS_RENDERABLE 0x10L
302 #define D3DRMPMESHEVENT_BASEMESH 0x01L
303 #define D3DRMPMESHEVENT_COMPLETE 0x02L
305 typedef struct _D3DRMPMESHLOADSTATUS {
306 DWORD dwSize; // Size of this structure
307 DWORD dwPMeshSize; // Total Size (bytes)
308 DWORD dwBaseMeshSize; // Total Size of the Base Mesh
309 DWORD dwBytesLoaded; // Total bytes loaded
310 DWORD dwVerticesLoaded; // Number of vertices loaded
311 DWORD dwFacesLoaded; // Number of faces loaded
312 HRESULT dwLoadResult; // Result of the load operation
314 } D3DRMPMESHLOADSTATUS, *LPD3DRMPMESHLOADSTATUS;
316 typedef enum _D3DRMUSERVISUALREASON {
317 D3DRMUSERVISUAL_CANSEE,
318 D3DRMUSERVISUAL_RENDER
319 } D3DRMUSERVISUALREASON, *LPD3DRMUSERVISUALREASON;
322 typedef DWORD D3DRMMAPPING, D3DRMMAPPINGFLAG, *LPD3DRMMAPPING;
323 static const D3DRMMAPPINGFLAG D3DRMMAP_WRAPU = 1;
324 static const D3DRMMAPPINGFLAG D3DRMMAP_WRAPV = 2;
325 static const D3DRMMAPPINGFLAG D3DRMMAP_PERSPCORRECT = 4;
327 typedef struct _D3DRMVERTEX
328 { D3DVECTOR position;
332 } D3DRMVERTEX, *LPD3DRMVERTEX;
334 typedef LONG D3DRMGROUPINDEX; /* group indexes begin a 0 */
335 static const D3DRMGROUPINDEX D3DRMGROUP_ALLGROUPS = -1;
338 * Create a color from three components in the range 0-1 inclusive.
340 extern D3DCOLOR D3DRMAPI D3DRMCreateColorRGB(D3DVALUE red,
345 * Create a color from four components in the range 0-1 inclusive.
347 extern D3DCOLOR D3DRMAPI D3DRMCreateColorRGBA(D3DVALUE red,
353 * Get the red component of a color.
355 extern D3DVALUE D3DRMAPI D3DRMColorGetRed(D3DCOLOR);
358 * Get the green component of a color.
360 extern D3DVALUE D3DRMAPI D3DRMColorGetGreen(D3DCOLOR);
363 * Get the blue component of a color.
365 extern D3DVALUE D3DRMAPI D3DRMColorGetBlue(D3DCOLOR);
368 * Get the alpha component of a color.
370 extern D3DVALUE D3DRMAPI D3DRMColorGetAlpha(D3DCOLOR);
373 * Add two vectors. Returns its first argument.
375 extern LPD3DVECTOR D3DRMAPI D3DRMVectorAdd(LPD3DVECTOR d,
380 * Subtract two vectors. Returns its first argument.
382 extern LPD3DVECTOR D3DRMAPI D3DRMVectorSubtract(LPD3DVECTOR d,
386 * Reflect a ray about a given normal. Returns its first argument.
388 extern LPD3DVECTOR D3DRMAPI D3DRMVectorReflect(LPD3DVECTOR d,
393 * Calculate the vector cross product. Returns its first argument.
395 extern LPD3DVECTOR D3DRMAPI D3DRMVectorCrossProduct(LPD3DVECTOR d,
399 * Return the vector dot product.
401 extern D3DVALUE D3DRMAPI D3DRMVectorDotProduct(LPD3DVECTOR s1,
405 * Scale a vector so that its modulus is 1. Returns its argument or
406 * NULL if there was an error (e.g. a zero vector was passed).
408 extern LPD3DVECTOR D3DRMAPI D3DRMVectorNormalize(LPD3DVECTOR);
409 #define D3DRMVectorNormalise D3DRMVectorNormalize
412 * Return the length of a vector (e.g. sqrt(x*x + y*y + z*z)).
414 extern D3DVALUE D3DRMAPI D3DRMVectorModulus(LPD3DVECTOR v);
417 * Set the rotation part of a matrix to be a rotation of theta radians
418 * around the given axis.
421 extern LPD3DVECTOR D3DRMAPI D3DRMVectorRotate(LPD3DVECTOR r, LPD3DVECTOR v, LPD3DVECTOR axis, D3DVALUE theta);
424 * Scale a vector uniformly in all three axes
426 extern LPD3DVECTOR D3DRMAPI D3DRMVectorScale(LPD3DVECTOR d, LPD3DVECTOR s, D3DVALUE factor);
429 * Return a random unit vector
431 extern LPD3DVECTOR D3DRMAPI D3DRMVectorRandom(LPD3DVECTOR d);
434 * Returns a unit quaternion that represents a rotation of theta radians
435 * around the given axis.
438 extern LPD3DRMQUATERNION D3DRMAPI D3DRMQuaternionFromRotation(LPD3DRMQUATERNION quat,
443 * Calculate the product of two quaternions
445 extern LPD3DRMQUATERNION D3DRMAPI D3DRMQuaternionMultiply(LPD3DRMQUATERNION q,
447 LPD3DRMQUATERNION b);
450 * Interpolate between two quaternions
452 extern LPD3DRMQUATERNION D3DRMAPI D3DRMQuaternionSlerp(LPD3DRMQUATERNION q,
458 * Calculate the matrix for the rotation that a unit quaternion represents
460 extern void D3DRMAPI D3DRMMatrixFromQuaternion(D3DRMMATRIX4D dmMat, LPD3DRMQUATERNION lpDqQuat);
463 * Calculate the quaternion that corresponds to a rotation matrix
465 extern LPD3DRMQUATERNION D3DRMAPI D3DRMQuaternionFromMatrix(LPD3DRMQUATERNION, D3DRMMATRIX4D);
468 #if defined(__cplusplus)