Fixed rigged shaders not loading under certain scenarios.
This commit is contained in:
@@ -431,7 +431,6 @@ void LLViewerShaderMgr::setShaders()
|
|||||||
// Load all shaders to set max levels
|
// Load all shaders to set max levels
|
||||||
loadShadersEnvironment();
|
loadShadersEnvironment();
|
||||||
loadShadersWater();
|
loadShadersWater();
|
||||||
loadShadersObject();
|
|
||||||
loadShadersWindLight();
|
loadShadersWindLight();
|
||||||
loadShadersEffects();
|
loadShadersEffects();
|
||||||
loadShadersInterface();
|
loadShadersInterface();
|
||||||
@@ -440,7 +439,7 @@ void LLViewerShaderMgr::setShaders()
|
|||||||
mVertexShaderLevel[SHADER_AVATAR] = 3;
|
mVertexShaderLevel[SHADER_AVATAR] = 3;
|
||||||
mMaxAvatarShaderLevel = 3;
|
mMaxAvatarShaderLevel = 3;
|
||||||
|
|
||||||
if (gSavedSettings.getBOOL("RenderAvatarVP"))
|
if (gSavedSettings.getBOOL("RenderAvatarVP") && loadShadersObject())
|
||||||
{
|
{
|
||||||
BOOL avatar_cloth = gSavedSettings.getBOOL("RenderAvatarCloth");
|
BOOL avatar_cloth = gSavedSettings.getBOOL("RenderAvatarCloth");
|
||||||
S32 avatar_class = 1;
|
S32 avatar_class = 1;
|
||||||
@@ -474,13 +473,25 @@ void LLViewerShaderMgr::setShaders()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
mVertexShaderLevel[SHADER_AVATAR] = 0;
|
mVertexShaderLevel[SHADER_AVATAR] = 0;
|
||||||
|
mVertexShaderLevel[SHADER_DEFERRED] = 0;
|
||||||
|
|
||||||
|
if (gSavedSettings.getBOOL("RenderAvatarVP"))
|
||||||
|
{
|
||||||
|
gSavedSettings.setBOOL("RenderDeferred", FALSE);
|
||||||
gSavedSettings.setBOOL("RenderAvatarCloth", FALSE);
|
gSavedSettings.setBOOL("RenderAvatarCloth", FALSE);
|
||||||
|
gSavedSettings.setBOOL("RenderAvatarVP", FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
loadShadersAvatar(); // unloads
|
loadShadersAvatar(); // unloads
|
||||||
|
loadShadersObject();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!loadShadersDeferred())
|
if (!loadShadersDeferred())
|
||||||
{
|
{
|
||||||
gSavedSettings.setBOOL("RenderDeferred", FALSE);
|
gSavedSettings.setBOOL("RenderDeferred", FALSE);
|
||||||
|
reentrance = false;
|
||||||
|
setShaders();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -841,7 +852,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
|
|||||||
if (mVertexShaderLevel[SHADER_DEFERRED] == 0)
|
if (mVertexShaderLevel[SHADER_DEFERRED] == 0)
|
||||||
{
|
{
|
||||||
unloadShaderClass(SHADER_DEFERRED);
|
unloadShaderClass(SHADER_DEFERRED);
|
||||||
return FALSE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
mVertexShaderLevel[SHADER_AVATAR] = 1;
|
mVertexShaderLevel[SHADER_AVATAR] = 1;
|
||||||
@@ -1046,6 +1057,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
|
|||||||
{
|
{
|
||||||
std::string fragment;
|
std::string fragment;
|
||||||
|
|
||||||
|
//Keep this! Fixes shadow softening with ssao off.
|
||||||
if (mVertexShaderLevel[SHADER_DEFERRED] < 2 && !gSavedSettings.getBOOL("RenderDeferredSSAO"))
|
if (mVertexShaderLevel[SHADER_DEFERRED] < 2 && !gSavedSettings.getBOOL("RenderDeferredSSAO"))
|
||||||
{
|
{
|
||||||
fragment = "deferred/softenLightNoSSAOF.glsl";
|
fragment = "deferred/softenLightNoSSAOF.glsl";
|
||||||
@@ -1083,6 +1095,20 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
|
|||||||
gDeferredAvatarShadowProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
|
gDeferredAvatarShadowProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
|
||||||
success = gDeferredAvatarShadowProgram.createShader(&mAvatarAttribs, &mAvatarUniforms);
|
success = gDeferredAvatarShadowProgram.createShader(&mAvatarAttribs, &mAvatarUniforms);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if MESH_ENABLED
|
||||||
|
if (success)
|
||||||
|
{
|
||||||
|
gDeferredAttachmentShadowProgram.mName = "Deferred Attachment Shadow Shader";
|
||||||
|
gDeferredAttachmentShadowProgram.mFeatures.hasObjectSkinning = true;
|
||||||
|
gDeferredAttachmentShadowProgram.mShaderFiles.clear();
|
||||||
|
gDeferredAttachmentShadowProgram.mShaderFiles.push_back(make_pair("deferred/attachmentShadowV.glsl", GL_VERTEX_SHADER_ARB));
|
||||||
|
gDeferredAttachmentShadowProgram.mShaderFiles.push_back(make_pair("deferred/attachmentShadowF.glsl", GL_FRAGMENT_SHADER_ARB));
|
||||||
|
gDeferredAttachmentShadowProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
|
||||||
|
success = gDeferredAttachmentShadowProgram.createShader(NULL, NULL);
|
||||||
|
}
|
||||||
|
#endif //MESH_ENABLED
|
||||||
|
|
||||||
if (success)
|
if (success)
|
||||||
{
|
{
|
||||||
gTerrainProgram.mName = "Deferred Terrain Shader";
|
gTerrainProgram.mName = "Deferred Terrain Shader";
|
||||||
@@ -1216,7 +1242,7 @@ BOOL LLViewerShaderMgr::loadShadersObject()
|
|||||||
if (mVertexShaderLevel[SHADER_OBJECT] == 0)
|
if (mVertexShaderLevel[SHADER_OBJECT] == 0)
|
||||||
{
|
{
|
||||||
unloadShaderClass(SHADER_OBJECT);
|
unloadShaderClass(SHADER_OBJECT);
|
||||||
return FALSE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (success)
|
if (success)
|
||||||
|
|||||||
Reference in New Issue
Block a user