/*
 *  d3drmdef.h  Direct3DRM definitions
 *
 * =========================================================================
 *
 *                          Open Watcom Project
 *
 * Copyright (c) 2004-2010 The Open Watcom Contributors. All Rights Reserved.
 *
 *    This file is automatically generated. Do not edit directly.
 *
 * =========================================================================
 */

#ifndef __D3DRMDEFS_H__
#define __D3DRMDEFS_H__

#ifndef _ENABLE_AUTODEPEND
 #pragma read_only_file;
#endif

#include <d3dtypes.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Direct3DRM calling convention */
#define D3DRMAPI    __stdcall

/* Direct3DRM color model data type */
typedef D3DCOLORMODEL   D3DRMCOLORMODEL;
typedef D3DCOLORMODEL   *LPD3DRMCOLORMODEL;

/* Other Direct3DRM primitive data types */
typedef DWORD   D3DRMSAVEOPTIONS;
typedef DWORD   D3DRMANIMATIONOPTIONS;
typedef DWORD   D3DRMINTERPOLATIONOPTIONS;
typedef DWORD   D3DRMLOADOPTIONS;
typedef DWORD   D3DRMMAPPING;
typedef DWORD   D3DRMMAPPINGFLAG;
typedef DWORD   *LPD3DRMMAPPING;
typedef LONG    D3DRMGROUPINDEX;

/* Direct3DRM render modes */
#define D3DRMRENDERMODE_BLENDEDTRANSPARENCY         1
#define D3DRMRENDERMODE_SORTEDTRANSPARENCY          2
#define D3DRMRENDERMODE_LIGHTINMODELSPACE           8
#define D3DRMRENDERMODE_VIEWDEPENDENTSPECULAR       16
#define D3DRMRENDERMODE_DISABLEDSORTEDALPHAZWRITE   32

/* Direct3DRM texture flags */
#define D3DRMTEXTURE_FORCERESIDENT          0x00000001L
#define D3DRMTEXTURE_STATIC                 0x00000002L
#define D3DRMTEXTURE_DOWNSAMPLEPOINT        0x00000004L
#define D3DRMTEXTURE_DOWNSAMPLEBILINEAR     0x00000008L
#define D3DRMTEXTURE_DOWNSAMPLEREDUCEDEPTH  0x00000010L
#define D3DRMTEXTURE_DOWNSAMPLENONE         0x00000020L
#define D3DRMTEXTURE_CHANGEDPIXELS          0x00000040L
#define D3DRMTEXTURE_CHANGEDPALETTE         0x00000080L
#define D3DRMTEXTURE_INVALIDATEONLY         0x00000100L

/* Direct3DRM shadow flags */
#define D3DRMSHADOW_TRUEALPHA   0x00000001L

/* Direct3DRM wire frame types */
#define D3DRMWIREFRAME_CULL         1
#define D3DRMWIREFRAME_HIDDENLINE   2

/* Direct3DRM options */
#define D3DRMOPTIONS_LEFTHANDED     0x00000001L
#define D3DRMOPTIONS_RIGHTHANDED    0x00000002L

/* Direct3DRM XOF save options */
#define D3DRMXOFSAVE_NORMALS            1L
#define D3DRMXOFSAVE_TEXTURECOORDINATES 2L
#define D3DRMXOFSAVE_MATERIALS          4L
#define D3DRMXOFSAVE_TEXTURENAMES       8L
#define D3DRMXOFSAVE_ALL                15L
#define D3DRMXOFSAVE_TEMPLATES          16L
#define D3DRMXOFSAVE_TEXTURETOPOLOGY    32L

/* Direct3DRM material override flags */
#define D3DRMMATERIALOVERRIDE_DIFFUSE_ALPHAONLY     0x00000001L
#define D3DRMMATERIALOVERRIDE_DIFFUSE_RGBONLY       0x00000002L
#define D3DRMMATERIALOVERRIDE_DIFFUSE               0x00000003L
#define D3DRMMATERIALOVERRIDE_AMBIENT               0x00000004L
#define D3DRMMATERIALOVERRIDE_EMISSIVE              0x00000008L
#define D3DRMMATERIALOVERRIDE_SPECULAR              0x00000010L
#define D3DRMMATERIALOVERRIDE_POWER                 0x00000020L
#define D3DRMMATERIALOVERRIDE_TEXTURE               0x00000040L
#define D3DRMMATERIALOVERRIDE_DIFFUSE_ALPHAMULTIPLY 0x00000080L
#define D3DRMMATERIALOVERRIDE_ALL                   0x000000FFL

