// 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 2047 // 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