X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=model_shared.c;h=47b4c58fabedfde42ed40f62707e0f17c9a13598;hb=729abe44a989e71b183310919dd31fc1ee3aed63;hp=40e7b278512194b6dd8d3957ee061e9499e29d2e;hpb=0c520681a142ef15d2a0e28e9b3ee75d5fb1b7eb;p=xonotic%2Fdarkplaces.git diff --git a/model_shared.c b/model_shared.c index 40e7b278..47b4c58f 100644 --- a/model_shared.c +++ b/model_shared.c @@ -1627,6 +1627,7 @@ extern cvar_t mod_q3shader_default_offsetmapping_scale; extern cvar_t mod_q3shader_default_offsetmapping_bias; extern cvar_t mod_q3shader_default_polygonoffset; extern cvar_t mod_q3shader_default_polygonfactor; +extern cvar_t mod_q3shader_force_addalpha; void Mod_LoadQ3Shaders(void) { int j; @@ -1789,6 +1790,11 @@ void Mod_LoadQ3Shaders(void) layer->blendfunc[0] = GL_ONE; layer->blendfunc[1] = GL_ONE; } + else if (!strcasecmp(parameter[1], "addalpha")) + { + layer->blendfunc[0] = GL_SRC_ALPHA; + layer->blendfunc[1] = GL_ONE; + } else if (!strcasecmp(parameter[1], "filter")) { layer->blendfunc[0] = GL_DST_COLOR; @@ -1816,7 +1822,7 @@ void Mod_LoadQ3Shaders(void) else if (!strcasecmp(parameter[k+1], "GL_DST_COLOR")) layer->blendfunc[k] = GL_DST_COLOR; else if (!strcasecmp(parameter[k+1], "GL_DST_ALPHA")) - layer->blendfunc[k] = GL_ONE_MINUS_DST_ALPHA; + layer->blendfunc[k] = GL_DST_ALPHA; else if (!strcasecmp(parameter[k+1], "GL_ONE_MINUS_SRC_COLOR")) layer->blendfunc[k] = GL_ONE_MINUS_SRC_COLOR; else if (!strcasecmp(parameter[k+1], "GL_ONE_MINUS_SRC_ALPHA")) @@ -1970,6 +1976,15 @@ void Mod_LoadQ3Shaders(void) shader.textureblendalpha = true; } } + + if(mod_q3shader_force_addalpha.integer) + { + // for a long while, DP treated GL_ONE GL_ONE as GL_SRC_ALPHA GL_ONE + // this cvar brings back this behaviour + if(layer->blendfunc[0] == GL_ONE && layer->blendfunc[1] == GL_ONE) + layer->blendfunc[0] = GL_SRC_ALPHA; + } + layer->texflags = 0; if (layer->alphatest) layer->texflags |= TEXF_ALPHA;