/* Undocumented flags */
#define D3DRMFPTF_ALPHA         0x00000001L
#define D3DRMFPTF_NOALPHA       0x00000002L
#define D3DRMFPTF_PALETTIZED    0x00000004L
#define D3DRMFPTF_NOTPALETTIZED 0x00000008L

/* Direct3DRM state change flags */
#define D3DRMSTATECHANGE_UPDATEONLY     0x00000001L
#define D3DRMSTATECHANGE_VOLATILE       0x00000002L
#define D3DRMSTATECHANGE_NONVOLATILE    0x00000004L
#define D3DRMSTATECHANGE_RENDER         0x00000020L
#define D3DRMSTATECHANGE_LIGHT          0x00000040L

/* IDirect3DRM3::CreateDeviceFromSurface() flags */
#define D3DRMDEVICE_NOZBUFFER   0x00000001L

/* IDirect3DRMObject2::SetClientData() flags */
#define D3DRMCLIENTDATA_NONE        0x00000001L
#define D3DRMCLIENTDATA_LOCALFREE   0x00000002L
#define D3DRMCLIENTDATA_IUNKNOWN    0x00000004L

/* IDirect3DRMFrame2::AddMoveCallback() flags */
#define D3DRMCALLBACK_PREORDER  0
#define D3DRMCALLBACK_POSTORDER 1

/* IDirect3DRMMeshBuilder2::RayPick() flags */
#define D3DRMRAYPICK_ONLYBOUNDINGBOXES          0x01
#define D3DRMRAYPICK_IGNOREFURTHERPRIMITIVES    0x02
#define D3DRMRAYPICK_INTERPOLATEUV              0x04
#define D3DRMRAYPICK_INTERPOLATECOLOR           0x08
#define D3DRMRAYPICK_INTERPOLATENORMAL          0x10

/* IDirect3DRMMeshBuilder3::AddFacesIndexed() flags */
#define D3DRMADDFACES_VERTICESONLY  1

/* IDirect3DRMMeshBuilder2::GenerateNormals() flags */
#define D3DRMGENERATENORMALS_PRECOMPACT     1
#define D3DRMGENERATENORMALS_USECREASEANGLE 2

/* IDirect3DRMMeshBuilder3::GetParentMesh() values */
#define D3DRMMESHBUILDER_DIRECTPARENT   1
#define D3DRMMESHBUILDER_ROOTMESH       2

/* IDirect3DRMMeshBuilder3::Enable() flags */
#define D3DRMMESHBUILDER_RENDERENABLE   0x00000001L
#define D3DRMMESHBUILDER_PICKENABLE     0x00000002L

/* IDirect3DRMMeshBuilder3::AddMeshBuilder() flags */
#define D3DRMMESHBUILDER_DONTCOPYAPPDATA    1
#define D3DRMMESHBUILDER_FLATTENSUBMESHES   2
#define D3DRMMESHBUILDER_NOSUBMESHES        4

/* IDirect3DRMObject2::GetAge() flags */
#define D3DRMMESHBUILDERAGE_GEOMETRY    0x00000001L
#define D3DRMMESHBUILDERAGE_MATERIALS   0x00000002L
#define D3DRMMESHBUILDERAGE_TEXTURES    0x00000004L

/* IDirect3DRMMeshBuilder3::AddTriangles() flags */
#define D3DRMFVF_TYPE           0x00000001L
#define D3DRMFVF_NORMAL         0x00000002L
#define D3DRMFVF_COLOR          0x00000004L
#define D3DRMFVF_TEXTURECOORDS  0x00000008L

/* Direct3DRM vertex flags */
#define D3DRMVERTEX_STRIP   0x00000001L
#define D3DRMVERTEX_FAN     0x00000002L
#define D3DRMVERTEX_LIST    0x00000004L

