diff --git a/engine/client/render.h b/engine/client/render.h index a6556bc9c..824cfe65c 100644 --- a/engine/client/render.h +++ b/engine/client/render.h @@ -494,7 +494,7 @@ extern cvar_t gl_cull; extern cvar_t gl_poly; extern cvar_t gl_smoothmodels; extern cvar_t gl_affinemodels; -extern cvar_t gl_polyblend; +extern cvar_t gl_nohwblend; extern cvar_t gl_keeptjunctions; extern cvar_t gl_reporttjunctions; extern cvar_t r_flashblend; diff --git a/engine/client/renderer.c b/engine/client/renderer.c index 38f15c39f..14594c69c 100644 --- a/engine/client/renderer.c +++ b/engine/client/renderer.c @@ -302,7 +302,7 @@ cvar_t gl_overbright_all = SCVARF ("gl_overbright_all", "0", CVAR_ARCHIVE); cvar_t gl_picmip = SCVAR ("gl_picmip", "0"); cvar_t gl_picmip2d = SCVAR ("gl_picmip2d", "0"); -cvar_t gl_polyblend = SCVAR ("gl_polyblend","1"); +cvar_t gl_nohwblend = SCVAR ("gl_nohwblend","1"); cvar_t gl_savecompressedtex = SCVAR ("gl_savecompressedtex", "0"); cvar_t gl_schematics = SCVAR ("gl_schematics", "0"); cvar_t gl_skyboxdist = SCVAR ("gl_skyboxdist", "2300"); @@ -389,7 +389,7 @@ void GLRenderer_Init(void) Cvar_Register (&gl_cull, GLRENDEREROPTIONS); Cvar_Register (&gl_smoothmodels, GRAPHICALNICETIES); Cvar_Register (&gl_affinemodels, GLRENDEREROPTIONS); - Cvar_Register (&gl_polyblend, GLRENDEREROPTIONS); + Cvar_Register (&gl_nohwblend, GLRENDEREROPTIONS); Cvar_Register (&r_flashblend, GLRENDEREROPTIONS); Cvar_Register (&gl_playermip, GLRENDEREROPTIONS); Cvar_Register (&gl_nocolors, GLRENDEREROPTIONS); diff --git a/engine/client/view.c b/engine/client/view.c index 2e875f4ef..0c9fe4fbc 100644 --- a/engine/client/view.c +++ b/engine/client/view.c @@ -84,6 +84,7 @@ cvar_t crosshairimage = SCVARF("crosshairimage", "", CVAR_RENDERERCALLBACK); cvar_t crosshairalpha = SCVAR("crosshairalpha", "1"); cvar_t gl_cshiftpercent = SCVAR("gl_cshiftpercent", "100"); +cvar_t gl_cshiftenabled = SCVAR("gl_polyblend", "1"); cvar_t v_bonusflash = SCVAR("v_bonusflash", "1"); @@ -652,11 +653,7 @@ void GLV_CalcBlend (void) { // if (j != CSHIFT_SERVER) // { - if (!gl_cshiftpercent.value -#ifdef RGLQUAKE - || !gl_polyblend.value -#endif - ) + if (!gl_cshiftpercent.value || !gl_cshiftenabled.value) continue; a2 = ((cl.cshifts[j].percent * gl_cshiftpercent.value) / 100.0) / 255.0; @@ -709,17 +706,28 @@ void GLV_UpdatePalette (qboolean force, double ftime) for (i=0 ; i<CSHIFT_SERVER ; i++) { - if (cl.cshifts[i].percent != cl.prev_cshifts[i].percent) + if (gl_nohwblend.value || !gl_cshiftenabled.value) { - update = true; - cl.prev_cshifts[i].percent = cl.cshifts[i].percent; - } - for (j=0 ; j<3 ; j++) - if (cl.cshifts[i].destcolor[j] != cl.prev_cshifts[i].destcolor[j]) + if (0 != cl.prev_cshifts[i].percent) { update = true; - cl.prev_cshifts[i].destcolor[j] = cl.cshifts[i].destcolor[j]; + cl.prev_cshifts[i].percent = 0; } + } + else + { + if (cl.cshifts[i].percent != cl.prev_cshifts[i].percent) + { + update = true; + cl.prev_cshifts[i].percent = cl.cshifts[i].percent; + } + for (j=0 ; j<3 ; j++) + if (cl.cshifts[i].destcolor[j] != cl.prev_cshifts[i].destcolor[j]) + { + update = true; + cl.prev_cshifts[i].destcolor[j] = cl.cshifts[i].destcolor[j]; + } + } } // drop the damage value @@ -737,6 +745,8 @@ void GLV_UpdatePalette (qboolean force, double ftime) GLV_CalcBlend (); a = v_blend[3]; + if (gl_nohwblend.value) + a = 0; r = 255*v_blend[0]*a; g = 255*v_blend[1]*a; b = 255*v_blend[2]*a; @@ -1656,6 +1666,7 @@ void V_Init (void) Cvar_Register (&cl_crossx, VIEWVARS); Cvar_Register (&cl_crossy, VIEWVARS); Cvar_Register (&gl_cshiftpercent, VIEWVARS); + Cvar_Register (&gl_cshiftenabled, VIEWVARS); Cvar_Register (&cl_rollspeed, VIEWVARS); Cvar_Register (&cl_rollangle, VIEWVARS); diff --git a/engine/gl/gl_rmain.c b/engine/gl/gl_rmain.c index 10c48991c..218c7e2ba 100644 --- a/engine/gl/gl_rmain.c +++ b/engine/gl/gl_rmain.c @@ -790,7 +790,7 @@ void R_PolyBlend (void) { float shift[4]; extern qboolean gammaworks; - if ((!v_blend[3] || gammaworks) && !cl.cshifts[CSHIFT_SERVER].percent) + if ((!v_blend[3] || !gl_nohwblend.value) && !cl.cshifts[CSHIFT_SERVER].percent) return; GLV_CalcBlendServer(shift); //figure out the shift we need (normally just the server specified one)