home *** CD-ROM | disk | FTP | other *** search
- // Copyright (C) 1999-2000 Id Software, Inc.
- //
- #ifndef __TR_TYPES_H
- #define __TR_TYPES_H
-
-
- #define MAX_DLIGHTS 32 // can't be increased, because bit flags are used on surfaces
- #define MAX_ENTITIES 1023 // can't be increased without changing drawsurf bit packing
-
- // renderfx flags
- #define RF_MINLIGHT 1 // allways have some light (viewmodel, some items)
- #define RF_THIRD_PERSON 2 // don't draw through eyes, only mirrors (player bodies, chat sprites)
- #define RF_FIRST_PERSON 4 // only draw through eyes (view weapon, damage blood blob)
- #define RF_DEPTHHACK 8 // for view weapon Z crunching
- #define RF_NOSHADOW 64 // don't add stencil shadows
-
- #define RF_LIGHTING_ORIGIN 128 // use refEntity->lightingOrigin instead of refEntity->origin
- // for lighting. This allows entities to sink into the floor
- // with their origin going solid, and allows all parts of a
- // player to get the same lighting
- #define RF_SHADOW_PLANE 256 // use refEntity->shadowPlane
- #define RF_WRAP_FRAMES 512 // mod the model frames by the maxframes to allow continuous
- // animation without needing to know the frame count
-
- // refdef flags
- #define RDF_NOWORLDMODEL 1 // used for player configuration screen
- #define RDF_HYPERSPACE 4 // teleportation effect
-
- typedef struct {
- vec3_t xyz;
- float st[2];
- byte modulate[4];
- } polyVert_t;
-
- typedef struct poly_s {
- qhandle_t hShader;
- int numVerts;
- polyVert_t *verts;
- } poly_t;
-
- typedef enum {
- RT_MODEL,
- RT_POLY,
- RT_SPRITE,
- RT_BEAM,
- RT_RAIL_CORE,
- RT_RAIL_RINGS,
- RT_LIGHTNING,
- RT_PORTALSURFACE, // doesn't draw anything, just info for portals
-
- RT_MAX_REF_ENTITY_TYPE
- } refEntityType_t;
-
- typedef struct {
- refEntityType_t reType;
- int renderfx;
-
- qhandle_t hModel; // opaque type outside refresh
-
- // most recent data
- vec3_t lightingOrigin; // so multi-part models can be lit identically (RF_LIGHTING_ORIGIN)
- float shadowPlane; // projection shadows go here, stencils go slightly lower
-
- vec3_t axis[3]; // rotation vectors
- qboolean nonNormalizedAxes; // axis are not normalized, i.e. they have scale
- float origin[3]; // also used as MODEL_BEAM's "from"
- int frame; // also used as MODEL_BEAM's diameter
-
- // previous data for frame interpolation
- float oldorigin[3]; // also used as MODEL_BEAM's "to"
- int oldframe;
- float backlerp; // 0.0 = current, 1.0 = old
-
- // texturing
- int skinNum; // inline skin index
- qhandle_t customSkin; // NULL for default skin
- qhandle_t customShader; // use one image for the entire thing
-
- // misc
- byte shaderRGBA[4]; // colors used by rgbgen entity shaders
- float shaderTexCoord[2]; // texture coordinates used by tcMod entity modifiers
- float shaderTime; // subtracted from refdef time to control effect start times
-
- // extra sprite information
- float radius;
- float rotation;
- } refEntity_t;
-
-
- #define MAX_RENDER_STRINGS 8
- #define MAX_RENDER_STRING_LENGTH 32
-
- typedef struct {
- int x, y, width, height;
- float fov_x, fov_y;
- vec3_t vieworg;
- vec3_t viewaxis[3]; // transformation matrix
-
- // time in milliseconds for shader effects and other time dependent rendering issues
- int time;
-
- int rdflags; // RDF_NOWORLDMODEL, etc
-
- // 1 bits will prevent the associated area from rendering at all
- byte areamask[MAX_MAP_AREA_BYTES];
-
- // text messages for deform text shaders
- char text[MAX_RENDER_STRINGS][MAX_RENDER_STRING_LENGTH];
- } refdef_t;
-
-
- typedef enum {
- STEREO_CENTER,
- STEREO_LEFT,
- STEREO_RIGHT
- } stereoFrame_t;
-
-
- /*
- ** glconfig_t
- **
- ** Contains variables specific to the OpenGL configuration
- ** being run right now. These are constant once the OpenGL
- ** subsystem is initialized.
- */
- typedef enum {
- TC_NONE,
- TC_S3TC
- } textureCompression_t;
-
- typedef enum {
- GLDRV_ICD, // driver is integrated with window system
- // WARNING: there are tests that check for
- // > GLDRV_ICD for minidriverness, so this
- // should always be the lowest value in this
- // enum set
- GLDRV_STANDALONE, // driver is a non-3Dfx standalone driver
- GLDRV_VOODOO // driver is a 3Dfx standalone driver
- } glDriverType_t;
-
- typedef enum {
- GLHW_GENERIC, // where everthing works the way it should
- GLHW_3DFX_2D3D, // Voodoo Banshee or Voodoo3, relevant since if this is
- // the hardware type then there can NOT exist a secondary
- // display adapter
- GLHW_RIVA128, // where you can't interpolate alpha
- GLHW_RAGEPRO, // where you can't modulate alpha on alpha textures
- GLHW_PERMEDIA2 // where you don't have src*dst
- } glHardwareType_t;
-
- typedef struct {
- char renderer_string[MAX_STRING_CHARS];
- char vendor_string[MAX_STRING_CHARS];
- char version_string[MAX_STRING_CHARS];
- char extensions_string[MAX_STRING_CHARS];
-
- int maxTextureSize; // queried from GL
- int maxActiveTextures; // multitexture ability
-
- int colorBits, depthBits, stencilBits;
-
- glDriverType_t driverType;
- glHardwareType_t hardwareType;
-
- qboolean deviceSupportsGamma;
- textureCompression_t textureCompression;
- qboolean textureEnvAddAvailable;
-
- int vidWidth, vidHeight;
- // aspect is the screen's physical width / height, which may be different
- // than scrWidth / scrHeight if the pixels are non-square
- // normal screens should be 4/3, but wide aspect monitors may be 16/9
- float windowAspect;
-
- int displayFrequency;
-
- // synonymous with "does rendering consume the entire screen?", therefore
- // a Voodoo or Voodoo2 will have this set to TRUE, as will a Win32 ICD that
- // used CDS.
- qboolean isFullscreen;
- qboolean stereoEnabled;
- qboolean smpActive; // dual processor
- } glconfig_t;
-
-
- #if !defined _WIN32
-
- #define _3DFX_DRIVER_NAME "libMesaVoodooGL.so"
- #define OPENGL_DRIVER_NAME "libGL.so"
-
- #else
-
- #define _3DFX_DRIVER_NAME "3dfxvgl"
- #define OPENGL_DRIVER_NAME "opengl32"
-
- #endif // !defined _WIN32
-
-
- #endif // __TR_TYPES_H
-