| 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 |
|