/* IDirect3DRMViewport2::Clear2() flags */
#define D3DRMCLEAR_TARGET       0x00000001L
#define D3DRMCLEAR_ZBUFFER      0x00000002L
#define D3DRMCLEAR_DIRTYRECTS   0x00000004L
#define D3DRMCLEAR_ALL \
    (D3DRMCLEAR_TARGET | D3DRMCLEAR_ZBUFFER | D3DRMCLEAR_DIRTYRECTS)

/* IDirect3DRMFrame3::SetSceneFogMethod() flags */
#define D3DRMFOGMETHOD_VERTEX   0x00000001L
#define D3DRMFOGMETHOD_TABLE    0x00000002L
#define D3DRMFOGMETHOD_ANY      0x00000004L

/* IDirect3DRMFrame3::SetTraversalOptions() flags */
#define D3DRMFRAME_RENDERENABLE 0x00000001L
#define D3DRMFRAME_PICKENABLE   0x00000002L

/* Direct3DRM animation options */
#define D3DRMANIMATION_OPEN             0x00000001L
#define D3DRMANIMATION_CLOSED           0x00000002L
#define D3DRMANIMATION_LINEARPOSITION   0x00000004L
#define D3DRMANIMATION_SPLINEPOSITION   0x00000008L
#define D3DRMANIMATION_SCALEANDROTATION 0x00000010L
#define D3DRMANIMATION_POSITION         0x00000020L

/* Direct3DRM interpolation options */
#define D3DRMINTERPOLATION_OPEN         0x00000001L
#define D3DRMINTERPOLATION_CLOSED       0x00000002L
#define D3DRMINTERPOLATION_LINEAR       0x00000004L
#define D3DRMINTERPOLATION_SPLINE       0x00000008L
#define D3DRMINTERPOLATION_VERTEXCOLOR  0x00000040L
#define D3DRMINTERPOLATION_SLERPNORMALS 0x00000080L
#define D3DRMINTERPOLATION_NEAREST      0x00000100L

/* Direct3DRM load options */
#define D3DRMLOAD_FROMFILE              0x00000000L
#define D3DRMLOAD_FROMRESOURCE          0x00000001L
#define D3DRMLOAD_FROMMEMORY            0x00000002L
#define D3DRMLOAD_FROMSTREAM            0x00000004L
#define D3DRMLOAD_FROMURL               0x00000008L
#define D3DRMLOAD_BYNAME                0x00000010L
#define D3DRMLOAD_BYPOSITION            0x00000020L
#define D3DRMLOAD_BYGUID                0x00000040L
#define D3DRMLOAD_FIRST                 0x00000080L
#define D3DRMLOAD_INSTANCEBYREFERENCE   0x00000100L
#define D3DRMLOAD_INSTANCEBYCOPYING     0x00000200L
#define D3DRMLOAD_ASYNCHRONOUS          0x00000400L

/* Direct3DRM mesh status flags */
#define D3DRMPMESHSTATUS_VALID              0x00000001L
#define D3DRMPMESHSTATUS_INTERRUPTED        0x00000002L
#define D3DRMPMESHSTATUS_BASEMESHCOMPLETE   0x00000004L
#define D3DRMPMESHSTATUS_COMPLETE           0x00000008L
#define D3DRMPMESHSTATUS_RENDERABLE         0x00000010L

/* Direct3DRM mesh events */
#define D3DRMPMESHEVENT_BASEMESH    0x00000001L
#define D3DRMPMESHEVENT_COMPLETE    0x00000002L

/* Direct3DRM animation key types */
#define D3DRMANIMATION_ROTATEKEY    0x00000001L
#define D3DRMANIMATION_SCALEKEY     0x00000002L
#define D3DRMANIMATION_POSITIONKEY  0x00000003L

/* Direct3DRM mapping flags */
#define D3DRMMAP_WRAPU          1L
#define D3DRMMAP_WRPAV          2L
#define D3DRMMAP_PERSPCORRECT   4L

/* Direct3DRM group index special value */
#define D3DRMGROUP_ALLGROUPS    (-1L)

/* Direct3DRM 4-dimensional vector */
typedef struct _D3DRMVECTOR4D {
    D3DVALUE    x;
    D3DVALUE    y;
    D3DVALUE    z;
    D3DVALUE    w;
} D3DRMVECTOR4D;
typedef D3DRMVECTOR4D   *LPD3DRMVECTOR4D;

