mirror of
https://github.com/UberGames/RPG-X2.git
synced 2024-11-25 13:51:03 +00:00
256 lines
7.3 KiB
C
256 lines
7.3 KiB
C
// 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_LOWLIGHT 0x0001 // subtract ambient to keep it in the dark
|
|
#define RF_THIRD_PERSON 0x0002 // don't draw through eyes, only mirrors (player bodies, chat sprites)
|
|
#define RF_FIRST_PERSON 0x0004 // only draw through eyes (view weapon, damage blood blob)
|
|
#define RF_DEPTHHACK 0x0008 // for view weapon Z crunching
|
|
#define RF_FULLBRIGHT 0x0010 // Render with a bright ambient light.
|
|
#define RF_NOSHADOW 0x0040 // don't add stencil shadows
|
|
|
|
#define RF_LIGHTING_ORIGIN 0x0080 // 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 0x0100 // use refEntity->shadowPlane
|
|
#define RF_WRAP_FRAMES 0x0200 // mod the model frames by the maxframes to allow continuous
|
|
// animation without needing to know the frame count
|
|
#define RF_CAP_FRAMES 0x0400 // cap the model frames by the maxframes for one shot anims
|
|
#define RF_FORCE_ENT_ALPHA 0x0800 // Models should use ent alpha regardless of what the shader says.
|
|
|
|
|
|
// refdef flags
|
|
#define RDF_NOWORLDMODEL 1 // used for player configuration screen
|
|
#define RDF_HYPERSPACE 4 // teleportation effect
|
|
|
|
#ifdef XTRA
|
|
#define RDF_MOTIONBLUR 8
|
|
#endif
|
|
|
|
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_SPRITE,
|
|
RT_ORIENTEDSPRITE, // Replaces RT_POLY, which wasn't used. --Pat
|
|
RT_ALPHAVERTPOLY, // Individual alpha levels on each vertex
|
|
RT_BEAM,
|
|
RT_RAIL_CORE,
|
|
RT_RAIL_RINGS,
|
|
RT_LIGHTNING,
|
|
RT_PORTALSURFACE, // doesn't draw anything, just info for portals
|
|
RT_LINE, // New type for Trek MP --Pat
|
|
RT_ORIENTEDLINE,
|
|
RT_LINE2, // New line type for Trek MP, with taper support --Pat
|
|
RT_BEZIER, // what he said --keith
|
|
RT_CYLINDER, // Yet another Trek primitive!
|
|
RT_ELECTRICITY, // Yet another Trek primitive!
|
|
|
|
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
|
|
union {
|
|
struct
|
|
{
|
|
float rotation;
|
|
float radius;
|
|
byte vertRGBA[4][4];
|
|
} sprite;
|
|
struct
|
|
{
|
|
float width;
|
|
float width2;
|
|
float stscale;
|
|
} line;
|
|
struct // that whole put-the-opening-brace-on-the-same-line-as-the-beginning-of-the-definition coding style is fecal
|
|
// TiM: You're a fecal. I prefer that style :D
|
|
// TiM: (c)2008 You're a you're a fecal. ;P I've grown to like the other one now.... it's way easier to read XD
|
|
{
|
|
float width;
|
|
vec3_t control1;
|
|
vec3_t control2;
|
|
} bezier;
|
|
struct
|
|
{
|
|
float width;
|
|
float width2;
|
|
float stscale;
|
|
float height;
|
|
float bias;
|
|
qboolean wrap;
|
|
} cylinder;
|
|
struct
|
|
{
|
|
float width;
|
|
float deviation;
|
|
float stscale;
|
|
qboolean wrap;
|
|
qboolean taper;
|
|
} electricity;
|
|
} data;
|
|
} 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;
|
|
|
|
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
|