19fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*==========================================================================;
29fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream *
39fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream *  Copyright (C) 1995-1996 Microsoft Corporation.  All Rights Reserved.
49fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream *
59fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream *  File:       d3drm.h
69fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream *  Content:    Direct3DRM include file
79fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream *
89fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream ***************************************************************************/
99fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#ifndef __D3DRMDEFS_H__
119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define __D3DRMDEFS_H__
129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#include <stddef.h>
149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#include "d3dtypes.h"
159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#ifdef WIN32
179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define D3DRMAPI  __stdcall
189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#else
199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define D3DRMAPI
209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#endif
219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#if defined(__cplusplus)
239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern "C" {
249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#endif
259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#ifndef TRUE
279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define FALSE 0
289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define TRUE 1
299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#endif
309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct _D3DRMVECTOR4D
329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{   D3DVALUE x, y, z, w;
339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} D3DRMVECTOR4D, *LPD3DRMVECTOR4D;
349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef D3DVALUE D3DRMMATRIX4D[4][4];
369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct _D3DRMQUATERNION
389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{   D3DVALUE s;
399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DVECTOR v;
409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} D3DRMQUATERNION, *LPD3DRMQUATERNION;
419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct _D3DRMBOX
439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{   D3DVECTOR min, max;
449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} D3DRMBOX, *LPD3DRMBOX;
459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef void (*D3DRMWRAPCALLBACK)
479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    (LPD3DVECTOR, int* u, int* v, LPD3DVECTOR a, LPD3DVECTOR b, LPVOID);
489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef enum _D3DRMLIGHTTYPE
509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{   D3DRMLIGHT_AMBIENT,
519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMLIGHT_POINT,
529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMLIGHT_SPOT,
539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMLIGHT_DIRECTIONAL,
549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMLIGHT_PARALLELPOINT
559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} D3DRMLIGHTTYPE, *LPD3DRMLIGHTTYPE;
569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef enum _D3DRMSHADEMODE {
589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMSHADE_FLAT     = 0,
599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMSHADE_GOURAUD  = 1,
609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMSHADE_PHONG    = 2,
619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMSHADE_MASK     = 7,
639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMSHADE_MAX      = 8
649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} D3DRMSHADEMODE, *LPD3DRMSHADEMODE;
659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef enum _D3DRMLIGHTMODE {
679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMLIGHT_OFF      = 0 * D3DRMSHADE_MAX,
689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMLIGHT_ON       = 1 * D3DRMSHADE_MAX,
699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMLIGHT_MASK     = 7 * D3DRMSHADE_MAX,
719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMLIGHT_MAX      = 8 * D3DRMSHADE_MAX
729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} D3DRMLIGHTMODE, *LPD3DRMLIGHTMODE;
739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef enum _D3DRMFILLMODE {
759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMFILL_POINTS    = 0 * D3DRMLIGHT_MAX,
769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMFILL_WIREFRAME = 1 * D3DRMLIGHT_MAX,
779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMFILL_SOLID     = 2 * D3DRMLIGHT_MAX,
789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMFILL_MASK      = 7 * D3DRMLIGHT_MAX,
809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMFILL_MAX       = 8 * D3DRMLIGHT_MAX
819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} D3DRMFILLMODE, *LPD3DRMFILLMODE;
829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef DWORD D3DRMRENDERQUALITY, *LPD3DRMRENDERQUALITY;
849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define D3DRMRENDER_WIREFRAME   (D3DRMSHADE_FLAT+D3DRMLIGHT_OFF+D3DRMFILL_WIREFRAME)
869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define D3DRMRENDER_UNLITFLAT   (D3DRMSHADE_FLAT+D3DRMLIGHT_OFF+D3DRMFILL_SOLID)
879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define D3DRMRENDER_FLAT        (D3DRMSHADE_FLAT+D3DRMLIGHT_ON+D3DRMFILL_SOLID)
889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define D3DRMRENDER_GOURAUD     (D3DRMSHADE_GOURAUD+D3DRMLIGHT_ON+D3DRMFILL_SOLID)
899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define D3DRMRENDER_PHONG       (D3DRMSHADE_PHONG+D3DRMLIGHT_ON+D3DRMFILL_SOLID)
909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef enum _D3DRMTEXTUREQUALITY
929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{   D3DRMTEXTURE_NEAREST,               /* choose nearest texel */
939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMTEXTURE_LINEAR,                /* interpolate 4 texels */
949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMTEXTURE_MIPNEAREST,            /* nearest texel in nearest mipmap  */
959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMTEXTURE_MIPLINEAR,             /* interpolate 2 texels from 2 mipmaps */
969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMTEXTURE_LINEARMIPNEAREST,      /* interpolate 4 texels in nearest mipmap */
979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMTEXTURE_LINEARMIPLINEAR        /* interpolate 8 texels from 2 mipmaps */
989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} D3DRMTEXTUREQUALITY, *LPD3DRMTEXTUREQUALITY;
999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef enum _D3DRMCOMBINETYPE
1019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{   D3DRMCOMBINE_REPLACE,
1029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMCOMBINE_BEFORE,
1039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMCOMBINE_AFTER
1049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} D3DRMCOMBINETYPE, *LPD3DRMCOMBINETYPE;
1059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef D3DCOLORMODEL D3DRMCOLORMODEL, *LPD3DRMCOLORMODEL;
1079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef enum _D3DRMPALETTEFLAGS
1099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{   D3DRMPALETTE_FREE,                  /* renderer may use this entry freely */
1109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMPALETTE_READONLY,              /* fixed but may be used by renderer */
1119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMPALETTE_RESERVED               /* may not be used by renderer */
1129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} D3DRMPALETTEFLAGS, *LPD3DRMPALETTEFLAGS;
1139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct _D3DRMPALETTEENTRY
1159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{   unsigned char red;          /* 0 .. 255 */
1169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    unsigned char green;        /* 0 .. 255 */
1179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    unsigned char blue;         /* 0 .. 255 */
1189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    unsigned char flags;        /* one of D3DRMPALETTEFLAGS */
1199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} D3DRMPALETTEENTRY, *LPD3DRMPALETTEENTRY;
1209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct _D3DRMIMAGE
1229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{   int width, height;          /* width and height in pixels */
1239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    int aspectx, aspecty;       /* aspect ratio for non-square pixels */
1249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    int depth;                  /* bits per pixel */
1259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    int rgb;                    /* if false, pixels are indices into a
1269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                                   palette otherwise, pixels encode
1279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                                   RGB values. */
1289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    int bytes_per_line;         /* number of bytes of memory for a
1299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                                   scanline. This must be a multiple
1309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                                   of 4. */
1319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    void* buffer1;              /* memory to render into (first buffer). */
1329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    void* buffer2;              /* second rendering buffer for double
1339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                                   buffering, set to NULL for single
1349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                                   buffering. */
1359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    unsigned long red_mask;
1369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    unsigned long green_mask;
1379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    unsigned long blue_mask;
1389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    unsigned long alpha_mask;   /* if rgb is true, these are masks for
1399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                                   the red, green and blue parts of a
1409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                                   pixel.  Otherwise, these are masks
1419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                                   for the significant bits of the
1429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                                   red, green and blue elements in the
1439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                                   palette.  For instance, most SVGA
1449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                                   displays use 64 intensities of red,
1459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                                   green and blue, so the masks should
1469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                                   all be set to 0xfc. */
1479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    int palette_size;           /* number of entries in palette */
1489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMPALETTEENTRY* palette; /* description of the palette (only if
1499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                                   rgb is false).  Must be (1<<depth)
1509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                                   elements. */
1519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} D3DRMIMAGE, *LPD3DRMIMAGE;
1529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef enum _D3DRMWRAPTYPE
1549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{   D3DRMWRAP_FLAT,
1559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMWRAP_CYLINDER,
1569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMWRAP_SPHERE,
1579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMWRAP_CHROME
1589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} D3DRMWRAPTYPE, *LPD3DRMWRAPTYPE;
1599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define D3DRMWIREFRAME_CULL             1 /* cull backfaces */
1619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define D3DRMWIREFRAME_HIDDENLINE       2 /* lines are obscured by closer objects */
1629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef enum _D3DRMPROJECTIONTYPE
1649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{   D3DRMPROJECT_PERSPECTIVE,
1659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMPROJECT_ORTHOGRAPHIC
1669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} D3DRMPROJECTIONTYPE, *LPD3DRMPROJECTIONTYPE;
1679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef enum _D3DRMXOFFORMAT
1699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{   D3DRMXOF_BINARY,
1709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMXOF_COMPRESSED,
1719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMXOF_TEXT
1729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} D3DRMXOFFORMAT, *LPD3DRMXOFFORMAT;
1739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef DWORD D3DRMSAVEOPTIONS;
1759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define D3DRMXOFSAVE_NORMALS 1
1769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define D3DRMXOFSAVE_TEXTURECOORDINATES 2
1779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define D3DRMXOFSAVE_MATERIALS 4
1789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define D3DRMXOFSAVE_TEXTURENAMES 8
1799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define D3DRMXOFSAVE_ALL 15
1809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef enum _D3DRMCOLORSOURCE
1829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{   D3DRMCOLOR_FROMFACE,
1839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMCOLOR_FROMVERTEX
1849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} D3DRMCOLORSOURCE, *LPD3DRMCOLORSOURCE;
1859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef enum _D3DRMFRAMECONSTRAINT
1879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{   D3DRMCONSTRAIN_Z,           /* use only X and Y rotations */
1889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMCONSTRAIN_Y,           /* use only X and Z rotations */
1899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMCONSTRAIN_X            /* use only Y and Z rotations */
1909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} D3DRMFRAMECONSTRAINT, *LPD3DRMFRAMECONSTRAINT;
1919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef enum _D3DRMMATERIALMODE
1939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{   D3DRMMATERIAL_FROMMESH,
1949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMMATERIAL_FROMPARENT,
1959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMMATERIAL_FROMFRAME
1969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} D3DRMMATERIALMODE, *LPD3DRMMATERIALMODE;
1979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef enum _D3DRMFOGMODE
1999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{   D3DRMFOG_LINEAR,            /* linear between start and end */
2009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMFOG_EXPONENTIAL,       /* density * exp(-distance) */
2019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMFOG_EXPONENTIALSQUARED /* density * exp(-distance*distance) */
2029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} D3DRMFOGMODE, *LPD3DRMFOGMODE;
2039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef enum _D3DRMZBUFFERMODE {
2059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMZBUFFER_FROMPARENT,    /* default */
2069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMZBUFFER_ENABLE,        /* enable zbuffering */
2079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMZBUFFER_DISABLE        /* disable zbuffering */
2089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} D3DRMZBUFFERMODE, *LPD3DRMZBUFFERMODE;
2099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef enum _D3DRMSORTMODE {
2119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMSORT_FROMPARENT,       /* default */
2129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMSORT_NONE,             /* don't sort child frames */
2139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMSORT_FRONTTOBACK,      /* sort child frames front-to-back */
2149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMSORT_BACKTOFRONT       /* sort child frames back-to-front */
2159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} D3DRMSORTMODE, *LPD3DRMSORTMODE;
2169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef DWORD D3DRMANIMATIONOPTIONS;
2189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define D3DRMANIMATION_OPEN 0x01L
2199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define D3DRMANIMATION_CLOSED 0x02L
2209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define D3DRMANIMATION_LINEARPOSITION 0x04L
2219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define D3DRMANIMATION_SPLINEPOSITION 0x08L
2229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define D3DRMANIMATION_SCALEANDROTATION 0x00000010L
2239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define D3DRMANIMATION_POSITION 0x00000020L
2249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef DWORD D3DRMLOADOPTIONS;
2269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define D3DRMLOAD_FROMFILE  0x00L
2289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define D3DRMLOAD_FROMRESOURCE 0x01L
2299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define D3DRMLOAD_FROMMEMORY 0x02L
2309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define D3DRMLOAD_FROMSTREAM 0x04L
2319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define D3DRMLOAD_BYNAME 0x10L
2339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define D3DRMLOAD_BYPOSITION 0x20L
2349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define D3DRMLOAD_BYGUID 0x40L
2359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define D3DRMLOAD_FIRST 0x80L
2369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define D3DRMLOAD_INSTANCEBYREFERENCE 0x100L
2389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define D3DRMLOAD_INSTANCEBYCOPYING 0x200L
2399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct _D3DRMLOADRESOURCE {
2419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream  HMODULE hModule;
2429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream  LPCTSTR lpName;
2439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream  LPCTSTR lpType;
2449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} D3DRMLOADRESOURCE, *LPD3DRMLOADRESOURCE;
2459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct _D3DRMLOADMEMORY {
2479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream  LPVOID lpMemory;
2489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream  DWORD dSize;
2499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} D3DRMLOADMEMORY, *LPD3DRMLOADMEMORY;
2509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef enum _D3DRMUSERVISUALREASON {
2529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMUSERVISUAL_CANSEE,
2539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DRMUSERVISUAL_RENDER
2549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} D3DRMUSERVISUALREASON, *LPD3DRMUSERVISUALREASON;
2559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef DWORD D3DRMMAPPING, D3DRMMAPPINGFLAG, *LPD3DRMMAPPING;
2589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamstatic const D3DRMMAPPINGFLAG D3DRMMAP_WRAPU = 1;
2599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamstatic const D3DRMMAPPINGFLAG D3DRMMAP_WRAPV = 2;
2609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamstatic const D3DRMMAPPINGFLAG D3DRMMAP_PERSPCORRECT = 4;
2619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct _D3DRMVERTEX
2639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{   D3DVECTOR       position;
2649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DVECTOR       normal;
2659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DVALUE        tu, tv;
2669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream    D3DCOLOR        color;
2679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} D3DRMVERTEX, *LPD3DRMVERTEX;
2689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef LONG D3DRMGROUPINDEX; /* group indexes begin a 0 */
2709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamstatic const D3DRMGROUPINDEX D3DRMGROUP_ALLGROUPS = -1;
2719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
2739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * Create a color from three components in the range 0-1 inclusive.
2749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream */
2759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern D3DCOLOR D3DRMAPI        D3DRMCreateColorRGB(D3DVALUE red,
2769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                                          D3DVALUE green,
2779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                                          D3DVALUE blue);
2789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
2809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * Create a color from four components in the range 0-1 inclusive.
2819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream */
2829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern D3DCOLOR D3DRMAPI        D3DRMCreateColorRGBA(D3DVALUE red,
2839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                                                 D3DVALUE green,
2849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                                                 D3DVALUE blue,
2859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                                                 D3DVALUE alpha);
2869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
2889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * Get the red component of a color.
2899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream */
2909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern D3DVALUE                 D3DRMAPI D3DRMColorGetRed(D3DCOLOR);
2919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
2939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * Get the green component of a color.
2949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream */
2959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern D3DVALUE                 D3DRMAPI D3DRMColorGetGreen(D3DCOLOR);
2969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
2989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * Get the blue component of a color.
2999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream */
3009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern D3DVALUE                 D3DRMAPI D3DRMColorGetBlue(D3DCOLOR);
3019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
3039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * Get the alpha component of a color.
3049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream */
3059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern D3DVALUE                 D3DRMAPI D3DRMColorGetAlpha(D3DCOLOR);
3069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
3089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * Add two vectors.  Returns its first argument.
3099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream */
3109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern LPD3DVECTOR      D3DRMAPI D3DRMVectorAdd(LPD3DVECTOR d,
3119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                                          LPD3DVECTOR s1,
3129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                                          LPD3DVECTOR s2);
3139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
3159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * Subtract two vectors.  Returns its first argument.
3169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream */
3179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern LPD3DVECTOR      D3DRMAPI D3DRMVectorSubtract(LPD3DVECTOR d,
3189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                                               LPD3DVECTOR s1,
3199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                                               LPD3DVECTOR s2);
3209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
3219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * Reflect a ray about a given normal.  Returns its first argument.
3229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream */
3239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern LPD3DVECTOR      D3DRMAPI D3DRMVectorReflect(LPD3DVECTOR d,
3249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                                              LPD3DVECTOR ray,
3259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                                              LPD3DVECTOR norm);
3269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
3289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * Calculate the vector cross product.  Returns its first argument.
3299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream */
3309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern LPD3DVECTOR      D3DRMAPI D3DRMVectorCrossProduct(LPD3DVECTOR d,
3319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                                                   LPD3DVECTOR s1,
3329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                                                   LPD3DVECTOR s2);
3339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
3349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * Return the vector dot product.
3359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream */
3369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern D3DVALUE                 D3DRMAPI D3DRMVectorDotProduct(LPD3DVECTOR s1,
3379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                                                 LPD3DVECTOR s2);
3389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
3409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * Scale a vector so that its modulus is 1.  Returns its argument or
3419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * NULL if there was an error (e.g. a zero vector was passed).
3429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream */
3439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern LPD3DVECTOR      D3DRMAPI D3DRMVectorNormalize(LPD3DVECTOR);
3449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define D3DRMVectorNormalise D3DRMVectorNormalize
3459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
3479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * Return the length of a vector (e.g. sqrt(x*x + y*y + z*z)).
3489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream */
3499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern D3DVALUE                 D3DRMAPI D3DRMVectorModulus(LPD3DVECTOR v);
3509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
3529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * Set the rotation part of a matrix to be a rotation of theta radians
3539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * around the given axis.
3549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream */
3559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern LPD3DVECTOR      D3DRMAPI D3DRMVectorRotate(LPD3DVECTOR r, LPD3DVECTOR v, LPD3DVECTOR axis, D3DVALUE theta);
3579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
3599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * Scale a vector uniformly in all three axes
3609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream */
3619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern LPD3DVECTOR      D3DRMAPI D3DRMVectorScale(LPD3DVECTOR d, LPD3DVECTOR s, D3DVALUE factor);
3629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
3649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * Return a random unit vector
3659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream */
3669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern LPD3DVECTOR      D3DRMAPI D3DRMVectorRandom(LPD3DVECTOR d);
3679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
3699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * Returns a unit quaternion that represents a rotation of theta radians
3709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * around the given axis.
3719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream */
3729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern LPD3DRMQUATERNION D3DRMAPI D3DRMQuaternionFromRotation(LPD3DRMQUATERNION quat,
3749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                                                              LPD3DVECTOR v,
3759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                                                              D3DVALUE theta);
3769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
3789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * Calculate the product of two quaternions
3799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream */
3809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern LPD3DRMQUATERNION D3DRMAPI D3DRMQuaternionMultiply(LPD3DRMQUATERNION q,
3819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                                                          LPD3DRMQUATERNION a,
3829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                                                          LPD3DRMQUATERNION b);
3839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
3859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * Interpolate between two quaternions
3869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream */
3879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern LPD3DRMQUATERNION D3DRMAPI D3DRMQuaternionSlerp(LPD3DRMQUATERNION q,
3889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                                                       LPD3DRMQUATERNION a,
3899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                                                       LPD3DRMQUATERNION b,
3909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                                                       D3DVALUE alpha);
3919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
3939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream * Calculate the matrix for the rotation that a unit quaternion represents
3949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream */
3959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern void             D3DRMAPI D3DRMMatrixFromQuaternion(D3DRMMATRIX4D dmMat, LPD3DRMQUATERNION lpDqQuat);
3969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#if defined(__cplusplus)
3999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream};
4009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#endif
4019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#endif
403