Fixes for switching between atmospherics implementations on the fly.
parent
e5c0022a7c
commit
642a4ddd60
|
|
@ -24,7 +24,7 @@
|
|||
*/
|
||||
|
||||
#ifdef DEFINE_GL_FRAGCOLOR
|
||||
out vec4 frag_data[4];
|
||||
out vec4 frag_data[3];
|
||||
#else
|
||||
#define frag_data gl_FragData
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -163,7 +163,7 @@ void LLDrawPoolWLSky::renderDome(const LLVector3& camPosLocal, F32 camHeightLoca
|
|||
|
||||
void LLDrawPoolWLSky::renderSkyHazeDeferred(const LLVector3& camPosLocal, F32 camHeightLocal) const
|
||||
{
|
||||
if (gPipeline.useAdvancedAtmospherics() && gPipeline.canUseWindLightShaders() && gAtmosphere)
|
||||
if (gPipeline.useAdvancedAtmospherics() && gPipeline.canUseWindLightShaders())
|
||||
{
|
||||
sky_shader->bind();
|
||||
|
||||
|
|
@ -192,7 +192,7 @@ void LLDrawPoolWLSky::renderSkyHazeDeferred(const LLVector3& camPosLocal, F32 ca
|
|||
sky_shader->uniform3f(sCamPosLocal, camPosLocal.mV[0], camPosLocal.mV[1], camPosLocal.mV[2]);
|
||||
|
||||
renderFsSky(camPosLocal, camHeightLocal, sky_shader);
|
||||
|
||||
|
||||
sky_shader->unbind();
|
||||
}
|
||||
}
|
||||
|
|
@ -497,18 +497,22 @@ void LLDrawPoolWLSky::renderDeferred(S32 pass)
|
|||
|
||||
if (gPipeline.canUseWindLightShaders())
|
||||
{
|
||||
if (gPipeline.useAdvancedAtmospherics())
|
||||
{
|
||||
renderSkyHazeDeferred(origin, camHeightLocal);
|
||||
renderHeavenlyBodies();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Disable depth-test for sky, but re-enable depth writes for the cloud
|
||||
// rendering below so the cloud shader can write out depth for the stars to test against
|
||||
LLGLDepthTest depth(GL_TRUE, GL_FALSE);
|
||||
renderSkyHaze(origin, camHeightLocal);
|
||||
renderHeavenlyBodies();
|
||||
|
||||
if (gPipeline.useAdvancedAtmospherics())
|
||||
{
|
||||
//LLGLSquashToFarClip far_clip(get_current_projection());
|
||||
renderSkyHazeDeferred(origin, camHeightLocal);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Disable depth-test for sky, but re-enable depth writes for the cloud
|
||||
// rendering below so the cloud shader can write out depth for the stars to test against
|
||||
renderSkyHaze(origin, camHeightLocal);
|
||||
|
||||
}
|
||||
renderHeavenlyBodies();
|
||||
}
|
||||
renderSkyClouds(origin, camHeightLocal);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -62,6 +62,8 @@
|
|||
#include "llenvironment.h"
|
||||
#include "lltrans.h"
|
||||
|
||||
#pragma optimize("", off)
|
||||
|
||||
extern LLControlGroup gSavedSettings;
|
||||
|
||||
//=========================================================================
|
||||
|
|
@ -198,9 +200,33 @@ BOOL LLFloaterEditExtDayCycle::postBuild()
|
|||
LLTabContainer* tab_container = mSkyTabLayoutContainer->getChild<LLTabContainer>("sky_tabs");
|
||||
S32 tab_count = tab_container->getTabCount();
|
||||
|
||||
LLSettingsEditPanel *panel = nullptr;
|
||||
|
||||
// Add or remove density tab as necessary
|
||||
// Must be before operation on all tabs below
|
||||
if (gSavedSettings.getBOOL("RenderUseAdvancedAtmospherics"))
|
||||
{
|
||||
panel = dynamic_cast<LLPanelSettingsSky*>(tab_container->getChildView("panel_settings_sky_density"));
|
||||
if (!panel)
|
||||
{
|
||||
panel = new LLPanelSettingsSkyDensityTab;
|
||||
panel->buildFromFile("panel_settings_sky_density.xml");
|
||||
tab_container->addTabPanel(LLTabContainer::TabPanelParams().panel(panel).select_tab(false));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
panel = dynamic_cast<LLPanelSettingsSky*>(tab_container->getChildView("panel_settings_sky_density"));
|
||||
if (panel)
|
||||
{
|
||||
tab_container->removeTabPanel(panel);
|
||||
}
|
||||
delete panel;
|
||||
}
|
||||
|
||||
for (S32 idx = 0; idx < tab_count; ++idx)
|
||||
{
|
||||
LLSettingsEditPanel *panel = static_cast<LLSettingsEditPanel *>(tab_container->getPanelByIndex(idx));
|
||||
panel = static_cast<LLSettingsEditPanel *>(tab_container->getPanelByIndex(idx));
|
||||
if (panel)
|
||||
panel->setOnDirtyFlagChanged([this](LLPanel *, bool val) { onPanelDirtyFlagChanged(val); });
|
||||
}
|
||||
|
|
@ -813,7 +839,7 @@ void LLFloaterEditExtDayCycle::updateWaterTabs(const LLSettingsWaterPtr_t &p_wat
|
|||
|
||||
void LLFloaterEditExtDayCycle::updateSkyTabs(const LLSettingsSkyPtr_t &p_sky)
|
||||
{
|
||||
LLView* tab_container = mSkyTabLayoutContainer->getChild<LLView>(TABS_SKYS); //can't extract panels directly, since they are in 'tuple'
|
||||
LLTabContainer* tab_container = mSkyTabLayoutContainer->getChild<LLTabContainer>(TABS_SKYS); //can't extract panels directly, since they are in 'tuple'
|
||||
|
||||
LLPanelSettingsSky* panel;
|
||||
panel = dynamic_cast<LLPanelSettingsSky*>(tab_container->getChildView("atmosphere_panel"));
|
||||
|
|
@ -831,6 +857,29 @@ void LLFloaterEditExtDayCycle::updateSkyTabs(const LLSettingsSkyPtr_t &p_sky)
|
|||
{
|
||||
panel->setSky(p_sky);
|
||||
}
|
||||
|
||||
if (gSavedSettings.getBOOL("RenderUseAdvancedAtmospherics"))
|
||||
{
|
||||
panel = dynamic_cast<LLPanelSettingsSky*>(tab_container->getChildView("panel_settings_sky_density"));
|
||||
if (!panel)
|
||||
{
|
||||
panel = new LLPanelSettingsSkyDensityTab;
|
||||
panel->buildFromFile("panel_settings_sky_density.xml");
|
||||
panel->setOnDirtyFlagChanged([this](LLPanel *, bool value) { onPanelDirtyFlagChanged(value); });
|
||||
tab_container->addTabPanel(LLTabContainer::TabPanelParams().panel(panel).select_tab(false));
|
||||
}
|
||||
panel->setSky(std::static_pointer_cast<LLSettingsSky>(p_sky));
|
||||
}
|
||||
else
|
||||
{
|
||||
panel = dynamic_cast<LLPanelSettingsSky*>(tab_container->getChildView("panel_settings_sky_density"));
|
||||
if (panel)
|
||||
{
|
||||
tab_container->removeTabPanel(panel);
|
||||
}
|
||||
delete panel;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void LLFloaterEditExtDayCycle::updateButtons()
|
||||
|
|
|
|||
|
|
@ -55,6 +55,8 @@
|
|||
#include "llsettingsvo.h"
|
||||
#include "llinventorymodel.h"
|
||||
|
||||
#pragma optimize("", off)
|
||||
|
||||
extern LLControlGroup gSavedSettings;
|
||||
|
||||
namespace
|
||||
|
|
|
|||
|
|
@ -410,6 +410,17 @@ static bool handleRenderDeferredChanged(const LLSD& newvalue)
|
|||
return true;
|
||||
}
|
||||
|
||||
static bool handleRenderUseAdvancedAtmosphericsChanged(const LLSD& newvalue)
|
||||
{
|
||||
if (gPipeline.isInit())
|
||||
{
|
||||
LLPipeline::refreshCachedSettings();
|
||||
// Need to reload shaders when changing atmospherics implementations...
|
||||
LLViewerShaderMgr::instance()->setShaders();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// This looks a great deal like handleRenderDeferredChanged because
|
||||
// Advanced Lighting (Materials) implies bumps and shiny so disabling
|
||||
// bumps should further disable that feature.
|
||||
|
|
@ -644,6 +655,7 @@ void settings_setup_listeners()
|
|||
gSavedSettings.getControl("RenderDebugPipeline")->getSignal()->connect(boost::bind(&handleRenderDebugPipelineChanged, _2));
|
||||
gSavedSettings.getControl("RenderResolutionDivisor")->getSignal()->connect(boost::bind(&handleRenderResolutionDivisorChanged, _2));
|
||||
gSavedSettings.getControl("RenderDeferred")->getSignal()->connect(boost::bind(&handleRenderDeferredChanged, _2));
|
||||
gSavedSettings.getControl("RenderUseAdvancedAtmospherics")->getSignal()->connect(boost::bind(&handleRenderUseAdvancedAtmosphericsChanged, _2));
|
||||
gSavedSettings.getControl("RenderShadowDetail")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
|
||||
gSavedSettings.getControl("RenderDeferredSSAO")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
|
||||
gSavedSettings.getControl("RenderPerformanceTest")->getSignal()->connect(boost::bind(&handleRenderPerfTestChanged, _2));
|
||||
|
|
|
|||
|
|
@ -2139,7 +2139,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
|
|||
gDeferredWLSkyProgram.mShaderFiles.push_back(make_pair("deferred/skyF.glsl", GL_FRAGMENT_SHADER_ARB));
|
||||
gDeferredWLSkyProgram.mShaderLevel = mVertexShaderLevel[SHADER_WINDLIGHT];
|
||||
gDeferredWLSkyProgram.mShaderGroup = LLGLSLShader::SG_SKY;
|
||||
if (mVertexShaderLevel[SHADER_WINDLIGHT] >= 3)
|
||||
if (mVertexShaderLevel[SHADER_WINDLIGHT] > 1)
|
||||
{
|
||||
gDeferredWLSkyProgram.mExtraLinkObject = gAtmosphere->getAtmosphericShaderForLink();
|
||||
}
|
||||
|
|
@ -3537,13 +3537,13 @@ BOOL LLViewerShaderMgr::loadShadersWindLight()
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
if (mVertexShaderLevel[SHADER_WINDLIGHT] >= 3)
|
||||
if (mVertexShaderLevel[SHADER_WINDLIGHT] > 1)
|
||||
{
|
||||
// Prepare precomputed atmospherics textures using libatmosphere
|
||||
LLAtmosphere::initClass();
|
||||
}
|
||||
|
||||
if (success && (mVertexShaderLevel[SHADER_WINDLIGHT] < 3))
|
||||
if (success)
|
||||
{
|
||||
gWLSkyProgram.mName = "Windlight Sky Shader";
|
||||
//gWLSkyProgram.mFeatures.hasGamma = true;
|
||||
|
|
@ -3567,7 +3567,7 @@ BOOL LLViewerShaderMgr::loadShadersWindLight()
|
|||
success = gWLCloudProgram.createShader(NULL, NULL);
|
||||
}
|
||||
|
||||
if (success && (mVertexShaderLevel[SHADER_WINDLIGHT] < 3))
|
||||
if (success)
|
||||
{
|
||||
gWLSunProgram.mName = "Windlight Sun Program";
|
||||
gWLSunProgram.mShaderFiles.clear();
|
||||
|
|
@ -3585,7 +3585,7 @@ BOOL LLViewerShaderMgr::loadShadersWindLight()
|
|||
success = gWLSunProgram.createShader(NULL, NULL);
|
||||
}
|
||||
|
||||
if (success && (mVertexShaderLevel[SHADER_WINDLIGHT] < 3))
|
||||
if (success)
|
||||
{
|
||||
gWLMoonProgram.mName = "Windlight Moon Program";
|
||||
gWLMoonProgram.mShaderFiles.clear();
|
||||
|
|
|
|||
|
|
@ -1048,7 +1048,7 @@ void LLPipeline::refreshCachedSettings()
|
|||
RenderAvatarVP = gSavedSettings.getBOOL("RenderAvatarVP");
|
||||
WindLightUseAtmosShaders = gSavedSettings.getBOOL("WindLightUseAtmosShaders");
|
||||
RenderDeferred = gSavedSettings.getBOOL("RenderDeferred");
|
||||
sUseAdvancedAtmospherics = gSavedSettings.getBOOL("RenderUseAdvancedAtmospherics");
|
||||
sUseAdvancedAtmospherics = WindLightUseAtmosShaders && gSavedSettings.getBOOL("RenderUseAdvancedAtmospherics");
|
||||
RenderDeferredSunWash = gSavedSettings.getF32("RenderDeferredSunWash");
|
||||
RenderFSAASamples = gSavedSettings.getU32("RenderFSAASamples");
|
||||
RenderResolutionDivisor = gSavedSettings.getU32("RenderResolutionDivisor");
|
||||
|
|
|
|||
|
|
@ -520,6 +520,7 @@ Select a key frame from the timeline above to edit settings.
|
|||
left_delta="0"
|
||||
top_pad="5"
|
||||
name="moon_panel" />
|
||||
<!-- added programatically so it doesn't show up whether we want it or not
|
||||
<panel
|
||||
border="true"
|
||||
class="panel_settings_density"
|
||||
|
|
@ -529,6 +530,7 @@ Select a key frame from the timeline above to edit settings.
|
|||
left_delta="0"
|
||||
top_pad="5"
|
||||
name="density_panel" />
|
||||
-->
|
||||
</tab_container>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
|
|
|
|||
Loading…
Reference in New Issue