/* Direct3DRM 4-dimensional matrix */
typedef D3DVALUE    D3DRMMATRIX4D[4][4];

/* Direct3DRM quaternion */
typedef struct _D3DRMQUATERNION {
    D3DVALUE    s;
    D3DVECTOR   v;
} D3DRMQUATERNION;
typedef D3DRMQUATERNION *LPD3DRMQUATERNION;

/* Direct3DRM ray */
typedef struct _D3DRMRAY {
    D3DVECTOR   dvDir;
    D3DVECTOR   dvPos;
} D3DRMRAY;
typedef D3DRMRAY    *LPD3DRMRAY;

/* Direct3DRM box */
typedef struct _D3DRMBOX {
    D3DVECTOR   min;
    D3DVECTOR   max;
} D3DRMBOX;
typedef D3DRMBOX    *LPD3DRMBOX;

/* Direct3DRM wrap callback */
typedef void (*D3DRMWRAPCALLBACK)( LPD3DVECTOR, int *, int *, LPD3DVECTOR, LPD3DVECTOR, LPVOID );

/* Direct3DRM light types */
typedef enum _D3DRMLIGHTTYPE {
    D3DRMLIGHT_AMBIENT          = 0,
    D3DRMLIGHT_POINT            = 1,
    D3DRMLIGHT_SPOT             = 2,
    D3DRMLIGHT_DIRECTIONAL      = 3,
    D3DRMLIGHT_PARALLELPOINT    = 4
} D3DRMLIGHTTYPE;
typedef D3DRMLIGHTTYPE  *LPD3DRMLIGHTTYPE;

/* Direct3DRM shade modes */
typedef enum _D3DRMSHADEMODE {
    D3DRMSHADE_FLAT     = 0,
    D3DRMSHADE_GOURAUD  = 1,
    D3DRMSHADE_PHONG    = 2,
    D3DRMSHADE_MASK     = 7,
    D3DRMSHADE_MAX      = 8
} D3DRMSHADEMODE;
typedef D3DRMSHADEMODE  *LPD3DRMSHADEMODE;

/* Direct3DRM light modes */
typedef enum _D3DRMLIGHTMODE {
    D3DRMLIGHT_OFF  = 0 * D3DRMSHADE_MAX,
    D3DRMLIGHT_ON   = 1 * D3DRMSHADE_MAX,
    D3DRMLIGHT_MASK = 7 * D3DRMSHADE_MAX,
    D3DRMLIGHT_MAX  = 8 * D3DRMSHADE_MAX
} D3DRMLIGHTMODE;
typedef D3DRMLIGHTMODE  *LPD3DRMLIGHTMODE;

/* Direct3DRM fill modes */
typedef enum _D3DRMFILLMODE {
    D3DRMFILL_POINTS    = 0 * D3DRMLIGHT_MAX,
    D3DRMFILL_WIREFRAME = 1 * D3DRMLIGHT_MAX,
    D3DRMFILL_SOLID     = 2 * D3DRMLIGHT_MAX,
    D3DRMFILL_MASK      = 7 * D3DRMLIGHT_MAX,
    D3DRMFILL_MAX       = 8 * D3DRMLIGHT_MAX
} D3DRMFILLMODE;
typedef D3DRMFILLMODE   *LPD3DRMFILLMODE;

/* Direct3DRM render qualities */
typedef DWORD                   D3DRMRENDERQUALITY;
typedef DWORD                   *LPD3DRMRENDERQUALITY;
#define D3DRMRENDER_WIREFRAME   (D3DRMSHADE_FLAT + D3DRMLIGHT_OFF + D3DRMFILL_WIREFRAME)
#define D3DRMRENDER_UNLITFLAT   (D3DRMSHADE_FLAT + D3DRMLIGHT_OFF + D3DRMFILL_SOLID)
#define D3DRMRENDER_FLAT        (D3DRMSHADE_FLAT + D3DRMLIGHT_ON + D3DRMFILL_SOLID)
#define D3DRMRENDER_GOURAND     (D3DRMSHADE_GOURAND + D3DRMLIGHT_ON + D3DRMFILL_SOLID)
#define D3DRMRENDER_PHONG       (D3DRMSHADE_PHONG + D3DRMLIGHT_ON + D3DRMFILL_SOLID)

