diff options
Diffstat (limited to 'indra/llmath/v3color.h')
-rw-r--r-- | indra/llmath/v3color.h | 38 |
1 files changed, 35 insertions, 3 deletions
diff --git a/indra/llmath/v3color.h b/indra/llmath/v3color.h index 60353bea6e..d925f56e97 100644 --- a/indra/llmath/v3color.h +++ b/indra/llmath/v3color.h @@ -88,6 +88,16 @@ public: const LLColor3& set(F32 x, F32 y, F32 z); // Sets LLColor3 to (x, y, z) const LLColor3& set(const LLColor3 &vec); // Sets LLColor3 to vec const LLColor3& set(const F32 *vec); // Sets LLColor3 to vec + + // set from a vector of unknown type and size + // may leave some data unmodified + template<typename T> + const LLColor3& set(const std::vector<T>& v); + + // write to a vector of unknown type and size + // maye leave some data unmodified + template<typename T> + void write(std::vector<T>& v) const; F32 magVec() const; // deprecated F32 magVecSquared() const; // deprecated @@ -485,7 +495,7 @@ inline const LLColor3 srgbColor3(const LLColor3 &a) { return srgbColor; } -inline const LLColor3 linearColor3(const F32* v) { +inline const LLColor3 linearColor3p(const F32* v) { LLColor3 linearColor; linearColor.mV[0] = sRGBtoLinear(v[0]); linearColor.mV[1] = sRGBtoLinear(v[1]); @@ -496,12 +506,34 @@ inline const LLColor3 linearColor3(const F32* v) { template<class T> inline const LLColor3 linearColor3(const T& a) { - return linearColor3(a.mV); + return linearColor3p(a.mV); } template<class T> inline const LLVector3 linearColor3v(const T& a) { - return LLVector3(linearColor3(a.mV).mV); + return LLVector3(linearColor3p(a.mV).mV); +} + +template<typename T> +const LLColor3& LLColor3::set(const std::vector<T>& v) +{ + for (S32 i = 0; i < llmin((S32)v.size(), 3); ++i) + { + mV[i] = v[i]; + } + + return *this; +} + +// write to a vector of unknown type and size +// maye leave some data unmodified +template<typename T> +void LLColor3::write(std::vector<T>& v) const +{ + for (int i = 0; i < llmin((S32)v.size(), 3); ++i) + { + v[i] = mV[i]; + } } #endif |