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;
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;
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"))
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;
if (numparameters >= 5)
{
if(!strcasecmp(parameter[3], "bias"))
- shader.offsetbias = atof(parameter[3]);
+ shader.offsetbias = atof(parameter[4]);
else if(!strcasecmp(parameter[3], "match"))
- shader.offsetbias = 1.0f - atof(parameter[3]);
+ shader.offsetbias = 1.0f - atof(parameter[4]);
else if(!strcasecmp(parameter[3], "match8"))
- shader.offsetbias = 1.0f - atof(parameter[3]) / 255.0f;
+ shader.offsetbias = 1.0f - atof(parameter[4]) / 255.0f;
else if(!strcasecmp(parameter[3], "match16"))
- shader.offsetbias = 1.0f - atof(parameter[3]) / 65535.0f;
+ shader.offsetbias = 1.0f - atof(parameter[4]) / 65535.0f;
}
}
else if (!strcasecmp(parameter[0], "deformvertexes") && numparameters >= 2)