1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
|
/**
* @file llwlparamset.h
* @brief Interface for the LLWaterParamSet class.
*
* $LicenseInfo:firstyear=2005&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2010, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#ifndef LL_WATER_PARAM_SET_H
#define LL_WATER_PARAM_SET_H
#include <string>
#include <map>
#include "v4math.h"
#include "v4color.h"
#include "llviewershadermgr.h"
#include "llstringtable.h"
class LLWaterParamSet;
/// A class representing a set of parameter values for the Water shaders.
class LLWaterParamSet
{
friend class LLWaterParamManager;
public:
std::string mName;
private:
LLSD mParamValues;
std::vector<LLStaticHashedString> mParamHashedNames;
void updateHashedNames();
public:
LLWaterParamSet();
/// Bind this set of parameter values to the uniforms of a particular shader.
void update(LLGLSLShader * shader) const;
/// set the total llsd
void setAll(const LLSD& val);
/// get the total llsd
const LLSD& getAll();
/// Set a float parameter.
/// \param paramName The name of the parameter to set.
/// \param x The float value to set.
void set(const std::string& paramName, float x);
/// Set a float2 parameter.
/// \param paramName The name of the parameter to set.
/// \param x The x component's value to set.
/// \param y The y component's value to set.
void set(const std::string& paramName, float x, float y);
/// Set a float3 parameter.
/// \param paramName The name of the parameter to set.
/// \param x The x component's value to set.
/// \param y The y component's value to set.
/// \param z The z component's value to set.
void set(const std::string& paramName, float x, float y, float z);
/// Set a float4 parameter.
/// \param paramName The name of the parameter to set.
/// \param x The x component's value to set.
/// \param y The y component's value to set.
/// \param z The z component's value to set.
/// \param w The w component's value to set.
void set(const std::string& paramName, float x, float y, float z, float w);
/// Set a float4 parameter.
/// \param paramName The name of the parameter to set.
/// \param val An array of the 4 float values to set the parameter to.
void set(const std::string& paramName, const float * val);
/// Set a float4 parameter.
/// \param paramName The name of the parameter to set.
/// \param val A struct of the 4 float values to set the parameter to.
void set(const std::string& paramName, const LLVector4 & val);
/// Set a float4 parameter.
/// \param paramName The name of the parameter to set.
/// \param val A struct of the 4 float values to set the parameter to.
void set(const std::string& paramName, const LLColor4 & val);
/// Get a float4 parameter.
/// \param paramName The name of the parameter to set.
/// \param error A flag to set if it's not the proper return type
LLVector4 getVector4(const std::string& paramName, bool& error);
/// Get a float3 parameter.
/// \param paramName The name of the parameter to set.
/// \param error A flag to set if it's not the proper return type
LLVector3 getVector3(const std::string& paramName, bool& error);
/// Get a float2 parameter.
/// \param paramName The name of the parameter to set.
/// \param error A flag to set if it's not the proper return type
LLVector2 getVector2(const std::string& paramName, bool& error);
/// Get an integer parameter
/// \param paramName The name of the parameter to set.
/// \param error A flag to set if it's not the proper return type
F32 getFloat(const std::string& paramName, bool& error);
/// interpolate two parameter sets
/// \param src The parameter set to start with
/// \param dest The parameter set to end with
/// \param weight The amount to interpolate
void mix(LLWaterParamSet& src, LLWaterParamSet& dest,
F32 weight);
};
inline void LLWaterParamSet::setAll(const LLSD& val)
{
if(val.isMap()) {
LLSD::map_const_iterator mIt = val.beginMap();
for(; mIt != val.endMap(); mIt++)
{
mParamValues[mIt->first] = mIt->second;
}
}
updateHashedNames();
}
inline void LLWaterParamSet::updateHashedNames()
{
mParamHashedNames.clear();
// Iterate through values
for(LLSD::map_iterator iter = mParamValues.beginMap(); iter != mParamValues.endMap(); ++iter)
{
mParamHashedNames.push_back(LLStaticHashedString(iter->first));
}
}
inline const LLSD& LLWaterParamSet::getAll()
{
return mParamValues;
}
#endif // LL_WaterPARAM_SET_H
|