Fix rendering artifacts on Mac Mobile GeForce cards

meow-7.2.2
Graham Madarasz 2013-04-20 03:36:21 -07:00
parent abb72591d4
commit b2344cfd13
3 changed files with 18 additions and 4 deletions

View File

@ -280,6 +280,7 @@ void LLGLSLShader::unload()
mTexture.clear();
mUniform.clear();
mShaderFiles.clear();
mDefines.clear();
if (mProgramObject)
{

View File

@ -622,6 +622,13 @@ void main()
#else
frag_data[0] = final_color;
#ifdef UGLY_MAC_HACK
// magic spec exp clamp fixes rendering artifacts on older mac GF drivers
//
final_specular = min(final_specular, vec4(1.0f, 1.0f, 1.0f, 0.125f));
#endif
frag_data[1] = final_specular; // XYZ = Specular color. W = Specular exponent.
frag_data[2] = final_normal; // XY = Normal. Z = Env. intensity.
#endif

View File

@ -1210,8 +1210,6 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
gDeferredSkinnedAlphaProgram.mFeatures.isAlphaLighting = true;
gDeferredSkinnedAlphaProgram.mFeatures.disableTextureIndex = true;
gDeferredSkinnedAlphaProgram.mShaderFiles.clear();
gDeferredSkinnedAlphaProgram.mDefines.clear();
gDeferredSkinnedAlphaProgram.mShaderFiles.push_back(make_pair("deferred/alphaV.glsl", GL_VERTEX_SHADER_ARB));
gDeferredSkinnedAlphaProgram.mShaderFiles.push_back(make_pair("deferred/alphaF.glsl", GL_FRAGMENT_SHADER_ARB));
gDeferredSkinnedAlphaProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
@ -1262,6 +1260,16 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
gDeferredMaterialProgram[i].addPermutation("HAS_SUN_SHADOW", mVertexShaderLevel[SHADER_DEFERRED] > 1 ? "1" : "0");
bool has_skin = i & 0x10;
gDeferredMaterialProgram[i].addPermutation("HAS_SKIN",has_skin ? "1" : "0");
#if LL_DARWIN
// include spec exp clamp to fix older mac rendering artifacts
//
if (gGLManager.mIsMobileGF)
{
gDeferredMaterialProgram[i].addPermutation("UGLY_MAC_HACK","1");
}
#endif
if (has_skin)
{
gDeferredMaterialProgram[i].mFeatures.hasObjectSkinning = true;
@ -1409,8 +1417,6 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
}
gDeferredAlphaProgram.mShaderFiles.clear();
gDeferredAlphaProgram.mDefines.clear();
gDeferredAlphaProgram.mShaderFiles.push_back(make_pair("deferred/alphaV.glsl", GL_VERTEX_SHADER_ARB));
gDeferredAlphaProgram.mShaderFiles.push_back(make_pair("deferred/alphaF.glsl", GL_FRAGMENT_SHADER_ARB));
gDeferredSkinnedAlphaProgram.addPermutation("USE_INDEXED_TEX", "1");