SL-14113: Remove magic numbers. Take advantage of existing shader #defines injection by extending shader loading to make use of addConstant() instead of hard-coding magic number constants in each GLSL file.
parent
eb1e2a2314
commit
e371fdbf31
|
|
@ -62,6 +62,23 @@ U32 LLGLSLShader::sTotalDrawCalls = 0;
|
|||
LLGLSLShader gUIProgram;
|
||||
LLGLSLShader gSolidColorProgram;
|
||||
|
||||
// NOTE:Keep gShaderConsts* and LLGLSLShader::ShaderConsts_e in sync!
|
||||
const std::string gShaderConstsKey[ LLGLSLShader::NUM_SHADER_CONSTS ] =
|
||||
{
|
||||
"LL_SHADER_CONST_CLOUD_DEPTH"
|
||||
, "LL_SHADER_CONST_MOON_DEPTH"
|
||||
, "LL_SHADER_CONST_STAR_DEPTH"
|
||||
};
|
||||
|
||||
// NOTE:Keep gShaderConsts* and LLGLSLShader::ShaderConsts_e in sync!
|
||||
const std::string gShaderConstsVal[ LLGLSLShader::NUM_SHADER_CONSTS ] =
|
||||
{
|
||||
"0.999985" // SHADER_CONST_CLOUD_DEPTH // SL-14113
|
||||
, "0.999985" // SHADER_CONST_MOON_DEPTH // SL-14113
|
||||
, "0.999995" // SHADER_CONST_STAR_DEPTH // SL-14113
|
||||
};
|
||||
|
||||
|
||||
BOOL shouldChange(const LLVector4& v1, const LLVector4& v2)
|
||||
{
|
||||
return v1 != v2;
|
||||
|
|
@ -755,6 +772,11 @@ void LLGLSLShader::addPermutation(std::string name, std::string value)
|
|||
mDefines[name] = value;
|
||||
}
|
||||
|
||||
void LLGLSLShader::addConstant( const LLGLSLShader::eShaderConsts shader_const )
|
||||
{
|
||||
addPermutation( gShaderConstsKey[ shader_const ], gShaderConstsVal[ shader_const ] );
|
||||
}
|
||||
|
||||
void LLGLSLShader::removePermutation(std::string name)
|
||||
{
|
||||
mDefines[name].erase();
|
||||
|
|
|
|||
|
|
@ -67,6 +67,14 @@ public:
|
|||
class LLGLSLShader
|
||||
{
|
||||
public:
|
||||
// NOTE:Keep gShaderConsts and LLGLSLShader::ShaderConsts_e in sync!
|
||||
enum eShaderConsts
|
||||
{
|
||||
SHADER_CONST_CLOUD_DEPTH
|
||||
, SHADER_CONST_MOON_DEPTH
|
||||
, SHADER_CONST_STAR_DEPTH
|
||||
, NUM_SHADER_CONSTS
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
|
|
@ -149,7 +157,9 @@ public:
|
|||
void clearPermutations();
|
||||
void addPermutation(std::string name, std::string value);
|
||||
void removePermutation(std::string name);
|
||||
|
||||
|
||||
void addConstant( const LLGLSLShader::eShaderConsts shader_const );
|
||||
|
||||
//enable/disable texture channel for specified uniform
|
||||
//if given texture uniform is active in the shader,
|
||||
//the corresponding channel will be active upon return
|
||||
|
|
|
|||
|
|
@ -126,6 +126,6 @@ void main()
|
|||
frag_data[1] = vec4(0.0,0.0,0.0,0.0);
|
||||
frag_data[2] = vec4(0,0,0,1);
|
||||
|
||||
gl_FragDepth = 0.999985; // SL-14113 Stars and Clouds need same depth
|
||||
gl_FragDepth = LL_SHADER_CONST_CLOUD_DEPTH; // SL-14113 Stars and Clouds need same depth
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -74,6 +74,6 @@ void main()
|
|||
frag_data[1] = vec4(0.0);
|
||||
frag_data[2] = vec4(0.0f);
|
||||
|
||||
gl_FragDepth = 0.999985f;
|
||||
gl_FragDepth = LL_SHADER_CONST_MOON_DEPTH; // SL-14113
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -67,6 +67,6 @@ void main()
|
|||
frag_data[1] = vec4(0.0f);
|
||||
frag_data[2] = vec4(0.0, 1.0, 0.0, 1.0);
|
||||
|
||||
gl_FragDepth = 0.999995f; // SL-14113 Moon Haze -- Stars need to depth test behind the moon
|
||||
gl_FragDepth = LL_SHADER_CONST_STAR_DEPTH; // SL-14113 Moon Haze -- Stars need to depth test behind the moon
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -47,5 +47,5 @@ void main()
|
|||
discard;
|
||||
|
||||
frag_color = color;
|
||||
gl_FragDepth = 0.999985f; // SL-14113 Moon is infront of stars
|
||||
gl_FragDepth = LL_SHADER_CONST_MOON_DEPTH; // SL-14113 Moon is infront of stars
|
||||
}
|
||||
|
|
|
|||
|
|
@ -47,5 +47,5 @@ void main()
|
|||
color.a *= max(custom_alpha, vertex_color.a);
|
||||
|
||||
frag_color = color;
|
||||
gl_FragDepth = 0.999995f; // SL-14113 Moon Haze -- Stars need to depth test behind the moon
|
||||
gl_FragDepth = LL_SHADER_CONST_STAR_DEPTH; // SL-14113 Moon Haze -- Stars need to depth test behind the moon
|
||||
}
|
||||
|
|
|
|||
|
|
@ -68,6 +68,6 @@ void main()
|
|||
c.rgb = scaleSoftClip(c.rgb);
|
||||
|
||||
frag_color = vec4(c.rgb, c.a);
|
||||
gl_FragDepth = 0.999985f; // SL-14113
|
||||
gl_FragDepth = LL_SHADER_CONST_MOON_DEPTH; // SL-14113
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -132,6 +132,6 @@ void main()
|
|||
// camera above water: class1\deferred\cloudsF.glsl
|
||||
// camera below water: class2\windlight\coudsV.glsl
|
||||
// See: starsV.glsl, cloudsV.glsl, moonF.glsl
|
||||
gl_FragDepth = 0.999985;
|
||||
gl_FragDepth = LL_SHADER_CONST_CLOUD_DEPTH;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1063,6 +1063,7 @@ BOOL LLViewerShaderMgr::loadShadersEnvironment()
|
|||
gStarsProgram.mShaderFiles.push_back(make_pair("environment/starsV.glsl", GL_VERTEX_SHADER_ARB));
|
||||
gStarsProgram.mShaderFiles.push_back(make_pair("environment/starsF.glsl", GL_FRAGMENT_SHADER_ARB));
|
||||
gStarsProgram.mShaderLevel = mShaderLevel[SHADER_ENVIRONMENT];
|
||||
gStarsProgram.addConstant( LLGLSLShader::SHADER_CONST_STAR_DEPTH ); // SL-14113
|
||||
success = gStarsProgram.createShader(NULL, NULL);
|
||||
llassert(success);
|
||||
}
|
||||
|
|
@ -1074,8 +1075,10 @@ BOOL LLViewerShaderMgr::loadShadersEnvironment()
|
|||
gMoonProgram.mShaderFiles.push_back(make_pair("environment/moonV.glsl", GL_VERTEX_SHADER_ARB));
|
||||
gMoonProgram.mShaderFiles.push_back(make_pair("environment/moonF.glsl", GL_FRAGMENT_SHADER_ARB));
|
||||
gMoonProgram.mShaderLevel = mShaderLevel[SHADER_ENVIRONMENT];
|
||||
gMoonProgram.addConstant( LLGLSLShader::SHADER_CONST_MOON_DEPTH ); // SL-14113
|
||||
success = gMoonProgram.createShader(NULL, NULL);
|
||||
if (success)
|
||||
|
||||
{
|
||||
gMoonProgram.bind();
|
||||
gMoonProgram.uniform1i(sTex0, 0);
|
||||
|
|
@ -2750,6 +2753,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
|
|||
gDeferredWLCloudProgram.mShaderFiles.push_back(make_pair("deferred/cloudsF.glsl", GL_FRAGMENT_SHADER_ARB));
|
||||
gDeferredWLCloudProgram.mShaderLevel = mShaderLevel[SHADER_DEFERRED];
|
||||
gDeferredWLCloudProgram.mShaderGroup = LLGLSLShader::SG_SKY;
|
||||
gDeferredWLCloudProgram.addConstant( LLGLSLShader::SHADER_CONST_CLOUD_DEPTH ); // SL-14113
|
||||
success = gDeferredWLCloudProgram.createShader(NULL, NULL);
|
||||
llassert(success);
|
||||
}
|
||||
|
|
@ -2789,6 +2793,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
|
|||
gDeferredWLMoonProgram.mShaderFiles.push_back(make_pair("deferred/moonF.glsl", GL_FRAGMENT_SHADER_ARB));
|
||||
gDeferredWLMoonProgram.mShaderLevel = mShaderLevel[SHADER_DEFERRED];
|
||||
gDeferredWLMoonProgram.mShaderGroup = LLGLSLShader::SG_SKY;
|
||||
gDeferredWLMoonProgram.addConstant( LLGLSLShader::SHADER_CONST_MOON_DEPTH ); // SL-14113
|
||||
success = gDeferredWLMoonProgram.createShader(NULL, NULL);
|
||||
llassert(success);
|
||||
}
|
||||
|
|
@ -2801,6 +2806,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
|
|||
gDeferredStarProgram.mShaderFiles.push_back(make_pair("deferred/starsF.glsl", GL_FRAGMENT_SHADER_ARB));
|
||||
gDeferredStarProgram.mShaderLevel = mShaderLevel[SHADER_DEFERRED];
|
||||
gDeferredStarProgram.mShaderGroup = LLGLSLShader::SG_SKY;
|
||||
gDeferredStarProgram.addConstant( LLGLSLShader::SHADER_CONST_STAR_DEPTH ); // SL-14113
|
||||
success = gDeferredStarProgram.createShader(NULL, NULL);
|
||||
llassert(success);
|
||||
}
|
||||
|
|
@ -4157,6 +4163,7 @@ BOOL LLViewerShaderMgr::loadShadersWindLight()
|
|||
gWLCloudProgram.mShaderFiles.push_back(make_pair("windlight/cloudsF.glsl", GL_FRAGMENT_SHADER_ARB));
|
||||
gWLCloudProgram.mShaderLevel = mShaderLevel[SHADER_WINDLIGHT];
|
||||
gWLCloudProgram.mShaderGroup = LLGLSLShader::SG_SKY;
|
||||
gWLCloudProgram.addConstant( LLGLSLShader::SHADER_CONST_CLOUD_DEPTH ); // SL-14113
|
||||
success = gWLCloudProgram.createShader(NULL, NULL);
|
||||
}
|
||||
|
||||
|
|
@ -4193,6 +4200,7 @@ BOOL LLViewerShaderMgr::loadShadersWindLight()
|
|||
gWLMoonProgram.mShaderFiles.push_back(make_pair("windlight/moonF.glsl", GL_FRAGMENT_SHADER_ARB));
|
||||
gWLMoonProgram.mShaderLevel = mShaderLevel[SHADER_WINDLIGHT];
|
||||
gWLMoonProgram.mShaderGroup = LLGLSLShader::SG_SKY;
|
||||
gWLMoonProgram.addConstant( LLGLSLShader::SHADER_CONST_MOON_DEPTH ); // SL-14113
|
||||
success = gWLMoonProgram.createShader(NULL, NULL);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue