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
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
|
/**
* @file llwlparamset.h
* @brief Interface for the LLWLParamSet 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_WLPARAM_SET_H
#define LL_WLPARAM_SET_H
#include <string>
#include <map>
#include <vector>
#include "v4math.h"
#include "v4color.h"
#include "llstaticstringtable.h"
class LLWLParamSet;
class LLGLSLShader;
/// A class representing a set of parameter values for the WindLight shaders.
class LLWLParamSet {
friend class LLWLParamManager;
public:
std::string mName;
private:
LLSD mParamValues;
std::vector<LLStaticHashedString> mParamHashedNames;
float mCloudScrollXOffset, mCloudScrollYOffset;
void updateHashedNames();
public:
LLWLParamSet();
/// Update this set of shader uniforms from the parameter values.
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 getVector(const std::string& paramName, bool& error);
/// Get a float 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);
// specific getters and setters
/// set the star's brightness
/// \param val brightness value
void setStarBrightness(F32 val);
/// get the star brightness value;
F32 getStarBrightness();
void setSunAngle(F32 val);
F32 getSunAngle();
void setEastAngle(F32 val);
F32 getEastAngle();
void setAmbient(const LLVector4& val);
LLVector4 getAmbient();
/// set the cloud scroll x enable value
/// \param val scroll x value
void setEnableCloudScrollX(bool val);
/// get the scroll x enable value;
bool getEnableCloudScrollX();
/// set the star's brightness
/// \param val scroll y bool value
void setEnableCloudScrollY(bool val);
/// get the scroll enable y value;
bool getEnableCloudScrollY();
/// set the cloud scroll x enable value
/// \param val scroll x value
void setCloudScrollX(F32 val);
/// get the scroll x enable value;
F32 getCloudScrollX();
/// set the star's brightness
/// \param val scroll y bool value
void setCloudScrollY(F32 val);
/// get the scroll enable y value;
F32 getCloudScrollY();
/// 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(LLWLParamSet& src, LLWLParamSet& dest,
F32 weight);
void updateCloudScrolling(void);
};
inline void LLWLParamSet::setAll(const LLSD& val)
{
if(val.isMap()) {
mParamValues = val;
}
updateHashedNames();
}
inline const LLSD& LLWLParamSet::getAll()
{
return mParamValues;
}
inline void LLWLParamSet::setStarBrightness(float val) {
mParamValues["star_brightness"] = val;
}
inline F32 LLWLParamSet::getStarBrightness() {
return (F32) mParamValues["star_brightness"].asReal();
}
inline F32 LLWLParamSet::getSunAngle() {
return (F32) mParamValues["sun_angle"].asReal();
}
inline F32 LLWLParamSet::getEastAngle() {
return (F32) mParamValues["east_angle"].asReal();
}
inline LLVector4 LLWLParamSet::getAmbient() {
bool error;
return mParamValues.has("ambient") ? getVector("ambient", error) : LLVector4(0.5f, 0.75f, 1.0f, 1.19f);
}
inline void LLWLParamSet::setEnableCloudScrollX(bool val) {
mParamValues["enable_cloud_scroll"][0] = val;
}
inline bool LLWLParamSet::getEnableCloudScrollX() {
return mParamValues["enable_cloud_scroll"][0].asBoolean();
}
inline void LLWLParamSet::setEnableCloudScrollY(bool val) {
mParamValues["enable_cloud_scroll"][1] = val;
}
inline bool LLWLParamSet::getEnableCloudScrollY() {
return mParamValues["enable_cloud_scroll"][1].asBoolean();
}
inline void LLWLParamSet::setCloudScrollX(F32 val) {
mParamValues["cloud_scroll_rate"][0] = val;
}
inline F32 LLWLParamSet::getCloudScrollX() {
return (F32) mParamValues["cloud_scroll_rate"][0].asReal();
}
inline void LLWLParamSet::setCloudScrollY(F32 val) {
mParamValues["cloud_scroll_rate"][1] = val;
}
inline F32 LLWLParamSet::getCloudScrollY() {
return (F32) mParamValues["cloud_scroll_rate"][1].asReal();
}
#endif // LL_WLPARAM_SET_H
|