llwaterparamset.cpp
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:6k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /**
  2.  * @file llwaterparamset.cpp
  3.  * @brief Implementation for the LLWaterParamSet class.
  4.  *
  5.  * $LicenseInfo:firstyear=2005&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2005-2010, Linden Research, Inc.
  8.  * 
  9.  * Second Life Viewer Source Code
  10.  * The source code in this file ("Source Code") is provided by Linden Lab
  11.  * to you under the terms of the GNU General Public License, version 2.0
  12.  * ("GPL"), unless you have obtained a separate licensing agreement
  13.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  14.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16.  * 
  17.  * There are special exceptions to the terms and conditions of the GPL as
  18.  * it is applied to this Source Code. View the full text of the exception
  19.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  20.  * online at
  21.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22.  * 
  23.  * By copying, modifying or distributing this software, you acknowledge
  24.  * that you have read and understood your obligations described above,
  25.  * and agree to abide by those obligations.
  26.  * 
  27.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29.  * COMPLETENESS OR PERFORMANCE.
  30.  * $/LicenseInfo$
  31.  */
  32. #include "llviewerprecompiledheaders.h"
  33. #include "llwaterparamset.h"
  34. #include "llsd.h"
  35. #include "llfloaterwater.h"
  36. #include "llwaterparammanager.h"
  37. #include "lluictrlfactory.h"
  38. #include "llsliderctrl.h"
  39. #include "llviewertexturelist.h"
  40. #include "llviewercontrol.h"
  41. #include "lluuid.h"
  42. #include <llgl.h>
  43. #include <sstream>
  44. LLWaterParamSet::LLWaterParamSet(void) :
  45. mName("Unnamed Preset")
  46. {
  47. LLSD vec4;
  48. LLSD vec3;
  49. LLSD real(0.0f);
  50. vec4 = LLSD::emptyArray();
  51. vec4.append(22.f/255.f);
  52. vec4.append(43.f/255.f);
  53. vec4.append(54.f/255.f);
  54. vec4.append(0.f/255.f);
  55. vec3 = LLSD::emptyArray();
  56. vec3.append(2);
  57. vec3.append(2);
  58. vec3.append(2);
  59. LLSD wave1, wave2;
  60. wave1 = LLSD::emptyArray();
  61. wave2 = LLSD::emptyArray();
  62. wave1.append(0.5f);
  63. wave1.append(-.17f);
  64. wave2.append(0.58f);
  65. wave2.append(-.67f);
  66. mParamValues.insert("waterFogColor", vec4);
  67. mParamValues.insert("waterFogDensity", 16.0f);
  68. mParamValues.insert("underWaterFogMod", 0.25f);
  69. mParamValues.insert("normScale", vec3);
  70. mParamValues.insert("fresnelScale", 0.5f);
  71. mParamValues.insert("fresnelOffset", 0.4f);
  72. mParamValues.insert("scaleAbove", 0.025f);
  73. mParamValues.insert("scaleBelow", 0.2f);
  74. mParamValues.insert("blurMultiplier", 0.01f);
  75. mParamValues.insert("wave1Dir", wave1);
  76. mParamValues.insert("wave2Dir", wave2);
  77. mParamValues.insert("normalMap", DEFAULT_WATER_NORMAL);
  78. }
  79. void LLWaterParamSet::set(const std::string& paramName, float x) 
  80. {
  81. // handle case where no array
  82. if(mParamValues[paramName].isReal()) 
  83. {
  84. mParamValues[paramName] = x;
  85. // handle array
  86. else if(mParamValues[paramName].isArray() &&
  87. mParamValues[paramName][0].isReal())
  88. {
  89. mParamValues[paramName][0] = x;
  90. }
  91. }
  92. void LLWaterParamSet::set(const std::string& paramName, float x, float y) {
  93. mParamValues[paramName][0] = x;
  94. mParamValues[paramName][1] = y;
  95. }
  96. void LLWaterParamSet::set(const std::string& paramName, float x, float y, float z)
  97. {
  98. mParamValues[paramName][0] = x;
  99. mParamValues[paramName][1] = y;
  100. mParamValues[paramName][2] = z;
  101. }
  102. void LLWaterParamSet::set(const std::string& paramName, float x, float y, float z, float w) 
  103. {
  104. mParamValues[paramName][0] = x;
  105. mParamValues[paramName][1] = y;
  106. mParamValues[paramName][2] = z;
  107. mParamValues[paramName][3] = w;
  108. }
  109. void LLWaterParamSet::set(const std::string& paramName, const float * val) 
  110. {
  111. mParamValues[paramName][0] = val[0];
  112. mParamValues[paramName][1] = val[1];
  113. mParamValues[paramName][2] = val[2];
  114. mParamValues[paramName][3] = val[3];
  115. }
  116. void LLWaterParamSet::set(const std::string& paramName, const LLVector4 & val) 
  117. {
  118. mParamValues[paramName][0] = val.mV[0];
  119. mParamValues[paramName][1] = val.mV[1];
  120. mParamValues[paramName][2] = val.mV[2];
  121. mParamValues[paramName][3] = val.mV[3];
  122. }
  123. void LLWaterParamSet::set(const std::string& paramName, const LLColor4 & val) 
  124. {
  125. mParamValues[paramName][0] = val.mV[0];
  126. mParamValues[paramName][1] = val.mV[1];
  127. mParamValues[paramName][2] = val.mV[2];
  128. mParamValues[paramName][3] = val.mV[3];
  129. }
  130. LLVector4 LLWaterParamSet::getVector4(const std::string& paramName, bool& error) 
  131. {
  132. // test to see if right type
  133. LLSD cur_val = mParamValues.get(paramName);
  134. if (!cur_val.isArray() || cur_val.size() != 4) 
  135. {
  136. error = true;
  137. return LLVector4(0,0,0,0);
  138. }
  139. LLVector4 val;
  140. val.mV[0] = (F32) cur_val[0].asReal();
  141. val.mV[1] = (F32) cur_val[1].asReal();
  142. val.mV[2] = (F32) cur_val[2].asReal();
  143. val.mV[3] = (F32) cur_val[3].asReal();
  144. error = false;
  145. return val;
  146. }
  147. LLVector3 LLWaterParamSet::getVector3(const std::string& paramName, bool& error) 
  148. {
  149. // test to see if right type
  150. LLSD cur_val = mParamValues.get(paramName);
  151. if (!cur_val.isArray()|| cur_val.size() != 3) 
  152. {
  153. error = true;
  154. return LLVector3(0,0,0);
  155. }
  156. LLVector3 val;
  157. val.mV[0] = (F32) cur_val[0].asReal();
  158. val.mV[1] = (F32) cur_val[1].asReal();
  159. val.mV[2] = (F32) cur_val[2].asReal();
  160. error = false;
  161. return val;
  162. }
  163. LLVector2 LLWaterParamSet::getVector2(const std::string& paramName, bool& error) 
  164. {
  165. // test to see if right type
  166. int ttest;
  167. ttest = mParamValues.size();
  168. LLSD cur_val = mParamValues.get(paramName);
  169. if (!cur_val.isArray() || cur_val.size() != 2) 
  170. {
  171. error = true;
  172. return LLVector2(0,0);
  173. }
  174. LLVector2 val;
  175. val.mV[0] = (F32) cur_val[0].asReal();
  176. val.mV[1] = (F32) cur_val[1].asReal();
  177. error = false;
  178. return val;
  179. }
  180. F32 LLWaterParamSet::getFloat(const std::string& paramName, bool& error) 
  181. {
  182. // test to see if right type
  183. LLSD cur_val = mParamValues.get(paramName);
  184. if (cur_val.isArray() && cur_val.size() != 0)
  185. {
  186. error = false;
  187. return (F32) cur_val[0].asReal();
  188. }
  189. if(cur_val.isReal())
  190. {
  191. error = false;
  192. return (F32) cur_val.asReal();
  193. }
  194. error = true;
  195. return 0;
  196. }