From 348218e40f362d386a0175d4b010b639282764b2 Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Tue, 17 May 2011 16:26:55 +0300
Subject: STORM-1245 WIP Restored environment settings interpolation on region
 crossing.

Also got rid of duplicated region environment settings requests.
---
 indra/newview/llwaterparammanager.cpp | 33 ++++++++++++++++++++++++++-------
 1 file changed, 26 insertions(+), 7 deletions(-)

(limited to 'indra/newview/llwaterparammanager.cpp')

diff --git a/indra/newview/llwaterparammanager.cpp b/indra/newview/llwaterparammanager.cpp
index 715af09053..a11ae93847 100644
--- a/indra/newview/llwaterparammanager.cpp
+++ b/indra/newview/llwaterparammanager.cpp
@@ -256,21 +256,40 @@ void LLWaterParamManager::updateShaderUniforms(LLGLSLShader * shader)
 
 static LLFastTimer::DeclareTimer FTM_UPDATE_WATERPARAM("Update Water Params");
 
-void LLWaterParamManager::applyUserPrefs()
+void LLWaterParamManager::applyUserPrefs(bool interpolate)
 {
+	LLSD target_water_params;
+
+	// Determine new water settings based on user prefs.
 	if (LLEnvManagerNew::instance().getUseRegionSettings())
 	{
-		// *TODO: interpolate?
 		// *TODO: make sure whether region settings belong to the current region?
 		LL_DEBUGS("Windlight") << "Applying region water" << LL_ENDL;
-		const LLEnvironmentSettings& region_settings = LLEnvManagerNew::instance().getRegionSettings();
-		LLWaterParamManager::getInstance()->mCurParams.setAll(region_settings.getWaterParams());
+		target_water_params = LLEnvManagerNew::instance().getRegionSettings().getWaterParams();
 	}
 	else
 	{
 		std::string water = LLEnvManagerNew::instance().getWaterPresetName();
-		LL_DEBUGS("Windlight") << "Loading water preset [" << water << "]" << LL_ENDL;
-		loadPreset(water, true);
+		LL_DEBUGS("Windlight") << "Applying water preset [" << water << "]" << LL_ENDL;
+		LLWaterParamSet params;
+		getParamSet(water, params);
+		target_water_params = params.getAll();
+	}
+
+	// Apply them with or without interpolation.
+	if (target_water_params.isUndefined())
+	{
+		llwarns << "Undefined target water params" << llendl;
+		return;
+	}
+
+	if (interpolate)
+	{
+		LLWLParamManager::getInstance()->mAnimator.startInterpolation(target_water_params);
+	}
+	else
+	{
+		LLWaterParamManager::getInstance()->mCurParams.setAll(target_water_params);
 	}
 }
 
@@ -447,5 +466,5 @@ void LLWaterParamManager::initSingleton()
 {
 	LL_DEBUGS("Windlight") << "Initializing water" << LL_ENDL;
 	loadAllPresets(LLStringUtil::null);
-	applyUserPrefs();
+	applyUserPrefs(false);
 }
-- 
cgit v1.2.3