diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index bb0f14b1f..abb906bf7 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -992,6 +992,11 @@ bool LLAppViewer::init() LLViewerJoystick::getInstance()->init(false); + // Finish windlight initialization. + LLWLParamManager::instance().initHack(); + // Use prefered Environment. + LLEnvManagerNew::instance().usePrefs(); + gGLActive = FALSE; return true; } diff --git a/indra/newview/llwaterparammanager.cpp b/indra/newview/llwaterparammanager.cpp index 08f1d85a8..a39530724 100644 --- a/indra/newview/llwaterparammanager.cpp +++ b/indra/newview/llwaterparammanager.cpp @@ -588,7 +588,10 @@ void LLWaterParamManager::initSingleton() loadAllPresets(); - LLEnvManagerNew::instance().usePrefs(); + // This shouldn't be called here. It has nothing to do with the initialization of this singleton. + // Instead, call it one-time when the viewer starts. Calling it here causes a recursive entry + // of LLWaterParamManager::initSingleton(). + //LLEnvManagerNew::instance().usePrefs(); } // static diff --git a/indra/newview/llwlparammanager.cpp b/indra/newview/llwlparammanager.cpp index cbcd5ec4e..95eba470f 100644 --- a/indra/newview/llwlparammanager.cpp +++ b/indra/newview/llwlparammanager.cpp @@ -775,14 +775,19 @@ boost::signals2::connection LLWLParamManager::setPresetListChangeCallback(const } - -// static void LLWLParamManager::initSingleton() { LL_DEBUGS("Windlight") << "Initializing sky" << LL_ENDL; loadAllPresets(); + // Here it used to call LLWLParamManager::initHack(), but we can't do that since it calls + // LLWLParamManager::initSingleton() recursively. Instead, call it from LLAppViewer::init(). +} + +// This is really really horrible, but can't be fixed without a rewrite. +void LLWLParamManager::initHack() +{ // load the day std::string preferred_day = LLEnvManagerNew::instance().getDayCycleName(); if (!LLDayCycleManager::instance().getPreset(preferred_day, mDay)) @@ -810,7 +815,10 @@ void LLWLParamManager::initSingleton() // but use linden time sets it to what the estate is mAnimator.setTimeType(LLWLAnimator::TIME_LINDEN); - LLEnvManagerNew::instance().usePrefs(); + // This shouldn't be called here. It has nothing to do with the initialization of this singleton. + // Instead, call it one-time when the viewer starts. Calling it here causes a recursive entry + // of LLWLParamManager::initSingleton(). + //LLEnvManagerNew::instance().usePrefs(); } // static diff --git a/indra/newview/llwlparammanager.h b/indra/newview/llwlparammanager.h index c65cbcb36..d244d4c47 100644 --- a/indra/newview/llwlparammanager.h +++ b/indra/newview/llwlparammanager.h @@ -341,6 +341,9 @@ private: std::map mParamList; preset_list_signal_t mPresetListChangeSignal; + +public: + void initHack(); }; inline F32 LLWLParamManager::getDomeOffset(void) const