diff options
| -rw-r--r-- | indra/llinventory/llsettingssky.cpp | 1 | ||||
| -rw-r--r-- | indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl | 2 | ||||
| -rw-r--r-- | indra/newview/llfloaterenvironmentadjust.cpp | 7 | ||||
| -rw-r--r-- | indra/newview/llfloaterfixedenvironment.cpp | 6 | ||||
| -rw-r--r-- | indra/newview/llpaneleditsky.cpp | 5 | ||||
| -rw-r--r-- | indra/newview/llspatialpartition.cpp | 37 | ||||
| -rw-r--r-- | indra/newview/llspatialpartition.h | 5 | ||||
| -rw-r--r-- | indra/newview/llviewermenu.cpp | 7 | ||||
| -rw-r--r-- | indra/newview/pipeline.cpp | 34 | ||||
| -rw-r--r-- | indra/newview/pipeline.h | 5 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/notifications.xml | 12 | 
11 files changed, 72 insertions, 49 deletions
| diff --git a/indra/llinventory/llsettingssky.cpp b/indra/llinventory/llsettingssky.cpp index 6521ec8b43..8338245897 100644 --- a/indra/llinventory/llsettingssky.cpp +++ b/indra/llinventory/llsettingssky.cpp @@ -1142,6 +1142,7 @@ void LLSettingsSky::setSkyIceLevel(F32 ice_level)  void LLSettingsSky::setReflectionProbeAmbiance(F32 ambiance)  { +    mCanAutoAdjust = false; // we've now touched this sky in a "new" way, it can no longer auto adjust      setValue(SETTING_REFLECTION_PROBE_AMBIANCE, ambiance);  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl b/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl index e0e97bb938..f6870c3ff0 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl @@ -110,7 +110,7 @@ void main()      // Combine      vec3 color;      color = (cloudColorSun*(1.-alpha2) + cloudColorAmbient); -    color.rgb= max(vec3(0), color.rgb); +    color.rgb = clamp(color.rgb, vec3(0), vec3(1));      color.rgb *= 2.0;      /// Gamma correct for WL (soft clip effect). diff --git a/indra/newview/llfloaterenvironmentadjust.cpp b/indra/newview/llfloaterenvironmentadjust.cpp index f9e8963479..18be4fffda 100644 --- a/indra/newview/llfloaterenvironmentadjust.cpp +++ b/indra/newview/llfloaterenvironmentadjust.cpp @@ -174,7 +174,8 @@ void LLFloaterEnvironmentAdjust::refresh()      getChild<LLTextureCtrl>(FIELD_SKY_CLOUD_MAP)->setValue(mLiveSky->getCloudNoiseTextureId());      getChild<LLTextureCtrl>(FIELD_WATER_NORMAL_MAP)->setValue(mLiveWater->getNormalMapID()); -    getChild<LLUICtrl>(FIELD_REFLECTION_PROBE_AMBIANCE)->setValue(mLiveSky->getReflectionProbeAmbiance()); +    static LLCachedControl<bool> should_auto_adjust(gSavedSettings, "RenderSkyAutoAdjustLegacy", true); +    getChild<LLUICtrl>(FIELD_REFLECTION_PROBE_AMBIANCE)->setValue(mLiveSky->getReflectionProbeAmbiance(should_auto_adjust));      LLColor3 glow(mLiveSky->getGlow()); @@ -488,7 +489,9 @@ void LLFloaterEnvironmentAdjust::onReflectionProbeAmbianceChanged()  void LLFloaterEnvironmentAdjust::updateGammaLabel()  {      if (!mLiveSky) return; -    F32 ambiance = mLiveSky->getReflectionProbeAmbiance(); + +    static LLCachedControl<bool> should_auto_adjust(gSavedSettings, "RenderSkyAutoAdjustLegacy", true); +    F32 ambiance = mLiveSky->getReflectionProbeAmbiance(should_auto_adjust);      if (ambiance != 0.f)      {          childSetValue("scene_gamma_label", getString("hdr_string")); diff --git a/indra/newview/llfloaterfixedenvironment.cpp b/indra/newview/llfloaterfixedenvironment.cpp index b9dc14ac1a..bb6584302d 100644 --- a/indra/newview/llfloaterfixedenvironment.cpp +++ b/indra/newview/llfloaterfixedenvironment.cpp @@ -182,6 +182,12 @@ void LLFloaterFixedEnvironment::setEditSettingsAndUpdate(const LLSettingsBase::p      syncronizeTabs();      refresh();      LLEnvironment::instance().updateEnvironment(LLEnvironment::TRANSITION_INSTANT); + +    // teach user about HDR settings +    if (mSettings && ((LLSettingsSky*)mSettings.get())->canAutoAdjust()) +    { +        LLNotificationsUtil::add("AutoAdjustHDRSky"); +    }  }  void LLFloaterFixedEnvironment::syncronizeTabs() diff --git a/indra/newview/llpaneleditsky.cpp b/indra/newview/llpaneleditsky.cpp index a14af27e59..761d856aae 100644 --- a/indra/newview/llpaneleditsky.cpp +++ b/indra/newview/llpaneleditsky.cpp @@ -36,6 +36,7 @@  #include "llsettingssky.h"  #include "llenvironment.h"  #include "llatmosphere.h" +#include "llviewercontrol.h"  namespace  {    @@ -207,7 +208,9 @@ void LLPanelSettingsSkyAtmosTab::refresh()      F32 moisture_level  = mSkySettings->getSkyMoistureLevel();      F32 droplet_radius  = mSkySettings->getSkyDropletRadius();      F32 ice_level       = mSkySettings->getSkyIceLevel(); -    F32 rp_ambiance     = mSkySettings->getReflectionProbeAmbiance(); + +    static LLCachedControl<bool> should_auto_adjust(gSavedSettings, "RenderSkyAutoAdjustLegacy", true); +    F32 rp_ambiance     = mSkySettings->getReflectionProbeAmbiance(should_auto_adjust);      getChild<LLUICtrl>(FIELD_SKY_DENSITY_MOISTURE_LEVEL)->setValue(moisture_level);      getChild<LLUICtrl>(FIELD_SKY_DENSITY_DROPLET_RADIUS)->setValue(droplet_radius); diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index 978cb78083..f52f1a925d 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -777,7 +777,8 @@ void LLSpatialGroup::handleChildAddition(const OctreeNode* parent, OctreeNode* c  	assert_states_valid(this);  } -void LLSpatialGroup::destroyGL(bool keep_occlusion)  + +void LLSpatialGroup::destroyGLState(bool keep_occlusion)   {  	setState(LLSpatialGroup::GEOM_DIRTY | LLSpatialGroup::IMAGE_DIRTY); @@ -1290,45 +1291,11 @@ void drawBoxOutline(const LLVector4a& pos, const LLVector4a& size)  	drawBoxOutline(reinterpret_cast<const LLVector3&>(pos), reinterpret_cast<const LLVector3&>(size));  } -class LLOctreeDirty : public OctreeTraveler -{ -public: -	virtual void visit(const OctreeNode* state) -	{ -		LLSpatialGroup* group = (LLSpatialGroup*) state->getListener(0); -		group->destroyGL(); - -		for (LLSpatialGroup::element_iter i = group->getDataBegin(); i != group->getDataEnd(); ++i) -		{ -			LLDrawable* drawable = (LLDrawable*)(*i)->getDrawable(); -			if(!drawable) -			{ -				continue; -			} -			if (drawable->getVObj().notNull() && !group->getSpatialPartition()->mRenderByGroup) -			{ -				gPipeline.markRebuild(drawable, LLDrawable::REBUILD_ALL); -			} -		} - -		for (LLSpatialGroup::bridge_list_t::iterator i = group->mBridgeList.begin(); i != group->mBridgeList.end(); ++i) -		{ -			LLSpatialBridge* bridge = *i; -			traverse(bridge->mOctree); -		} -	} -};  void LLSpatialPartition::restoreGL()  {  } -void LLSpatialPartition::resetVertexBuffers() -{ -	LLOctreeDirty dirty; -	dirty.traverse(mOctree); -} -  BOOL LLSpatialPartition::getVisibleExtents(LLCamera& camera, LLVector3& visMin, LLVector3& visMax)  {      LL_PROFILE_ZONE_SCOPED_CATEGORY_SPATIAL; diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h index 053ce9e60b..88584f535a 100644 --- a/indra/newview/llspatialpartition.h +++ b/indra/newview/llspatialpartition.h @@ -295,7 +295,9 @@ public:  	BOOL removeObject(LLDrawable *drawablep, BOOL from_octree = FALSE);  	BOOL updateInGroup(LLDrawable *drawablep, BOOL immediate = FALSE); // Update position if it's in the group  	void shift(const LLVector4a &offset); -	void destroyGL(bool keep_occlusion = false); + +    // TODO: this no longer appears to be called, figure out if it's important and if not remove it +	void destroyGLState(bool keep_occlusion = false);  	void updateDistance(LLCamera& camera);  	F32 getUpdateUrgency() const; @@ -419,7 +421,6 @@ public:  	void renderDebug();  	void renderIntersectingBBoxes(LLCamera* camera);  	void restoreGL(); -	void resetVertexBuffers();  	BOOL getVisibleExtents(LLCamera& camera, LLVector3& visMin, LLVector3& visMax); diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index b9042b3496..6e5c268c00 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -7826,10 +7826,6 @@ class LLToggleShaderControl : public view_listener_t  		BOOL checked = gSavedSettings.getBOOL( control_name );  		gSavedSettings.setBOOL( control_name, !checked );          LLPipeline::refreshCachedSettings(); -        //gPipeline.updateRenderDeferred(); -		//gPipeline.releaseGLBuffers(); -		//gPipeline.createGLBuffers(); -		//gPipeline.resetVertexBuffers();          LLViewerShaderMgr::instance()->setShaders();  		return !checked;  	} @@ -8560,6 +8556,9 @@ class LLViewHighlightTransparent : public view_listener_t  	bool handleEvent(const LLSD& userdata)  	{  		LLDrawPoolAlpha::sShowDebugAlpha = !LLDrawPoolAlpha::sShowDebugAlpha; + +        // invisible objects skip building their render batches unless sShowDebugAlpha is true, so rebuild batches whenever toggling this flag +        gPipeline.rebuildDrawInfo();   		return true;  	}  }; diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 38f27d4dfa..e64ef6d555 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -10593,8 +10593,36 @@ void LLPipeline::handleShadowDetailChanged()      }  } -void LLPipeline::overrideEnvironmentMap() +class LLOctreeDirty : public OctreeTraveler  { -    //mReflectionMapManager.mProbes.clear(); -    //mReflectionMapManager.addProbe(LLViewerCamera::instance().getOrigin()); +public: +    virtual void visit(const OctreeNode* state) +    { +        LLSpatialGroup* group = (LLSpatialGroup*)state->getListener(0); + +        group->setState(LLSpatialGroup::GEOM_DIRTY); +        gPipeline.markRebuild(group); + +        for (LLSpatialGroup::bridge_list_t::iterator i = group->mBridgeList.begin(); i != group->mBridgeList.end(); ++i) +        { +            LLSpatialBridge* bridge = *i; +            traverse(bridge->mOctree); +        } +    } +}; + + +void LLPipeline::rebuildDrawInfo() +{ +    for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin(); +        iter != LLWorld::getInstance()->getRegionList().end(); ++iter) +    { +        LLViewerRegion* region = *iter; + +        LLOctreeDirty dirty; + +        LLSpatialPartition* part = region->getSpatialPartition(LLViewerRegion::PARTITION_VOLUME); +        dirty.traverse(part->mOctree); +    }  } + diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index 19c8b06a46..961a55330a 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -131,6 +131,10 @@ public:  	bool allocateScreenBuffer(U32 resX, U32 resY, U32 samples);      bool allocateShadowBuffer(U32 resX, U32 resY); +    // rebuild all LLVOVolume render batches +    void rebuildDrawInfo(); + +    // Clear LLFace mVertexBuffer pointers  	void resetVertexBuffers(LLDrawable* drawable);      // perform a profile of the given avatar @@ -449,7 +453,6 @@ public:      void handleShadowDetailChanged();      LLReflectionMapManager mReflectionMapManager; -    void overrideEnvironmentMap();  private:  	void unloadShaders(); diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 4949075f2d..f77b235408 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -12097,5 +12097,17 @@ Material successfully created.  Asset ID: [ASSET_ID]         notext="Cancel"         yestext="OK"/>    </notification> + +  <notification +    icon="notifytip.tga" +    name="AutoAdjustHDRSky" +    persist="true" +    type="alertmodal"> +      You are editing a non-HDR sky that has been automatically converted to HDR.  To remove HDR and tone mapping, set Reflection Probe Ambiance to zero. +    <usetemplate +        ignoretext="HDR Sky adjustment warning" +        name="okignore" +        yestext="OK"/> +  </notification>  </notifications> | 
