Sync light state, bound shader, and various gl context states similarly to render matrices. Texture handles now refcounted, as multiple viewer textures could ref the same handle (cubemaps do this) Clean up gl extension loading a bit. Not necessary, but only look for ARB variants if not included in current core version. Removed unused extensions. Use core shader api if supported, else use ARB. (FN signatures are identical. Just doing some pointer substitution to ARB if not core.) Attempt at improving VBO update batching. Subdata updates better batched to gether per-frame. There's probably other stuff I forgot that is in this changeset, too. Todo: Fix lightstate assertion when toggling fullscreen with shaders off.
251 lines
6.9 KiB
C++
251 lines
6.9 KiB
C++
/**
|
|
* @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 "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;
|
|
LLUUID mInventoryID;
|
|
|
|
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();
|
|
|
|
|
|
|
|
/// 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) {
|
|
set("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
|