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