OpenGL2: Render metals as nonmetal on cubemaps, and some ComputeShaderColors cleanup.

This commit is contained in:
SmileTheory 2016-04-05 02:21:14 -07:00
parent 80357ff1f2
commit 60f56670d6

View file

@ -446,11 +446,12 @@ static void ComputeShaderColors( shaderStage_t *pStage, vec4_t baseColor, vec4_t
|| ((blend & GLS_SRCBLEND_BITS) == GLS_SRCBLEND_ONE_MINUS_DST_COLOR) || ((blend & GLS_SRCBLEND_BITS) == GLS_SRCBLEND_ONE_MINUS_DST_COLOR)
|| ((blend & GLS_DSTBLEND_BITS) == GLS_DSTBLEND_SRC_COLOR) || ((blend & GLS_DSTBLEND_BITS) == GLS_DSTBLEND_SRC_COLOR)
|| ((blend & GLS_DSTBLEND_BITS) == GLS_DSTBLEND_ONE_MINUS_SRC_COLOR); || ((blend & GLS_DSTBLEND_BITS) == GLS_DSTBLEND_ONE_MINUS_SRC_COLOR);
qboolean isWorldDraw = !(backEnd.refdef.rdflags & RDF_NOWORLDMODEL);
float scale = 1.0f;
#if defined(USE_OVERBRIGHT) #if defined(USE_OVERBRIGHT)
float exactLight = 1.0f; float exactLight = 1.0f;
#else #else
qboolean isWorldDraw = !(backEnd.refdef.rdflags & RDF_NOWORLDMODEL);
float exactLight = (isBlend || !isWorldDraw) ? 1.0f : (float)(1 << r_mapOverBrightBits->integer); float exactLight = (isBlend || !isWorldDraw) ? 1.0f : (float)(1 << r_mapOverBrightBits->integer);
#endif #endif
@ -610,17 +611,16 @@ static void ComputeShaderColors( shaderStage_t *pStage, vec4_t baseColor, vec4_t
break; break;
} }
// multiply color by overbrightbits if this isn't a blend
if (tr.overbrightBits && !isBlend) if (tr.overbrightBits && !isBlend)
{ scale *= 1 << tr.overbrightBits;
float scale = 1 << tr.overbrightBits;
baseColor[0] *= scale; if ((backEnd.refdef.colorScale != 1.0f) && !isBlend && isWorldDraw)
baseColor[1] *= scale; scale *= backEnd.refdef.colorScale;
baseColor[2] *= scale;
vertColor[0] *= scale; if (scale != 1.0f)
vertColor[1] *= scale; {
vertColor[2] *= scale; VectorScale(baseColor, scale, baseColor);
VectorScale(vertColor, scale, vertColor);
} }
// FIXME: find some way to implement this. // FIXME: find some way to implement this.
@ -1071,6 +1071,8 @@ static void RB_IterateStagesGeneric( shaderCommands_t *input )
int deformGen; int deformGen;
vec5_t deformParams; vec5_t deformParams;
qboolean renderToCubemap = tr.renderCubeFbo && glState.currentFBO == tr.renderCubeFbo;
ComputeDeformValues(&deformGen, deformParams); ComputeDeformValues(&deformGen, deformParams);
ComputeFogValues(fogDistanceVector, fogDepthVector, &eyeT); ComputeFogValues(fogDistanceVector, fogDepthVector, &eyeT);
@ -1186,13 +1188,6 @@ static void RB_IterateStagesGeneric( shaderCommands_t *input )
ComputeShaderColors(pStage, baseColor, vertColor, pStage->stateBits); ComputeShaderColors(pStage, baseColor, vertColor, pStage->stateBits);
if ((backEnd.refdef.colorScale != 1.0f) && !(backEnd.refdef.rdflags & RDF_NOWORLDMODEL))
{
// use VectorScale to only scale first three values, not alpha
VectorScale(baseColor, backEnd.refdef.colorScale, baseColor);
VectorScale(vertColor, backEnd.refdef.colorScale, vertColor);
}
GLSL_SetUniformVec4(sp, UNIFORM_BASECOLOR, baseColor); GLSL_SetUniformVec4(sp, UNIFORM_BASECOLOR, baseColor);
GLSL_SetUniformVec4(sp, UNIFORM_VERTCOLOR, vertColor); GLSL_SetUniformVec4(sp, UNIFORM_VERTCOLOR, vertColor);
} }
@ -1263,7 +1258,20 @@ static void RB_IterateStagesGeneric( shaderCommands_t *input )
GLSL_SetUniformMat4(sp, UNIFORM_MODELMATRIX, backEnd.or.transformMatrix); GLSL_SetUniformMat4(sp, UNIFORM_MODELMATRIX, backEnd.or.transformMatrix);
GLSL_SetUniformVec4(sp, UNIFORM_NORMALSCALE, pStage->normalScale); GLSL_SetUniformVec4(sp, UNIFORM_NORMALSCALE, pStage->normalScale);
GLSL_SetUniformVec4(sp, UNIFORM_SPECULARSCALE, pStage->specularScale);
{
vec4_t specularScale;
Vector4Copy(pStage->specularScale, specularScale);
if (renderToCubemap)
{
// force specular to nonmetal if rendering cubemaps
if (r_pbr->integer)
specularScale[1] = 0.0f;
}
GLSL_SetUniformVec4(sp, UNIFORM_SPECULARSCALE, pStage->specularScale);
}
//GLSL_SetUniformFloat(sp, UNIFORM_MAPLIGHTSCALE, backEnd.refdef.mapLightScale); //GLSL_SetUniformFloat(sp, UNIFORM_MAPLIGHTSCALE, backEnd.refdef.mapLightScale);