Skip to content
Snippets Groups Projects
Commit e371fdbf authored by Ptolemy's avatar Ptolemy
Browse files

SL-14113: Remove magic numbers. Take advantage of existing shader #defines...

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 eb1e2a23
No related branches found
No related tags found
2 merge requests!3Update to main branch,!2Rebase onto current main branch
......@@ -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 @@ class LLShaderFeatures
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 @@ class LLGLSLShader
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);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment