aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra/newview/llwlparamset.h
blob: 038490d081602eec0f32b491f72550b626d06d06 (plain)
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
/**
 * @file llwlparamset.h
 * @brief Interface for the LLWLParamSet class.
 *
 * $LicenseInfo:firstyear=2005&license=viewergpl$
 * 
 * Copyright (c) 2005-2009, Linden Research, Inc.
 * 
 * Second Life Viewer Source Code
 * The source code in this file ("Source Code") is provided by Linden Lab
 * to you under the terms of the GNU General Public License, version 2.0
 * ("GPL"), unless you have obtained a separate licensing agreement
 * ("Other License"), formally executed by you and Linden Lab.  Terms of
 * the GPL can be found in doc/GPL-license.txt in this distribution, or
 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
 * 
 * There are special exceptions to the terms and conditions of the GPL as
 * it is applied to this Source Code. View the full text of the exception
 * in the file doc/FLOSS-exception.txt in this software distribution, or
 * online at
 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
 * 
 * By copying, modifying or distributing this software, you acknowledge
 * that you have read and understood your obligations described above,
 * and agree to abide by those obligations.
 * 
 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
 * COMPLETENESS OR PERFORMANCE.
 * $/LicenseInfo$
 */

#ifndef LL_WLPARAM_SET_H
#define LL_WLPARAM_SET_H

#include <string>
#include <map>

#include "v4math.h"
#include "v4color.h"
#include "llviewershadermgr.h"

class LLFloaterWindLight;
class LLWLParamSet;

/// A class representing a set of parameter values for the WindLight shaders.
class LLWLParamSet {

	friend class LLWLParamManager;

public:
	std::string mName;
	LLUUID mInventoryID;
	
private:

	LLSD mParamValues;
	
	float mCloudScrollXOffset, mCloudScrollYOffset;

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 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);
	
	
	// 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();	
	
							
	
	/// 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;
	}
}

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 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