203 lines
6.2 KiB
C
203 lines
6.2 KiB
C
|
#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
|
||
|
#define RF_CAP_FRAMES 1024 // cap the model frames by the maxframes for one shot anims
|
||
|
|
||
|
// 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 colorSrc=vertex shaders
|
||
|
float shaderTexCoord[2]; // texture coordinates used by tcMod=vertex modifiers
|
||
|
float shaderTime; // subtracted from refdef time to control effect start times
|
||
|
vec3_t lightDir; // Used to specify a lighting dir
|
||
|
|
||
|
// 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,
|
||
|
TC_S3TC_DXT
|
||
|
} 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[2*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;
|
||
|
qboolean textureFilterAnisotropicAvailable;
|
||
|
qboolean clampToEdgeAvailable;
|
||
|
|
||
|
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.3.1"
|
||
|
#define OPENGL_DRIVER_NAME "libGL.so"
|
||
|
|
||
|
#else
|
||
|
|
||
|
#define _3DFX_DRIVER_NAME "3dfxvgl"
|
||
|
#define OPENGL_DRIVER_NAME "opengl32"
|
||
|
|
||
|
#endif // !defined _WIN32
|
||
|
|
||
|
|
||
|
#endif // __TR_TYPES_H
|