text: /*
  ** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
  ** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
  ** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
  ** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE 
  ** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com). 
  ** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER 
  ** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
  ** FULL TEXT OF THE NON-WARRANTY PROVISIONS.  
  ** 
  ** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
  ** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
  ** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
  ** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
  ** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
  ** THE UNITED STATES.  
  ** 
  ** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
  */
  
  /*
  ** GLIDE.H
  **
  ** The following #defines are relevant when using Glide:
  **
  ** One of the following "platform constants" must be defined during
  ** compilation:
  **
  **            __DOS__           Defined for 32-bit DOS applications
  **            __WIN32__         Defined for 32-bit Windows applications
  **            __sparc__         Defined for Sun Solaris/SunOS
  **            __linux__         Defined for Linux applications
  **            __FreeBSD__       Defined for FreeBSD applications
  **            __NetBSD__        Defined for NetBSD applications
  **            __OpenBSD__       Defined for OpenBSD applications
  **            __IRIX__          Defined for SGI Irix applications
  **
  */
  #ifndef __GLIDE_H__
  #define __GLIDE_H__
  
  #include <3dfx.h>
  #include <glidesys.h>
  #include <sst1vid.h>
  
  #ifdef __cplusplus
  extern "C" {
  #endif
  
  /*
  ** -----------------------------------------------------------------------
  ** TYPE DEFINITIONS
  ** -----------------------------------------------------------------------
  */
  typedef FxU32 GrColor_t;
  typedef FxU8  GrAlpha_t;
  typedef FxU32 GrMipMapId_t;
  typedef FxU32 GrStipplePattern_t;
  typedef FxU8  GrFog_t;
  typedef FxU32 GrContext_t;
  typedef int (FX_CALL *GrProc)();
  
  /*
  ** -----------------------------------------------------------------------
  ** CONSTANTS AND TYPES
  ** -----------------------------------------------------------------------
  */
  #define GR_NULL_MIPMAP_HANDLE  ((GrMipMapId_t) -1)
  
  #define GR_MIPMAPLEVELMASK_EVEN  FXBIT(0)
  #define GR_MIPMAPLEVELMASK_ODD  FXBIT(1)
  #define GR_MIPMAPLEVELMASK_BOTH (GR_MIPMAPLEVELMASK_EVEN | GR_MIPMAPLEVELMASK_ODD )
  
  #define GR_LODBIAS_BILINEAR     0.5
  #define GR_LODBIAS_TRILINEAR    0.0
  
  typedef FxI32 GrChipID_t;
  #define GR_TMU0         0x0
  #define GR_TMU1         0x1
  #define GR_TMU2         0x2
  
  #define GR_FBI          0x0
  
  typedef FxI32 GrCombineFunction_t;
  #define GR_COMBINE_FUNCTION_ZERO        0x0
  #define GR_COMBINE_FUNCTION_NONE        GR_COMBINE_FUNCTION_ZERO
  #define GR_COMBINE_FUNCTION_LOCAL       0x1
  #define GR_COMBINE_FUNCTION_LOCAL_ALPHA 0x2
  #define GR_COMBINE_FUNCTION_SCALE_OTHER 0x3
  #define GR_COMBINE_FUNCTION_BLEND_OTHER GR_COMBINE_FUNCTION_SCALE_OTHER
  #define GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL 0x4
  #define GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL_ALPHA 0x5 
  #define GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL 0x6
  #define GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL 0x7
  #define GR_COMBINE_FUNCTION_BLEND GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL
  #define GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL_ALPHA 0x8
  #define GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL 0x9
  #define GR_COMBINE_FUNCTION_BLEND_LOCAL GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL
  #define GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA 0x10
  
  typedef FxI32 GrCombineFactor_t;
  #define GR_COMBINE_FACTOR_ZERO          0x0
  #define GR_COMBINE_FACTOR_NONE          GR_COMBINE_FACTOR_ZERO
  #define GR_COMBINE_FACTOR_LOCAL         0x1
  #define GR_COMBINE_FACTOR_OTHER_ALPHA   0x2
  #define GR_COMBINE_FACTOR_LOCAL_ALPHA   0x3
  #define GR_COMBINE_FACTOR_TEXTURE_ALPHA 0x4
  #define GR_COMBINE_FACTOR_TEXTURE_RGB   0x5
  #define GR_COMBINE_FACTOR_DETAIL_FACTOR GR_COMBINE_FACTOR_TEXTURE_ALPHA
  #define GR_COMBINE_FACTOR_LOD_FRACTION  0x5
  #define GR_COMBINE_FACTOR_ONE           0x8
  #define GR_COMBINE_FACTOR_ONE_MINUS_LOCAL 0x9
  #define GR_COMBINE_FACTOR_ONE_MINUS_OTHER_ALPHA 0xa
  #define GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA 0xb
  #define GR_COMBINE_FACTOR_ONE_MINUS_TEXTURE_ALPHA 0xc
  #define GR_COMBINE_FACTOR_ONE_MINUS_DETAIL_FACTOR GR_COMBINE_FACTOR_ONE_MINUS_TEXTURE_ALPHA
  #define GR_COMBINE_FACTOR_ONE_MINUS_LOD_FRACTION 0xd
  
  
  typedef FxI32 GrCombineLocal_t;
  #define GR_COMBINE_LOCAL_ITERATED 0x0
  #define GR_COMBINE_LOCAL_CONSTANT 0x1
  #define GR_COMBINE_LOCAL_NONE GR_COMBINE_LOCAL_CONSTANT
  #define GR_COMBINE_LOCAL_DEPTH  0x2
  
  typedef FxI32 GrCombineOther_t;
  #define GR_COMBINE_OTHER_ITERATED 0x0
  #define GR_COMBINE_OTHER_TEXTURE 0x1
  #define GR_COMBINE_OTHER_CONSTANT 0x2
  #define GR_COMBINE_OTHER_NONE GR_COMBINE_OTHER_CONSTANT
  
  
  typedef FxI32 GrAlphaSource_t;
  #define GR_ALPHASOURCE_CC_ALPHA 0x0
  #define GR_ALPHASOURCE_ITERATED_ALPHA 0x1
  #define GR_ALPHASOURCE_TEXTURE_ALPHA 0x2
  #define GR_ALPHASOURCE_TEXTURE_ALPHA_TIMES_ITERATED_ALPHA 0x3
  
  
  typedef FxI32 GrColorCombineFnc_t;
  #define GR_COLORCOMBINE_ZERO 0x0
  #define GR_COLORCOMBINE_CCRGB 0x1
  #define GR_COLORCOMBINE_ITRGB 0x2
  #define GR_COLORCOMBINE_ITRGB_DELTA0 0x3
  #define GR_COLORCOMBINE_DECAL_TEXTURE 0x4
  #define GR_COLORCOMBINE_TEXTURE_TIMES_CCRGB 0x5
  #define GR_COLORCOMBINE_TEXTURE_TIMES_ITRGB 0x6
  #define GR_COLORCOMBINE_TEXTURE_TIMES_ITRGB_DELTA0 0x7
  #define GR_COLORCOMBINE_TEXTURE_TIMES_ITRGB_ADD_ALPHA 0x8
  #define GR_COLORCOMBINE_TEXTURE_TIMES_ALPHA 0x9
  #define GR_COLORCOMBINE_TEXTURE_TIMES_ALPHA_ADD_ITRGB 0xa
  #define GR_COLORCOMBINE_TEXTURE_ADD_ITRGB 0xb
  #define GR_COLORCOMBINE_TEXTURE_SUB_ITRGB 0xc
  #define GR_COLORCOMBINE_CCRGB_BLEND_ITRGB_ON_TEXALPHA 0xd
  #define GR_COLORCOMBINE_DIFF_SPEC_A 0xe
  #define GR_COLORCOMBINE_DIFF_SPEC_B 0xf
  #define GR_COLORCOMBINE_ONE 0x10
  
  typedef FxI32 GrAlphaBlendFnc_t;
  #define GR_BLEND_ZERO 0x0
  #define GR_BLEND_SRC_ALPHA 0x1
  #define GR_BLEND_SRC_COLOR 0x2
  #define GR_BLEND_DST_COLOR GR_BLEND_SRC_COLOR
  #define GR_BLEND_DST_ALPHA 0x3 
  #define GR_BLEND_ONE 0x4
  #define GR_BLEND_ONE_MINUS_SRC_ALPHA 0x5
  #define GR_BLEND_ONE_MINUS_SRC_COLOR 0x6
  #define GR_BLEND_ONE_MINUS_DST_COLOR GR_BLEND_ONE_MINUS_SRC_COLOR 
  #define GR_BLEND_ONE_MINUS_DST_ALPHA 0x7
  #define GR_BLEND_RESERVED_8 0x8
  #define GR_BLEND_RESERVED_9 0x9
  #define GR_BLEND_RESERVED_A 0xa
  #define GR_BLEND_RESERVED_B 0xb
  #define GR_BLEND_RESERVED_C 0xc
  #define GR_BLEND_RESERVED_D 0xd
  #define GR_BLEND_RESERVED_E 0xe
  #define GR_BLEND_ALPHA_SATURATE 0xf
  #define GR_BLEND_PREFOG_COLOR GR_BLEND_ALPHA_SATURATE
  
  typedef FxI32 GrAspectRatio_t;
  #define GR_ASPECT_LOG2_8x1        3       /* 8W x 1H */
  #define GR_ASPECT_LOG2_4x1        2       /* 4W x 1H */
  #define GR_ASPECT_LOG2_2x1        1       /* 2W x 1H */
  #define GR_ASPECT_LOG2_1x1        0       /* 1W x 1H */
  #define GR_ASPECT_LOG2_1x2       -1       /* 1W x 2H */
  #define GR_ASPECT_LOG2_1x4       -2       /* 1W x 4H */
  #define GR_ASPECT_LOG2_1x8       -3       /* 1W x 8H */
  
  typedef FxI32 GrBuffer_t;
  #define GR_BUFFER_FRONTBUFFER   0x0
  #define GR_BUFFER_BACKBUFFER    0x1
  #define GR_BUFFER_AUXBUFFER     0x2
  #define GR_BUFFER_DEPTHBUFFER   0x3
  #define GR_BUFFER_ALPHABUFFER   0x4
  #define GR_BUFFER_TRIPLEBUFFER  0x5
  
  typedef FxI32 GrChromakeyMode_t;
  #define GR_CHROMAKEY_DISABLE    0x0
  #define GR_CHROMAKEY_ENABLE     0x1
  
  typedef FxI32 GrChromaRangeMode_t;
  #define GR_CHROMARANGE_RGB_ALL_EXT  0x0
  
  #define GR_CHROMARANGE_DISABLE_EXT  0x00
  #define GR_CHROMARANGE_ENABLE_EXT   0x01
  
  typedef FxI32 GrTexChromakeyMode_t;
  #define GR_TEXCHROMA_DISABLE_EXT               0x0
  #define GR_TEXCHROMA_ENABLE_EXT                0x1
  
  #define GR_TEXCHROMARANGE_RGB_ALL_EXT  0x0
  
  typedef FxI32 GrCmpFnc_t;
  #define GR_CMP_NEVER    0x0
  #define GR_CMP_LESS     0x1
  #define GR_CMP_EQUAL    0x2
  #define GR_CMP_LEQUAL   0x3
  #define GR_CMP_GREATER  0x4
  #define GR_CMP_NOTEQUAL 0x5
  #define GR_CMP_GEQUAL   0x6
  #define GR_CMP_ALWAYS   0x7
  
  typedef FxI32 GrColorFormat_t;
  #define GR_COLORFORMAT_ARGB     0x0
  #define GR_COLORFORMAT_ABGR     0x1
  
  #define GR_COLORFORMAT_RGBA     0x2
  #define GR_COLORFORMAT_BGRA     0x3
  
  typedef FxI32 GrCullMode_t;
  #define GR_CULL_DISABLE         0x0
  #define GR_CULL_NEGATIVE        0x1
  #define GR_CULL_POSITIVE        0x2
  
  typedef FxI32 GrDepthBufferMode_t;
  #define GR_DEPTHBUFFER_DISABLE                  0x0
  #define GR_DEPTHBUFFER_ZBUFFER                  0x1
  #define GR_DEPTHBUFFER_WBUFFER                  0x2
  #define GR_DEPTHBUFFER_ZBUFFER_COMPARE_TO_BIAS  0x3
  #define GR_DEPTHBUFFER_WBUFFER_COMPARE_TO_BIAS  0x4
  
  typedef FxI32 GrDitherMode_t;
  #define GR_DITHER_DISABLE       0x0
  #define GR_DITHER_2x2           0x1
  #define GR_DITHER_4x4           0x2
  
  typedef FxI32 GrStippleMode_t;
  #define GR_STIPPLE_DISABLE  0x0
  #define GR_STIPPLE_PATTERN  0x1
  #define GR_STIPPLE_ROTATE   0x2
  
  typedef FxI32 GrFogMode_t;
  #define GR_FOG_DISABLE                     0x0
  #define GR_FOG_WITH_TABLE_ON_FOGCOORD_EXT  0x1
  #define GR_FOG_WITH_TABLE_ON_Q             0x2
  #define GR_FOG_WITH_TABLE_ON_W             GR_FOG_WITH_TABLE_ON_Q
  #define GR_FOG_WITH_ITERATED_Z             0x3
  #define GR_FOG_WITH_ITERATED_ALPHA_EXT     0x4
  #define GR_FOG_MULT2                       0x100
  #define GR_FOG_ADD2                        0x200
  
  typedef FxU32 GrLock_t;
  #define GR_LFB_READ_ONLY  0x00
  #define GR_LFB_WRITE_ONLY 0x01
  #define GR_LFB_IDLE       0x00
  #define GR_LFB_NOIDLE     0x10
  
  #define GR_LFB_WRITE_ONLY_EXPLICIT_EXT  0x02 /* explicitly not allow reading from the lfb pointer */
  
  typedef FxI32 GrLfbBypassMode_t;
  #define GR_LFBBYPASS_DISABLE    0x0
  #define GR_LFBBYPASS_ENABLE     0x1
  
  typedef FxI32 GrLfbWriteMode_t;
  #define GR_LFBWRITEMODE_565        0x0 /* RGB:RGB */
  #define GR_LFBWRITEMODE_555        0x1 /* RGB:RGB */
  #define GR_LFBWRITEMODE_1555       0x2 /* ARGB:ARGB */
  #define GR_LFBWRITEMODE_RESERVED1  0x3
  #define GR_LFBWRITEMODE_888        0x4 /* RGB */
  #define GR_LFBWRITEMODE_8888       0x5 /* ARGB */
  #define GR_LFBWRITEMODE_RESERVED2  0x6
  #define GR_LFBWRITEMODE_RESERVED3  0x7
  #define GR_LFBWRITEMODE_RESERVED4  0x8
  #define GR_LFBWRITEMODE_RESERVED5  0x9
  #define GR_LFBWRITEMODE_RESERVED6  0xa
  #define GR_LFBWRITEMODE_RESERVED7  0xb
  #define GR_LFBWRITEMODE_565_DEPTH  0xc /* RGB:DEPTH */
  #define GR_LFBWRITEMODE_555_DEPTH  0xd /* RGB:DEPTH */
  #define GR_LFBWRITEMODE_1555_DEPTH 0xe /* ARGB:DEPTH */
  #define GR_LFBWRITEMODE_ZA16       0xf /* DEPTH:DEPTH */
  #define GR_LFBWRITEMODE_ANY        0xFF
  
  
  typedef FxI32 GrOriginLocation_t;
  #define GR_ORIGIN_UPPER_LEFT    0x0
  #define GR_ORIGIN_LOWER_LEFT    0x1
  #define GR_ORIGIN_ANY           0xFF
  
  typedef struct {
      int                size;
      void               *lfbPtr;
      FxU32              strideInBytes;        
      GrLfbWriteMode_t   writeMode;
      GrOriginLocation_t origin;
  } GrLfbInfo_t;
  
  typedef FxI32 GrLOD_t;
  #define GR_LOD_LOG2_256         0x8
  #define GR_LOD_LOG2_128         0x7
  #define GR_LOD_LOG2_64          0x6
  #define GR_LOD_LOG2_32          0x5
  #define GR_LOD_LOG2_16          0x4
  #define GR_LOD_LOG2_8           0x3
  #define GR_LOD_LOG2_4           0x2
  #define GR_LOD_LOG2_2           0x1
  #define GR_LOD_LOG2_1           0x0
  
  typedef FxI32 GrMipMapMode_t;
  #define GR_MIPMAP_DISABLE               0x0 /* no mip mapping  */
  #define GR_MIPMAP_NEAREST               0x1 /* use nearest mipmap */
  #define GR_MIPMAP_NEAREST_DITHER        0x2 /* GR_MIPMAP_NEAREST + LOD dith */
  
  typedef FxI32 GrSmoothingMode_t;
  #define GR_SMOOTHING_DISABLE    0x0
  #define GR_SMOOTHING_ENABLE     0x1
  
  typedef FxI32 GrTextureClampMode_t;
  #define GR_TEXTURECLAMP_WRAP        0x0
  #define GR_TEXTURECLAMP_CLAMP       0x1
  #define GR_TEXTURECLAMP_MIRROR_EXT  0x2
  
  typedef FxI32 GrTextureCombineFnc_t;
  #define GR_TEXTURECOMBINE_ZERO          0x0 /* texout = 0 */
  #define GR_TEXTURECOMBINE_DECAL         0x1 /* texout = texthis */
  #define GR_TEXTURECOMBINE_OTHER         0x2 /* this TMU in passthru mode */
  #define GR_TEXTURECOMBINE_ADD           0x3 /* tout = tthis + t(this+1) */
  #define GR_TEXTURECOMBINE_MULTIPLY      0x4 /* texout = tthis * t(this+1) */
  #define GR_TEXTURECOMBINE_SUBTRACT      0x5 /* Sutract from upstream TMU */
  #define GR_TEXTURECOMBINE_DETAIL        0x6 /* detail--detail on tthis */
  #define GR_TEXTURECOMBINE_DETAIL_OTHER  0x7 /* detail--detail on tthis+1 */
  #define GR_TEXTURECOMBINE_TRILINEAR_ODD 0x8 /* trilinear--odd levels tthis*/
  #define GR_TEXTURECOMBINE_TRILINEAR_EVEN 0x9 /*trilinear--even levels tthis*/
  #define GR_TEXTURECOMBINE_ONE           0xa /* texout = 0xFFFFFFFF */
  
  typedef FxI32 GrTextureFilterMode_t;
  #define GR_TEXTUREFILTER_POINT_SAMPLED  0x0
  #define GR_TEXTUREFILTER_BILINEAR       0x1
  
  typedef FxI32 GrTextureFormat_t;
  /* KoolSmoky - */
  #define GR_TEXFMT_8BIT                  0x0
  #define GR_TEXFMT_RGB_332               GR_TEXFMT_8BIT
  #define GR_TEXFMT_YIQ_422               0x1
  #define GR_TEXFMT_ALPHA_8               0x2 /* (0..0xFF) alpha     */
  #define GR_TEXFMT_INTENSITY_8           0x3 /* (0..0xFF) intensity */
  #define GR_TEXFMT_ALPHA_INTENSITY_44    0x4
  #define GR_TEXFMT_P_8                   0x5 /* 8-bit palette */
  #define GR_TEXFMT_RSVD0                 0x6 /* GR_TEXFMT_P_8_RGBA */
  #define GR_TEXFMT_P_8_6666              GR_TEXFMT_RSVD0
  #define GR_TEXFMT_P_8_6666_EXT          GR_TEXFMT_RSVD0
  #define GR_TEXFMT_RSVD1                 0x7
  #define GR_TEXFMT_16BIT                 0x8
  #define GR_TEXFMT_ARGB_8332             GR_TEXFMT_16BIT
  #define GR_TEXFMT_AYIQ_8422             0x9
  #define GR_TEXFMT_RGB_565               0xa
  #define GR_TEXFMT_ARGB_1555             0xb
  #define GR_TEXFMT_ARGB_4444             0xc
  #define GR_TEXFMT_ALPHA_INTENSITY_88    0xd
  #define GR_TEXFMT_AP_88                 0xe /* 8-bit alpha 8-bit palette */
  #define GR_TEXFMT_RSVD2                 0xf
  #define GR_TEXFMT_RSVD4                 GR_TEXFMT_RSVD2
  
  typedef FxU32 GrTexTable_t;
  #define GR_TEXTABLE_NCC0                 0x0
  #define GR_TEXTABLE_NCC1                 0x1
  #define GR_TEXTABLE_PALETTE              0x2
  #define GR_TEXTABLE_PALETTE_6666_EXT     0x3
  
  typedef FxU32 GrNCCTable_t;
  #define GR_NCCTABLE_NCC0    0x0
  #define GR_NCCTABLE_NCC1    0x1
  
  typedef FxU32 GrTexBaseRange_t;
  #define GR_TEXBASE_256      0x3
  #define GR_TEXBASE_128      0x2
  #define GR_TEXBASE_64       0x1
  #define GR_TEXBASE_32_TO_1  0x0
  
  
  typedef FxU32 GrEnableMode_t;
  #define GR_MODE_DISABLE     0x0
  #define GR_MODE_ENABLE      0x1
  
  #define GR_AA_ORDERED            0x01
  #define GR_ALLOW_MIPMAP_DITHER   0x02
  #define GR_PASSTHRU              0x03
  #define GR_SHAMELESS_PLUG        0x04
  #define GR_VIDEO_SMOOTHING       0x05
  
  typedef FxU32 GrCoordinateSpaceMode_t;
  #define GR_WINDOW_COORDS    0x00
  #define GR_CLIP_COORDS      0x01
  
  /* Types of data in strips */
  #define GR_FLOAT        0
  #define GR_U8           1
  
  /* Parameters for strips */
  #define GR_PARAM_XY       0x01
  #define GR_PARAM_Z        0x02
  #define GR_PARAM_W        0x03
  #define GR_PARAM_Q        0x04
  #define GR_PARAM_FOG_EXT  0x05
  
  #define GR_PARAM_A        0x10
  
  #define GR_PARAM_RGB      0x20
  
  #define GR_PARAM_PARGB    0x30
  
  #define GR_PARAM_ST0      0x40
  #define GR_PARAM_ST1      GR_PARAM_ST0+1
  #define GR_PARAM_ST2      GR_PARAM_ST0+2
  
  #define GR_PARAM_Q0       0x50
  #define GR_PARAM_Q1       GR_PARAM_Q0+1
  #define GR_PARAM_Q2       GR_PARAM_Q0+2
  
  #define GR_PARAM_DISABLE  0x00
  #define GR_PARAM_ENABLE   0x01
  
  /*
  ** grDrawVertexArray/grDrawVertexArrayContiguous primitive type
  */
  #define GR_POINTS                        0
  #define GR_LINE_STRIP                    1
  #define GR_LINES                         2
  #define GR_POLYGON                       3
  #define GR_TRIANGLE_STRIP                4
  #define GR_TRIANGLE_FAN                  5
  #define GR_TRIANGLES                     6
  #define GR_TRIANGLE_STRIP_CONTINUE       7
  #define GR_TRIANGLE_FAN_CONTINUE         8
  
  /* 
  ** grGet/grReset types
  */
  #define GR_BITS_DEPTH                   0x01
  #define GR_BITS_RGBA                    0x02
  #define GR_FIFO_FULLNESS                0x03
  #define GR_FOG_TABLE_ENTRIES            0x04
  #define GR_GAMMA_TABLE_ENTRIES          0x05
  #define GR_GLIDE_STATE_SIZE             0x06
  #define GR_GLIDE_VERTEXLAYOUT_SIZE      0x07
  #define GR_IS_BUSY                      0x08
  #define GR_LFB_PIXEL_PIPE               0x09
  #define GR_MAX_TEXTURE_SIZE             0x0a
  #define GR_MAX_TEXTURE_ASPECT_RATIO     0x0b
  #define GR_MEMORY_FB                    0x0c
  #define GR_MEMORY_TMU                   0x0d
  #define GR_MEMORY_UMA                   0x0e
  #define GR_NUM_BOARDS                   0x0f
  #define GR_NON_POWER_OF_TWO_TEXTURES    0x10
  #define GR_NUM_FB                       0x11
  #define GR_NUM_SWAP_HISTORY_BUFFER      0x12
  #define GR_NUM_TMU                      0x13
  #define GR_PENDING_BUFFERSWAPS          0x14
  #define GR_REVISION_FB                  0x15
  #define GR_REVISION_TMU                 0x16
  #define GR_STATS_LINES                  0x17  /* grGet/grReset */
  #define GR_STATS_PIXELS_AFUNC_FAIL      0x18
  #define GR_STATS_PIXELS_CHROMA_FAIL     0x19
  #define GR_STATS_PIXELS_DEPTHFUNC_FAIL  0x1a
  #define GR_STATS_PIXELS_IN              0x1b
  #define GR_STATS_PIXELS_OUT             0x1c
  #define GR_STATS_PIXELS                 0x1d  /* grReset */
  #define GR_STATS_POINTS                 0x1e  /* grGet/grReset */
  #define GR_STATS_TRIANGLES_IN           0x1f
  #define GR_STATS_TRIANGLES_OUT          0x20
  #define GR_STATS_TRIANGLES              0x21  /* grReset */
  #define GR_SWAP_HISTORY                 0x22
  #define GR_SUPPORTS_PASSTHRU            0x23
  #define GR_TEXTURE_ALIGN                0x24
  #define GR_VIDEO_POSITION               0x25
  #define GR_VIEWPORT                     0x26
  #define GR_WDEPTH_MIN_MAX               0x27
  #define GR_ZDEPTH_MIN_MAX               0x28
  #define GR_VERTEX_PARAMETER             0x29
  #define GR_BITS_GAMMA                   0x2a
  #define GR_GET_RESERVED_1               0x1000
  
  /*
  ** grGetString types
  */
  #define GR_EXTENSION                    0xa0
  #define GR_HARDWARE                     0xa1
  #define GR_RENDERER                     0xa2
  #define GR_VENDOR                       0xa3
  #define GR_VERSION                      0xa4
  
  /*
  ** -----------------------------------------------------------------------
  ** STRUCTURES
  ** -----------------------------------------------------------------------
  */
  
  typedef struct {
      GrLOD_t           smallLodLog2;
      GrLOD_t           largeLodLog2;
      GrAspectRatio_t   aspectRatioLog2;
      GrTextureFormat_t format;
      void              *data;
  } GrTexInfo;
  
  typedef struct GrSstPerfStats_s {
    FxU32  pixelsIn;              /* # pixels processed (minus buffer clears) */
    FxU32  chromaFail;            /* # pixels not drawn due to chroma key */ 
    FxU32  zFuncFail;             /* # pixels not drawn due to Z comparison */
    FxU32  aFuncFail;             /* # pixels not drawn due to alpha comparison */
    FxU32  pixelsOut;             /* # pixels drawn (including buffer clears) */
  } GrSstPerfStats_t;
  
  typedef struct {
    GrScreenResolution_t resolution;
    GrScreenRefresh_t    refresh;
    int                  numColorBuffers;
    int                  numAuxBuffers;
  } GrResolution;
  
  typedef GrResolution GlideResolution;
  
  #define GR_QUERY_ANY  ((FxU32)(~0))
  
  typedef FxU32 GrLfbSrcFmt_t;
  #define GR_LFB_SRC_FMT_565          0x00
  #define GR_LFB_SRC_FMT_555          0x01
  #define GR_LFB_SRC_FMT_1555         0x02
  #define GR_LFB_SRC_FMT_888          0x04
  #define GR_LFB_SRC_FMT_8888         0x05
  #define GR_LFB_SRC_FMT_565_DEPTH    0x0c
  #define GR_LFB_SRC_FMT_555_DEPTH    0x0d
  #define GR_LFB_SRC_FMT_1555_DEPTH   0x0e
  #define GR_LFB_SRC_FMT_ZA16         0x0f
  #define GR_LFB_SRC_FMT_RLE16        0x80
  
  #ifdef H3D
  #define GR_HINT_H3DENABLE               4
  #undef  GR_HINTTYPE_MAX
  #define GR_HINTTYPE_MAX 4
  #endif
  
  /*
  ** -----------------------------------------------------------------------
  ** FUNCTION PROTOTYPES
  ** -----------------------------------------------------------------------
  */
  #ifndef FX_GLIDE_NO_FUNC_PROTO
  /*
  ** rendering functions
  */
  FX_ENTRY void FX_CALL
  grDrawPoint( const void *pt );
  
  FX_ENTRY void FX_CALL
  grDrawLine( const void *v1, const void *v2 );
  
  FX_ENTRY void FX_CALL
  grDrawTriangle( const void *a, const void *b, const void *c );
  
  FX_ENTRY void FX_CALL
  grVertexLayout(FxU32 param, FxI32 offset, FxU32 mode);
  
  FX_ENTRY void FX_CALL 
  grDrawVertexArray(FxU32 mode, FxU32 Count, void *pointers);
  
  FX_ENTRY void FX_CALL 
  grDrawVertexArrayContiguous(FxU32 mode, FxU32 Count, void *pointers, FxU32 stride);
  
  /*
  **  Antialiasing Functions
  */
  
  FX_ENTRY void FX_CALL
  grAADrawTriangle(
                   const void *a, const void *b, const void *c,
                   FxBool ab_antialias, FxBool bc_antialias, FxBool ca_antialias
                   );
  
  /*
  ** buffer management
  */
  FX_ENTRY void FX_CALL
  grBufferClear( GrColor_t color, GrAlpha_t alpha, FxU32 depth );
  
  FX_ENTRY void FX_CALL
  grBufferSwap( FxU32 swap_interval );
  
  FX_ENTRY void FX_CALL
  grRenderBuffer( GrBuffer_t buffer );
  
  /*
  ** error management
  */
  typedef void (*GrErrorCallbackFnc_t)( const char *string, FxBool fatal );
  
  FX_ENTRY void FX_CALL 
  grErrorSetCallback( GrErrorCallbackFnc_t fnc );
  
  /*
  ** SST routines
  */
  FX_ENTRY void FX_CALL 
  grFinish(void);
  
  FX_ENTRY void FX_CALL 
  grFlush(void);
  
  FX_ENTRY GrContext_t FX_CALL 
  grSstWinOpen(
            FxU32                hWnd,
            GrScreenResolution_t screen_resolution,
            GrScreenRefresh_t    refresh_rate,
            GrColorFormat_t      color_format,
            GrOriginLocation_t   origin_location,
            int                  nColBuffers,
            int                  nAuxBuffers);
  
  FX_ENTRY FxBool FX_CALL
  grSstWinClose( GrContext_t context );
  
  FX_ENTRY void FX_CALL
  grSetNumPendingBuffers(FxI32 NumPendingBuffers);
  
  FX_ENTRY FxBool FX_CALL
  grSelectContext( GrContext_t context );
  
  FX_ENTRY void FX_CALL
  grSstOrigin(GrOriginLocation_t  origin);
  
  FX_ENTRY void FX_CALL 
  grSstSelect( int which_sst );
  
  /*
  ** Glide configuration and special effect maintenance functions
  */
  FX_ENTRY void FX_CALL
  grAlphaBlendFunction(
                       GrAlphaBlendFnc_t rgb_sf,   GrAlphaBlendFnc_t rgb_df,
                       GrAlphaBlendFnc_t alpha_sf, GrAlphaBlendFnc_t alpha_df
                       );
  
  FX_ENTRY void FX_CALL
  grAlphaCombine(
                 GrCombineFunction_t function, GrCombineFactor_t factor,
                 GrCombineLocal_t local, GrCombineOther_t other,
                 FxBool invert
                 );
  
  FX_ENTRY void FX_CALL
  grAlphaControlsITRGBLighting( FxBool enable );
  
  FX_ENTRY void FX_CALL
  grAlphaTestFunction( GrCmpFnc_t function );
  
  FX_ENTRY void FX_CALL
  grAlphaTestReferenceValue( GrAlpha_t value );
  
  FX_ENTRY void FX_CALL 
  grChromakeyMode( GrChromakeyMode_t mode );
  
  FX_ENTRY void FX_CALL 
  grChromakeyValue( GrColor_t value );
  
  FX_ENTRY void FX_CALL 
  grClipWindow( FxU32 minx, FxU32 miny, FxU32 maxx, FxU32 maxy );
  
  FX_ENTRY void FX_CALL 
  grColorCombine(
                 GrCombineFunction_t function, GrCombineFactor_t factor,
                 GrCombineLocal_t local, GrCombineOther_t other,
                 FxBool invert );
  
  FX_ENTRY void FX_CALL
  grColorMask( FxBool rgb, FxBool a );
  
  FX_ENTRY void FX_CALL 
  grCullMode( GrCullMode_t mode );
  
  FX_ENTRY void FX_CALL 
  grConstantColorValue( GrColor_t value );
  
  FX_ENTRY void FX_CALL 
  grDepthBiasLevel( FxI32 level );
  
  FX_ENTRY void FX_CALL 
  grDepthBufferFunction( GrCmpFnc_t function );
  
  FX_ENTRY void FX_CALL 
  grDepthBufferMode( GrDepthBufferMode_t mode );
  
  FX_ENTRY void FX_CALL 
  grDepthMask( FxBool mask );
  
  FX_ENTRY void FX_CALL 
  grDisableAllEffects( void );
  
  FX_ENTRY void FX_CALL 
  grDitherMode( GrDitherMode_t mode );
  
  FX_ENTRY void FX_CALL 
  grFogColorValue( GrColor_t fogcolor );
  
  FX_ENTRY void FX_CALL 
  grFogMode( GrFogMode_t mode );
  
  FX_ENTRY void FX_CALL 
  grFogTable( const GrFog_t ft[] );
  
  FX_ENTRY void FX_CALL 
  grLoadGammaTable( FxU32 nentries, FxU32 *red, FxU32 *green, FxU32 *blue);
  
  FX_ENTRY void FX_CALL
  grSplash(float x, float y, float width, float height, FxU32 frame);
  
  FX_ENTRY FxU32 FX_CALL 
  grGet( FxU32 pname, FxU32 plength, FxI32 *params );
  
  FX_ENTRY const char * FX_CALL 
  grGetString( FxU32 pname );
  
  FX_ENTRY FxI32 FX_CALL 
  grQueryResolutions( const GrResolution *resTemplate, GrResolution *output );
  
  FX_ENTRY FxBool FX_CALL 
  grReset( FxU32 what );
  
  FX_ENTRY GrProc FX_CALL
  grGetProcAddress( const char *procName );
  
  FX_ENTRY void FX_CALL 
  grEnable( GrEnableMode_t mode );
  
  FX_ENTRY void FX_CALL 
  grDisable( GrEnableMode_t mode );
  
  FX_ENTRY void FX_CALL 
  grCoordinateSpace( GrCoordinateSpaceMode_t mode );
  
  FX_ENTRY void FX_CALL 
  grDepthRange( FxFloat n, FxFloat f );
  
  FX_ENTRY void FX_CALL 
  grStippleMode( GrStippleMode_t mode );
  
  FX_ENTRY void FX_CALL 
  grStipplePattern( GrStipplePattern_t mode );
  
  FX_ENTRY void FX_CALL 
  grViewport( FxI32 x, FxI32 y, FxI32 width, FxI32 height );
  
  /*
  ** texture mapping control functions
  */
  FX_ENTRY FxU32 FX_CALL 
  grTexCalcMemRequired(
                       GrLOD_t lodmin, GrLOD_t lodmax,
                       GrAspectRatio_t aspect, GrTextureFormat_t fmt);
  
  FX_ENTRY FxU32 FX_CALL 
  grTexTextureMemRequired( FxU32     evenOdd,
                                   GrTexInfo *info   );
  
  FX_ENTRY FxU32 FX_CALL 
  grTexMinAddress( GrChipID_t tmu );
  
  FX_ENTRY FxU32 FX_CALL 
  grTexMaxAddress( GrChipID_t tmu );
  
  FX_ENTRY void FX_CALL 
  grTexNCCTable( GrNCCTable_t table );
  
  FX_ENTRY void FX_CALL 
  grTexSource( GrChipID_t tmu,
               FxU32      startAddress,
               FxU32      evenOdd,
               GrTexInfo  *info );
  
  FX_ENTRY void FX_CALL 
  grTexClampMode(
                 GrChipID_t tmu,
                 GrTextureClampMode_t s_clampmode,
                 GrTextureClampMode_t t_clampmode
                 );
  
  FX_ENTRY void FX_CALL 
  grTexCombine(
               GrChipID_t tmu,
               GrCombineFunction_t rgb_function,
               GrCombineFactor_t rgb_factor, 
               GrCombineFunction_t alpha_function,
               GrCombineFactor_t alpha_factor,
               FxBool rgb_invert,
               FxBool alpha_invert
               );
  
  FX_ENTRY void FX_CALL 
  grTexDetailControl(
                     GrChipID_t tmu,
                     int lod_bias,
                     FxU8 detail_scale,
                     float detail_max
                     );
  
  FX_ENTRY void FX_CALL 
  grTexFilterMode(
                  GrChipID_t tmu,
                  GrTextureFilterMode_t minfilter_mode,
                  GrTextureFilterMode_t magfilter_mode
                  );
  
  
  FX_ENTRY void FX_CALL 
  grTexLodBiasValue(GrChipID_t tmu, float bias );
  
  FX_ENTRY void FX_CALL 
  grTexDownloadMipMap( GrChipID_t tmu,
                       FxU32      startAddress,
                       FxU32      evenOdd,
                       GrTexInfo  *info );
  
  FX_ENTRY void FX_CALL 
  grTexDownloadMipMapLevel( GrChipID_t        tmu,
                            FxU32             startAddress,
                            GrLOD_t           thisLod,
                            GrLOD_t           largeLod,
                            GrAspectRatio_t   aspectRatio,
                            GrTextureFormat_t format,
                            FxU32             evenOdd,
                            void              *data );
  
  FX_ENTRY FxBool FX_CALL 
  grTexDownloadMipMapLevelPartial( GrChipID_t        tmu,
                                   FxU32             startAddress,
                                   GrLOD_t           thisLod,
                                   GrLOD_t           largeLod,
                                   GrAspectRatio_t   aspectRatio,
                                   GrTextureFormat_t format,
                                   FxU32             evenOdd,
                                   void              *data,
                                   int               start,
                                   int               end );
  
  FX_ENTRY void FX_CALL
  grTexDownloadTable( GrTexTable_t type, 
                      void         *data );
  
  FX_ENTRY void FX_CALL
  grTexDownloadTablePartial( GrTexTable_t type, 
                             void         *data,
                             int          start,
                             int          end );
  
  FX_ENTRY void FX_CALL 
  grTexMipMapMode( GrChipID_t     tmu, 
                   GrMipMapMode_t mode,
                   FxBool         lodBlend );
  
  FX_ENTRY void FX_CALL 
  grTexMultibase( GrChipID_t tmu,
                  FxBool     enable );
  
  FX_ENTRY void FX_CALL
  grTexMultibaseAddress( GrChipID_t       tmu,
                         GrTexBaseRange_t range,
                         FxU32            startAddress,
                         FxU32            evenOdd,
                         GrTexInfo        *info );
  
  /*
  ** linear frame buffer functions
  */
  
  FX_ENTRY FxBool FX_CALL
  grLfbLock( GrLock_t type, GrBuffer_t buffer, GrLfbWriteMode_t writeMode,
             GrOriginLocation_t origin, FxBool pixelPipeline, 
             GrLfbInfo_t *info );
  
  FX_ENTRY FxBool FX_CALL
  grLfbUnlock( GrLock_t type, GrBuffer_t buffer );
  
  FX_ENTRY void FX_CALL 
  grLfbConstantAlpha( GrAlpha_t alpha );
  
  FX_ENTRY void FX_CALL 
  grLfbConstantDepth( FxU32 depth );
  
  FX_ENTRY void FX_CALL 
  grLfbWriteColorSwizzle(FxBool swizzleBytes, FxBool swapWords);
  
  FX_ENTRY void FX_CALL
  grLfbWriteColorFormat(GrColorFormat_t colorFormat);
  
  FX_ENTRY FxBool FX_CALL
  grLfbWriteRegion( GrBuffer_t dst_buffer, 
                    FxU32 dst_x, FxU32 dst_y, 
                    GrLfbSrcFmt_t src_format, 
                    FxU32 src_width, FxU32 src_height, 
                    FxBool pixelPipeline,
                    FxI32 src_stride, void *src_data );
  
  FX_ENTRY FxBool FX_CALL
  grLfbReadRegion( GrBuffer_t src_buffer,
                   FxU32 src_x, FxU32 src_y,
                   FxU32 src_width, FxU32 src_height,
                   FxU32 dst_stride, void *dst_data );
  
  /*
  ** glide management functions
  */
  FX_ENTRY void FX_CALL
  grGlideInit( void );
  
  FX_ENTRY void FX_CALL
  grGlideShutdown( void );
  
  FX_ENTRY void FX_CALL
  grGlideGetState( void *state );
  
  FX_ENTRY void FX_CALL
  grGlideSetState( const void *state );
  
  FX_ENTRY void FX_CALL
  grGlideGetVertexLayout( void *layout );
  
  FX_ENTRY void FX_CALL
  grGlideSetVertexLayout( const void *layout );
  
  #endif /* FX_GLIDE_NO_FUNC_PROTO */
  
  #ifdef __cplusplus
  }
  #endif
  
  #include <glideutl.h>
  
  #endif /* __GLIDE_H__ */
  
  