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 219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// draw.c -- this is the only file outside the refresh that touches the 229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// vid buffer 239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#include "quakedef.h" 259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern unsigned char d_15to8table[65536]; 279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern cvar_t crosshair, cl_crossx, cl_crossy, crosshaircolor; 289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 29cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichcvar_t gl_nobind = CVAR2("gl_nobind", "0"); 30cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichcvar_t gl_max_size = CVAR2("gl_max_size", "1024"); 31cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichcvar_t gl_picmip = CVAR2("gl_picmip", "0"); 329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreambyte *draw_chars; // 8*8 graphic characters 349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamqpic_t *draw_disc; 359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamqpic_t *draw_backtile; 369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint translate_texture; 389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint char_texture; 399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint cs_texture; // crosshair texture 409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamstatic byte cs_data[64] = { 429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream}; 519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct 549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int texnum; 569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream float sl, tl, sh, th; 579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} glpic_t; 589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreambyte conback_buffer[sizeof(qpic_t) + sizeof(glpic_t)]; 609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamqpic_t *conback = (qpic_t *)&conback_buffer; 619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint gl_lightmap_format = 4; 639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint gl_solid_format = 3; 649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint gl_alpha_format = 4; 659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint gl_filter_min = GL_LINEAR_MIPMAP_NEAREST; 679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint gl_filter_max = GL_LINEAR; 689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint texels; 719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct 739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int texnum; 759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char identifier[64]; 769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int width, height; 779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream qboolean mipmap; 789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} gltexture_t; 799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define MAX_GLTEXTURES 1024 819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamgltexture_t gltextures[MAX_GLTEXTURES]; 829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint numgltextures; 839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid GL_Bind (int texnum) 859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (gl_nobind.value) 879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream texnum = char_texture; 889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (currenttexture == texnum) 899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return; 909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream currenttexture = texnum; 919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#ifdef _WIN32 929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream bindTexFunc (GL_TEXTURE_2D, texnum); 939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#else 949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glBindTexture (GL_TEXTURE_2D, texnum); 959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#endif 969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* 1009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream============================================================================= 1019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream scrap allocation 1039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Allocate all the little status bar obejcts into a single texture 1059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream to crutch up stupid hardware / drivers 1069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream============================================================================= 1089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/ 1099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define MAX_SCRAPS 1 1119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define BLOCK_WIDTH 256 1129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define BLOCK_HEIGHT 256 1139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint scrap_allocated[MAX_SCRAPS][BLOCK_WIDTH]; 1159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreambyte scrap_texels[MAX_SCRAPS][BLOCK_WIDTH*BLOCK_HEIGHT*4]; 1169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamqboolean scrap_dirty; 1179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint scrap_texnum; 1189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// returns a texture number and the position inside it 1209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint Scrap_AllocBlock (int w, int h, int *x, int *y) 1219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 1229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int i, j; 1239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int best, best2; 1249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int texnum; 1259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (texnum=0 ; texnum<MAX_SCRAPS ; texnum++) 1279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 1289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream best = BLOCK_HEIGHT; 1299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (i=0 ; i<BLOCK_WIDTH-w ; i++) 1319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 1329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream best2 = 0; 1339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (j=0 ; j<w ; j++) 1359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 1369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (scrap_allocated[texnum][i+j] >= best) 1379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream break; 1389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (scrap_allocated[texnum][i+j] > best2) 1399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream best2 = scrap_allocated[texnum][i+j]; 1409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 1419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (j == w) 1429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { // this is a valid spot 1439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream *x = i; 1449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream *y = best = best2; 1459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 1469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 1479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (best + h > BLOCK_HEIGHT) 1499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream continue; 1509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (i=0 ; i<w ; i++) 1529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream scrap_allocated[texnum][*x + i] = best + h; 1539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return texnum; 1559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 1569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Sys_Error ("Scrap_AllocBlock: full"); 1589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return 0; 1599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 1609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint scrap_uploads; 1629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid Scrap_Upload (void) 1649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 1659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream scrap_uploads++; 1669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GL_Bind(scrap_texnum); 1679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GL_Upload8 (scrap_texels[0], BLOCK_WIDTH, BLOCK_HEIGHT, false, true); 1689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream scrap_dirty = false; 1699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 1709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//============================================================================= 1729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* Support Routines */ 1739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct cachepic_s 1759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 1769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char name[MAX_QPATH]; 1779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream qpic_t pic; 1789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream byte padding[32]; // for appended glpic 1799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} cachepic_t; 1809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define MAX_CACHED_PICS 128 1829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamcachepic_t menu_cachepics[MAX_CACHED_PICS]; 1839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint menu_numcachepics; 1849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreambyte menuplyr_pixels[4096]; 1869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint pic_texels; 1889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint pic_count; 1899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamqpic_t *Draw_PicFromWad (char *name) 1919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 1929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream qpic_t *p; 1939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glpic_t *gl; 1949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream p = W_GetLumpName (name); 1969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream gl = (glpic_t *)p->data; 1979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // load little ones into the scrap 1999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (p->width < 64 && p->height < 64) 2009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 2019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int x, y; 2029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int i, j, k; 2039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int texnum; 2049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream texnum = Scrap_AllocBlock (p->width, p->height, &x, &y); 2069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream scrap_dirty = true; 2079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream k = 0; 2089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (i=0 ; i<p->height ; i++) 2099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (j=0 ; j<p->width ; j++, k++) 2109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream scrap_texels[texnum][(y+i)*BLOCK_WIDTH + x + j] = p->data[k]; 2119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream texnum += scrap_texnum; 2129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream gl->texnum = texnum; 2139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream gl->sl = (x+0.01)/(float)BLOCK_WIDTH; 2149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream gl->sh = (x+p->width-0.01)/(float)BLOCK_WIDTH; 2159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream gl->tl = (y+0.01)/(float)BLOCK_WIDTH; 2169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream gl->th = (y+p->height-0.01)/(float)BLOCK_WIDTH; 2179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream pic_count++; 2199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream pic_texels += p->width*p->height; 2209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 2219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream else 2229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 2239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream gl->texnum = GL_LoadPicTexture (p); 2249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream gl->sl = 0; 2259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream gl->sh = 1; 2269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream gl->tl = 0; 2279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream gl->th = 1; 2289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 2299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return p; 2309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 2319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* 2349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================ 2359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamDraw_CachePic 2369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================ 2379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/ 2389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamqpic_t *Draw_CachePic (char *path) 2399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 2409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream cachepic_t *pic; 2419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int i; 2429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream qpic_t *dat; 2439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glpic_t *gl; 2449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (pic=menu_cachepics, i=0 ; i<menu_numcachepics ; pic++, i++) 2469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (!strcmp (path, pic->name)) 2479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return &pic->pic; 2489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (menu_numcachepics == MAX_CACHED_PICS) 2509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Sys_Error ("menu_numcachepics == MAX_CACHED_PICS"); 2519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream menu_numcachepics++; 2529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream strcpy (pic->name, path); 2539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 2559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// load the pic from disk 2569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 2579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream dat = (qpic_t *)COM_LoadTempFile (path); 2589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (!dat) 2599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Sys_Error ("Draw_CachePic: failed to load %s", path); 2609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SwapPic (dat); 2619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // HACK HACK HACK --- we need to keep the bytes for 2639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // the translatable player picture just for the menu 2649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // configuration dialog 2659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (!strcmp (path, "gfx/menuplyr.lmp")) 2669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream memcpy (menuplyr_pixels, dat->data, dat->width*dat->height); 2679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream pic->pic.width = dat->width; 2699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream pic->pic.height = dat->height; 2709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream gl = (glpic_t *)pic->pic.data; 2729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream gl->texnum = GL_LoadPicTexture (dat); 2739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream gl->sl = 0; 2749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream gl->sh = 1; 2759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream gl->tl = 0; 2769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream gl->th = 1; 2779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return &pic->pic; 2799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 2809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid Draw_CharToConback (int num, byte *dest) 2839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 2849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int row, col; 2859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream byte *source; 2869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int drawline; 2879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int x; 2889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream row = num>>4; 2909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream col = num&15; 2919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream source = draw_chars + (row<<10) + (col<<3); 2929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream drawline = 8; 2949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 2959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream while (drawline--) 2969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 2979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (x=0 ; x<8 ; x++) 2989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (source[x] != 255) 2999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream dest[x] = 0x60 + source[x]; 3009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream source += 128; 3019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream dest += 320; 3029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 3039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 3059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct 3079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 3089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char *name; 3099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int minimize, maximize; 3109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} glmode_t; 3119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamglmode_t modes[] = { 3139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream {"GL_NEAREST", GL_NEAREST, GL_NEAREST}, 3149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream {"GL_LINEAR", GL_LINEAR, GL_LINEAR}, 3159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream {"GL_NEAREST_MIPMAP_NEAREST", GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST}, 3169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream {"GL_LINEAR_MIPMAP_NEAREST", GL_LINEAR_MIPMAP_NEAREST, GL_LINEAR}, 3179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream {"GL_NEAREST_MIPMAP_LINEAR", GL_NEAREST_MIPMAP_LINEAR, GL_NEAREST}, 3189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream {"GL_LINEAR_MIPMAP_LINEAR", GL_LINEAR_MIPMAP_LINEAR, GL_LINEAR} 3199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream}; 3209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* 3229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream=============== 3239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamDraw_TextureMode_f 3249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream=============== 3259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/ 3269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid Draw_TextureMode_f (void) 3279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 3289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int i; 3299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream gltexture_t *glt; 3309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (Cmd_Argc() == 1) 3329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 3339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (i=0 ; i< 6 ; i++) 3349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (gl_filter_min == modes[i].minimize) 3359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 3369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Con_Printf ("%s\n", modes[i].name); 3379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return; 3389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 3399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Con_Printf ("current filter is unknown???\n"); 3409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return; 3419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 3429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (i=0 ; i< 6 ; i++) 3449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 3459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (!Q_strcasecmp (modes[i].name, Cmd_Argv(1) ) ) 3469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream break; 3479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 3489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (i == 6) 3499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 3509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Con_Printf ("bad filter name\n"); 3519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return; 3529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 3539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream gl_filter_min = modes[i].minimize; 3559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream gl_filter_max = modes[i].maximize; 3569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // change all the existing mipmap texture objects 3589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (i=0, glt=gltextures ; i<numgltextures ; i++, glt++) 3599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 3609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (glt->mipmap) 3619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 3629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GL_Bind (glt->texnum); 3639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_min); 3649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max); 3659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 3669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 3679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 3689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* 3709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream=============== 3719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamDraw_Init 3729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream=============== 3739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/ 3749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid Draw_Init (void) 3759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 3769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int i; 3779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream qpic_t *cb; 3789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream byte *dest; 3799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int x; 3809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char ver[40]; 3819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glpic_t *gl; 3829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int start; 3839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream byte *ncdata; 3849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Cvar_RegisterVariable (&gl_nobind); 3869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Cvar_RegisterVariable (&gl_max_size); 3879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Cvar_RegisterVariable (&gl_picmip); 3889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // 3dfx can only handle 256 wide textures 3909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (!Q_strncasecmp ((char *)gl_renderer, "3dfx",4) || 3919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream !Q_strncasecmp ((char *)gl_renderer, "Mesa",4)) 3929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Cvar_Set ("gl_max_size", "256"); 3939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Cmd_AddCommand ("gl_texturemode", &Draw_TextureMode_f); 3959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 3969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // load the console background and the charset 3979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // by hand, because we need to write the version 3989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // string into the background before turning 3999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // it into a texture 4009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream draw_chars = W_GetLumpName ("conchars"); 4019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (i=0 ; i<256*64 ; i++) 4029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (draw_chars[i] == 0) 4039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream draw_chars[i] = 255; // proper transparent color 4049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // now turn them into textures 4069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char_texture = GL_LoadTexture ("charset", 128, 128, draw_chars, false, true); 4079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// Draw_CrosshairAdjust(); 4089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream cs_texture = GL_LoadTexture ("crosshair", 8, 8, cs_data, false, true); 4099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream start = Hunk_LowMark (); 4119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream cb = (qpic_t *)COM_LoadHunkFile ("gfx/conback.lmp"); 4139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (!cb) 4149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Sys_Error ("Couldn't load gfx/conback.lmp"); 4159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream SwapPic (cb); 4169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream sprintf (ver, "%4.2f", VERSION); 4189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream dest = cb->data + 320 + 320*186 - 11 - 8*strlen(ver); 419cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich for (x=0 ; x< (int) strlen(ver) ; x++) 4209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Draw_CharToConback (ver[x], dest+(x<<3)); 4219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#if 0 4239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream conback->width = vid.conwidth; 4249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream conback->height = vid.conheight; 4259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // scale console to vid size 4279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream dest = ncdata = Hunk_AllocName(vid.conwidth * vid.conheight, "conback"); 4289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (y=0 ; y<vid.conheight ; y++, dest += vid.conwidth) 4309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 4319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream src = cb->data + cb->width * (y*cb->height/vid.conheight); 4329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (vid.conwidth == cb->width) 4339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream memcpy (dest, src, vid.conwidth); 4349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream else 4359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 4369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream f = 0; 4379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream fstep = cb->width*0x10000/vid.conwidth; 4389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (x=0 ; x<vid.conwidth ; x+=4) 4399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 4409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream dest[x] = src[f>>16]; 4419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream f += fstep; 4429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream dest[x+1] = src[f>>16]; 4439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream f += fstep; 4449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream dest[x+2] = src[f>>16]; 4459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream f += fstep; 4469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream dest[x+3] = src[f>>16]; 4479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream f += fstep; 4489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 4499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 4509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 4519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#else 4529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream conback->width = cb->width; 4539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream conback->height = cb->height; 4549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream ncdata = cb->data; 4559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#endif 4569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 4589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 4599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream gl = (glpic_t *)conback->data; 4619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream gl->texnum = GL_LoadTexture ("conback", conback->width, conback->height, ncdata, false, false); 4629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream gl->sl = 0; 4639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream gl->sh = 1; 4649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream gl->tl = 0; 4659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream gl->th = 1; 4669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream conback->width = vid.conwidth; 4679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream conback->height = vid.conheight; 4689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // free loaded console 4709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Hunk_FreeToLowMark (start); 4719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // save a texture slot for translated picture 4739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream translate_texture = texture_extension_number++; 4749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // save slots for scraps 4769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream scrap_texnum = texture_extension_number; 4779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream texture_extension_number += MAX_SCRAPS; 4789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // 4809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // get the other pics we need 4819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // 4829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream draw_disc = Draw_PicFromWad ("disc"); 4839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream draw_backtile = Draw_PicFromWad ("backtile"); 4849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 4859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* 4899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================ 4909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamDraw_Character 4919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 4929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamDraws one 8*8 graphics character with 0 being transparent. 4939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamIt can be clipped to the top of the screen to allow the console to be 4949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamsmoothly scrolled off. 4959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================ 4969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/ 4979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid Draw_Character (int x, int y, int num) 4989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 4999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int row, col; 5009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream float frow, fcol, size; 5019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (num == 32) 5039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return; // space 5049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream num &= 255; 5069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (y <= -8) 5089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return; // totally off screen 5099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream row = num>>4; 5119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream col = num&15; 5129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream frow = row*0.0625; 5149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream fcol = col*0.0625; 5159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream size = 0.0625; 5169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GL_Bind (char_texture); 5189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 519cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#ifdef USE_OPENGLES 520cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich DrawQuad(x, y, 8, 8, fcol, frow, size, size); 521cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#else 5229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glBegin (GL_QUADS); 5239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexCoord2f (fcol, frow); 5249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glVertex2f (x, y); 5259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexCoord2f (fcol + size, frow); 5269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glVertex2f (x+8, y); 5279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexCoord2f (fcol + size, frow + size); 5289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glVertex2f (x+8, y+8); 5299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexCoord2f (fcol, frow + size); 5309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glVertex2f (x, y+8); 5319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glEnd (); 532cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#endif 5339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 5349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* 5369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================ 5379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamDraw_String 5389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================ 5399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/ 5409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid Draw_String (int x, int y, char *str) 5419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 5429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream while (*str) 5439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 5449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Draw_Character (x, y, *str); 5459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream str++; 5469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream x += 8; 5479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 5489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 5499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* 5519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================ 5529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamDraw_Alt_String 5539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================ 5549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/ 5559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid Draw_Alt_String (int x, int y, char *str) 5569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 5579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream while (*str) 5589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 5599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Draw_Character (x, y, (*str) | 0x80); 5609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream str++; 5619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream x += 8; 5629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 5639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 5649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid Draw_Crosshair(void) 5669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 5679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int x, y; 5689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream extern vrect_t scr_vrect; 5699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream unsigned char *pColor; 5709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (crosshair.value == 2) { 5729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream x = scr_vrect.x + scr_vrect.width/2 - 3 + cl_crossx.value; 5739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream y = scr_vrect.y + scr_vrect.height/2 - 3 + cl_crossy.value; 5749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexEnvf ( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); 5769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream pColor = (unsigned char *) &d_8to24table[(byte) crosshaircolor.value]; 5779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glColor4ubv ( pColor ); 5789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GL_Bind (cs_texture); 5799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 580cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#ifdef USE_OPENGLES 581cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich DrawQuad(x - 4, y - 4, 16, 16, 0, 0, 1, 1); 582cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#else 5839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glBegin (GL_QUADS); 5849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexCoord2f (0, 0); 5859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glVertex2f (x - 4, y - 4); 5869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexCoord2f (1, 0); 5879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glVertex2f (x+12, y-4); 5889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexCoord2f (1, 1); 5899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glVertex2f (x+12, y+12); 5909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexCoord2f (0, 1); 5919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glVertex2f (x - 4, y+12); 5929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glEnd (); 593cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#endif 5949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 5959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexEnvf ( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE ); 5969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } else if (crosshair.value) 5979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Draw_Character (scr_vrect.x + scr_vrect.width/2-4 + cl_crossx.value, 5989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream scr_vrect.y + scr_vrect.height/2-4 + cl_crossy.value, 5999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream '+'); 6009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 6019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 6029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 6039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* 6049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================ 6059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamDraw_DebugChar 6069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 6079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamDraws a single character directly to the upper right corner of the screen. 6089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamThis is for debugging lockups by drawing different chars in different parts 6099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamof the code. 6109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================ 6119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/ 6129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid Draw_DebugChar (char num) 6139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 6149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 6159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 6169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* 6179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream============= 6189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamDraw_Pic 6199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream============= 6209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/ 6219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid Draw_Pic (int x, int y, qpic_t *pic) 6229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 6239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glpic_t *gl; 6249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 6259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (scrap_dirty) 6269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Scrap_Upload (); 6279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream gl = (glpic_t *)pic->data; 6289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glColor4f (1,1,1,1); 6299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GL_Bind (gl->texnum); 630cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#ifdef USE_OPENGLES 631cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich DrawQuad(x, y, pic->width, pic->height, gl->sl, gl->tl, gl->sh - gl->sl, gl->th - gl->tl); 632cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#else 6339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glBegin (GL_QUADS); 6349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexCoord2f (gl->sl, gl->tl); 6359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glVertex2f (x, y); 6369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexCoord2f (gl->sh, gl->tl); 6379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glVertex2f (x+pic->width, y); 6389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexCoord2f (gl->sh, gl->th); 6399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glVertex2f (x+pic->width, y+pic->height); 6409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexCoord2f (gl->sl, gl->th); 6419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glVertex2f (x, y+pic->height); 6429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glEnd (); 643cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#endif 6449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 6459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 6469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* 6479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream============= 6489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamDraw_AlphaPic 6499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream============= 6509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/ 6519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid Draw_AlphaPic (int x, int y, qpic_t *pic, float alpha) 6529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 6539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glpic_t *gl; 6549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 6559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (scrap_dirty) 6569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Scrap_Upload (); 6579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream gl = (glpic_t *)pic->data; 6589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glDisable(GL_ALPHA_TEST); 6599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glEnable (GL_BLEND); 6609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 6619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glCullFace(GL_FRONT); 6629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glColor4f (1,1,1,alpha); 6639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GL_Bind (gl->texnum); 664cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#ifdef USE_OPENGLES 665cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich DrawQuad(x, y, pic->width, pic->height, gl->sl, gl->tl, gl->sh - gl->sl, gl->th - gl->tl); 666cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#else 6679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glBegin (GL_QUADS); 6689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexCoord2f (gl->sl, gl->tl); 6699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glVertex2f (x, y); 6709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexCoord2f (gl->sh, gl->tl); 6719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glVertex2f (x+pic->width, y); 6729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexCoord2f (gl->sh, gl->th); 6739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glVertex2f (x+pic->width, y+pic->height); 6749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexCoord2f (gl->sl, gl->th); 6759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glVertex2f (x, y+pic->height); 6769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glEnd (); 677cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#endif 6789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glColor4f (1,1,1,1); 6799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glEnable(GL_ALPHA_TEST); 6809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glDisable (GL_BLEND); 6819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 6829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 6839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid Draw_SubPic(int x, int y, qpic_t *pic, int srcx, int srcy, int width, int height) 6849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 6859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glpic_t *gl; 6869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream float newsl, newtl, newsh, newth; 6879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream float oldglwidth, oldglheight; 6889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 6899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (scrap_dirty) 6909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Scrap_Upload (); 6919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream gl = (glpic_t *)pic->data; 6929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 6939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream oldglwidth = gl->sh - gl->sl; 6949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream oldglheight = gl->th - gl->tl; 6959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 6969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream newsl = gl->sl + (srcx*oldglwidth)/pic->width; 6979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream newsh = newsl + (width*oldglwidth)/pic->width; 6989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 6999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream newtl = gl->tl + (srcy*oldglheight)/pic->height; 7009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream newth = newtl + (height*oldglheight)/pic->height; 7019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glColor4f (1,1,1,1); 7039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GL_Bind (gl->texnum); 704cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#ifdef USE_OPENGLES 705cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich DrawQuad(x, y, width, height, newsl, newtl, newsh - newsl, newth - newtl); 706cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#else 7079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glBegin (GL_QUADS); 7089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexCoord2f (newsl, newtl); 7099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glVertex2f (x, y); 7109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexCoord2f (newsh, newtl); 7119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glVertex2f (x+width, y); 7129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexCoord2f (newsh, newth); 7139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glVertex2f (x+width, y+height); 7149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexCoord2f (newsl, newth); 7159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glVertex2f (x, y+height); 7169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glEnd (); 717cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#endif 7189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 7199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* 7219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream============= 7229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamDraw_TransPic 7239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream============= 7249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/ 7259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid Draw_TransPic (int x, int y, qpic_t *pic) 7269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 7279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (x < 0 || (unsigned)(x + pic->width) > vid.width || y < 0 || 7299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream (unsigned)(y + pic->height) > vid.height) 7309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 7319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Sys_Error ("Draw_TransPic: bad coordinates"); 7329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 7339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Draw_Pic (x, y, pic); 7359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 7369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* 7399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream============= 7409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamDraw_TransPicTranslate 7419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamOnly used for the player color selection menu 7439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream============= 7449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/ 7459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid Draw_TransPicTranslate (int x, int y, qpic_t *pic, byte *translation) 7469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 7479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int v, u, c; 7489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream unsigned trans[64*64], *dest; 7499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream byte *src; 7509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int p; 7519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GL_Bind (translate_texture); 7539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream c = pic->width * pic->height; 7559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream dest = trans; 7579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (v=0 ; v<64 ; v++, dest += 64) 7589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 7599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream src = &menuplyr_pixels[ ((v*pic->height)>>6) *pic->width]; 7609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (u=0 ; u<64 ; u++) 7619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 7629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream p = src[(u*pic->width)>>6]; 7639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (p == 255) 7649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream dest[u] = p; 7659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream else 7669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream dest[u] = d_8to24table[translation[p]]; 7679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 7689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 7699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 770cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich glTexImage2DHelper (GL_TEXTURE_2D, 0, gl_alpha_format, 64, 64, 0, GL_RGBA, GL_UNSIGNED_BYTE, trans); 7719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 7739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 7749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glColor3f (1,1,1); 776cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#ifdef USE_OPENGLES 777cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich DrawQuad(x, y, pic->width, pic->height, 0, 0, 1, 1); 778cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#else 7799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glBegin (GL_QUADS); 7809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexCoord2f (0, 0); 7819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glVertex2f (x, y); 7829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexCoord2f (1, 0); 7839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glVertex2f (x+pic->width, y); 7849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexCoord2f (1, 1); 7859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glVertex2f (x+pic->width, y+pic->height); 7869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexCoord2f (0, 1); 7879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glVertex2f (x, y+pic->height); 7889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glEnd (); 789cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#endif 7909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 7919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* 7949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================ 7959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamDraw_ConsoleBackground 7969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 7979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================ 7989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/ 7999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid Draw_ConsoleBackground (int lines) 8009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 8019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream char ver[80]; 8029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int x, i; 8039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int y; 8049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 8059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream y = (vid.height * 3) >> 2; 8069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (lines > y) 8079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Draw_Pic(0, lines-vid.height, conback); 8089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream else 8099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Draw_AlphaPic (0, lines - vid.height, conback, (float)(1.2 * lines)/y); 8109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 8119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // hack the version number directly into the pic 8129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// y = lines-186; 8139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream y = lines-14; 8149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (!cls.download) { 8159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#ifdef __linux__ 8169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream sprintf (ver, "LinuxGL (%4.2f) QuakeWorld", LINUX_VERSION); 8179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#else 8189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream sprintf (ver, "GL (%4.2f) QuakeWorld", GLQUAKE_VERSION); 8199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#endif 8209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream x = vid.conwidth - (strlen(ver)*8 + 11) - (vid.conwidth*8/320)*7; 821cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich for (i=0 ; i< (int) strlen(ver) ; i++) 8229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Draw_Character (x + i * 8, y, ver[i] | 0x80); 8239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 8249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 8259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 8269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 8279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* 8289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream============= 8299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamDraw_TileClear 8309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 8319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamThis repeats a 64*64 tile graphic to fill the screen around a sized down 8329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamrefresh window. 8339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream============= 8349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/ 8359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid Draw_TileClear (int x, int y, int w, int h) 8369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 8379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glColor3f (1,1,1); 8389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GL_Bind (*(int *)draw_backtile->data); 839cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#ifdef USE_OPENGLES 840cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich DrawQuad(x, y, w, h, x/64.0, y/64.0, w/64.0, h/64.0); 841cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#else 8429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glBegin (GL_QUADS); 8439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexCoord2f (x/64.0, y/64.0); 8449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glVertex2f (x, y); 8459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexCoord2f ( (x+w)/64.0, y/64.0); 8469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glVertex2f (x+w, y); 8479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexCoord2f ( (x+w)/64.0, (y+h)/64.0); 8489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glVertex2f (x+w, y+h); 8499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexCoord2f ( x/64.0, (y+h)/64.0 ); 8509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glVertex2f (x, y+h); 8519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glEnd (); 852cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#endif 8539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 8549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 8559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 8569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* 8579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream============= 8589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamDraw_Fill 8599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 8609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamFills a box of pixels with a single color 8619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream============= 8629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/ 8639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid Draw_Fill (int x, int y, int w, int h, int c) 8649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 8659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glDisable (GL_TEXTURE_2D); 8669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glColor3f (host_basepal[c*3]/255.0, 8679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream host_basepal[c*3+1]/255.0, 8689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream host_basepal[c*3+2]/255.0); 8699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 870cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#ifdef USE_OPENGLES 871cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich DrawQuad_NoTex(x, y, w, h); 872cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#else 8739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glBegin (GL_QUADS); 8749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 8759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glVertex2f (x,y); 8769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glVertex2f (x+w, y); 8779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glVertex2f (x+w, y+h); 8789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glVertex2f (x, y+h); 8799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 8809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glEnd (); 881cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#endif 8829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glColor3f (1,1,1); 8839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glEnable (GL_TEXTURE_2D); 8849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 8859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//============================================================================= 8869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 8879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* 8889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================ 8899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamDraw_FadeScreen 8909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 8919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================ 8929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/ 8939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid Draw_FadeScreen (void) 8949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 8959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glEnable (GL_BLEND); 8969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glDisable (GL_TEXTURE_2D); 8979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glColor4f (0, 0, 0, 0.8); 898cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 899cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#ifdef USE_OPENGLES 900cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich DrawQuad_NoTex(0, 0, vid.width, vid.height); 901cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#else 9029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glBegin (GL_QUADS); 9039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glVertex2f (0,0); 9059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glVertex2f (vid.width, 0); 9069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glVertex2f (vid.width, vid.height); 9079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glVertex2f (0, vid.height); 9089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glEnd (); 910cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#endif 9119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glColor4f (1,1,1,1); 9129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glEnable (GL_TEXTURE_2D); 9139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glDisable (GL_BLEND); 9149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Sbar_Changed(); 9169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 9179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//============================================================================= 9199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* 9219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================ 9229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamDraw_BeginDisc 9239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamDraws the little blue disc in the corner of the screen. 9259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamCall before beginning any disc IO. 9269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================ 9279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/ 9289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid Draw_BeginDisc (void) 9299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 9309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (!draw_disc) 9319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return; 932cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#ifdef USE_OPENGLES 933cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich // !!! Implement this 934cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#else 9359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glDrawBuffer (GL_FRONT); 9369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Draw_Pic (vid.width - 24, 0, draw_disc); 9379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glDrawBuffer (GL_BACK); 938cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#endif 9399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 9409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* 9439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================ 9449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamDraw_EndDisc 9459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamErases the disc icon. 9479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamCall after completing any disc IO 9489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================ 9499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/ 9509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid Draw_EndDisc (void) 9519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 9529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 9539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* 9559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================ 9569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamGL_Set2D 9579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamSetup as if the screen was 320*200 9599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================ 9609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/ 9619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid GL_Set2D (void) 9629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 9639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glViewport (glx, gly, glwidth, glheight); 9649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glMatrixMode(GL_PROJECTION); 9669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glLoadIdentity (); 967cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#ifdef USE_OPENGLES 968cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich glOrthof (0, vid.width, vid.height, 0, -99999, 99999); 969cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#else 9709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glOrtho (0, vid.width, vid.height, 0, -99999, 99999); 971cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#endif 9729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glMatrixMode(GL_MODELVIEW); 9749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glLoadIdentity (); 9759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glDisable (GL_DEPTH_TEST); 9779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glDisable (GL_CULL_FACE); 9789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glDisable (GL_BLEND); 9799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glEnable (GL_ALPHA_TEST); 9809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// glDisable (GL_ALPHA_TEST); 9819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glColor4f (1,1,1,1); 9839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 9849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//==================================================================== 9869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* 9889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================ 9899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamGL_FindTexture 9909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================ 9919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/ 9929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint GL_FindTexture (char *identifier) 9939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 9949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int i; 9959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream gltexture_t *glt; 9969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 9979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (i=0, glt=gltextures ; i<numgltextures ; i++, glt++) 9989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 9999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (!strcmp (identifier, glt->identifier)) 10009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return gltextures[i].texnum; 10019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 10029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 10039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return -1; 10049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 10059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 10069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* 10079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================ 10089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamGL_ResampleTexture 10099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================ 10109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/ 10119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid GL_ResampleTexture (unsigned *in, int inwidth, int inheight, unsigned *out, int outwidth, int outheight) 10129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 10139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int i, j; 10149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream unsigned *inrow; 10159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream unsigned frac, fracstep; 10169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 10179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream fracstep = inwidth*0x10000/outwidth; 10189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (i=0 ; i<outheight ; i++, out += outwidth) 10199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 10209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream inrow = in + inwidth*(i*inheight/outheight); 10219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream frac = fracstep >> 1; 10229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (j=0 ; j<outwidth ; j+=4) 10239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 10249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream out[j] = inrow[frac>>16]; 10259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream frac += fracstep; 10269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream out[j+1] = inrow[frac>>16]; 10279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream frac += fracstep; 10289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream out[j+2] = inrow[frac>>16]; 10299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream frac += fracstep; 10309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream out[j+3] = inrow[frac>>16]; 10319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream frac += fracstep; 10329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 10339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 10349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 10359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 10369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* 10379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================ 10389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamGL_Resample8BitTexture -- JACK 10399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================ 10409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/ 10419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid GL_Resample8BitTexture (unsigned char *in, int inwidth, int inheight, unsigned char *out, int outwidth, int outheight) 10429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 10439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int i, j; 10449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream unsigned char *inrow; 10459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream unsigned frac, fracstep; 10469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 10479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream fracstep = inwidth*0x10000/outwidth; 10489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (i=0 ; i<outheight ; i++, out += outwidth) 10499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 10509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream inrow = in + inwidth*(i*inheight/outheight); 10519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream frac = fracstep >> 1; 10529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (j=0 ; j<outwidth ; j+=4) 10539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 10549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream out[j] = inrow[frac>>16]; 10559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream frac += fracstep; 10569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream out[j+1] = inrow[frac>>16]; 10579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream frac += fracstep; 10589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream out[j+2] = inrow[frac>>16]; 10599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream frac += fracstep; 10609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream out[j+3] = inrow[frac>>16]; 10619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream frac += fracstep; 10629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 10639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 10649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 10659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 10669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* 10679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================ 10689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamGL_MipMap 10699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 10709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamOperates in place, quartering the size of the texture 10719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================ 10729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/ 10739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid GL_MipMap (byte *in, int width, int height) 10749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 10759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int i, j; 10769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream byte *out; 10779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 10789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream width <<=2; 10799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream height >>= 1; 10809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream out = in; 10819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (i=0 ; i<height ; i++, in+=width) 10829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 10839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (j=0 ; j<width ; j+=8, out+=4, in+=8) 10849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 10859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream out[0] = (in[0] + in[4] + in[width+0] + in[width+4])>>2; 10869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream out[1] = (in[1] + in[5] + in[width+1] + in[width+5])>>2; 10879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream out[2] = (in[2] + in[6] + in[width+2] + in[width+6])>>2; 10889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream out[3] = (in[3] + in[7] + in[width+3] + in[width+7])>>2; 10899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 10909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 10919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 10929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 10939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* 10949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================ 10959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamGL_MipMap8Bit 10969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 10979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamMipping for 8 bit textures 10989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================ 10999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/ 11009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid GL_MipMap8Bit (byte *in, int width, int height) 11019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 11029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int i, j; 11039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream byte *out; 11049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream unsigned short r,g,b; 11059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream byte *at1, *at2, *at3, *at4; 11069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 11079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream height >>= 1; 11089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream out = in; 11099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (i=0 ; i<height ; i++, in+=width) 11109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (j=0 ; j<width ; j+=2, out+=1, in+=2) 11119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 11129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream at1 = (byte *) &d_8to24table[in[0]]; 11139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream at2 = (byte *) &d_8to24table[in[1]]; 11149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream at3 = (byte *) &d_8to24table[in[width+0]]; 11159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream at4 = (byte *) &d_8to24table[in[width+1]]; 11169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 11179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream r = (at1[0]+at2[0]+at3[0]+at4[0]); r>>=5; 11189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream g = (at1[1]+at2[1]+at3[1]+at4[1]); g>>=5; 11199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream b = (at1[2]+at2[2]+at3[2]+at4[2]); b>>=5; 11209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 11219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream out[0] = d_15to8table[(r<<0) + (g<<5) + (b<<10)]; 11229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 11239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 11249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1125cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid glTexImage2DHelper( GLenum target, 1126cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich GLint level, 1127cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich GLint internalformat, 1128cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich GLsizei width, 1129cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich GLsizei height, 1130cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich GLint border, 1131cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich GLenum format, 1132cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich GLenum type, 1133cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich const GLvoid *pixels ) 1134cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich{ 1135cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich // In full OpenGL The internalformat can be 1..4, to indicate how many components of the data are valid. 1136cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich // OpenGL ES requires the internalformat argument match the format for glTexImage2D. 1137cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 1138cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich glTexImage2D(target, level, format, width, height, border, format, type, pixels); 1139cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich} 1140cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 11419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* 11429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream=============== 11439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamGL_Upload32 11449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream=============== 11459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/ 11469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid GL_Upload32 (unsigned *data, int width, int height, qboolean mipmap, qboolean alpha) 11479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 11489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int samples; 11499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamstatic unsigned scaled[1024*512]; // [512*256]; 11509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int scaled_width, scaled_height; 11519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 11529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (scaled_width = 1 ; scaled_width < width ; scaled_width<<=1) 11539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream ; 11549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (scaled_height = 1 ; scaled_height < height ; scaled_height<<=1) 11559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream ; 11569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 11579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream scaled_width >>= (int)gl_picmip.value; 11589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream scaled_height >>= (int)gl_picmip.value; 11599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1160cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich if (scaled_width > (int) gl_max_size.value) 11619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream scaled_width = gl_max_size.value; 1162cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich if (scaled_height > (int) gl_max_size.value) 11639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream scaled_height = gl_max_size.value; 11649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1165cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich if (scaled_width * scaled_height > (int) sizeof(scaled)/4) 11669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Sys_Error ("GL_LoadTexture: too big"); 11679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 11689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream samples = alpha ? gl_alpha_format : gl_solid_format; 11699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 11709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#if 0 11719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (mipmap) 11729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream gluBuild2DMipmaps (GL_TEXTURE_2D, samples, width, height, GL_RGBA, GL_UNSIGNED_BYTE, trans); 11739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream else if (scaled_width == width && scaled_height == height) 11749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexImage2D (GL_TEXTURE_2D, 0, samples, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, trans); 11759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream else 11769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 11779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream gluScaleImage (GL_RGBA, width, height, GL_UNSIGNED_BYTE, trans, 11789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream scaled_width, scaled_height, GL_UNSIGNED_BYTE, scaled); 11799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexImage2D (GL_TEXTURE_2D, 0, samples, scaled_width, scaled_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, scaled); 11809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 11819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#else 11829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtexels += scaled_width * scaled_height; 11839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 11849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (scaled_width == width && scaled_height == height) 11859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 11869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (!mipmap) 11879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 1188cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich glTexImage2DHelper (GL_TEXTURE_2D, 0, samples, scaled_width, scaled_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); 11899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream goto done; 11909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 11919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream memcpy (scaled, data, width*height*4); 11929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 11939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream else 11949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GL_ResampleTexture (data, width, height, scaled, scaled_width, scaled_height); 11959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1196cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich glTexImage2DHelper (GL_TEXTURE_2D, 0, samples, scaled_width, scaled_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, scaled); 11979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (mipmap) 11989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 11999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int miplevel; 12009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 12019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream miplevel = 0; 12029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream while (scaled_width > 1 || scaled_height > 1) 12039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 12049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GL_MipMap ((byte *)scaled, scaled_width, scaled_height); 12059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream scaled_width >>= 1; 12069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream scaled_height >>= 1; 12079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (scaled_width < 1) 12089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream scaled_width = 1; 12099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (scaled_height < 1) 12109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream scaled_height = 1; 12119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream miplevel++; 1212cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich glTexImage2DHelper (GL_TEXTURE_2D, miplevel, samples, scaled_width, scaled_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, scaled); 12139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 12149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 12159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamdone: ; 12169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#endif 12179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 12189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 12199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (mipmap) 12209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 12219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_min); 12229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max); 12239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 12249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream else 12259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 12269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_max); 12279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max); 12289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 12299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 12309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 12319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid GL_Upload8_EXT (byte *data, int width, int height, qboolean mipmap, qboolean alpha) 12329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 12339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int i, s; 12349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream qboolean noalpha; 12359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int samples; 12369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream static unsigned char scaled[1024*512]; // [512*256]; 12379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int scaled_width, scaled_height; 12389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 12399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream s = width*height; 12409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // if there are no transparent pixels, make it a 3 component 12419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // texture even if it was specified as otherwise 12429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (alpha) 12439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 12449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream noalpha = true; 12459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (i=0 ; i<s ; i++) 12469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 12479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (data[i] == 255) 12489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream noalpha = false; 12499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 12509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 12519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (alpha && noalpha) 12529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream alpha = false; 12539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 12549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (scaled_width = 1 ; scaled_width < width ; scaled_width<<=1) 12559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream ; 12569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (scaled_height = 1 ; scaled_height < height ; scaled_height<<=1) 12579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream ; 12589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 12599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream scaled_width >>= (int)gl_picmip.value; 12609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream scaled_height >>= (int)gl_picmip.value; 12619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 12629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (scaled_width > gl_max_size.value) 12639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream scaled_width = gl_max_size.value; 12649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (scaled_height > gl_max_size.value) 12659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream scaled_height = gl_max_size.value; 12669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1267cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich if (scaled_width * scaled_height > (int) sizeof(scaled)) 12689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Sys_Error ("GL_LoadTexture: too big"); 12699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 12709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream samples = 1; // alpha ? gl_alpha_format : gl_solid_format; 12719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 12729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream texels += scaled_width * scaled_height; 12739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 12749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (scaled_width == width && scaled_height == height) 12759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 12769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (!mipmap) 12779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 1278cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#ifdef USE_OPENGLES 1279cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich glCompressedTexImage2D (GL_TEXTURE_2D, 0, GL_PALETTE8_RGB8_OES, scaled_width, scaled_height, 0, s, data); 1280cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#else 12819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexImage2D (GL_TEXTURE_2D, 0, GL_COLOR_INDEX8_EXT, scaled_width, scaled_height, 0, GL_COLOR_INDEX , GL_UNSIGNED_BYTE, data); 1282cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#endif 12839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream goto done; 12849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 12859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream memcpy (scaled, data, width*height); 12869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 12879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream else 12889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GL_Resample8BitTexture (data, width, height, scaled, scaled_width, scaled_height); 12899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 1290cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#ifdef USE_OPENGLES 1291cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich glCompressedTexImage2D (GL_TEXTURE_2D, 0, GL_PALETTE8_RGB8_OES, scaled_width, scaled_height, 0, s, scaled); 1292cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#else 12939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexImage2D (GL_TEXTURE_2D, 0, GL_COLOR_INDEX8_EXT, scaled_width, scaled_height, 0, GL_COLOR_INDEX, GL_UNSIGNED_BYTE, scaled); 1294cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#endif 1295cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 12969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (mipmap) 12979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 12989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int miplevel; 12999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 13009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream miplevel = 0; 13019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream while (scaled_width > 1 || scaled_height > 1) 13029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 13039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GL_MipMap8Bit ((byte *)scaled, scaled_width, scaled_height); 13049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream scaled_width >>= 1; 13059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream scaled_height >>= 1; 13069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (scaled_width < 1) 13079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream scaled_width = 1; 13089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (scaled_height < 1) 13099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream scaled_height = 1; 13109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream miplevel++; 1311cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#ifdef USE_OPENGLES 1312cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich glCompressedTexImage2D (GL_TEXTURE_2D, miplevel, GL_PALETTE8_RGB8_OES, scaled_width, scaled_height, 0, s, scaled); 1313cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#else 13149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexImage2D (GL_TEXTURE_2D, miplevel, GL_COLOR_INDEX8_EXT, scaled_width, scaled_height, 0, GL_COLOR_INDEX, GL_UNSIGNED_BYTE, scaled); 1315cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#endif 13169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 13179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 13189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamdone: ; 13199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 13209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (mipmap) 13219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 13229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_min); 13239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max); 13249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 13259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream else 13269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 13279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_max); 13289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max); 13299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 13309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 13319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 13329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern qboolean VID_Is8bit(); 13339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 13349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* 13359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream=============== 13369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamGL_Upload8 13379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream=============== 13389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/ 13399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid GL_Upload8 (byte *data, int width, int height, qboolean mipmap, qboolean alpha) 13409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 13419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamstatic unsigned trans[640*480]; // FIXME, temporary 13429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int i, s; 13439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream qboolean noalpha; 13449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int p; 13459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 13469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream s = width*height; 13479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // if there are no transparent pixels, make it a 3 component 13489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // texture even if it was specified as otherwise 13499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (alpha) 13509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 13519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream noalpha = true; 13529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (i=0 ; i<s ; i++) 13539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 13549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream p = data[i]; 13559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (p == 255) 13569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream noalpha = false; 13579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream trans[i] = d_8to24table[p]; 13589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 13599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 13609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (alpha && noalpha) 13619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream alpha = false; 13629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 13639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream else 13649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 13659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (s&3) 13669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Sys_Error ("GL_Upload8: s&3"); 13679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (i=0 ; i<s ; i+=4) 13689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 13699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream trans[i] = d_8to24table[data[i]]; 13709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream trans[i+1] = d_8to24table[data[i+1]]; 13719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream trans[i+2] = d_8to24table[data[i+2]]; 13729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream trans[i+3] = d_8to24table[data[i+3]]; 13739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 13749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 13759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 13769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (VID_Is8bit() && !alpha && (data!=scrap_texels[0])) { 13779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GL_Upload8_EXT (data, width, height, mipmap, alpha); 13789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return; 13799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 13809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 13819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GL_Upload32 (trans, width, height, mipmap, alpha); 13829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 13839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 13849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* 13859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================ 13869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamGL_LoadTexture 13879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================ 13889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/ 13899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint GL_LoadTexture (char *identifier, int width, int height, byte *data, qboolean mipmap, qboolean alpha) 13909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 13919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream int i; 13929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream gltexture_t *glt; 13939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 13949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream // see if the texture is allready present 13959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (identifier[0]) 13969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 13979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream for (i=0, glt=gltextures ; i<numgltextures ; i++, glt++) 13989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 13999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (!strcmp (identifier, glt->identifier)) 14009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream { 14019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (width != glt->width || height != glt->height) 14029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream Sys_Error ("GL_LoadTexture: cache mismatch"); 14039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return gltextures[i].texnum; 14049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 14059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 14069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream } 14079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream else 14089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glt = &gltextures[numgltextures]; 14099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream numgltextures++; 14109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 14119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream strcpy (glt->identifier, identifier); 14129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glt->texnum = texture_extension_number; 14139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glt->width = width; 14149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glt->height = height; 14159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream glt->mipmap = mipmap; 14169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 14179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GL_Bind(texture_extension_number ); 14189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 14199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream GL_Upload8 (data, width, height, mipmap, alpha); 14209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 14219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream texture_extension_number++; 14229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 14239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return texture_extension_number-1; 14249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 14259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 14269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/* 14279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================ 14289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamGL_LoadPicTexture 14299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream================ 14309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/ 14319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint GL_LoadPicTexture (qpic_t *pic) 14329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 14339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return GL_LoadTexture ("", pic->width, pic->height, pic->data, false, true); 14349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 14359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 14369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/****************************************/ 14379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 14389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamstatic GLenum oldtarget = TEXTURE0_SGIS; 14399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream 14409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid GL_SelectTexture (GLenum target) 14419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{ 14429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (!gl_mtexable) 14439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return; 1444cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#ifdef USE_OPENGLES 1445cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich // !!! Implement this. 1446cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#else 14479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#ifndef __linux__ // no multitexture under Linux yet 14489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream qglSelectTextureSGIS(target); 14499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#endif 1450cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#endif 14519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream if (target == oldtarget) 14529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream return; 14539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream cnttextures[oldtarget-TEXTURE0_SGIS] = currenttexture; 14549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream currenttexture = cnttextures[target-TEXTURE0_SGIS]; 14559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream oldtarget = target; 14569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} 1457cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 1458cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 1459cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// OpenGL ES compatible DrawQuad utility 1460cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 1461cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid DrawQuad_NoTex(float x, float y, float w, float h) 1462cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich{ 1463cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich glEnableClientState(GL_VERTEX_ARRAY); 1464cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich glDisableClientState(GL_TEXTURE_COORD_ARRAY); 1465cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich float vertex[2*4] = {x,y,x+w,y, x+w, y+h, x, y+h}; 1466cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich short index[4] = {0, 1, 2, 3}; 1467cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich glVertexPointer( 2, GL_FLOAT, 0, vertex); 1468cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich glDrawElements(GL_TRIANGLE_FAN, 4, GL_SHORT, index); 1469cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich} 1470cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 1471cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid DrawQuad(float x, float y, float w, float h, float u, float v, float uw, float vh) 1472cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich{ 1473cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich glEnableClientState(GL_VERTEX_ARRAY); 1474cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich glEnableClientState(GL_TEXTURE_COORD_ARRAY); 1475cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich float texcoord[2*4] = {u, v, u + uw, v, u + uw, v + vh, u, v + vh}; 1476cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich float vertex[2*4] = {x,y,x+w,y, x+w, y+h, x, y+h}; 1477cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich unsigned short index[4] = {0, 1, 2, 3}; 1478cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich glTexCoordPointer( 2, GL_FLOAT, 0, texcoord); 1479cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich glVertexPointer( 2, GL_FLOAT, 0, vertex); 1480cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich glDrawElements(GL_TRIANGLE_FAN, 4, GL_UNSIGNED_SHORT, index); 1481cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich} 1482cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 1483cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#ifdef USE_OPENGLES 1484cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 1485cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// Reimplementation of OpenGL functions that are missing in OpenGL ES 1486cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 1487cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid glColor3f(GLfloat r, GLfloat g, GLfloat b) 1488cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich{ 1489cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich glColor4f(r, g, b, 1.0f); 1490cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich} 1491cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 1492cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid glColor4fv(GLfloat* pColor) 1493cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich{ 1494cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich glColor4f(pColor[0], pColor[1], pColor[2], pColor[3]); 1495cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich} 1496cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 1497cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid glColor4ubv(unsigned char* pColor) 1498cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich{ 1499cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich glColor4f(pColor[0] / 255.0f, pColor[1] / 255.0f, pColor[2] / 255.0f, pColor[3] / 255.0f); 1500cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich} 1501cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich 1502cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#endif 1503