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

游戏引擎

开发平台:

C++ Builder

  1. /**
  2.  * @file llwlparammanager.h
  3.  * @brief Implementation for the LLWLParamManager class.
  4.  *
  5.  * $LicenseInfo:firstyear=2007&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2007-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. #ifndef LL_WLPARAMMANAGER_H
  33. #define LL_WLPARAMMANAGER_H
  34. #include <vector>
  35. #include <map>
  36. #include "llwlparamset.h"
  37. #include "llwlanimator.h"
  38. #include "llwldaycycle.h"
  39. #include "llviewercamera.h"
  40. class LLGLSLShader;
  41.  
  42. // color control
  43. struct WLColorControl {
  44. F32 r, g, b, i; /// the values
  45. std::string mName; /// name to use to dereference params
  46. std::string mSliderName; /// name of the slider in menu
  47. bool hasSliderName; /// only set slider name for true color types
  48. bool isSunOrAmbientColor; /// flag for if it's the sun or ambient color controller
  49. bool isBlueHorizonOrDensity; /// flag for if it's the Blue Horizon or Density color controller
  50. inline WLColorControl(F32 red, F32 green, F32 blue, F32 intensity,
  51.   const std::string& n, const std::string& sliderName = LLStringUtil::null)
  52. : r(red), g(green), b(blue), i(intensity), mName(n), mSliderName(sliderName)
  53. {
  54. // if there's a slider name, say we have one
  55. hasSliderName = false;
  56. if (mSliderName != "") {
  57. hasSliderName = true;
  58. }
  59. // if it's the sun controller
  60. isSunOrAmbientColor = false;
  61. if (mSliderName == "WLSunlight" || mSliderName == "WLAmbient") {
  62. isSunOrAmbientColor = true;
  63. }
  64. isBlueHorizonOrDensity = false;
  65. if (mSliderName == "WLBlueHorizon" || mSliderName == "WLBlueDensity") {
  66. isBlueHorizonOrDensity = true;
  67. }
  68. }
  69. inline WLColorControl & operator = (LLVector4 const & val) {
  70. r = val.mV[0];
  71. g = val.mV[1];
  72. b = val.mV[2];
  73. i = val.mV[3];
  74. return *this;
  75. }
  76. inline operator LLVector4 (void) const {
  77. return LLVector4(r, g, b, i);
  78. }
  79. inline operator LLVector3 (void) const {
  80. return LLVector3(r, g, b);
  81. }
  82. inline void update(LLWLParamSet & params) const {
  83. params.set(mName, r, g, b, i);
  84. }
  85. };
  86. // float slider control
  87. struct WLFloatControl {
  88. F32 x;
  89. std::string mName;
  90. F32 mult;
  91. inline WLFloatControl(F32 val, const std::string& n, F32 m=1.0f)
  92. : x(val), mName(n), mult(m)
  93. {
  94. }
  95. inline WLFloatControl & operator = (LLVector4 const & val) {
  96. x = val.mV[0];
  97. return *this;
  98. }
  99. inline operator F32 (void) const {
  100. return x;
  101. }
  102. inline void update(LLWLParamSet & params) const {
  103. params.set(mName, x);
  104. }
  105. };
  106. /// WindLight parameter manager class - what controls all the wind light shaders
  107. class LLWLParamManager
  108. {
  109. public:
  110. LLWLParamManager();
  111. ~LLWLParamManager();
  112. /// load a preset file
  113. void loadPresets(const std::string & fileName);
  114. /// save the preset file
  115. void savePresets(const std::string & fileName);
  116. /// load an individual preset into the sky
  117. void loadPreset(const std::string & name,bool propogate=true);
  118. /// save the parameter presets to file
  119. void savePreset(const std::string & name);
  120. /// Set shader uniforms dirty, so they'll update automatically.
  121. void propagateParameters(void);
  122. /// Update shader uniforms that have changed.
  123. void updateShaderUniforms(LLGLSLShader * shader);
  124. /// setup the animator to run
  125. void resetAnimator(F32 curTime, bool run);
  126. /// update information camera dependent parameters
  127. void update(LLViewerCamera * cam);
  128. // get where the light is pointing
  129. inline LLVector4 getLightDir(void) const;
  130. // get where the light is pointing
  131. inline LLVector4 getClampedLightDir(void) const;
  132. // get where the light is pointing
  133. inline LLVector4 getRotatedLightDir(void) const;
  134. /// get the dome's offset
  135. inline F32 getDomeOffset(void) const;
  136. /// get the radius of the dome
  137. inline F32 getDomeRadius(void) const;
  138. /// Perform global initialization for this class.
  139. static void initClass(void);
  140. // Cleanup of global data that's only inited once per class.
  141. static void cleanupClass();
  142. /// add a param to the list
  143. bool addParamSet(const std::string& name, LLWLParamSet& param);
  144. /// add a param to the list
  145. BOOL addParamSet(const std::string& name, LLSD const & param);
  146. /// get a param from the list
  147. bool getParamSet(const std::string& name, LLWLParamSet& param);
  148. /// set the param in the list with a new param
  149. bool setParamSet(const std::string& name, LLWLParamSet& param);
  150. /// set the param in the list with a new param
  151. bool setParamSet(const std::string& name, LLSD const & param);
  152. /// gets rid of a parameter and any references to it
  153. /// returns true if successful
  154. bool removeParamSet(const std::string& name, bool delete_from_disk);
  155. // singleton pattern implementation
  156. static LLWLParamManager * instance();
  157. public:
  158. // helper variables
  159. LLWLAnimator mAnimator;
  160. /// actual direction of the sun
  161. LLVector4 mLightDir;
  162. /// light norm adjusted so haze works correctly
  163. LLVector4 mRotatedLightDir;
  164. /// clamped light norm for shaders that
  165. /// are adversely affected when the sun goes below the
  166. /// horizon
  167. LLVector4 mClampedLightDir;
  168. // list of params and how they're cycled for days
  169. LLWLDayCycle mDay;
  170. LLWLParamSet mCurParams;
  171. /// Sun Delta Terrain tweak variables.
  172. F32 mSunDeltaYaw;
  173. WLFloatControl mWLGamma;
  174. F32 mSceneLightStrength;
  175. /// Atmospherics
  176. WLColorControl mBlueHorizon;
  177. WLColorControl mHazeDensity;
  178. WLColorControl mBlueDensity;
  179. WLFloatControl mDensityMult;
  180. WLColorControl mHazeHorizon;
  181. WLFloatControl mMaxAlt;
  182. /// Lighting
  183. WLColorControl mLightnorm;
  184. WLColorControl mSunlight;
  185. WLColorControl mAmbient;
  186. WLColorControl mGlow;
  187. /// Clouds
  188. WLColorControl mCloudColor;
  189. WLColorControl mCloudMain;
  190. WLFloatControl mCloudCoverage;
  191. WLColorControl mCloudDetail;
  192. WLFloatControl mDistanceMult;
  193. WLFloatControl mCloudScale;
  194. /// sky dome
  195. F32 mDomeOffset;
  196. F32 mDomeRadius;
  197. // list of all the parameters, listed by name
  198. std::map<std::string, LLWLParamSet> mParamList;
  199. private:
  200. // our parameter manager singleton instance
  201. static LLWLParamManager * sInstance;
  202. };
  203. inline F32 LLWLParamManager::getDomeOffset(void) const
  204. {
  205. return mDomeOffset;
  206. }
  207. inline F32 LLWLParamManager::getDomeRadius(void) const
  208. {
  209. return mDomeRadius;
  210. }
  211. inline LLVector4 LLWLParamManager::getLightDir(void) const
  212. {
  213. return mLightDir;
  214. }
  215. inline LLVector4 LLWLParamManager::getClampedLightDir(void) const
  216. {
  217. return mClampedLightDir;
  218. }
  219. inline LLVector4 LLWLParamManager::getRotatedLightDir(void) const
  220. {
  221. return mRotatedLightDir;
  222. }
  223. #endif