From 3597b3cefae793b35152aa619c78fbee4c6e1bec Mon Sep 17 00:00:00 2001 From: leilei- Date: Mon, 16 Mar 2015 02:10:19 -0400 Subject: [PATCH] - 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 --- code/renderer_oa/tr_backend.c | 2 +- code/renderer_oa/tr_bloom.c | 49 ++------ code/renderer_oa/tr_image.c | 227 ++++++++++++++++++++++++++-------- code/renderer_oa/tr_init.c | 31 +++-- code/renderer_oa/tr_light.c | 137 -------------------- code/renderer_oa/tr_local.h | 9 +- code/renderer_oa/tr_model.c | 2 +- code/renderer_oa/tr_shader.c | 7 +- code/sdl/sdl_glimp.c | 74 +++-------- 9 files changed, 238 insertions(+), 300 deletions(-) diff --git a/code/renderer_oa/tr_backend.c b/code/renderer_oa/tr_backend.c index d578a908..ec54299c 100644 --- a/code/renderer_oa/tr_backend.c +++ b/code/renderer_oa/tr_backend.c @@ -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 diff --git a/code/renderer_oa/tr_bloom.c b/code/renderer_oa/tr_bloom.c index aae77992..31bb334c 100644 --- a/code/renderer_oa/tr_bloom.c +++ b/code/renderer_oa/tr_bloom.c @@ -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; diff --git a/code/renderer_oa/tr_image.c b/code/renderer_oa/tr_image.c index a18149de..392a91ed 100644 --- a/code/renderer_oa/tr_image.c +++ b/code/renderer_oa/tr_image.c @@ -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 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 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 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) ){ diff --git a/code/renderer_oa/tr_init.c b/code/renderer_oa/tr_init.c index bd30f547..a71c2201 100644 --- a/code/renderer_oa/tr_init.c +++ b/code/renderer_oa/tr_init.c @@ -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 ); diff --git a/code/renderer_oa/tr_light.c b/code/renderer_oa/tr_light.c index c90b5c54..9f9ebfea 100644 --- a/code/renderer_oa/tr_light.c +++ b/code/renderer_oa/tr_light.c @@ -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<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 ); - - -} diff --git a/code/renderer_oa/tr_local.h b/code/renderer_oa/tr_local.h index 0b15c39d..e6cf6518 100644 --- a/code/renderer_oa/tr_local.h +++ b/code/renderer_oa/tr_local.h @@ -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 ); diff --git a/code/renderer_oa/tr_model.c b/code/renderer_oa/tr_model.c index c361dbdf..cb4d645e 100644 --- a/code/renderer_oa/tr_model.c +++ b/code/renderer_oa/tr_model.c @@ -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 ]; diff --git a/code/renderer_oa/tr_shader.c b/code/renderer_oa/tr_shader.c index 83b39862..f328b4d4 100644 --- a/code/renderer_oa/tr_shader.c +++ b/code/renderer_oa/tr_shader.c @@ -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; diff --git a/code/sdl/sdl_glimp.c b/code/sdl/sdl_glimp.c index d2539a21..5d059be6 100644 --- a/code/sdl/sdl_glimp.c +++ b/code/sdl/sdl_glimp.c @@ -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 );