/* Direct3DRM texture quality */
typedef enum _D3DRMTEXTUREQUALITY {
    D3DRMTEXTURE_NEAREST            = 0,
    D3DRMTEXTURE_LINEAR             = 1,
    D3DRMTEXTURE_MIPNEAREST         = 2,
    D3DRMTEXTURE_MIPLINEAR          = 3,
    D3DRMTEXTURE_LINEARMIPNEAREST   = 4,
    D3DRMTEXTURE_LINEARMIPLINEAR    = 5
} D3DRMTEXTUREQUALITY;
typedef D3DRMTEXTUREQUALITY *LPD3DRMTEXTUREQUALITY;

/* Direct3DRM combine types */
typedef enum _D3DRMCOMBINETYPE {
    D3DRMCOMBINE_REPLACE    = 0,
    D3DRMCOMBINE_BEFORE     = 1,
    D3DRMCOMBINE_AFTER      = 2
} D3DRMCOMBINETYPE;
typedef D3DRMCOMBINETYPE    *LPD3DRMCOMBINETYPE;

/* Direct3DRM palette flags */
typedef enum _D3DRMPALETTEFLAGS {
    D3DRMPALETTE_FREE       = 0,
    D3DRMPALETTE_READONLY   = 1,
    D3DRMPALETTE_RESERVED   = 2
} D3DRMPALETTEFLAGS;
typedef D3DRMPALETTEFLAGS   *LPD3DRMPALETTEFLAGS;

/* Direct3DRM palette entry */
typedef struct _D3DRMPALETTEENTRY {
    unsigned char   red;
    unsigned char   green;
    unsigned char   blue;
    unsigned char   flags;
} D3DRMPALETTEENTRY;
typedef D3DRMPALETTEENTRY   *LPD3DRMPALETTEENTRY;

/* Direct3DRM image */
typedef struct _D3DRMIMAGE {
    int                 width;
    int                 height;
    int                 aspectx;
    int                 aspecty;
    int                 depth;
    int                 rgb;
    int                 bytes_per_line;
    void                *buffer1;
    void                *buffer2;
    unsigned long       red_mask;
    unsigned long       green_mask;
    unsigned long       blue_mask;
    unsigned long       alpha_mask;
    int                 palette_size;
    D3DRMPALETTEENTRY   *palette;
} D3DRMIMAGE;
typedef D3DRMIMAGE  *LPD3DRMIMAGE;

/* Direct3DRM wrap types */
typedef enum _D3DRMWRAPTYPE {
    D3DRMWRAP_FLAT      = 0,
    D3DRMWRAP_CYLINDER  = 1,
    D3DRMWRAP_SPHERE    = 2,
    D3DRMWRAP_CHROME    = 3,
    D3DRMWRAP_SHEET     = 4,
    D3DRMWRAP_BOX       = 5
} D3DRMWRAPTYPE;
typedef D3DRMWRAPTYPE   *LPD3DRMWRAPTYPE;

/* Direct3DRM projection types */
typedef enum _D3DRMPROJECTIONTYPE {
    D3DRMPROJECT_PERSPECTIVE            = 0,
    D3DRMPROJECT_ORTHOGRAPHIC           = 1,
    D3DRMPROJECT_RIGHTHANDPERSPECTIVE   = 2,
    D3DRMPROJECT_RIGHTHANDORTHOGRAPHIC  = 3
} D3DRMPROJECTIONTYPE;
typedef D3DRMPROJECTIONTYPE *LPD3DRMPROJECTIONTYPE;

/* Direct3DRM XOF formats */
typedef enum _D3DRMXOFFORMAT {
    D3DRMXOF_BINARY     = 0,
    D3DRMXOF_COMPRESSED = 1,
    D3DRMXOF_TEXT       = 2
} D3DRMXOFFORMAT;
typedef D3DRMXOFFORMAT  *LPD3DRMXOFFORMAT;

/* Direct3DRM color sources */
typedef enum _D3DRMCOLORSOURCE {
    D3DRMCOLOR_FROMFACE     = 0,
    D3DRMCOLOR_FROMVERTEX   = 1
} D3DRMCOLORSOURCE;
typedef D3DRMCOLORSOURCE    *LPD3DRMCOLORSOURCE;

