1cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich/* 2cabb5dd768714a7df34469a096b5e1aa815a2c22Jack PalevichCopyright (C) 1996-1997 Id Software, Inc. 3cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 4cabb5dd768714a7df34469a096b5e1aa815a2c22Jack PalevichThis program is free software; you can redistribute it and/or 5cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichmodify it under the terms of the GNU General Public License 6cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichas published by the Free Software Foundation; either version 2 7cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichof the License, or (at your option) any later version. 8cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 9cabb5dd768714a7df34469a096b5e1aa815a2c22Jack PalevichThis program is distributed in the hope that it will be useful, 10cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichbut WITHOUT ANY WARRANTY; without even the implied warranty of 11cabb5dd768714a7df34469a096b5e1aa815a2c22Jack PalevichMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 13cabb5dd768714a7df34469a096b5e1aa815a2c22Jack PalevichSee the GNU General Public License for more details. 14cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 15cabb5dd768714a7df34469a096b5e1aa815a2c22Jack PalevichYou should have received a copy of the GNU General Public License 16cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichalong with this program; if not, write to the Free Software 17cabb5dd768714a7df34469a096b5e1aa815a2c22Jack PalevichFoundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 19cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich*/ 209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// r_misc.c 219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#include "quakedef.h" 239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern void R_InitBubble(); 259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* 279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================== 289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamR_InitTextures 299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================== 309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/ 319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid R_InitTextures (void) 329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int x,y, m; 349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream byte *dest; 359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// create a simple checkerboard texture for the default 379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream r_notexture_mip = Hunk_AllocName (sizeof(texture_t) + 16*16+8*8+4*4+2*2, "notexture"); 389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream r_notexture_mip->width = r_notexture_mip->height = 16; 409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream r_notexture_mip->offsets[0] = sizeof(texture_t); 419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream r_notexture_mip->offsets[1] = r_notexture_mip->offsets[0] + 16*16; 429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream r_notexture_mip->offsets[2] = r_notexture_mip->offsets[1] + 8*8; 439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream r_notexture_mip->offsets[3] = r_notexture_mip->offsets[2] + 4*4; 449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (m=0 ; m<4 ; m++) 469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream dest = (byte *)r_notexture_mip + r_notexture_mip->offsets[m]; 489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (y=0 ; y< (16>>m) ; y++) 499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (x=0 ; x< (16>>m) ; x++) 509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if ( (y< (8>>m) ) ^ (x< (8>>m) ) ) 529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream *dest++ = 0; 539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream else 549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream *dest++ = 0xff; 559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreambyte dottexture[8][8] = 609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream {0,1,1,0,0,0,0,0}, 629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream {1,1,1,1,0,0,0,0}, 639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream {1,1,1,1,0,0,0,0}, 649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream {0,1,1,0,0,0,0,0}, 659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream {0,0,0,0,0,0,0,0}, 669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream {0,0,0,0,0,0,0,0}, 679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream {0,0,0,0,0,0,0,0}, 689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream {0,0,0,0,0,0,0,0}, 699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream}; 709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid R_InitParticleTexture (void) 719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int x,y; 739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream byte data[8][8][4]; 749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // 769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // particle texture 779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // 789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream particletexture = texture_extension_number++; 799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GL_Bind(particletexture); 809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (x=0 ; x<8 ; x++) 829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (y=0 ; y<8 ; y++) 849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream data[y][x][0] = 255; 869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream data[y][x][1] = 255; 879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream data[y][x][2] = 255; 889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream data[y][x][3] = dottexture[x][y]*255; 899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 91cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich glTexImage2DHelper (GL_TEXTURE_2D, 0, gl_alpha_format, 8, 8, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); 929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* 1009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream=============== 1019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamR_Envmap_f 1029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamGrab six views for environment mapping tests 1049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream=============== 1059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/ 1069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid R_Envmap_f (void) 1079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 108cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#ifdef USE_OPENGLES 109cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich // Not implemented 110cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#else 1119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream byte buffer[256*256*4]; 1129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glDrawBuffer (GL_FRONT); 1149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glReadBuffer (GL_FRONT); 1159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream envmap = true; 1169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream r_refdef.vrect.x = 0; 1189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream r_refdef.vrect.y = 0; 1199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream r_refdef.vrect.width = 256; 1209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream r_refdef.vrect.height = 256; 1219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream r_refdef.viewangles[0] = 0; 1239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream r_refdef.viewangles[1] = 0; 1249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream r_refdef.viewangles[2] = 0; 1259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GL_BeginRendering (&glx, &gly, &glwidth, &glheight); 1269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream R_RenderView (); 1279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glReadPixels (0, 0, 256, 256, GL_RGBA, GL_UNSIGNED_BYTE, buffer); 1289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream COM_WriteFile ("env0.rgb", buffer, sizeof(buffer)); 1299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream r_refdef.viewangles[1] = 90; 1319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GL_BeginRendering (&glx, &gly, &glwidth, &glheight); 1329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream R_RenderView (); 1339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glReadPixels (0, 0, 256, 256, GL_RGBA, GL_UNSIGNED_BYTE, buffer); 1349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream COM_WriteFile ("env1.rgb", buffer, sizeof(buffer)); 1359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream r_refdef.viewangles[1] = 180; 1379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GL_BeginRendering (&glx, &gly, &glwidth, &glheight); 1389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream R_RenderView (); 1399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glReadPixels (0, 0, 256, 256, GL_RGBA, GL_UNSIGNED_BYTE, buffer); 1409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream COM_WriteFile ("env2.rgb", buffer, sizeof(buffer)); 1419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream r_refdef.viewangles[1] = 270; 1439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GL_BeginRendering (&glx, &gly, &glwidth, &glheight); 1449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream R_RenderView (); 1459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glReadPixels (0, 0, 256, 256, GL_RGBA, GL_UNSIGNED_BYTE, buffer); 1469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream COM_WriteFile ("env3.rgb", buffer, sizeof(buffer)); 1479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream r_refdef.viewangles[0] = -90; 1499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream r_refdef.viewangles[1] = 0; 1509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GL_BeginRendering (&glx, &gly, &glwidth, &glheight); 1519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream R_RenderView (); 1529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glReadPixels (0, 0, 256, 256, GL_RGBA, GL_UNSIGNED_BYTE, buffer); 1539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream COM_WriteFile ("env4.rgb", buffer, sizeof(buffer)); 1549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream r_refdef.viewangles[0] = 90; 1569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream r_refdef.viewangles[1] = 0; 1579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GL_BeginRendering (&glx, &gly, &glwidth, &glheight); 1589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream R_RenderView (); 1599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glReadPixels (0, 0, 256, 256, GL_RGBA, GL_UNSIGNED_BYTE, buffer); 1609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream COM_WriteFile ("env5.rgb", buffer, sizeof(buffer)); 1619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream envmap = false; 1639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glDrawBuffer (GL_BACK); 1649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glReadBuffer (GL_BACK); 1659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GL_EndRendering (); 166cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#endif 1679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 1689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* 1709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream=============== 1719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamR_Init 1729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream=============== 1739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/ 1749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid R_Init (void) 1759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 1769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Cmd_AddCommand ("timerefresh", R_TimeRefresh_f); 1779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Cmd_AddCommand ("envmap", R_Envmap_f); 1789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Cmd_AddCommand ("pointfile", R_ReadPointFile_f); 1799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Cvar_RegisterVariable (&r_norefresh); 1819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Cvar_RegisterVariable (&r_lightmap); 1829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Cvar_RegisterVariable (&r_fullbright); 1839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Cvar_RegisterVariable (&r_drawentities); 1849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Cvar_RegisterVariable (&r_drawviewmodel); 1859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Cvar_RegisterVariable (&r_shadows); 1869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Cvar_RegisterVariable (&r_mirroralpha); 1879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Cvar_RegisterVariable (&r_wateralpha); 1889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Cvar_RegisterVariable (&r_dynamic); 1899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Cvar_RegisterVariable (&r_novis); 1909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Cvar_RegisterVariable (&r_speeds); 1919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Cvar_RegisterVariable (&r_netgraph); 1929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Cvar_RegisterVariable (&gl_clear); 1949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Cvar_RegisterVariable (&gl_texsort); 1959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (gl_mtexable) 1979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Cvar_SetValue ("gl_texsort", 0.0); 1989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Cvar_RegisterVariable (&gl_cull); 2009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Cvar_RegisterVariable (&gl_smoothmodels); 2019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Cvar_RegisterVariable (&gl_affinemodels); 2029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Cvar_RegisterVariable (&gl_polyblend); 2039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Cvar_RegisterVariable (&gl_flashblend); 2049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Cvar_RegisterVariable (&gl_playermip); 2059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Cvar_RegisterVariable (&gl_nocolors); 2069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Cvar_RegisterVariable (&gl_finish); 2079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Cvar_RegisterVariable (&gl_keeptjunctions); 2099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Cvar_RegisterVariable (&gl_reporttjunctions); 2109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream R_InitBubble(); 2129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream R_InitParticles (); 2149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream R_InitParticleTexture (); 2159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#ifdef GLTEST 2179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Test_Init (); 2189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#endif 2199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream netgraphtexture = texture_extension_number; 2219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream texture_extension_number++; 2229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream playertextures = texture_extension_number; 2249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream texture_extension_number += MAX_CLIENTS; 2259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 2269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* 2289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream=============== 2299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamR_TranslatePlayerSkin 2309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamTranslates a skin texture by the per-player color lookup 2329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream=============== 2339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/ 2349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid R_TranslatePlayerSkin (int playernum) 2359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 2369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int top, bottom; 2379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream byte translate[256]; 2389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream unsigned translate32[256]; 2399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int i, j; 2409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream byte *original; 2419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream unsigned pixels[512*256], *out; 2429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream unsigned scaled_width, scaled_height; 2439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int inwidth, inheight; 2449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int tinwidth, tinheight; 2459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream byte *inrow; 2469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream unsigned frac, fracstep; 2479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream player_info_t *player; 248cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich extern byte player_8bit_texels[320*200]; 2499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char s[512]; 2509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GL_DisableMultitexture(); 2529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream player = &cl.players[playernum]; 2549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (!player->name[0]) 2559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return; 2569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 257cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich strcpy(s, Info_ValueForKey(player->userinfo, "skin")); 258cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich COM_StripExtension(s, s); 2599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (player->skin && !stricmp(s, player->skin->name)) 2609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream player->skin = NULL; 2619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (player->_topcolor != player->topcolor || 2639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream player->_bottomcolor != player->bottomcolor || !player->skin) { 2649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream player->_topcolor = player->topcolor; 2659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream player->_bottomcolor = player->bottomcolor; 2669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream top = player->topcolor; 2689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream bottom = player->bottomcolor; 2699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream top = (top < 0) ? 0 : ((top > 13) ? 13 : top); 2709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream bottom = (bottom < 0) ? 0 : ((bottom > 13) ? 13 : bottom); 2719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream top *= 16; 2729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream bottom *= 16; 2739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (i=0 ; i<256 ; i++) 2759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream translate[i] = i; 2769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (i=0 ; i<16 ; i++) 2789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 2799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (top < 128) // the artists made some backwards ranges. sigh. 2809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream translate[TOP_RANGE+i] = top+i; 2819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream else 2829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream translate[TOP_RANGE+i] = top+15-i; 2839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (bottom < 128) 2859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream translate[BOTTOM_RANGE+i] = bottom+i; 2869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream else 2879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream translate[BOTTOM_RANGE+i] = bottom+15-i; 2889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 2899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // 2919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // locate the original skin pixels 2929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // 2939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // real model width 2949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream tinwidth = 296; 2959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream tinheight = 194; 2969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (!player->skin) 2989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Skin_Find(player); 2999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if ((original = Skin_Cache(player->skin)) != NULL) { 3009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream //skin data width 3019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream inwidth = 320; 3029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream inheight = 200; 3039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } else { 3049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream original = player_8bit_texels; 3059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream inwidth = 296; 3069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream inheight = 194; 3079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 3089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // because this happens during gameplay, do it fast 3119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // instead of sending it through gl_upload 8 3129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GL_Bind(playertextures + playernum); 3139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream #if 0 3159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream s = 320*200; 3169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream byte translated[320*200]; 3179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (i=0 ; i<s ; i+=4) 3199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 3209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream translated[i] = translate[original[i]]; 3219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream translated[i+1] = translate[original[i+1]]; 3229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream translated[i+2] = translate[original[i+2]]; 3239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream translated[i+3] = translate[original[i+3]]; 3249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 3259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // don't mipmap these, because it takes too long 3289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GL_Upload8 (translated, paliashdr->skinwidth, paliashdr->skinheight, 3299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream false, false, true); 3309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream #endif 3319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream scaled_width = gl_max_size.value < 512 ? gl_max_size.value : 512; 3339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream scaled_height = gl_max_size.value < 256 ? gl_max_size.value : 256; 3349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // allow users to crunch sizes down even more if they want 3359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream scaled_width >>= (int)gl_playermip.value; 3369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream scaled_height >>= (int)gl_playermip.value; 3379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (VID_Is8bit()) { // 8bit texture upload 3399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream byte *out2; 3409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream out2 = (byte *)pixels; 3429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream memset(pixels, 0, sizeof(pixels)); 3439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream fracstep = tinwidth*0x10000/scaled_width; 344cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich for (i=0 ; i< (int) scaled_height ; i++, out2 += scaled_width) 3459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 3469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream inrow = original + inwidth*(i*tinheight/scaled_height); 3479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream frac = fracstep >> 1; 348cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich for (j=0 ; j< (int) scaled_width ; j+=4) 3499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 3509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream out2[j] = translate[inrow[frac>>16]]; 3519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream frac += fracstep; 3529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream out2[j+1] = translate[inrow[frac>>16]]; 3539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream frac += fracstep; 3549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream out2[j+2] = translate[inrow[frac>>16]]; 3559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream frac += fracstep; 3569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream out2[j+3] = translate[inrow[frac>>16]]; 3579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream frac += fracstep; 3589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 3599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 3609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GL_Upload8_EXT ((byte *)pixels, scaled_width, scaled_height, false, false); 3629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return; 3639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 3649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (i=0 ; i<256 ; i++) 3669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream translate32[i] = d_8to24table[translate[i]]; 3679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream out = pixels; 3699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream memset(pixels, 0, sizeof(pixels)); 3709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream fracstep = tinwidth*0x10000/scaled_width; 371cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich for (i=0 ; i< (int) scaled_height ; i++, out += scaled_width) 3729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 3739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream inrow = original + inwidth*(i*tinheight/scaled_height); 3749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream frac = fracstep >> 1; 375cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich for (j=0 ; j< (int) scaled_width ; j+=4) 3769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 3779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream out[j] = translate32[inrow[frac>>16]]; 3789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream frac += fracstep; 3799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream out[j+1] = translate32[inrow[frac>>16]]; 3809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream frac += fracstep; 3819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream out[j+2] = translate32[inrow[frac>>16]]; 3829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream frac += fracstep; 3839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream out[j+3] = translate32[inrow[frac>>16]]; 3849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream frac += fracstep; 3859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 3869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 3879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 388cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich glTexImage2DHelper (GL_TEXTURE_2D, 0, gl_solid_format, 3899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream scaled_width, scaled_height, 0, GL_RGBA, 3909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GL_UNSIGNED_BYTE, pixels); 3919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 3939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 3949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 3959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 3969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 3979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* 3999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream=============== 4009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamR_NewMap 4019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream=============== 4029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/ 4039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid R_NewMap (void) 4049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 4059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int i; 4069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (i=0 ; i<256 ; i++) 4089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream d_lightstylevalue[i] = 264; // normal light value 4099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream memset (&r_worldentity, 0, sizeof(r_worldentity)); 4119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream r_worldentity.model = cl.worldmodel; 4129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// clear out efrags in case the level hasn't been reloaded 4149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// FIXME: is this one short? 4159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (i=0 ; i<cl.worldmodel->numleafs ; i++) 4169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream cl.worldmodel->leafs[i].efrags = NULL; 4179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream r_viewleaf = NULL; 4199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream R_ClearParticles (); 4209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GL_BuildLightmaps (); 4229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // identify sky texture 4249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream skytexturenum = -1; 4259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream mirrortexturenum = -1; 4269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (i=0 ; i<cl.worldmodel->numtextures ; i++) 4279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 4289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (!cl.worldmodel->textures[i]) 4299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream continue; 4309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (!Q_strncmp(cl.worldmodel->textures[i]->name,"sky",3) ) 4319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream skytexturenum = i; 4329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (!Q_strncmp(cl.worldmodel->textures[i]->name,"window02_1",10) ) 4339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream mirrortexturenum = i; 4349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream cl.worldmodel->textures[i]->texturechain = NULL; 4359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 4369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#ifdef QUAKE2 4379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream R_LoadSkys (); 4389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#endif 4399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 4409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* 4439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream==================== 4449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamR_TimeRefresh_f 4459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamFor program optimization 4479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream==================== 4489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/ 4499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid R_TimeRefresh_f (void) 4509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 451cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#ifdef USE_OPENGLES 452cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich // Not implemented 453cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich Con_Printf("TimeRefresh not implemented.\n"); 454cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#else 4559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int i; 4569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream float start, stop, time; 4579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glDrawBuffer (GL_FRONT); 4599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glFinish (); 4609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream start = Sys_DoubleTime (); 4629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (i=0 ; i<128 ; i++) 4639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 4649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream r_refdef.viewangles[1] = i/128.0*360.0; 4659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream R_RenderView (); 4669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 4679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glFinish (); 4699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream stop = Sys_DoubleTime (); 4709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream time = stop-start; 4719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Con_Printf ("%f seconds (%f fps)\n", time, 128/time); 4729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glDrawBuffer (GL_BACK); 4749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GL_EndRendering (); 475cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#endif 4769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 4779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid D_FlushCaches (void) 4799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 4809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 4819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 483