Avoid needless gl context re-creation. FBO change detection logic was incorrect. Also, don't clobber fbo and skinned shader settings when deferred/shaders are toggled.

This commit is contained in:
Shyotl
2016-06-09 21:17:18 -05:00
parent 0773f290cd
commit ab01a68d92

View File

@@ -554,15 +554,16 @@ void LLPanelDisplay::refreshEnabledState()
if (render_deferred && wlatmos && shaders)
{
getChildView("fbo")->setEnabled(false);
getChildView("fbo")->setValue(true);
//getChildView("fbo")->setValue(true);
mCtrlAvatarVP->setEnabled(false);
gSavedSettings.setBOOL("RenderAvatarVP", true);
//gSavedSettings.setBOOL("RenderAvatarVP", true);
}
else
{
getChildView("fbo")->setEnabled(gGLManager.mHasFramebufferObject);
//getChildView("fbo")->setValue(gSavedSettings.getBOOL("RenderUseFBO"));
mCtrlAvatarVP->setEnabled(shaders);
if (!shaders) gSavedSettings.setBOOL("RenderAvatarVP", false);
//if (!shaders) gSavedSettings.setBOOL("RenderAvatarVP", false);
}
// now turn off any features that are unavailable
@@ -718,25 +719,23 @@ void LLPanelDisplay::cancel()
void LLPanelDisplay::apply()
{
U32 fsaa_value = childGetValue("fsaa").asInteger();
S32 vsync_value = childGetValue("vsync").asInteger();
bool fbo_value = childGetValue("fbo").asBoolean();
bool can_defer = LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred");
S32 vsync_value = childGetValue("vsync").asInteger();
bool fbo_value = childGetValue("fbo").asBoolean() || (can_defer && mCtrlDeferred->getValue().asBoolean());
bool fbo_prior_value = mUseFBO || (can_defer && mDeferred );
U8 fsaa_value = fbo_value ? 0 : childGetValue("fsaa").asInteger();
U8 fsaa_prior_value = fbo_prior_value ? 0 : mFSAASamples;
LLWindow* window = gViewerWindow->getWindow();
if(vsync_value == -1 && !gGLManager.mHasAdaptiveVsync)
vsync_value = 0;
bool apply_fsaa_change = fbo_value ? false : (mFSAASamples != fsaa_value);
if(!apply_fsaa_change && (bool)mUseFBO != fbo_value)
{
apply_fsaa_change = fsaa_value != 0 || mFSAASamples != 0 ;
}
bool apply_fsaa_change = fsaa_value != fsaa_prior_value;
bool apply_vsync_change = vsync_value != mVsyncMode;
gSavedSettings.setU32("RenderFSAASamples", fsaa_value);
gSavedSettings.setU32("RenderFSAASamples", childGetValue("fsaa").asInteger());
gSavedSettings.setS32("SHRenderVsyncMode", vsync_value);
applyResolution();