/* Direct3DRM frame constraints */
typedef enum _D3DRMFRAMECONSTRAINT {
    D3DRMCONSTRAINT_Z   = 0,
    D3DRMCONSTRAINT_Y   = 1,
    D3DRMCONSTRAINT_X   = 2
} D3DRMFRAMECONSTRAINT;
typedef D3DRMFRAMECONSTRAINT    *LPD3DRMFRAMECONSTRAINT;

/* Direct3DRM material modes */
typedef enum _D3DRMMATERIALMODE {
    D3DRMMATERIAL_FROMMESH      = 0,
    D3DRMMATERIAL_FROMPARENT    = 1,
    D3DRMMATERIAL_FROMFRAME     = 2
} D3DRMMATERIALMODE;
typedef D3DRMMATERIALMODE   *LPD3DRMMATERIALMODE;

/* Direct3DRM fog modes */
typedef enum _D3DRMFOGMODE {
    D3DRMFOG_LINEAR             = 0,
    D3DRMFOG_EXPONENTIAL        = 1,
    D3DRMFOG_EXPONENTIALSQUARED = 2,
} D3DRMFOGMODE;
typedef D3DRMFOGMODE    *LPD3DRMFOGMODE;

/* Direct3DRM z-buffer modes */
typedef enum _D3DRMZBUFFERMODE {
    D3DRMZBUFFER_FROMPARENT = 0,
    D3DRMZBUFFER_ENABLE     = 1,
    D3DRMZBUFFER_DISABLE    = 2
} D3DRMZBUFFERMODE;
typedef D3DRMZBUFFERMODE    *LPD3DRMZBUFFERMODE;

/* Direct3DRM sort modes */
typedef enum _D3DRMSORTMODE {
    D3DRMSORT_FROMPARENT    = 0,
    D3DRMSORT_NONE          = 1,
    D3DRMSORT_FRONTTOBACK   = 2,
    D3DRMSORT_BACKTOFRONT   = 3
} D3DRMSORTMODE;
typedef D3DRMSORTMODE   *LPD3DRMSORTMODE;

/* Direct3DRM material overrides */
typedef struct _D3DRMMATERIALOVERRIDE {
    DWORD           dwSize;
    DWORD           dwFlags;
    D3DCOLORVALUE   dcDiffuse;
    D3DCOLORVALUE   dcAmbient;
    D3DCOLORVALUE   dcEmissive;
    D3DCOLORVALUE   dcSpecular;
    D3DVALUE        dvPower;
    LPUNKNOWN       lpD3DRMTex;
} D3DRMMATERIALOVERRIDE;
typedef D3DRMMATERIALOVERRIDE   *LPD3DRMMATERIALOVERRIDE;

/* Direct3DRM load resource information */
typedef struct _D3DRMLOADRESOURCE {
    HMODULE hModule;
    LPCTSTR lpName;
    LPCTSTR lpType;
} D3DRMLOADRESOURCE;
typedef D3DRMLOADRESOURCE   *LPD3DRMLOADRESOURCE;

/* Direct3DRM load memory information */
typedef struct _D3DRMLOADMEMORY {
    LPVOID  lpMemory;
    DWORD   dSize;
} D3DRMLOADMEMORY;
typedef D3DRMLOADMEMORY *LPD3DRMLOADMEMORY;

/* Direct3DRM mesh load status */
typedef struct _D3DRMPMESHLOADSTATUS {
    DWORD   dwSize;
    DWORD   dwPMeshSize;
    DWORD   dwBaseMeshSize;
    DWORD   dwBytesLoaded;
    DWORD   dwVerticesLoaded;
    DWORD   dwFacesLoaded;
    HRESULT dwLoadResult;
    DWORD   dwFlags;
} D3DRMPMESHLOADSTATUS;
typedef D3DRMPMESHLOADSTATUS    *LPD3DRMPMESHLOADSTATUS;

/* Direct3DRM user visual reasons */
typedef enum _D3DRMUSERVISUALREASON {
    D3DRMUSERVISUAL_CANSEE  = 0,
    D3DRMUSERVISUAL_RENDER  = 1
} D3DRMUSERVISUALREASON;
typedef D3DRMUSERVISUALREASON   *LPD3DRMUSERVISUALREASON;

