summaryrefslogtreecommitdiff
path: root/indra/newview/llwlparammanager.h
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llwlparammanager.h')
-rw-r--r--indra/newview/llwlparammanager.h292
1 files changed, 292 insertions, 0 deletions
diff --git a/indra/newview/llwlparammanager.h b/indra/newview/llwlparammanager.h
new file mode 100644
index 0000000000..a78d92bf8b
--- /dev/null
+++ b/indra/newview/llwlparammanager.h
@@ -0,0 +1,292 @@
+/**
+ * @file llwlparammanager.h
+ * @brief Implementation for the LLWLParamManager class.
+ *
+ * $LicenseInfo:firstyear=2007&license=viewergpl$
+ *
+ * Copyright (c) 2007-2007, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_WLPARAMMANAGER_H
+#define LL_WLPARAMMANAGER_H
+
+#include <vector>
+#include <map>
+#include "llwlparamset.h"
+#include "llwlanimator.h"
+#include "llwldaycycle.h"
+#include "llviewercamera.h"
+
+class LLGLSLShader;
+
+// color control
+struct WLColorControl {
+
+ F32 r, g, b, i; /// the values
+ char const * name; /// name to use to dereference params
+ std::string mSliderName; /// name of the slider in menu
+ bool hasSliderName; /// only set slider name for true color types
+ bool isSunOrAmbientColor; /// flag for if it's the sun or ambient color controller
+ bool isBlueHorizonOrDensity; /// flag for if it's the Blue Horizon or Density color controller
+
+ inline WLColorControl(F32 red, F32 green, F32 blue, F32 intensity, char const * n,
+ char const * sliderName = "")
+ : r(red), g(green), b(blue), i(intensity), name(n), mSliderName(sliderName)
+ {
+ // if there's a slider name, say we have one
+ hasSliderName = false;
+ if (mSliderName != "") {
+ hasSliderName = true;
+ }
+
+ // if it's the sun controller
+ isSunOrAmbientColor = false;
+ if (mSliderName == "WLSunlight" || mSliderName == "WLAmbient") {
+ isSunOrAmbientColor = true;
+ }
+
+ isBlueHorizonOrDensity = false;
+ if (mSliderName == "WLBlueHorizon" || mSliderName == "WLBlueDensity") {
+ isBlueHorizonOrDensity = true;
+ }
+ }
+
+ inline WLColorControl & operator = (LLVector4 const & val) {
+ r = val.mV[0];
+ g = val.mV[1];
+ b = val.mV[2];
+ i = val.mV[3];
+ return *this;
+ }
+
+ inline operator LLVector4 (void) const {
+ return LLVector4(r, g, b, i);
+ }
+
+ inline operator LLVector3 (void) const {
+ return LLVector3(r, g, b);
+ }
+
+ inline void update(LLWLParamSet & params) const {
+ params.set(name, r, g, b, i);
+ }
+};
+
+// float slider control
+struct WLFloatControl {
+ F32 x;
+ char const * name;
+ F32 mult;
+
+ inline WLFloatControl(F32 val, char const * n, F32 m=1.0f)
+ : x(val), name(n), mult(m)
+ {
+ }
+
+ inline WLFloatControl & operator = (LLVector4 const & val) {
+ x = val.mV[0];
+
+ return *this;
+ }
+
+ inline operator F32 (void) const {
+ return x;
+ }
+
+ inline void update(LLWLParamSet & params) const {
+ params.set(name, x);
+ }
+};
+
+/// WindLight parameter manager class - what controls all the wind light shaders
+class LLWLParamManager
+{
+public:
+
+ LLWLParamManager();
+ ~LLWLParamManager();
+
+ /// load a preset file
+ void loadPresets(const LLString & fileName);
+
+ /// save the preset file
+ void savePresets(const LLString & fileName);
+
+ /// load an individual preset into the sky
+ void loadPreset(const LLString & name);
+
+ /// save the parameter presets to file
+ void savePreset(const LLString & name);
+
+ /// Set shader uniforms dirty, so they'll update automatically.
+ void propagateParameters(void);
+
+ /// Update shader uniforms that have changed.
+ void updateShaderUniforms(LLGLSLShader * shader);
+
+ /// setup the animator to run
+ void resetAnimator(F32 curTime, bool run);
+
+ /// update information camera dependent parameters
+ void update(LLViewerCamera * cam);
+
+ // get where the light is pointing
+ inline LLVector4 getLightDir(void) const;
+
+ // get where the light is pointing
+ inline LLVector4 getClampedLightDir(void) const;
+
+ // get where the light is pointing
+ inline LLVector4 getRotatedLightDir(void) const;
+
+ /// get the dome's offset
+ inline F32 getDomeOffset(void) const;
+
+ /// get the radius of the dome
+ inline F32 getDomeRadius(void) const;
+
+ /// Perform global initialization for this class.
+ static void initClass(void);
+
+ // Cleanup of global data that's only inited once per class.
+ static void cleanupClass();
+
+ /// add a param to the list
+ bool addParamSet(const std::string& name, LLWLParamSet& param);
+
+ /// add a param to the list
+ BOOL addParamSet(const std::string& name, LLSD const & param);
+
+ /// get a param from the list
+ bool getParamSet(const std::string& name, LLWLParamSet& param);
+
+ /// set the param in the list with a new param
+ bool setParamSet(const std::string& name, LLWLParamSet& param);
+
+ /// set the param in the list with a new param
+ bool setParamSet(const std::string& name, LLSD const & param);
+
+ /// gets rid of a parameter and any references to it
+ /// returns true if successful
+ bool removeParamSet(const std::string& name, bool delete_from_disk);
+
+ // singleton pattern implementation
+ static LLWLParamManager * instance();
+
+
+public:
+
+ // helper variables
+ F32 mSunAngle;
+ F32 mEastAngle;
+ LLWLAnimator mAnimator;
+
+ /// actual direction of the sun
+ LLVector4 mLightDir;
+
+ /// light norm adjusted so haze works correctly
+ LLVector4 mRotatedLightDir;
+
+ /// clamped light norm for shaders that
+ /// are adversely affected when the sun goes below the
+ /// horizon
+ LLVector4 mClampedLightDir;
+
+ // list of params and how they're cycled for days
+ LLWLDayCycle mDay;
+
+ // length of the day in seconds
+ F32 mLengthOfDay;
+
+ LLWLParamSet mCurParams;
+
+ /// Sun Delta Terrain tweak variables.
+ F32 mSunDeltaYaw;
+ WLFloatControl mWLGamma;
+
+ F32 mSceneLightStrength;
+
+ /// Atmospherics
+ WLColorControl mBlueHorizon;
+ WLColorControl mHazeDensity;
+ WLColorControl mBlueDensity;
+ WLFloatControl mDensityMult;
+ WLColorControl mHazeHorizon;
+ WLFloatControl mMaxAlt;
+
+ /// Lighting
+ WLColorControl mLightnorm;
+ WLColorControl mSunlight;
+ WLColorControl mAmbient;
+ WLColorControl mGlow;
+
+ /// Clouds
+ WLColorControl mCloudColor;
+ WLColorControl mCloudMain;
+ WLFloatControl mCloudCoverage;
+ WLColorControl mCloudDetail;
+ WLFloatControl mDistanceMult;
+ WLFloatControl mCloudScale;
+
+ /// sky dome
+ F32 mDomeOffset;
+ F32 mDomeRadius;
+
+ // list of all the parameters, listed by name
+ std::map<std::string, LLWLParamSet> mParamList;
+
+
+private:
+ // our parameter manager singleton instance
+ static LLWLParamManager * sInstance;
+
+};
+
+inline F32 LLWLParamManager::getDomeOffset(void) const
+{
+ return mDomeOffset;
+}
+
+inline F32 LLWLParamManager::getDomeRadius(void) const
+{
+ return mDomeRadius;
+}
+
+inline LLVector4 LLWLParamManager::getLightDir(void) const
+{
+ return mLightDir;
+}
+
+inline LLVector4 LLWLParamManager::getClampedLightDir(void) const
+{
+ return mClampedLightDir;
+}
+
+inline LLVector4 LLWLParamManager::getRotatedLightDir(void) const
+{
+ return mRotatedLightDir;
+}
+
+#endif