llwaterparammanager.h

Go to the documentation of this file.
00001 
00032 #ifndef LL_WATER_PARAMMANAGER_H
00033 #define LL_WATER_PARAMMANAGER_H
00034 
00035 #include <vector>
00036 #include <map>
00037 #include "llwaterparamset.h"
00038 #include "llviewercamera.h"
00039 #include "v4color.h"
00040 
00041 const F32 WATER_FOG_LIGHT_CLAMP = 0.3f;
00042 
00043 // color control
00044 struct WaterColorControl {
00045         
00046         F32 mR, mG, mB, mA, mI;                 
00047         char const * mName;                             
00048         std::string mSliderName;                
00049         bool mHasSliderName;                    
00050 
00051         inline WaterColorControl(F32 red, F32 green, F32 blue, F32 alpha,
00052                 F32 intensity, char const * n, char const * sliderName = "")
00053                 : mR(red), mG(green), mB(blue), mA(alpha), mI(intensity), mName(n), mSliderName(sliderName)
00054         {
00055                 // if there's a slider name, say we have one
00056                 mHasSliderName = false;
00057                 if (mSliderName != "") {
00058                         mHasSliderName = true;
00059                 }
00060         }
00061 
00062         inline WaterColorControl & operator = (LLColor4 const & val) 
00063         {
00064                 mR = val.mV[0];
00065                 mG = val.mV[1];
00066                 mB = val.mV[2];
00067                 mA = val.mV[3];         
00068                 return *this;
00069         }
00070 
00071         inline operator LLColor4 (void) const
00072         {
00073                 return LLColor4(mR, mG, mB, mA);
00074         }
00075 
00076         inline WaterColorControl & operator = (LLVector4 const & val) 
00077         {
00078                 mR = val.mV[0];
00079                 mG = val.mV[1];
00080                 mB = val.mV[2];
00081                 mA = val.mV[3];         
00082                 return *this;
00083         }
00084 
00085         inline operator LLVector4 (void) const 
00086         {
00087                 return LLVector4(mR, mG, mB, mA);
00088         }
00089 
00090         inline operator LLVector3 (void) const 
00091         {
00092                 return LLVector3(mR, mG, mB);
00093         }
00094 
00095         inline void update(LLWaterParamSet & params) const 
00096         {
00097                 params.set(mName, mR, mG, mB, mA);
00098         }
00099 };
00100 
00101 struct WaterVector3Control 
00102 {
00103         F32 mX;
00104         F32 mY;
00105         F32 mZ;
00106 
00107         char const * mName;
00108 
00109         // basic constructor
00110         inline WaterVector3Control(F32 valX, F32 valY, F32 valZ, char const * n)
00111                 : mX(valX), mY(valY), mZ(valZ), mName(n)
00112         {
00113         }
00114 
00115         inline WaterVector3Control & operator = (LLVector3 const & val) 
00116         {
00117                 mX = val.mV[0];
00118                 mY = val.mV[1];
00119                 mZ = val.mV[2];
00120 
00121                 return *this;
00122         }
00123 
00124         inline void update(LLWaterParamSet & params) const 
00125         {
00126                 params.set(mName, mX, mY, mZ);
00127         }
00128 
00129 };
00130 
00131 struct WaterVector2Control 
00132 {
00133         F32 mX;
00134         F32 mY;
00135 
00136         char const * mName;
00137 
00138         // basic constructor
00139         inline WaterVector2Control(F32 valX, F32 valY, char const * n)
00140                 : mX(valX), mY(valY), mName(n)
00141         {
00142         }
00143 
00144         inline WaterVector2Control & operator = (LLVector2 const & val) 
00145         {
00146                 mX = val.mV[0];
00147                 mY = val.mV[1];
00148 
00149                 return *this;
00150         }
00151 
00152         inline void update(LLWaterParamSet & params) const 
00153         {
00154                 params.set(mName, mX, mY);
00155         }
00156 };
00157 
00158 // float slider control
00159 struct WaterFloatControl 
00160 {
00161         F32 mX;
00162         char const * mName;
00163         F32 mMult;
00164 
00165         inline WaterFloatControl(F32 val, char const * n, F32 m=1.0f)
00166                 : mX(val), mName(n), mMult(m)
00167         {
00168         }
00169 
00170         inline WaterFloatControl & operator = (LLVector4 const & val) 
00171         {
00172                 mX = val.mV[0];
00173 
00174                 return *this;
00175         }
00176 
00177         inline operator F32 (void) const 
00178         {
00179                 return mX;
00180         }
00181 
00182         inline void update(LLWaterParamSet & params) const 
00183         {
00184                 params.set(mName, mX);
00185         }
00186 };
00187 
00188 // float slider control
00189 struct WaterExpFloatControl 
00190 {
00191         F32 mExp;
00192         char const * mName;
00193         F32 mBase;
00194 
00195         inline WaterExpFloatControl(F32 val, char const * n, F32 b)
00196                 : mExp(val), mName(n), mBase(b)
00197         {
00198         }
00199 
00200         inline WaterExpFloatControl & operator = (F32 val) 
00201         {
00202                 mExp = log(val) / log(mBase);
00203 
00204                 return *this;
00205         }
00206 
00207         inline operator F32 (void) const 
00208         {
00209                 return pow(mBase, mExp);
00210         }
00211 
00212         inline void update(LLWaterParamSet & params) const 
00213         {
00214                 params.set(mName, pow(mBase, mExp));
00215         }
00216 };
00217 
00218 
00220 class LLWaterParamManager
00221 {
00222 public:
00223 
00224         LLWaterParamManager();
00225         ~LLWaterParamManager();
00226 
00228         void loadAllPresets(const LLString & fileName);
00229 
00231         void loadPreset(const LLString & name);
00232 
00234         void savePreset(const LLString & name);
00235 
00237         void propagateParameters(void);
00238 
00240         void update(LLViewerCamera * cam);
00241 
00243         void updateShaderUniforms(LLGLSLShader * shader);
00244 
00246         static void initClass(void);
00247 
00248         // Cleanup of global data that's only inited once per class.
00249         static void cleanupClass();
00250 
00252         bool addParamSet(const std::string& name, LLWaterParamSet& param);
00253 
00255         BOOL addParamSet(const std::string& name, LLSD const & param);
00256 
00258         bool getParamSet(const std::string& name, LLWaterParamSet& param);
00259 
00261         bool setParamSet(const std::string& name, LLWaterParamSet& param);
00262         
00264         bool setParamSet(const std::string& name, LLSD const & param);  
00265 
00268         bool removeParamSet(const std::string& name, bool delete_from_disk);
00269 
00271         bool setNormalMapID(const LLUUID& img);
00272 
00273         void setDensitySliderValue(F32 val);
00274 
00276         LLUUID getNormalMapID(void);
00277         LLVector2 getWave1Dir(void);
00278         LLVector2 getWave2Dir(void);
00279         F32 getScaleAbove(void);
00280         F32 getScaleBelow(void);
00281         LLVector3 getNormalScale(void);
00282         F32 getFresnelScale(void);
00283         F32 getFresnelOffset(void);
00284         F32 getBlurMultiplier(void);
00285         F32 getFogDensity(void);
00286         LLColor4 getFogColor(void);
00287 
00288         // singleton pattern implementation
00289         static LLWaterParamManager * instance();
00290 
00291 public:
00292 
00293         LLWaterParamSet mCurParams;
00294 
00296         WaterColorControl mFogColor;
00297         WaterExpFloatControl mFogDensity;
00298         WaterFloatControl mUnderWaterFogMod;
00299 
00301         WaterVector3Control mNormalScale;
00302         WaterVector2Control mWave1Dir;
00303         WaterVector2Control mWave2Dir;
00304 
00305         // controls how water is reflected and refracted
00306         WaterFloatControl mFresnelScale;
00307         WaterFloatControl mFresnelOffset;
00308         WaterFloatControl mScaleAbove;
00309         WaterFloatControl mScaleBelow;
00310         WaterFloatControl mBlurMultiplier;
00311         
00312         // list of all the parameters, listed by name
00313         std::map<std::string, LLWaterParamSet> mParamList;
00314 
00315         F32 mDensitySliderValue;
00316 
00317 private:
00318         LLVector4 mWaterPlane;
00319         F32 mWaterFogKS;
00320 
00321         // our parameter manager singleton instance
00322         static LLWaterParamManager * sInstance;
00323 };
00324 
00325 inline void LLWaterParamManager::setDensitySliderValue(F32 val)
00326 {
00327         val /= 10.0f;
00328         val = 1.0f - val;
00329         val *= val * val;
00330 //      val *= val;
00331         mDensitySliderValue = val;
00332 }
00333 
00334 inline LLUUID LLWaterParamManager::getNormalMapID()
00335 {       
00336         return mCurParams.mParamValues["normalMap"].asUUID();
00337 }
00338 
00339 inline bool LLWaterParamManager::setNormalMapID(const LLUUID& id)
00340 {
00341         mCurParams.mParamValues["normalMap"] = id;
00342         return true;
00343 }
00344 
00345 inline LLVector2 LLWaterParamManager::getWave1Dir(void)
00346 {
00347         bool err;
00348         return mCurParams.getVector2("wave1Dir", err);
00349 }
00350 
00351 inline LLVector2 LLWaterParamManager::getWave2Dir(void)
00352 {
00353         bool err;
00354         return mCurParams.getVector2("wave2Dir", err);
00355 }
00356 
00357 inline F32 LLWaterParamManager::getScaleAbove(void)
00358 {
00359         bool err;
00360         return mCurParams.getFloat("scaleAbove", err);
00361 }
00362 
00363 inline F32 LLWaterParamManager::getScaleBelow(void)
00364 {
00365         bool err;
00366         return mCurParams.getFloat("scaleBelow", err);
00367 }
00368 
00369 inline LLVector3 LLWaterParamManager::getNormalScale(void)
00370 {
00371         bool err;
00372         return mCurParams.getVector3("normScale", err);
00373 }
00374 
00375 inline F32 LLWaterParamManager::getFresnelScale(void)
00376 {
00377         bool err;
00378         return mCurParams.getFloat("fresnelScale", err);
00379 }
00380 
00381 inline F32 LLWaterParamManager::getFresnelOffset(void)
00382 {
00383         bool err;
00384         return mCurParams.getFloat("fresnelOffset", err);
00385 }
00386 
00387 inline F32 LLWaterParamManager::getBlurMultiplier(void)
00388 {
00389         bool err;
00390         return mCurParams.getFloat("blurMultiplier", err);
00391 }
00392 
00393 inline LLColor4 LLWaterParamManager::getFogColor(void)
00394 {
00395         bool err;
00396         return LLColor4(mCurParams.getVector4("waterFogColor", err));
00397 }
00398 
00399 #endif

Generated on Fri May 16 08:34:24 2008 for SecondLife by  doxygen 1.5.5