- r_tvMode is now r_virtualMode

- r_virtualMode now takes the same modes from r_mode, rather than specifically 640x480 and 320x240
- cleaning up a bunch of warnings and general code refactoring
- r_lightmapBits - specify color depth of the lightmap
- added a few more r_modes
- r_iconBits - specify the color depth of icon elements, saves a bit of vram and the loss is questionably perceptable with all those flat colors anyway
- r_textureDither - work in progress dither for 16-bit textures
- deprecate r_shadeSpecular
- safelewd: load from models/player, so we can hit models/playerfs/ directory
This commit is contained in:
leilei-
2015-03-16 02:10:19 -04:00
parent fd5f8bc4a6
commit 3597b3cefa
9 changed files with 238 additions and 300 deletions

View File

@@ -1589,7 +1589,7 @@ void RB_DrawAccumBlur (void)
float accblur;
static float damagetime = -1.0f;
if (r_tvMode->integer) return; // tvmode causes this to crash
if (r_tvMode->integer > -1) return; // tvmode causes this to crash
if (!r_motionblur->integer) return;
if (r_motionblur->integer > 1) return; // don't do it for the other motion blur techniques

View File

@@ -680,6 +680,7 @@ static void ID_INLINE R_Bloom_QuadTV( int width, int height, float texX, float t
if (aa == 0){ xaa = 0; yaa = 0; }
if (aa == 1){ xaa = -xpix; yaa = ypix; }
if (aa == 2){ xaa = -xpix; yaa = -ypix; }
@@ -702,6 +703,16 @@ static void ID_INLINE R_Bloom_QuadTV( int width, int height, float texX, float t
// qglViewport (0, 0, tvWidth, tvHeight );
// qglScissor (0, 0, tvWidth, tvHeight );
qglBegin( GL_QUADS );
if (r_tvFilter->integer) // bilinear filter
{
qglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
qglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
}
else
{
qglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
qglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
}
qglColor4f( 0.0, 0.0, 0.0, 1 );
qglVertex2f(0,0 );
qglVertex2f(0,height);
@@ -784,30 +795,6 @@ static void R_Bloom_RestoreScreen_Postprocessed( void ) {
if (program->u_CC_Saturation > -1) R_GLSL_SetUniform_u_CC_Saturation(program, 1.0);
if (program->u_CC_Contrast > -1) R_GLSL_SetUniform_u_CC_Contrast(program, 1.0);
// Lazy wrapper for ruby/retroarch shaders, because i'm lazy at modifying them. haha. Will probably be removed in the future if things suck.
/*
{
float rts_x, rts_y;
float ris_x, ris_y;
float ros_x, ros_y;
rts_x = glConfig.vidWidth;
rts_y = glConfig.vidHeight;
ris_x = glConfig.vidWidth;
ris_y = glConfig.vidHeight;
ros_x = tvWidth;
ros_y = tvHeight;
if (program->rubyTextureSize > -1) R_GLSL_SetUniform_rubyTextureSize(program, rts_x, rts_y);
if (program->rubyInputSize > -1) R_GLSL_SetUniform_rubyInputSize(program, ris_x, ris_y);
if (program->rubyOutputSize > -1) R_GLSL_SetUniform_rubyOutputSize(program, ros_x, ros_y);
}
*/
if (program->u_zFar > -1) R_GLSL_SetUniform_u_zFar(program, tr.viewParms.zFar);
GL_SelectTexture(0);
@@ -1122,7 +1109,7 @@ static void R_Postprocess_InitTextures( void )
// leilei - tv output texture
if (r_tvMode->integer){
if (r_tvMode->integer > -1){
// find closer power of 2 to screen size
for (postproc.tv.width = 1;postproc.tv.width< tvWidth;postproc.tv.width *= 2);
for (postproc.tv.height = 1;postproc.tv.height < tvHeight;postproc.tv.height *= 2);
@@ -1915,7 +1902,6 @@ void R_MblurScreenPost( void )
static void R_Postprocess_BackupScreenTV( void ) {
int intdiv;
// if (r_tvMode->integer > 1) intdiv = 2;
intdiv = 1;
@@ -1932,10 +1918,6 @@ static void R_Postprocess_BackupScreenTV( void ) {
GL_Bind( postproc.screen.texture );
qglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 0, 0, glConfig.vidWidth, glConfig.vidHeight);
//qglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 0, 0, 320, 240);
}
static void R_Postprocess_ScaleTV( void ) {
@@ -1946,12 +1928,7 @@ static void R_Postprocess_ScaleTV( void ) {
qglViewport( 0, 0, glConfig.vidWidth, glConfig.vidHeight );
qglMatrixMode( GL_PROJECTION );
qglLoadIdentity ();
// qglOrtho( 0, glConfig.vidWidth, glConfig.vidHeight, 0, 0,1 );
// qglMatrixMode( GL_MODELVIEW );
// qglLoadIdentity ();
}
@@ -1962,7 +1939,7 @@ float tvtime;
void R_TVScreen( void )
{
if( !r_tvMode->integer)
if( r_tvMode->integer < 0)
return;
if ( backEnd.donetv)
return;

View File

@@ -185,7 +185,6 @@ void R_GLSLPalette ( const unsigned char *palette)
{
int i;
int red, green, blue;
float redf, greenf, bluef;
if ( palette )
@@ -193,16 +192,10 @@ void R_GLSLPalette ( const unsigned char *palette)
for ( i = 0; i < 256; i++ )
{
red = d_8to24table[i] & 0xff;
green = ( d_8to24table[i] >> 8 ) & 0xff;
blue = ( d_8to24table[i] >> 16 ) & 0xff;
redf = (d_8to24table[i] & 0xff) * 0.003921568627451;
greenf = (( d_8to24table[i] >> 8 ) & 0xff) * 0.003921568627451;
bluef = (( d_8to24table[i] >> 16 ) & 0xff) * 0.003921568627451;
//ri.Printf( PRINT_ALL, " vec3(%i, %i, %i),\n", red, green, blue );
ri.Printf( PRINT_ALL, " vec3(%f, %f, %f),\n", redf, greenf, bluef );
}
}
@@ -563,7 +556,6 @@ R_ImageListMapOnly_f
*/
void R_ImageListMapOnly_f( void ) {
int i;
int estTotalSize = 0;
for ( i = 0 ; i < tr.numImages ; i++ )
{
@@ -592,9 +584,6 @@ void R_ImageListMapOnly_f( void ) {
}
}
// ri.Printf (PRINT_ALL, " ---------\n");
// ri.Printf (PRINT_ALL, " approx %i bytes\n", estTotalSize);
// ri.Printf (PRINT_ALL, " %i total images\n\n", tr.numImages );
}
@@ -974,7 +963,7 @@ static void R_MipMap (byte *in, int width, int height) {
static void R_MipMap8 (byte *in, int width, int height)
{
int i, j;
byte *out, *at1, *at2, *at3, *at4;
byte *out, *at1;//, *at2, *at3, *at4;
height >>= 1;
out = in;
@@ -984,9 +973,9 @@ static void R_MipMap8 (byte *in, int width, int height)
for (j=0 ; j<width ; j+=2, out+=1, in+=2)
{
at1 = in[0];
at2 = in[1];
at3 = in[width+0];
at4 = in[width+1];
// at2 = in[1];
// at3 = in[width+0];
// at4 = in[width+1];
out[0] = at1;
}
}
@@ -1106,16 +1095,14 @@ static void DumpTex( unsigned *data,
byte *scan;
byte *baffer, *alffer, *flipper;
scan = ((byte *)data);
size_t offset = 0, memcount;
int padlen;
int be, bi, ber, ba;
size_t offset = 0;//, memcount;
int padlen = 0;
int be, ber;
int scrale = width * height;
int scravg = width + height / 2;
int wit = width;
int hat = height;
int quality = 85; // estimate quality from total size
int hasalf = 0;
float countw, counth;
float countw = 0;
if (scravg > 511) quality = 42; // huge textures
else if (scravg > 255) quality = 62; // large textures
@@ -1128,13 +1115,8 @@ static void DumpTex( unsigned *data,
// I'm gonna flip......
int alfcnt = 0;
countw = 0;
counth = 0;
wit = width * 3;
hat = height * 3;
for (be=0; be<scrale; be++){
int bib;
@@ -1162,7 +1144,7 @@ static void DumpTex( unsigned *data,
memcount = (width * 3 + padlen) * height;
//memcount = (width * 3 + padlen) * height;
if ((width > 16) && (height > 16)){
RE_SaveJPG( va("dump/%s.jpg", dumpname), 85,width, height, baffer, padlen);
if (hasalf)
@@ -1197,7 +1179,7 @@ static void Upload32( unsigned *data,
GLenum temp_GLtype = GL_UNSIGNED_BYTE;
float rMax = 0, gMax = 0, bMax = 0;
int texsizex, texsizey;
int forceBits = 0;
//
@@ -1256,7 +1238,7 @@ static void Upload32( unsigned *data,
// Auto-determine from resolution division
if (r_iconmip->integer == 1){
int wadth, haght, dev;
int wadth, haght, dev = 0;
wadth = floor(1280 / glConfig.vidWidth) - 1;
haght = floor(960 / glConfig.vidHeight) - 1;
@@ -1283,9 +1265,20 @@ static void Upload32( unsigned *data,
}
if (r_iconBits->integer){
forceBits = r_iconBits->integer;
}
}
// leilei - lightmap color bits, for saving vram/tex cache
if (lightMap){
if (r_lightmapBits->integer){
forceBits = r_lightmapBits->integer;
force32upload = 0;
}
}
//
// clamp to minimum size
//
@@ -1348,7 +1341,6 @@ static void Upload32( unsigned *data,
{
int yee;
int yer;
int yes;
int yeah;
int yo;
for ( i = 0; i < c; i++ )
@@ -1368,6 +1360,112 @@ static void Upload32( unsigned *data,
}
}
if(r_textureDither->integer) // possibly the stupidest texture dithering ever
{
#ifdef DONTEVENTHINKABOUTTHIS
int passes = r_textureDither->integer;
int that;
/* LEIFX FILTER C PORT PROTOTYPE SCRATCH AREA
No vectors, only ints ints ints Obviously can be refactored with SSE */
#define FILTCAP (0.075 * 255)
#define FILTCAPG (FILTCAP / 2)
for (that=0;that<passes;that++){
for ( i = 0; i < c-1; i++ )
{
int ren;
int r1,g1,b1;
int r2,g2,b2;
int rd,gd,bd;
/* Grab Pixels to Sample From */
r1 = scan[i*4];
g1 = scan[i*4+1];
b1 = scan[i*4+2];
r2 = scan[(i+1)*4];
g2 = scan[(i+1)*4 + 1];
b2 = scan[(i+1)*4 + 2];
/* Find differences */
rd = r2 - r1;
gd = g2 - g1;
bd = b2 - b1;
if (rd > FILTCAP ) rd = FILTCAP;
if (gd > FILTCAPG) gd = FILTCAPG;
if (bd > FILTCAP ) bd = FILTCAP;
if (rd < -FILTCAP ) rd = -FILTCAP;
if (gd < -FILTCAPG) gd = -FILTCAPG;
if (bd < -FILTCAP ) bd = -FILTCAP;
/* Add our Differences */
r1 += (rd/3);
g1 += (gd/3);
b1 += (bd/3);
/* Obligatory clamping part */
if (r1 < 0) r1 = 0;
if (g1 < 0) g1 = 0;
if (b1 < 0) b1 = 0;
if (r1 > 255) r1 = 255;
if (g1 > 255) g1 = 255;
if (b1 > 255) b1 = 255;
if (r2 < 0) r2 = 0;
if (g2 < 0) g2 = 0;
if (b2 < 0) b2 = 0;
if (r2 > 255) r2 = 255;
if (g2 > 255) g2 = 255;
if (b2 > 255) b2 = 255;
/* Put processed image back into the buffer */
scan[i*4] = r1;
scan[i*4 + 1] = g1;
scan[i*4 + 2] = b1;
}
}
#endif
for ( i = 0; i < c; i++ )
{
int ren = (crandom() * 4);
int rg,gg,bb;
rg = scan[i*4];
gg = scan[i*4+1];
bb = scan[i*4+2];
//if ((rg / 64) != ceil(rg / 64))
rg = scan[i*4] + ren;
//if ((gg / 32) != ceil(gg / 32))
gg = scan[i*4 + 1] + (ren / 2);
//if ((bb / 64) != ceil(bb / 64))
bb = scan[i*4 + 2] + ren;
if (rg < 0) rg = 0;
if (gg < 0) gg = 0;
if (bb < 0) bb = 0;
if (rg > 255) rg = 255;
if (gg > 255) gg = 255;
if (bb > 255) bb = 255;
scan[i*4] = rg;
scan[i*4 + 1] = gg;
scan[i*4 + 2] = bb;
}
}
@@ -1410,6 +1508,39 @@ static void Upload32( unsigned *data,
internalFormat = GL_LUMINANCE;
else
internalFormat = GL_RGB;
// leilei - lightmap color bits, for saving vram/tex cache
if (r_lightmapBits->integer){
forceBits = r_lightmapBits->integer;
force32upload = 0;
if ( forceBits == 16)
{
internalFormat = GL_RGB5;
}
else if ( forceBits == 15)
{
internalFormat = GL_RGB5;
}
else if ( forceBits == 12)
{
internalFormat = GL_RGB4;
}
else if ( forceBits == 6)
{
internalFormat = GL_R3_G3_B2;
}
else if ( forceBits == 32)
{
internalFormat = GL_RGB8;
}
else
{
internalFormat = GL_RGB;
}
}
}
else
{
@@ -1438,9 +1569,9 @@ static void Upload32( unsigned *data,
{
if(r_greyscale->integer)
{
if(r_texturebits->integer == 16)
if(r_texturebits->integer == 16 || forceBits == 16)
internalFormat = GL_LUMINANCE8;
else if(r_texturebits->integer == 32)
else if(r_texturebits->integer == 32 || forceBits == 32)
internalFormat = GL_LUMINANCE16;
else
internalFormat = GL_LUMINANCE;
@@ -1455,23 +1586,23 @@ static void Upload32( unsigned *data,
{
internalFormat = GL_RGB4_S3TC;
}
else if ( r_texturebits->integer == 16 )
else if ( r_texturebits->integer == 16 || forceBits == 16)
{
internalFormat = GL_RGB5;
}
else if ( r_texturebits->integer == 15 )
else if ( r_texturebits->integer == 15 || forceBits == 15)
{
internalFormat = GL_RGB5;
}
else if ( r_texturebits->integer == 12 )
else if ( r_texturebits->integer == 12 || forceBits == 12)
{
internalFormat = GL_RGB4;
}
else if ( r_texturebits->integer == 6 )
else if ( r_texturebits->integer == 6 || forceBits == 6)
{
internalFormat = GL_R3_G3_B2;
}
else if ( r_texturebits->integer == 32 )
else if ( r_texturebits->integer == 32 || forceBits == 32)
{
internalFormat = GL_RGB8;
}
@@ -1488,9 +1619,9 @@ static void Upload32( unsigned *data,
{
if(r_greyscale->integer)
{
if(r_texturebits->integer == 16)
if(r_texturebits->integer == 16 || forceBits == 16)
internalFormat = GL_LUMINANCE8_ALPHA8;
else if(r_texturebits->integer == 32)
else if(r_texturebits->integer == 32 || forceBits == 32)
internalFormat = GL_LUMINANCE16_ALPHA16;
else
internalFormat = GL_LUMINANCE_ALPHA;
@@ -1502,23 +1633,23 @@ static void Upload32( unsigned *data,
internalFormat = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT; // leilei - this was missing
}
else
if ( r_texturebits->integer == 16 )
if ( r_texturebits->integer == 16 || forceBits == 16)
{
internalFormat = GL_RGBA4;
}
else if ( r_texturebits->integer == 15 )
else if ( r_texturebits->integer == 15 || forceBits == 15)
{
internalFormat = GL_RGB5_A1;
}
else if ( r_texturebits->integer == 12 )
else if ( r_texturebits->integer == 12 || forceBits == 12)
{
internalFormat = GL_RGBA4;
}
else if ( r_texturebits->integer == 6 )
else if ( r_texturebits->integer == 6 || forceBits == 6)
{
internalFormat = GL_RGBA2;
}
else if ( r_texturebits->integer == 32 )
else if ( r_texturebits->integer == 32 || forceBits == 32)
{
internalFormat = GL_RGBA8;
}
@@ -1760,7 +1891,6 @@ static void Upload8( unsigned *data,
scan = ((byte *)data);
samples = 3;
// LEILEI - paletted texturing hack
int isalphaed=0;
// Check for an alpha
for ( i = 0; i < c; i++ )
@@ -1770,9 +1900,6 @@ static void Upload8( unsigned *data,
a *= 1.9;
a /= 255;
a *= 255;
if (!a){
isalphaed = 1;
}
}
if (paletteability)
@@ -2226,7 +2353,7 @@ image_t *R_FindImageFile( const char *name, imgType_t type, imgFlags_t flags )
// leilei - iconmip hack
if ( !Q_strncmp( name, "icons/", 5 ) || (!Q_strncmp( name, "gfx/2d", 6 )) && (Q_strncmp( name, "gfx/2d/bigchars", 14 ))){
if ( !Q_strncmp( name, "icons/", 5 ) || ((!Q_strncmp( name, "gfx/2d", 6 )) && (Q_strncmp( name, "gfx/2d/bigchars", 14 )))){
isicon = 1;
}
else
@@ -2242,7 +2369,7 @@ image_t *R_FindImageFile( const char *name, imgType_t type, imgFlags_t flags )
// leilei - load safe or lewd textures if desired.
if (!Q_strncmp( name, "models/players", 14) ){
if (!Q_strncmp( name, "models/player", 13) ){

View File

@@ -57,7 +57,7 @@ cvar_t *r_ignore;
cvar_t *r_detailTextures;
cvar_t *r_detailTextureScale;
cvar_t *r_detailTextureLayers;
cvar_t *r_shadeSpecular;
cvar_t *r_znear;
cvar_t *r_zproj;
@@ -129,6 +129,8 @@ cvar_t *r_roundImagesDown;
cvar_t *r_colorMipLevels;
cvar_t *r_picmip;
cvar_t *r_iconmip;
cvar_t *r_iconBits;
cvar_t *r_lightmapBits;
cvar_t *r_showtris;
cvar_t *r_showsky;
cvar_t *r_shownormals;
@@ -220,6 +222,7 @@ cvar_t *r_slowness; // Leilei - the cvar that slows everything down. use with c
cvar_t *r_slowness_cpu; // Leilei
cvar_t *r_slowness_gpu; // Leilei
cvar_t *r_textureDither; // leilei - Dithered texture
cvar_t *r_texdump; // Leilei - debug - texture dump as they load, players should never need to use this!
@@ -358,7 +361,7 @@ vidmode_t r_vidModes[] =
{ "Mode 0: 320x240", 320, 240, 1 },
{ "Mode 1: 400x300", 400, 300, 1 },
{ "Mode 2: 512x384", 512, 384, 1 },
{ "Mode 3: 640x480", 640, 480, 1 },
{ "Mode 3: 640x480 (480p)", 640, 480, 1 },
{ "Mode 4: 800x600", 800, 600, 1 },
{ "Mode 5: 960x720", 960, 720, 1 },
{ "Mode 6: 1024x768", 1024, 768, 1 },
@@ -366,8 +369,8 @@ vidmode_t r_vidModes[] =
{ "Mode 8: 1280x1024", 1280, 1024, 1 },
{ "Mode 9: 1600x1200", 1600, 1200, 1 },
{ "Mode 10: 2048x1536", 2048, 1536, 1 },
{ "Mode 11: 856x480",856, 480, 1 },
{ "Mode 12: 1280x720", 1280, 720, 1 },
{ "Mode 11: 856x480", 856, 480, 1 }, // Q3 MODES END HERE AND EXTENDED MODES BEGIN
{ "Mode 12: 1280x720 (720p)", 1280, 720, 1 },
{ "Mode 13: 1280x768", 1280, 768, 1 },
{ "Mode 14: 1280x800", 1280, 800, 1 },
{ "Mode 15: 1280x960", 1280, 960, 1 },
@@ -378,8 +381,11 @@ vidmode_t r_vidModes[] =
{ "Mode 20: 1400x900", 1400, 900, 1 },
{ "Mode 21: 1600x900", 1600, 900, 1 },
{ "Mode 22: 1680x1050", 1680, 1050, 1 },
{ "Mode 23: 1920x1080", 1920, 1080, 1 },
{ "Mode 24: 1920x1440", 1920, 1440, 1 }
{ "Mode 23: 1920x1080 (1080p)", 1920, 1080, 1 },
{ "Mode 24: 1920x1200", 1920, 1200, 1 },
{ "Mode 25: 1920x1440", 1920, 1440, 1 },
{ "Mode 26: 2560x1600", 2560, 1600, 1 },
{ "Mode 27: 3840x2160 (4K)", 3840, 2160, 1 }
};
static int s_numVidModes = ARRAY_LEN( r_vidModes );
@@ -586,7 +592,7 @@ const void *RB_TakeScreenshotCmd( const void *data ) {
cmd = (const screenshotCommand_t *)data;
// leilei - hack for tvmode
if (r_tvMode->integer){
if (r_tvMode->integer > -1){
if (cmd->jpeg)
RB_TakeScreenshotJPEG( cmd->x, cmd->y, tvWidth, tvHeight, cmd->fileName);
@@ -1144,7 +1150,7 @@ void R_Register( void )
ri.Cvar_CheckRange( r_ext_multisample, 0, 4, qtrue );
r_overBrightBits = ri.Cvar_Get ("r_overBrightBits", "1", CVAR_ARCHIVE | CVAR_LATCH );
r_ignorehwgamma = ri.Cvar_Get( "r_ignorehwgamma", "0", CVAR_ARCHIVE | CVAR_LATCH);
r_mode = ri.Cvar_Get( "r_mode", "3", CVAR_ARCHIVE | CVAR_LATCH );
r_mode = ri.Cvar_Get( "r_mode", "-2", CVAR_ARCHIVE | CVAR_LATCH ); // leilei - changed default from 3, for modern convenience. It will still fallback to 3 if this fails (voodoo etc)
r_fullscreen = ri.Cvar_Get( "r_fullscreen", "1", CVAR_ARCHIVE );
r_noborder = ri.Cvar_Get("r_noborder", "0", CVAR_ARCHIVE | CVAR_LATCH);
r_customwidth = ri.Cvar_Get( "r_customwidth", "1600", CVAR_ARCHIVE | CVAR_LATCH );
@@ -1300,12 +1306,15 @@ void R_Register( void )
r_slowness_cpu = ri.Cvar_Get( "r_slowness_cpu", "300" , CVAR_ARCHIVE); // it's 0 because you want it to be the fastest possible by default.
r_slowness_gpu = ri.Cvar_Get( "r_slowness_gpu", "96" , CVAR_ARCHIVE); // it's 0 because you want it to be the fastest possible by default.
r_iconmip = ri.Cvar_Get ("r_iconmip", "1", CVAR_ARCHIVE | CVAR_LATCH ); // leilei - icon mip
r_iconmip = ri.Cvar_Get ("r_iconmip", "0", CVAR_ARCHIVE | CVAR_LATCH ); // leilei - icon mip
r_iconBits = ri.Cvar_Get ("r_iconBits", "0", CVAR_ARCHIVE | CVAR_LATCH ); // leilei - icon bits
r_lightmapBits = ri.Cvar_Get ("r_lightmapBits", "0", CVAR_ARCHIVE | CVAR_LATCH ); // leilei - lightmap color bits
r_textureDither = ri.Cvar_Get ("r_textureDither", "0", CVAR_ARCHIVE | CVAR_LATCH ); // leilei - dithered textures
r_texdump = ri.Cvar_Get( "r_texdump", "0", CVAR_CHEAT ); // leilei - debug - texture dumping
r_shadeSpecular = ri.Cvar_Get( "r_shadeSpecular", "1", CVAR_ARCHIVE | CVAR_LATCH ); // leilei - our models look best with these
// make sure all the commands added here are also
// removed in R_Shutdown
ri.Cmd_AddCommand( "imagelist", R_ImageList_f );

View File

@@ -254,143 +254,6 @@ static void R_SetupEntityLightingGrid( trRefEntity_t *ent ) {
// leilei - alternative version to don't do the dynamic lighting contrast which could
// contribute toward epilepsy.
static void R_SetupEntityLightingGrid_NoContrast( trRefEntity_t *ent ) {
vec3_t lightOrigin;
int pos[3];
int i, j;
byte *gridData;
float frac[3];
int gridStep[3];
vec3_t direction;
float totalFactor;
if ( ent->e.renderfx & RF_LIGHTING_ORIGIN ) {
// seperate lightOrigins are needed so an object that is
// sinking into the ground can still be lit, and so
// multi-part models can be lit identically
VectorCopy( ent->e.lightingOrigin, lightOrigin );
} else {
VectorCopy( ent->e.origin, lightOrigin );
}
VectorSubtract( lightOrigin, tr.world->lightGridOrigin, lightOrigin );
for ( i = 0 ; i < 3 ; i++ ) {
float v;
v = lightOrigin[i]*tr.world->lightGridInverseSize[i];
pos[i] = floor( v );
frac[i] = v - pos[i];
if ( pos[i] < 0 ) {
pos[i] = 0;
} else if ( pos[i] >= tr.world->lightGridBounds[i] - 1 ) {
pos[i] = tr.world->lightGridBounds[i] - 1;
}
}
VectorClear( ent->ambientLight );
VectorClear( ent->directedLight );
VectorClear( ent->dynamicLight );
VectorClear( direction );
assert( tr.world->lightGridData ); // NULL with -nolight maps
// trilerp the light value
gridStep[0] = 8;
gridStep[1] = 8 * tr.world->lightGridBounds[0];
gridStep[2] = 8 * tr.world->lightGridBounds[0] * tr.world->lightGridBounds[1];
gridData = tr.world->lightGridData + pos[0] * gridStep[0]
+ pos[1] * gridStep[1] + pos[2] * gridStep[2];
totalFactor = 0;
for ( i = 0 ; i < 8 ; i++ ) {
float factor;
byte *data;
int lat, lng;
vec3_t normal;
#if idppc
float d0, d1, d2, d3, d4, d5;
#endif
factor = 1.0;
data = gridData;
for ( j = 0 ; j < 3 ; j++ ) {
if ( i & (1<<j) ) {
factor *= frac[j];
data += gridStep[j];
} else {
factor *= (1.0f - frac[j]);
}
}
if ( !(data[0]+data[1]+data[2]) ) {
continue; // ignore samples in walls
}
totalFactor += factor;
#if idppc
d0 = data[0]; d1 = data[1]; d2 = data[2];
d3 = data[3]; d4 = data[4]; d5 = data[5];
ent->ambientLight[0] += factor * d0;
ent->ambientLight[1] += factor * d1;
ent->ambientLight[2] += factor * d2;
ent->directedLight[0] += factor * d3;
ent->directedLight[1] += factor * d4;
ent->directedLight[2] += factor * d5;
#else
ent->ambientLight[0] += factor * data[0];
ent->ambientLight[1] += factor * data[1];
ent->ambientLight[2] += factor * data[2];
ent->directedLight[0] += factor * data[3];
ent->directedLight[1] += factor * data[4];
ent->directedLight[2] += factor * data[5];
#endif
lat = data[7];
lng = data[6];
lat *= (FUNCTABLE_SIZE/256);
lng *= (FUNCTABLE_SIZE/256);
// decode X as cos( lat ) * sin( long )
// decode Y as sin( lat ) * sin( long )
// decode Z as cos( long )
normal[0] = tr.sinTable[(lat+(FUNCTABLE_SIZE/4))&FUNCTABLE_MASK] * tr.sinTable[lng];
normal[1] = tr.sinTable[lat] * tr.sinTable[lng];
normal[2] = tr.sinTable[(lng+(FUNCTABLE_SIZE/4))&FUNCTABLE_MASK];
VectorMA( direction, factor, normal, direction );
}
if ( totalFactor > 0 && totalFactor < 0.99 ) {
totalFactor = 1.0f / totalFactor;
VectorScale( ent->ambientLight, totalFactor, ent->ambientLight );
VectorScale( ent->directedLight, totalFactor, ent->directedLight );
}
VectorScale( ent->ambientLight, r_ambientScale->value, ent->ambientLight );
VectorScale( ent->directedLight, r_directedScale->value, ent->directedLight );
{
float ervg = ent->directedLight[0] + ent->directedLight[1] + ent->directedLight[2];
// VectorScale( ent->ambientLight, ent->directedLight, ent->ambientLight );
// VectorScale( ent->directedLight, 0.7, ent->directedLight );
}
VectorNormalize2( direction, ent->lightDir );
}

View File

@@ -1334,7 +1334,6 @@ extern cvar_t *r_lensReflectionBrightness;
extern cvar_t *r_ext_paletted_texture; // leilei - Paletted Texture
extern cvar_t *r_specMode;
extern cvar_t *r_shadeSpecular; // leilei - allows the special specular diffuse shading
//extern cvar_t *r_waveMode;
extern cvar_t *r_flaresDlight;
@@ -1354,7 +1353,8 @@ extern cvar_t *r_ntsc; // Leilei - ntsc
extern cvar_t *r_tvMode; // Leilei - tv faking mode
extern cvar_t *r_tvModeForceAspect; // Leilei - retain aspect of the tv's mode
extern cvar_t *r_tvConsoleMode; // Leilei - tv faking mode
extern cvar_t *r_tvFilter; // Leilei - filter to use
extern cvar_t *r_retroAA; // Leilei - old console anti aliasing
@@ -1369,12 +1369,17 @@ extern cvar_t *r_leidebug; // Leilei - debug only!
extern cvar_t *r_leidebugeye; // Leilei - debug only!
extern cvar_t *r_iconmip; // leilei - icon mip - picmip for 2d icons
extern cvar_t *r_iconBits; // leilei - icon color depth for 2d icons
extern cvar_t *r_lightmapBits; // leilei - lightmap color depth
extern cvar_t *r_texdump; // leilei - texture dumping
extern cvar_t *r_detailTextureScale; // leilei - scale tweak the detail textures, 0 doesn't tweak at all.
extern cvar_t *r_detailTextureLayers; // leilei - add in more smaller detail texture layers, expensive!
extern cvar_t *r_textureDither; // leilei - apply dithering for lower texture bits
//====================================================================
void R_SwapBuffers( int );

View File

@@ -371,7 +371,7 @@ qhandle_t RE_RegisterModelReal( const char *name ) {
qhandle_t RE_RegisterModel( const char *name ) {
if (!Q_strncmp( name, "models/players", 14)){
if (!Q_strncmp( name, "models/player", 13)){
if (r_suggestiveThemes->integer == 0){ // safe models that will ship, much needed option of modesty
qhandle_t eh;
char narm[ MAX_QPATH ];

View File

@@ -2595,11 +2595,8 @@ static qboolean ParseStage( shaderStage_t *stage, char **text )
{
stage->rgbGen = CGEN_ONE_MINUS_VERTEX;
}
else if ( !Q_stricmp( token, "lightingSpecularDiffuse" ) ) // leilei - use special specular calculation if overbrights and r_shadeSpecular is enabled
else if ( !Q_stricmp( token, "lightingSpecularDiffuse" ) ) // leilei - deprecated
{
if ( r_shadeSpecular->integer && tr.overbrightBits )
stage->rgbGen = CGEN_LIGHTING_DIFFUSE_SPECULAR;
else
stage->rgbGen = CGEN_LIGHTING_DIFFUSE;
}
else
@@ -4607,7 +4604,7 @@ shader_t *R_FindShader( const char *name, int lightmapIndex, qboolean mipRawImag
// load real shader first?
sh = R_FindShaderReal(name, lightmapIndex, mipRawImage);
if (!Q_strncmp( name, "models/players", 14) ){ // restrict to players; speedup
if (!Q_strncmp( name, "models/player", 13) ){ // restrict to players; speedup
if (r_suggestiveThemes->integer < 1) // find safe textures/shaders if available
{
sugthem = 1;

View File

@@ -74,7 +74,7 @@ static const SDL_VideoInfo *videoInfo = NULL;
cvar_t *r_allowSoftwareGL; // Don't abort out if a hardware visual can't be obtained
cvar_t *r_tvMode; // leilei - tv mode - force 480i rendering, which is then stretched and interlaced
cvar_t *r_tvConsoleMode; // leilei - tv mode
cvar_t *r_tvFilter; // leilei - tv filter
cvar_t *r_tvModeAspect; // leilei - tv mode - to do widescreen and low res tv etc
cvar_t *r_tvModeForceAspect; // leilei - tv mode - to force the screen into its native aspect
cvar_t *r_motionblur; // leilei - moved here to set up accumulation bits
@@ -212,7 +212,7 @@ static int GLimp_SetMode(int mode, qboolean fullscreen, qboolean noborder)
int sdlcolorbits;
int colorbits, depthbits, stencilbits;
int tcolorbits, tdepthbits, tstencilbits;
int accumbits, taccumbits; // leilei - motionblur
int accumbits; // leilei - motionblur
int samples;
int i = 0;
SDL_Surface *vidscreen = NULL;
@@ -341,7 +341,7 @@ static int GLimp_SetMode(int mode, qboolean fullscreen, qboolean noborder)
tcolorbits = colorbits;
tdepthbits = depthbits;
tstencilbits = stencilbits;
taccumbits = accumbits;
if ((i % 4) == 3)
{ // reduce colorbits
@@ -487,45 +487,29 @@ static int GLimp_SetMode(int mode, qboolean fullscreen, qboolean noborder)
vresHeight = 480;
//tvAspectW = 1.0; // no change
if( r_tvMode->integer ){
if( r_tvMode->integer > -1){
// HIJACKED >:)
glConfig.vidWidth = 640;
glConfig.vidHeight = 480;
if( r_tvMode->integer == 96 ){
glConfig.vidWidth = 320;
glConfig.vidHeight = 200;
}
if( r_tvMode->integer == 97 ){
glConfig.vidWidth = 320;
glConfig.vidHeight = 240;
if ( !R_GetModeInfo( &glConfig.vidWidth, &glConfig.vidHeight, &glConfig.windowAspect, r_tvMode->integer ) )
{
glConfig.vidWidth = 640; // if we can't do a mode then do this mode
glConfig.vidHeight = 480;
}
// leilei - make it use an aspect-corrected lower resolution that's always 640 wide for the width, but variable height
// then change the gl port..
if (glConfig.vidWidth > tvWidth) glConfig.vidWidth = tvWidth; // clamp
if (glConfig.vidHeight > tvHeight) glConfig.vidHeight = tvHeight; // clamp
// leilei - make it use an aspect-corrected lower resolution that's always 640 wide for the width, but variable height
// then change the gl port..
vresWidth = tvWidth;
vresHeight = tvHeight;
if( r_tvModeForceAspect->integer ){
// glConfig.vidHeight = tvHeight * aspe;
float thv = tvHeight / glConfig.vidHeight; // 720 / 480 = 1.5
float thw = tvWidth / glConfig.vidWidth; // 1280 / 640 = 2
float chv = glConfig.vidHeight / tvHeight; // 640 / 1280 = 0.5
float chw = glConfig.vidHeight / tvWidth; // 480 / 720 = 0.66666666
float chvw = tvHeight * chw; // 720 * 0.6666 = 480
float chwv = tvWidth * chw; // 1280 * 0.6666 = 853
//float ttw = glConfig.vidWidth / (tvWidth * chw); // 640 / 853 = 0.75 = ASPECT VALUE
float ttw = (float)glConfig.vidWidth / ((float)tvWidth * (float)((float)glConfig.vidHeight/(float)tvHeight)); // 640 / 853 = 0.75 = ASPECT VALUE
//float tth = tvWidth * chv; // lower...
// float ttw = glConfig.vidWidth / tth;
//jj
tvAspectW = ttw; // let's try this first to see if we can get it to our renderer
//tvAspectW = 0.75f; // let's try this first to see if we can get it to our renderer
@@ -535,30 +519,6 @@ static int GLimp_SetMode(int mode, qboolean fullscreen, qboolean noborder)
}
// leilei - tv mode hack end
// leilei - console hack
if( r_tvConsoleMode->integer ){
if (r_tvConsoleMode->integer == 1) // standard 640x448 console of 6th gen
{
glConfig.vidWidth = 640;
glConfig.vidHeight = 448;
vresWidth = 640;
vresHeight = 480;
}
if (r_tvConsoleMode->integer == 10) // that other portable
{
glConfig.vidWidth = 480;
glConfig.vidHeight = 272;
vresWidth = 480;
vresHeight = 272;
}
}
screen = vidscreen;
@@ -824,11 +784,11 @@ void GLimp_Init( void )
r_allowResize = ri.Cvar_Get( "r_allowResize", "0", CVAR_ARCHIVE | CVAR_LATCH );
r_centerWindow = ri.Cvar_Get( "r_centerWindow", "0", CVAR_ARCHIVE | CVAR_LATCH );
// leilei - tv mode hack
r_tvMode = ri.Cvar_Get( "r_tvMode", "0", CVAR_LATCH | CVAR_ARCHIVE );
r_tvMode = ri.Cvar_Get( "r_virtualMode", "-1", CVAR_LATCH | CVAR_ARCHIVE );
r_tvModeAspect = ri.Cvar_Get( "r_tvModeAspect", "0", CVAR_LATCH | CVAR_ARCHIVE ); // yes
r_tvModeForceAspect = ri.Cvar_Get( "r_tvModeForceAspect", "0", CVAR_LATCH | CVAR_ARCHIVE ); // yes
r_tvConsoleMode = ri.Cvar_Get( "r_tvConsoleMode", "0", CVAR_LATCH | CVAR_ARCHIVE );
r_tvFilter = ri.Cvar_Get( "r_tvFilter", "1", CVAR_LATCH | CVAR_ARCHIVE );
// leilei - move motionblur cvar here to get it to not upset the other renderers when setting up an accumulation buffer
r_motionblur = ri.Cvar_Get( "r_motionblur", "0", CVAR_LATCH | CVAR_ARCHIVE );