/* Direct3DRM animation key */
typedef struct _D3DRMANIMATIONKEY {
    DWORD       dwSize;
    DWORD       dwKeyType;
    D3DVALUE    dvTime;
    DWORD       dwID;
    union {
        D3DRMQUATERNION dqRotateKey;
        D3DVECTOR       dvScaleKey;
        D3DVECTOR       dvPositionKey;
    };
} D3DRMANIMATIONKEY;
typedef D3DRMANIMATIONKEY   *LPD3DRMANIMATIONKEY;

/* Direct3DRM vertex */
typedef struct _D3DRMVERTEX {
    D3DVECTOR   position;
    D3DVECTOR   normal;
    D3DVALUE    tu;
    D3DVALUE    tv;
    D3DCOLOR    color;
} D3DRMVERTEX;
typedef D3DRMVERTEX *LPD3DRMVERTEX;

/* Functions in D3DRM.DLL */
extern D3DVALUE D3DRMAPI    D3DRMColorGetAlpha( D3DCOLOR );
extern D3DVALUE D3DRMAPI    D3DRMColorGetBlue( D3DCOLOR );
extern D3DVALUE D3DRMAPI    D3DRMColorGetGreen( D3DCOLOR );
extern D3DVALUE D3DRMAPI    D3DRMColorGetRed( D3DCOLOR );
extern D3DCOLOR D3DRMAPI    D3DRMCreateColorRGB( D3DVALUE, D3DVALUE, D3DVALUE );
extern D3DCOLOR D3DRMAPI    D3DRMCreateColorRGBA( D3DVALUE, D3DVALUE, D3DVALUE, D3DVALUE );
extern void D3DRMAPI        D3DRMMatrixFromQuaternion( D3DRMMATRIX4D, LPD3DRMQUATERNION );
extern LPD3DRMQUATERNION D3DRMAPI   D3DRMQuaternionFromRotation( LPD3DRMQUATERNION, LPD3DVECTOR, D3DVALUE );
extern LPD3DRMQUATERNION D3DRMAPI   D3DRMQuaternionMultiply( LPD3DRMQUATERNION, LPD3DRMQUATERNION, LPD3DRMQUATERNION );
extern LPD3DRMQUATERNION D3DRMAPI   D3DRMQuaternionSlerp( LPD3DRMQUATERNION, LPD3DRMQUATERNION, LPD3DRMQUATERNION, D3DVALUE );
extern LPD3DVECTOR D3DRMAPI D3DRMVectorAdd( LPD3DVECTOR, LPD3DVECTOR, LPD3DVECTOR );
extern LPD3DVECTOR D3DRMAPI D3DRMVectorCrossProduct( LPD3DVECTOR, LPD3DVECTOR, LPD3DVECTOR );
extern D3DVALUE D3DRMAPI    D3DRMVectorDotProduct( LPD3DVECTOR, LPD3DVECTOR );
extern D3DVALUE D3DRMAPI    D3DRMVectorModulus( LPD3DVECTOR );
extern LPD3DVECTOR D3DRMAPI D3DRMVectorNormalize( LPD3DVECTOR );
extern LPD3DVECTOR D3DRMAPI D3DRMVectorRandom( LPD3DVECTOR );
extern LPD3DVECTOR D3DRMAPI D3DRMVectorReflect( LPD3DVECTOR, LPD3DVECTOR, LPD3DVECTOR );
extern LPD3DVECTOR D3DRMAPI D3DRMVectorRotate( LPD3DVECTOR, LPD3DVECTOR, LPD3DVECTOR, D3DVALUE );
extern LPD3DVECTOR D3DRMAPI D3DRMVectorScale( LPD3DVECTOR, LPD3DVECTOR, D3DVALUE );
extern LPD3DVECTOR D3DRMAPI D3DRMVectorSubtract( LPD3DVECTOR, LPD3DVECTOR, LPD3DVECTOR );

/* Alias */
#define D3DRMVectorNormalise    D3DRMVectorNormalize

#ifdef __cplusplus
} /* extern "C" */
#endif

#endif /* __D3DRMDEFS_H__ */
