19fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// disable data conversion warnings 29fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 39fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#pragma warning(disable : 4244) // MIPS 49fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#pragma warning(disable : 4136) // X86 59fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#pragma warning(disable : 4051) // ALPHA 69fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 79fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#include <windows.h> 89fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 99fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#include <gl\gl.h> 109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#include <gl\glu.h> 119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid GL_BeginRendering (int *x, int *y, int *width, int *height); 139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid GL_EndRendering (void); 149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// Function prototypes for the Texture Object Extension routines 179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef GLboolean (APIENTRY *ARETEXRESFUNCPTR)(GLsizei, const GLuint *, 189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream const GLboolean *); 199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef void (APIENTRY *BINDTEXFUNCPTR)(GLenum, GLuint); 209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef void (APIENTRY *DELTEXFUNCPTR)(GLsizei, const GLuint *); 219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef void (APIENTRY *GENTEXFUNCPTR)(GLsizei, GLuint *); 229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef GLboolean (APIENTRY *ISTEXFUNCPTR)(GLuint); 239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef void (APIENTRY *PRIORTEXFUNCPTR)(GLsizei, const GLuint *, 249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream const GLclampf *); 259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef void (APIENTRY *TEXSUBIMAGEPTR)(int, int, int, int, int, int, int, int, void *); 269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern BINDTEXFUNCPTR bindTexFunc; 289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern DELTEXFUNCPTR delTexFunc; 299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern TEXSUBIMAGEPTR TexSubImage2DFunc; 309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern int texture_extension_number; 329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern int texture_mode; 339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern float gldepthmin, gldepthmax; 359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid GL_Upload32 (unsigned *data, int width, int height, qboolean mipmap, qboolean alpha, qboolean modulate); 379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid GL_Upload8 (byte *data, int width, int height, qboolean mipmap, qboolean alpha, qboolean modulate); 389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint GL_LoadTexture (char *identifier, int width, int height, byte *data, int mipmap, int alpha, int modulate); 399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint GL_FindTexture (char *identifier); 409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct 429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream float x, y, z; 449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream float s, t; 459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream float r, g, b; 469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} glvert_t; 479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern glvert_t glv; 499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern int glx, gly, glwidth, glheight; 519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern PROC glArrayElementEXT; 539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern PROC glColorPointerEXT; 549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern PROC glTexturePointerEXT; 559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern PROC glVertexPointerEXT; 569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// r_local.h -- private refresh defs 599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define MAXALIASVERTS 2000 // TODO: tune this 619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define ALIAS_BASE_SIZE_RATIO (1.0 / 11.0) 639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // normalizing factor so player model works out to about 649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // 1 pixel per triangle 659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define MAX_LBM_HEIGHT 480 669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define TILE_SIZE 128 // size of textures generated by R_GenTiledSurf 689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define SKYSHIFT 7 709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define SKYSIZE (1 << SKYSHIFT) 719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define SKYMASK (SKYSIZE - 1) 729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define BACKFACE_EPSILON 0.01 749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid R_TimeRefresh_f (void); 779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid R_ReadPointFile_f (void); 789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtexture_t *R_TextureAnimation (texture_t *base); 799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct surfcache_s 819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream struct surfcache_s *next; 839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream struct surfcache_s **owner; // NULL is an empty chunk of memory 849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int lightadj[MAXLIGHTMAPS]; // checked for strobe flush 859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int dlight; 869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int size; // including header 879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream unsigned width; 889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream unsigned height; // DEBUG only needed for debug 899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream float mipscale; 909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream struct texture_s *texture; // checked for animating textures 919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream byte data[4]; // width*height elements 929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} surfcache_t; 939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct 969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream pixel_t *surfdat; // destination for generated surface 989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int rowbytes; // destination logical width in bytes 999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream msurface_t *surf; // description for surface to generate 1009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream fixed8_t lightadj[MAXLIGHTMAPS]; 1019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // adjust for lightmap levels for dynamic lighting 1029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream texture_t *texture; // corrected for animating textures 1039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int surfmip; // mipmapped ratio of surface texels / world pixels 1049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int surfwidth; // in mipmapped texels 1059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int surfheight; // in mipmapped texels 1069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} drawsurf_t; 1079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef enum { 1109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream pt_static, pt_grav, pt_slowgrav, pt_fire, pt_explode, pt_explode2, pt_blob, pt_blob2 1119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} ptype_t; 1129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// !!! if this is changed, it must be changed in d_ifacea.h too !!! 1149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct particle_s 1159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 1169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// driver-usable fields 1179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream vec3_t org; 1189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream float color; 1199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// drivers never touch the following fields 1209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream struct particle_s *next; 1219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream vec3_t vel; 1229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream float ramp; 1239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream float die; 1249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream ptype_t type; 1259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} particle_t; 1269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//==================================================== 1299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern entity_t r_worldentity; 1329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern qboolean r_cache_thrash; // compatability 1339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern vec3_t modelorg, r_entorigin; 1349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern entity_t *currententity; 1359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern int r_visframecount; // ??? what difs? 1369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern int r_framecount; 1379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern mplane_t frustum[4]; 1389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern int c_brush_polys, c_alias_polys; 1399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 1429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// view origin 1439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 1449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern vec3_t vup; 1459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern vec3_t vpn; 1469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern vec3_t vright; 1479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern vec3_t r_origin; 1489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 1509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// screen size info 1519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 1529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern refdef_t r_refdef; 1539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern mleaf_t *r_viewleaf, *r_oldviewleaf; 1549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern texture_t *r_notexture_mip; 1559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern int d_lightstylevalue[256]; // 8.8 fraction of base light value 1569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern qboolean envmap; 1589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern int currenttexture; 1599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern int particletexture; 1609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern int playertextures; 1619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern int skytexturenum; // index in cl.loadmodel, not gl texture object 1639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t r_drawentities; 1659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t r_drawworld; 1669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t r_drawviewmodel; 1679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t r_speeds; 1689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t r_waterwarp; 1699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t r_fullbright; 1709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t r_lightmap; 1719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t r_shadows; 1729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t r_dynamic; 1739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t gl_clear; 1759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t gl_cull; 1769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t gl_poly; 1779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t gl_texsort; 1789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t gl_smoothmodels; 1799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t gl_affinemodels; 1809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t gl_fogblend; 1819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t gl_polyblend; 1829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t gl_keeptjunctions; 1839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t gl_reporttjunctions; 1849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern int gl_lightmap_format; 1869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern int gl_solid_format; 1879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern int gl_alpha_format; 1889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid R_TranslatePlayerSkin (int playernum); 1909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid GL_Bind (int texnum); 191