00001
00032 #include "llviewerprecompiledheaders.h"
00033
00034 #include "llwaterparamset.h"
00035 #include "llsd.h"
00036
00037 #include "llfloaterwater.h"
00038 #include "llwaterparammanager.h"
00039 #include "lluictrlfactory.h"
00040 #include "llsliderctrl.h"
00041 #include "llviewerimagelist.h"
00042 #include "llviewercontrol.h"
00043 #include "lluuid.h"
00044
00045 #include <llgl.h>
00046
00047 #include <sstream>
00048
00049 LLWaterParamSet::LLWaterParamSet(void) :
00050 mName("Unnamed Preset")
00051 {
00052 LLSD vec4;
00053 LLSD vec3;
00054 LLSD real(0.0f);
00055
00056 vec4 = LLSD::emptyArray();
00057 vec4.append(22.f/255.f);
00058 vec4.append(43.f/255.f);
00059 vec4.append(54.f/255.f);
00060 vec4.append(0.f/255.f);
00061
00062 vec3 = LLSD::emptyArray();
00063 vec3.append(2);
00064 vec3.append(2);
00065 vec3.append(2);
00066
00067 LLSD wave1, wave2;
00068 wave1 = LLSD::emptyArray();
00069 wave2 = LLSD::emptyArray();
00070 wave1.append(0.5f);
00071 wave1.append(-.17f);
00072 wave2.append(0.58f);
00073 wave2.append(-.67f);
00074
00075 mParamValues.insert("waterFogColor", vec4);
00076 mParamValues.insert("waterFogDensity", 16.0f);
00077 mParamValues.insert("underWaterFogMod", 0.25f);
00078 mParamValues.insert("normScale", vec3);
00079 mParamValues.insert("fresnelScale", 0.5f);
00080 mParamValues.insert("fresnelOffset", 0.4f);
00081 mParamValues.insert("scaleAbove", 0.025f);
00082 mParamValues.insert("scaleBelow", 0.2f);
00083 mParamValues.insert("blurMultiplier", 0.01f);
00084 mParamValues.insert("wave1Dir", wave1);
00085 mParamValues.insert("wave2Dir", wave2);
00086 mParamValues.insert("normalMap", DEFAULT_WATER_NORMAL);
00087
00088 }
00089
00090 void LLWaterParamSet::set(const char * paramName, float x)
00091 {
00092
00093 if(mParamValues[paramName].isReal())
00094 {
00095 mParamValues[paramName] = x;
00096 }
00097
00098
00099 else if(mParamValues[paramName].isArray() &&
00100 mParamValues[paramName][0].isReal())
00101 {
00102 mParamValues[paramName][0] = x;
00103 }
00104 }
00105
00106 void LLWaterParamSet::set(const char * paramName, float x, float y) {
00107 mParamValues[paramName][0] = x;
00108 mParamValues[paramName][1] = y;
00109 }
00110
00111 void LLWaterParamSet::set(const char * paramName, float x, float y, float z)
00112 {
00113 mParamValues[paramName][0] = x;
00114 mParamValues[paramName][1] = y;
00115 mParamValues[paramName][2] = z;
00116 }
00117
00118 void LLWaterParamSet::set(const char * paramName, float x, float y, float z, float w)
00119 {
00120 mParamValues[paramName][0] = x;
00121 mParamValues[paramName][1] = y;
00122 mParamValues[paramName][2] = z;
00123 mParamValues[paramName][3] = w;
00124 }
00125
00126 void LLWaterParamSet::set(const char * paramName, const float * val)
00127 {
00128 mParamValues[paramName][0] = val[0];
00129 mParamValues[paramName][1] = val[1];
00130 mParamValues[paramName][2] = val[2];
00131 mParamValues[paramName][3] = val[3];
00132 }
00133
00134 void LLWaterParamSet::set(const char * paramName, const LLVector4 & val)
00135 {
00136 mParamValues[paramName][0] = val.mV[0];
00137 mParamValues[paramName][1] = val.mV[1];
00138 mParamValues[paramName][2] = val.mV[2];
00139 mParamValues[paramName][3] = val.mV[3];
00140 }
00141
00142 void LLWaterParamSet::set(const char * paramName, const LLColor4 & val)
00143 {
00144 mParamValues[paramName][0] = val.mV[0];
00145 mParamValues[paramName][1] = val.mV[1];
00146 mParamValues[paramName][2] = val.mV[2];
00147 mParamValues[paramName][3] = val.mV[3];
00148 }
00149
00150 LLVector4 LLWaterParamSet::getVector4(const char * paramName, bool& error)
00151 {
00152
00153
00154 LLSD cur_val = mParamValues.get(paramName);
00155 if (!cur_val.isArray() || cur_val.size() != 4)
00156 {
00157 error = true;
00158 return LLVector4(0,0,0,0);
00159 }
00160
00161 LLVector4 val;
00162 val.mV[0] = (F32) cur_val[0].asReal();
00163 val.mV[1] = (F32) cur_val[1].asReal();
00164 val.mV[2] = (F32) cur_val[2].asReal();
00165 val.mV[3] = (F32) cur_val[3].asReal();
00166
00167 error = false;
00168 return val;
00169 }
00170
00171 LLVector3 LLWaterParamSet::getVector3(const char * paramName, bool& error)
00172 {
00173
00174
00175 LLSD cur_val = mParamValues.get(paramName);
00176 if (!cur_val.isArray()|| cur_val.size() != 3)
00177 {
00178 error = true;
00179 return LLVector3(0,0,0);
00180 }
00181
00182 LLVector3 val;
00183 val.mV[0] = (F32) cur_val[0].asReal();
00184 val.mV[1] = (F32) cur_val[1].asReal();
00185 val.mV[2] = (F32) cur_val[2].asReal();
00186
00187 error = false;
00188 return val;
00189 }
00190
00191 LLVector2 LLWaterParamSet::getVector2(const char * paramName, bool& error)
00192 {
00193
00194 int ttest;
00195 ttest = mParamValues.size();
00196 LLSD cur_val = mParamValues.get(paramName);
00197 if (!cur_val.isArray() || cur_val.size() != 2)
00198 {
00199 error = true;
00200 return LLVector2(0,0);
00201 }
00202
00203 LLVector2 val;
00204 val.mV[0] = (F32) cur_val[0].asReal();
00205 val.mV[1] = (F32) cur_val[1].asReal();
00206
00207 error = false;
00208 return val;
00209 }
00210
00211 F32 LLWaterParamSet::getFloat(const char * paramName, bool& error)
00212 {
00213
00214
00215 LLSD cur_val = mParamValues.get(paramName);
00216 if (cur_val.isArray() && cur_val.size() != 0)
00217 {
00218 error = false;
00219 return (F32) cur_val[0].asReal();
00220 }
00221
00222 if(cur_val.isReal())
00223 {
00224 error = false;
00225 return (F32) cur_val.asReal();
00226 }
00227
00228 error = true;
00229 return 0;
00230 }
00231