diff --git a/kmquake2_changelog.txt b/kmquake2_changelog.txt index 922404f..1f63a3d 100644 --- a/kmquake2_changelog.txt +++ b/kmquake2_changelog.txt @@ -26,6 +26,8 @@ Changes as of v0.20 update 8: - Fixed fatal error when too many alias models are loaded (such as many unique player models in a multiplayer game). +- Fixed light blooms killing performance if texture compression is enabled. + - Fixed players in multiplayer games with models/skins not installed on the local client showing as the player's model/skin. The original default of male/grunt has been restored for multiplayer games. diff --git a/renderer/r_bloom.c b/renderer/r_bloom.c index a7d73ce..94f7826 100644 --- a/renderer/r_bloom.c +++ b/renderer/r_bloom.c @@ -168,7 +168,7 @@ void R_Bloom_InitBackUpTexture (int width, int height) r_screenbackuptexture_width = width; r_screenbackuptexture_height = height; - r_bloombackuptexture = R_LoadPic( "***r_bloombackuptexture***", (byte *)data, width, height, it_pic, 3 ); + r_bloombackuptexture = R_LoadPic ("***r_bloombackuptexture***", (byte *)data, width, height, it_pic, 3); free ( data ); } @@ -208,7 +208,7 @@ void R_Bloom_InitEffectTexture (void) data = malloc( BLOOM_SIZE * BLOOM_SIZE * 4 ); memset( data, 0, BLOOM_SIZE * BLOOM_SIZE * 4 ); - r_bloomeffecttexture = R_LoadPic( "***r_bloomeffecttexture***", (byte *)data, BLOOM_SIZE, BLOOM_SIZE, it_pic, 3 ); + r_bloomeffecttexture = R_LoadPic ("***r_bloomeffecttexture***", (byte *)data, BLOOM_SIZE, BLOOM_SIZE, it_pic, 3); free ( data ); } @@ -240,7 +240,7 @@ void R_Bloom_InitTextures (void) size = screen_texture_width * screen_texture_height * 4; data = malloc( size ); memset( data, 255, size ); - r_bloomscreentexture = R_LoadPic( "***r_bloomscreentexture***", (byte *)data, screen_texture_width, screen_texture_height, it_pic, 3 ); + r_bloomscreentexture = R_LoadPic ("***r_bloomscreentexture***", (byte *)data, screen_texture_width, screen_texture_height, it_pic, 3); free ( data ); //validate bloom size and init the bloom effect texture @@ -254,7 +254,7 @@ void R_Bloom_InitTextures (void) r_screendownsamplingtexture_size = (int)(BLOOM_SIZE * 2); data = malloc( r_screendownsamplingtexture_size * r_screendownsamplingtexture_size * 4 ); memset( data, 0, r_screendownsamplingtexture_size * r_screendownsamplingtexture_size * 4 ); - r_bloomdownsamplingtexture = R_LoadPic( "***r_bloomdownsamplingtexture***", (byte *)data, r_screendownsamplingtexture_size, r_screendownsamplingtexture_size, it_pic, 3 ); + r_bloomdownsamplingtexture = R_LoadPic ("***r_bloomdownsamplingtexture***", (byte *)data, r_screendownsamplingtexture_size, r_screendownsamplingtexture_size, it_pic, 3); free ( data ); } diff --git a/renderer/r_image.c b/renderer/r_image.c index 867577f..a0ad5d4 100644 --- a/renderer/r_image.c +++ b/renderer/r_image.c @@ -43,8 +43,8 @@ cvar_t *r_intensity; unsigned d_8to24table[256]; float d_8to24tablef[256][3]; //Knightmare- MrG's Vertex array stuff -qboolean GL_Upload8 (byte *data, int width, int height, qboolean mipmap, qboolean is_sky ); -qboolean GL_Upload32 (unsigned *data, int width, int height, qboolean mipmap); +qboolean GL_Upload8 (byte *data, int width, int height, imagetype_t type); +qboolean GL_Upload32 (unsigned *data, int width, int height, imagetype_t type); int gl_solid_format = 3; int gl_alpha_format = 4; @@ -348,7 +348,7 @@ void Scrap_Upload (void) { scrap_uploads++; GL_Bind(TEXNUM_SCRAPS); - GL_Upload8 (scrap_texels[0], BLOCK_WIDTH, BLOCK_HEIGHT, false, false ); + GL_Upload8 (scrap_texels[0], BLOCK_WIDTH, BLOCK_HEIGHT, it_pic); scrap_dirty = false; } @@ -1760,15 +1760,16 @@ Returns has_alpha =============== */ //#define USE_GLMIPMAP -qboolean GL_Upload32 (unsigned *data, int width, int height, qboolean mipmap) +qboolean GL_Upload32 (unsigned *data, int width, int height, imagetype_t type) { int samples; unsigned *scaled; int scaled_width, scaled_height; - int i, c; + int i, c, comp; + qboolean mipmap; byte *scan; - int comp; + mipmap = ((type != it_pic) && (type != it_sky)); uploaded_paletted = false; // @@ -1789,9 +1790,9 @@ qboolean GL_Upload32 (unsigned *data, int width, int height, qboolean mipmap) // Heffo - ARB Texture Compression qglHint(GL_TEXTURE_COMPRESSION_HINT_ARB, GL_NICEST); if (samples == gl_solid_format) - comp = (glState.texture_compression) ? GL_COMPRESSED_RGB_ARB : gl_tex_solid_format; + comp = (glState.texture_compression && (type != it_pic)) ? GL_COMPRESSED_RGB_ARB : gl_tex_solid_format; else if (samples == gl_alpha_format) - comp = (glState.texture_compression) ? GL_COMPRESSED_RGBA_ARB : gl_tex_alpha_format; + comp = (glState.texture_compression && (type != it_pic)) ? GL_COMPRESSED_RGBA_ARB : gl_tex_alpha_format; // // find sizes to scale to @@ -1907,7 +1908,7 @@ GL_Upload8 Returns has_alpha =============== */ -qboolean GL_Upload8 (byte *data, int width, int height, qboolean mipmap, qboolean is_sky ) +qboolean GL_Upload8 (byte *data, int width, int height, imagetype_t type) { unsigned trans[512*256]; int i, s; @@ -1920,7 +1921,7 @@ qboolean GL_Upload8 (byte *data, int width, int height, qboolean mipmap, qboole /*if ( qglColorTableEXT && gl_ext_palettedtexture->value && - is_sky ) + (type == it_sky) ) { qglTexImage2D( GL_TEXTURE_2D, 0, @@ -1963,7 +1964,7 @@ qboolean GL_Upload8 (byte *data, int width, int height, qboolean mipmap, qboole } } - return GL_Upload32 (trans, width, height, mipmap); + return GL_Upload32 (trans, width, height, type); } } @@ -2071,9 +2072,11 @@ nonscrap: image->texnum = TEXNUM_IMAGES + (image - gltextures); GL_Bind(image->texnum); if (bits == 8) - image->has_alpha = GL_Upload8 (pic, width, height, (image->type != it_pic && image->type != it_sky), image->type == it_sky ); + // image->has_alpha = GL_Upload8 (pic, width, height, (image->type != it_pic && image->type != it_sky), image->type == it_sky ); + image->has_alpha = GL_Upload8 (pic, width, height, type); else - image->has_alpha = GL_Upload32 ((unsigned *)pic, width, height, (image->type != it_pic && image->type != it_sky) ); + // image->has_alpha = GL_Upload32 ((unsigned *)pic, width, height, (image->type != it_pic && image->type != it_sky) ); + image->has_alpha = GL_Upload32 ((unsigned *)pic, width, height, type); image->upload_width = upload_width; // after power of 2 and scales image->upload_height = upload_height; image->paletted = uploaded_paletted; diff --git a/renderer/r_main.c b/renderer/r_main.c index 98b2154..5ef7b5d 100644 --- a/renderer/r_main.c +++ b/renderer/r_main.c @@ -709,7 +709,7 @@ void R_RenderView (refdef_t *fd) R_Flash(); } -// R_SetFog(); + R_SetFog2D (); // don't allow radial fogging of 2D elements }