diff options
Diffstat (limited to 'indra')
49 files changed, 1248 insertions, 662 deletions
diff --git a/indra/llcommon/llcommon.cpp b/indra/llcommon/llcommon.cpp index 0069d03de0..268b12b02a 100644 --- a/indra/llcommon/llcommon.cpp +++ b/indra/llcommon/llcommon.cpp @@ -46,7 +46,7 @@ void LLCommon::initClass()  		sAprInitialized = TRUE;  	}  	LLTimer::initClass(); -	LLThreadSafeRefCount::initClass(); +	LLThreadSafeRefCount::initThreadSafeRefCount();  // 	LLWorkerThread::initClass();  // 	LLFrameCallbackManager::initClass();  } @@ -56,7 +56,7 @@ void LLCommon::cleanupClass()  {  // 	LLFrameCallbackManager::cleanupClass();  // 	LLWorkerThread::cleanupClass(); -	LLThreadSafeRefCount::cleanupClass(); +	LLThreadSafeRefCount::cleanupThreadSafeRefCount();  	LLTimer::cleanupClass();  	if (sAprInitialized)  	{ diff --git a/indra/llcommon/llsdserialize.cpp b/indra/llcommon/llsdserialize.cpp index e4ad00da6d..d496230dd8 100644 --- a/indra/llcommon/llsdserialize.cpp +++ b/indra/llcommon/llsdserialize.cpp @@ -324,7 +324,7 @@ S32 LLSDParser::parse(std::istream& istr, LLSD& data, S32 max_bytes)  S32 LLSDParser::parseLines(std::istream& istr, LLSD& data)  {  	mCheckLimits = false; -	mParseLines = false;		// was true, Emergency fix DEV-17785 parsing newline failure +	mParseLines = true;  	return doParse(istr, data);  } diff --git a/indra/llcommon/llsdserialize_xml.cpp b/indra/llcommon/llsdserialize_xml.cpp index 51a2e5ec40..edcc244f58 100644 --- a/indra/llcommon/llsdserialize_xml.cpp +++ b/indra/llcommon/llsdserialize_xml.cpp @@ -461,11 +461,11 @@ S32 LLSDXMLParser::Impl::parseLines(std::istream& input, LLSD& data)  				input.clear();  			} -			// Don't parse the NULL at the end which might be added if \n was absorbed by getline() +			// Re-insert with the \n that was absorbed by getline()  			char * text = (char *) buffer;  			if ( text[num_read - 1] == 0)  			{ -				num_read--; +				text[num_read - 1] = '\n';  			}  		} @@ -808,12 +808,11 @@ void LLSDXMLParser::parsePart(const char *buf, int len)  // virtual  S32 LLSDXMLParser::doParse(std::istream& input, LLSD& data) const  { -// Remove code - emergency fix DEV-17785 parsing newline failure -//	if (mParseLines) -//	{ +	if (mParseLines) +	{  		// Use line-based reading (faster code) -//		return impl.parseLines(input, data); -//	} +		return impl.parseLines(input, data); +	}  	return impl.parse(input, data);  } diff --git a/indra/llcommon/llstat.cpp b/indra/llcommon/llstat.cpp index 21b723de71..80492d2e31 100644 --- a/indra/llcommon/llstat.cpp +++ b/indra/llcommon/llstat.cpp @@ -34,47 +34,9 @@  #include "llframetimer.h"  #include "timing.h" -class LLStatAccum::impl -{ -public: -	static const TimeScale IMPL_NUM_SCALES = (TimeScale)(SCALE_TWO_MINUTE + 1); -	static U64 sScaleTimes[IMPL_NUM_SCALES]; - -	BOOL	mUseFrameTimer; - -	BOOL	mRunning; -	U64		mLastTime; -	 -	struct Bucket -	{ -		F64		accum; -		U64		endTime; - -		BOOL	lastValid; -		F64		lastAccum; -	}; - -	Bucket	mBuckets[IMPL_NUM_SCALES]; - -	BOOL 	mLastSampleValid; -	F64 	mLastSampleValue; - - -	impl(bool useFrameTimer); - -	void reset(U64 when); - -	void sum(F64 value); -	void sum(F64 value, U64 when); - -	F32 meanValue(TimeScale scale) const; - -	U64 getCurrentUsecs() const; -		// Get current microseconds based on timer type -}; -U64 LLStatAccum::impl::sScaleTimes[IMPL_NUM_SCALES] = +U64 LLStatAccum::sScaleTimes[IMPL_NUM_SCALES] =  {  	USEC_PER_SEC / 10,				// 100 millisec  	USEC_PER_SEC * 1,				// seconds @@ -89,14 +51,22 @@ U64 LLStatAccum::impl::sScaleTimes[IMPL_NUM_SCALES] =  }; -LLStatAccum::impl::impl(bool useFrameTimer) + +LLStatAccum::LLStatAccum(bool useFrameTimer) +	: mUseFrameTimer(useFrameTimer), +	  mRunning(FALSE), +	  mLastSampleValue(0.0), +	  mLastSampleValid(FALSE) +{ +} + +LLStatAccum::~LLStatAccum()  { -	mUseFrameTimer = useFrameTimer; -	mRunning = FALSE; -	mLastSampleValid = FALSE;  } -void LLStatAccum::impl::reset(U64 when) + + +void LLStatAccum::reset(U64 when)  {  	mRunning = TRUE;  	mLastTime = when; @@ -109,12 +79,12 @@ void LLStatAccum::impl::reset(U64 when)  	}  } -void LLStatAccum::impl::sum(F64 value) +void LLStatAccum::sum(F64 value)  {  	sum(value, getCurrentUsecs());  } -void LLStatAccum::impl::sum(F64 value, U64 when) +void LLStatAccum::sum(F64 value, U64 when)  {  	if (!mRunning)  	{ @@ -131,6 +101,9 @@ void LLStatAccum::impl::sum(F64 value, U64 when)  		return;  	} +	// how long is this value for +	U64 timeSpan = when - mLastTime; +  	for (int i = 0; i < IMPL_NUM_SCALES; ++i)  	{  		Bucket& bucket = mBuckets[i]; @@ -143,8 +116,6 @@ void LLStatAccum::impl::sum(F64 value, U64 when)  		{  			U64 timeScale = sScaleTimes[i]; -			U64 timeSpan = when - mLastTime; -				// how long is this value for  			U64 timeLeft = when - bucket.endTime;  				// how much time is left after filling this bucket @@ -173,7 +144,7 @@ void LLStatAccum::impl::sum(F64 value, U64 when)  } -F32 LLStatAccum::impl::meanValue(TimeScale scale) const +F32 LLStatAccum::meanValue(TimeScale scale) const  {  	if (!mRunning)  	{ @@ -209,7 +180,7 @@ F32 LLStatAccum::impl::meanValue(TimeScale scale) const  } -U64 LLStatAccum::impl::getCurrentUsecs() const +U64 LLStatAccum::getCurrentUsecs() const  {  	if (mUseFrameTimer)  	{ @@ -222,24 +193,43 @@ U64 LLStatAccum::impl::getCurrentUsecs() const  } +// ------------------------------------------------------------------------ - - -LLStatAccum::LLStatAccum(bool useFrameTimer) -	: m(* new impl(useFrameTimer)) +LLStatRate::LLStatRate(bool use_frame_timer) +	: LLStatAccum(use_frame_timer)  {  } -LLStatAccum::~LLStatAccum() +void LLStatRate::count(U32 value)  { -	delete &m; +	sum((F64)value * sScaleTimes[SCALE_SECOND]);  } -F32 LLStatAccum::meanValue(TimeScale scale) const -{ -	return m.meanValue(scale); -} +void LLStatRate::mark() + {  +	// Effectively the same as count(1), but sets mLastSampleValue +	U64 when = getCurrentUsecs(); + +	if ( mRunning  +		 && (when > mLastTime) ) +	{	// Set mLastSampleValue to the time from the last mark() +		F64 duration = ((F64)(when - mLastTime)) / sScaleTimes[SCALE_SECOND]; +		if ( duration > 0.0 ) +		{ +			mLastSampleValue = 1.0 / duration; +		} +		else +		{ +			mLastSampleValue = 0.0; +		} +	} + +	sum( (F64) sScaleTimes[SCALE_SECOND], when); + } + + +// ------------------------------------------------------------------------  LLStatMeasure::LLStatMeasure(bool use_frame_timer) @@ -249,53 +239,58 @@ LLStatMeasure::LLStatMeasure(bool use_frame_timer)  void LLStatMeasure::sample(F64 value)  { -	U64 when = m.getCurrentUsecs(); +	U64 when = getCurrentUsecs(); -	if (m.mLastSampleValid) +	if (mLastSampleValid)  	{ -		F64 avgValue = (value + m.mLastSampleValue) / 2.0; -		F64 interval = (F64)(when - m.mLastTime); +		F64 avgValue = (value + mLastSampleValue) / 2.0; +		F64 interval = (F64)(when - mLastTime); -		m.sum(avgValue * interval, when); +		sum(avgValue * interval, when);  	}  	else  	{ -		m.reset(when); +		reset(when);  	} -	m.mLastSampleValid = TRUE; -	m.mLastSampleValue = value; -} - - -LLStatRate::LLStatRate(bool use_frame_timer) -	: LLStatAccum(use_frame_timer) -{ +	mLastSampleValid = TRUE; +	mLastSampleValue = value;  } -void LLStatRate::count(U32 value) -{ -	m.sum((F64)value * impl::sScaleTimes[SCALE_SECOND]); -} +// ------------------------------------------------------------------------  LLStatTime::LLStatTime(bool use_frame_timer) -	: LLStatAccum(use_frame_timer) +	: LLStatAccum(use_frame_timer), +	  mFrameNumber(0), +	  mTotalTimeInFrame(0)  { +	mFrameNumber = LLFrameTimer::getFrameCount();  }  void LLStatTime::start()  { -	m.sum(0.0); +	// Reset frame accumluation if the frame number has changed +	U32 frame_number = LLFrameTimer::getFrameCount(); +	if ( frame_number != mFrameNumber) +	{ +		mFrameNumber = frame_number; +		mTotalTimeInFrame = 0; +	} + +	sum(0.0);  }  void LLStatTime::stop()  { -	U64 endTime = m.getCurrentUsecs(); -	m.sum((F64)(endTime - m.mLastTime), endTime); +	U64 end_time = getCurrentUsecs(); +	U64 duration = end_time - mLastTime; +	sum(F64(duration), end_time); +	mTotalTimeInFrame += duration;  } +// ------------------------------------------------------------------------  LLTimer LLStat::sTimer;  LLFrameTimer LLStat::sFrameTimer; diff --git a/indra/llcommon/llstat.h b/indra/llcommon/llstat.h index 5fa46fca75..d4dcb3a961 100644 --- a/indra/llcommon/llstat.h +++ b/indra/llcommon/llstat.h @@ -67,6 +67,9 @@ public:  		NUM_SCALES  	}; +	static const TimeScale IMPL_NUM_SCALES = (TimeScale)(SCALE_TWO_MINUTE + 1); +	static U64 sScaleTimes[IMPL_NUM_SCALES]; +  	F32 meanValue(TimeScale scale) const;  		// see the subclasses for the specific meaning of value @@ -74,9 +77,32 @@ public:  	F32 meanValueOverLastSecond() const	{ return meanValue(SCALE_SECOND); }  	F32 meanValueOverLastMinute() const	{ return meanValue(SCALE_MINUTE); } -protected: -	class impl; -	impl& m; +	void reset(U64 when); + +	void sum(F64 value); +	void sum(F64 value, U64 when); + +	U64 getCurrentUsecs() const; +		// Get current microseconds based on timer type + +	BOOL	mUseFrameTimer; + +	BOOL	mRunning; +	U64		mLastTime; +	 +	struct Bucket +	{ +		F64		accum; +		U64		endTime; + +		BOOL	lastValid; +		F64		lastAccum; +	}; + +	Bucket	mBuckets[IMPL_NUM_SCALES]; + +	BOOL 	mLastSampleValid; +	F64 	mLastSampleValue;  };  class LLStatMeasure : public LLStatAccum @@ -105,7 +131,7 @@ public:  	void count(U32);  		// used to note that n items have occured -	void mark() { count(1); } +	void mark();  		// used for counting the rate thorugh a point in the code  }; @@ -119,6 +145,9 @@ class LLStatTime : public LLStatAccum  public:  	LLStatTime(bool use_frame_timer = false); +	U32		mFrameNumber;		// Current frame number +	U64		mTotalTimeInFrame;	// Total time (microseconds) accumulated during the last frame +  private:  	void start();  	void stop(); diff --git a/indra/llcommon/llstl.h b/indra/llcommon/llstl.h index 99fc83274b..7b7e73470e 100644 --- a/indra/llcommon/llstl.h +++ b/indra/llcommon/llstl.h @@ -79,6 +79,9 @@ struct compare_pointer_contents  // The general form is:  //  //  std::for_each(cont.begin(), cont.end(), DeletePointer()); +//  somemap.clear(); +// +// Don't forget to clear()!  struct DeletePointer  { @@ -95,7 +98,7 @@ struct DeletePointerArray  	}  }; -// DeletePointer is a simple helper for deleting all pointers in a map. +// DeletePairedPointer is a simple helper for deleting all pointers in a map.  // The general form is:  //  //  std::for_each(somemap.begin(), somemap.end(), DeletePairedPointer()); diff --git a/indra/llcommon/llthread.cpp b/indra/llcommon/llthread.cpp index dc0a7a83e4..cc58552099 100644 --- a/indra/llcommon/llthread.cpp +++ b/indra/llcommon/llthread.cpp @@ -359,7 +359,7 @@ void LLCondition::broadcast()  LLMutex* LLThreadSafeRefCount::sMutex = 0;  //static -void LLThreadSafeRefCount::initClass() +void LLThreadSafeRefCount::initThreadSafeRefCount()  {  	if (!sMutex)  	{ @@ -368,7 +368,7 @@ void LLThreadSafeRefCount::initClass()  }  //static -void LLThreadSafeRefCount::cleanupClass() +void LLThreadSafeRefCount::cleanupThreadSafeRefCount()  {  	delete sMutex;  	sMutex = NULL; diff --git a/indra/llcommon/llthread.h b/indra/llcommon/llthread.h index 7864d93395..a6b2c0be7d 100644 --- a/indra/llcommon/llthread.h +++ b/indra/llcommon/llthread.h @@ -191,8 +191,8 @@ void LLThread::unlockData()  class LLThreadSafeRefCount  {  public: -	static void initClass(); // creates sMutex -	static void cleanupClass(); // destroys sMutex +	static void initThreadSafeRefCount(); // creates sMutex +	static void cleanupThreadSafeRefCount(); // destroys sMutex  private:  	static LLMutex* sMutex; diff --git a/indra/llimage/llimage.cpp b/indra/llimage/llimage.cpp index ef1467ce50..4f4473a366 100644 --- a/indra/llimage/llimage.cpp +++ b/indra/llimage/llimage.cpp @@ -43,6 +43,49 @@  #include "llimagejpeg.h"  #include "llimagepng.h"  #include "llimagedxt.h" +#include "llimageworker.h" + +//--------------------------------------------------------------------------- +// LLImage +//--------------------------------------------------------------------------- + +//static +std::string LLImage::sLastErrorMessage; +LLMutex* LLImage::sMutex = NULL; + +//static +void LLImage::initClass(LLWorkerThread* workerthread) +{ +	sMutex = new LLMutex(NULL); +	if (workerthread) +	{ +		LLImageWorker::initImageWorker(workerthread); +	} +	LLImageJ2C::openDSO(); +} + +//static +void LLImage::cleanupClass() +{ +	LLImageJ2C::closeDSO(); +	LLImageWorker::cleanupImageWorker(); +	delete sMutex; +	sMutex = NULL; +} + +//static +const std::string& LLImage::getLastError() +{ +	static const std::string noerr("No Error"); +	return sLastErrorMessage.empty() ? noerr : sLastErrorMessage; +} + +//static +void LLImage::setLastError(const std::string& message) +{ +	LLMutexLock m(sMutex); +	sLastErrorMessage = message; +}  //---------------------------------------------------------------------------  // LLImageBase @@ -95,21 +138,8 @@ void LLImageBase::sanityCheck()  	}  } -std::string LLImageBase::sLastErrorMessage;  BOOL LLImageBase::sSizeOverride = FALSE; -BOOL LLImageBase::setLastError(const std::string& message, const std::string& filename)  -{ -	sLastErrorMessage = message; -	if (!filename.empty()) -	{ -		sLastErrorMessage += " FILE:"; -		sLastErrorMessage += filename; -	} -	llwarns << sLastErrorMessage << llendl; -	return FALSE; -} -  // virtual  void LLImageBase::deleteData()  { @@ -136,8 +166,6 @@ U8* LLImageBase::allocateData(S32 size)  		llerrs << "LLImageBase::allocateData: bad size: " << size << llendl;  	} -	resetLastError(); -  	if (!mData || size != mDataSize)  	{  		deleteData(); // virtual @@ -1269,6 +1297,23 @@ LLImageFormatted::~LLImageFormatted()  //---------------------------------------------------------------------------- +//virtual +void LLImageFormatted::resetLastError() +{ +	LLImage::setLastError(""); +} + +//virtual +void LLImageFormatted::setLastError(const std::string& message, const std::string& filename) +{ +	std::string error = message; +	if (!filename.empty()) +		error += std::string(" FILE: ") + filename; +	LLImage::setLastError(error); +} + +//---------------------------------------------------------------------------- +  // static  LLImageFormatted* LLImageFormatted::createFromType(S8 codec)  { diff --git a/indra/llimage/llimage.h b/indra/llimage/llimage.h index 8db6a6c5bd..fbff9eae64 100644 --- a/indra/llimage/llimage.h +++ b/indra/llimage/llimage.h @@ -59,6 +59,7 @@ const S32 MAX_IMG_PACKET_SIZE = 1000;  class LLImageFormatted;  class LLImageRaw;  class LLColor4U; +class LLWorkerThread;  typedef enum e_image_codec  { @@ -74,6 +75,24 @@ typedef enum e_image_codec  } EImageCodec;  //============================================================================ +// library initialization class + +class LLImage +{ +public: +	static void initClass(LLWorkerThread* workerthread); +	static void cleanupClass(); + +	static const std::string& getLastError(); +	static void setLastError(const std::string& message); +	 +protected: +	static LLMutex* sMutex; +	static std::string sLastErrorMessage; +}; + +//============================================================================ +// Image base class  class LLImageBase : public LLThreadSafeRefCount  { @@ -113,10 +132,6 @@ protected:  	void setDataAndSize(U8 *data, S32 size) { mData = data; mDataSize = size; };  public: -	static const std::string& getLastError() {return sLastErrorMessage;}; -	static void resetLastError() {sLastErrorMessage = "No Error"; }; -	static BOOL setLastError(const std::string& message, const std::string& filename = std::string()); // returns FALSE -  	static void generateMip(const U8 *indata, U8* mipdata, int width, int height, S32 nchannels);  	// Function for calculating the download priority for textures @@ -141,8 +156,6 @@ private:  public:  	S16 mMemType; // debug -	static std::string sLastErrorMessage; -  	static BOOL sSizeOverride;  }; @@ -245,7 +258,6 @@ public:  	LLImageFormatted(S8 codec);  	// LLImageBase -public:  	/*virtual*/ void deleteData();  	/*virtual*/ U8* allocateData(S32 size = -1);  	/*virtual*/ U8* reallocateData(S32 size); @@ -254,7 +266,6 @@ public:  	/*virtual*/ void sanityCheck();  	// New methods -public:  	// subclasses must return a prefered file extension (lowercase without a leading dot)  	virtual std::string getExtension() = 0;  	// calcHeaderSize() returns the maximum size of header; @@ -287,6 +298,10 @@ public:  	void setDiscardLevel(S8 discard_level) { mDiscardLevel = discard_level; }  	S8 getDiscardLevel() const { return mDiscardLevel; } +	// setLastError needs to be deferred for J2C images since it may be called from a DLL +	virtual void resetLastError(); +	virtual void setLastError(const std::string& message, const std::string& filename = std::string()); +	  protected:  	BOOL copyData(U8 *data, S32 size); // calls updateData() @@ -295,7 +310,7 @@ protected:  	S8 mDecoding;  	S8 mDecoded;  	S8 mDiscardLevel; - +	  public:  	static S32 sGlobalFormattedMemory;  }; diff --git a/indra/llimage/llimagej2c.cpp b/indra/llimage/llimagej2c.cpp index 73c5b111c3..3b3d08d3aa 100644 --- a/indra/llimage/llimagej2c.cpp +++ b/indra/llimage/llimagej2c.cpp @@ -219,32 +219,54 @@ LLImageJ2C::~LLImageJ2C()  }  // virtual +void LLImageJ2C::resetLastError() +{ +	mLastError.clear(); +} + +//virtual +void LLImageJ2C::setLastError(const std::string& message, const std::string& filename) +{ +	mLastError = message; +	if (!filename.empty()) +		mLastError += std::string(" FILE: ") + filename; +} + +// virtual  S8  LLImageJ2C::getRawDiscardLevel()  {  	return mRawDiscardLevel;  }  BOOL LLImageJ2C::updateData() -{	 +{ +	BOOL res = TRUE;  	resetLastError();  	// Check to make sure that this instance has been initialized with data  	if (!getData() || (getDataSize() < 16))  	{  		setLastError("LLImageJ2C uninitialized"); -		return FALSE; +		res = FALSE; +	} +	else  +	{ +		res = mImpl->getMetadata(*this);  	} -	if (!mImpl->getMetadata(*this)) +	if (res)  	{ -		return FALSE; +		// SJB: override discard based on mMaxBytes elsewhere +		S32 max_bytes = getDataSize(); // mMaxBytes ? mMaxBytes : getDataSize(); +		S32 discard = calcDiscardLevelBytes(max_bytes); +		setDiscardLevel(discard);  	} -	// SJB: override discard based on mMaxBytes elsewhere -	S32 max_bytes = getDataSize(); // mMaxBytes ? mMaxBytes : getDataSize(); -	S32 discard = calcDiscardLevelBytes(max_bytes); -	setDiscardLevel(discard); -	return TRUE; +	if (!mLastError.empty()) +	{ +		LLImage::setLastError(mLastError); +	} +	return res;  } @@ -258,20 +280,24 @@ BOOL LLImageJ2C::decodeChannels(LLImageRaw *raw_imagep, F32 decode_time, S32 fir  {  	LLMemType mt1((LLMemType::EMemType)mMemType); +	BOOL res = TRUE; +	  	resetLastError();  	// Check to make sure that this instance has been initialized with data  	if (!getData() || (getDataSize() < 16))  	{  		setLastError("LLImageJ2C uninitialized"); -		return FALSE; +		res = FALSE;  	} - -	// Update the raw discard level -	updateRawDiscardLevel(); - -	mDecoding = TRUE; -	BOOL res = mImpl->decodeImpl(*this, *raw_imagep, decode_time, first_channel, max_channel_count); +	else +	{ +		// Update the raw discard level +		updateRawDiscardLevel(); +		mDecoding = TRUE; +		res = mImpl->decodeImpl(*this, *raw_imagep, decode_time, first_channel, max_channel_count); +	} +	  	if (res)  	{  		if (!mDecoding) @@ -283,9 +309,14 @@ BOOL LLImageJ2C::decodeChannels(LLImageRaw *raw_imagep, F32 decode_time, S32 fir  		{  			mDecoding = FALSE;  		} -		return TRUE; // done  	} -	return FALSE; + +	if (!mLastError.empty()) +	{ +		LLImage::setLastError(mLastError); +	} +	 +	return res;  } @@ -298,7 +329,13 @@ BOOL LLImageJ2C::encode(const LLImageRaw *raw_imagep, F32 encode_time)  BOOL LLImageJ2C::encode(const LLImageRaw *raw_imagep, const char* comment_text, F32 encode_time)  {  	LLMemType mt1((LLMemType::EMemType)mMemType); -	return mImpl->encodeImpl(*this, *raw_imagep, comment_text, encode_time, mReversible); +	resetLastError(); +	BOOL res = mImpl->encodeImpl(*this, *raw_imagep, comment_text, encode_time, mReversible); +	if (!mLastError.empty()) +	{ +		LLImage::setLastError(mLastError); +	} +	return res;  }  //static @@ -376,6 +413,8 @@ void LLImageJ2C::setReversible(const BOOL reversible)  BOOL LLImageJ2C::loadAndValidate(const std::string &filename)  { +	BOOL res = TRUE; +	  	resetLastError();  	S32 file_size = 0; @@ -383,27 +422,38 @@ BOOL LLImageJ2C::loadAndValidate(const std::string &filename)  	if (!apr_file)  	{  		setLastError("Unable to open file for reading", filename); -		return FALSE; +		res = FALSE;  	} -	if (file_size == 0) +	else if (file_size == 0)  	{  		setLastError("File is empty",filename);  		apr_file_close(apr_file); -		return FALSE; +		res = FALSE;  	} -	 -	U8 *data = new U8[file_size]; -	apr_size_t bytes_read = file_size; -	apr_status_t s = apr_file_read(apr_file, data, &bytes_read); // modifies bytes_read	 -	if (s != APR_SUCCESS || (S32)bytes_read != file_size) +	else  	{ -		delete[] data; -		setLastError("Unable to read entire file"); -		return FALSE; +		U8 *data = new U8[file_size]; +		apr_size_t bytes_read = file_size; +		apr_status_t s = apr_file_read(apr_file, data, &bytes_read); // modifies bytes_read	 +		apr_file_close(apr_file); +		if (s != APR_SUCCESS || (S32)bytes_read != file_size) +		{ +			delete[] data; +			setLastError("Unable to read entire file"); +			res = FALSE; +		} +		else +		{ +			res = validate(data, file_size); +		}  	} -	apr_file_close(apr_file); -	return validate(data, file_size); +	if (!mLastError.empty()) +	{ +		LLImage::setLastError(mLastError); +	} +	 +	return res;  } @@ -411,21 +461,30 @@ BOOL LLImageJ2C::validate(U8 *data, U32 file_size)  {  	LLMemType mt1((LLMemType::EMemType)mMemType); +	resetLastError(); +	  	setData(data, file_size); +  	BOOL res = updateData(); -	if ( !res ) +	if ( res )  	{ -		return FALSE; +		// Check to make sure that this instance has been initialized with data +		if (!getData() || (0 == getDataSize())) +		{ +			setLastError("LLImageJ2C uninitialized"); +			res = FALSE; +		} +		else +		{ +			res = mImpl->getMetadata(*this); +		}  	} - -	// Check to make sure that this instance has been initialized with data -	if (!getData() || (0 == getDataSize())) +	 +	if (!mLastError.empty())  	{ -		setLastError("LLImageJ2C uninitialized"); -		return FALSE; +		LLImage::setLastError(mLastError);  	} - -	return mImpl->getMetadata(*this); +	return res;  }  void LLImageJ2C::decodeFailed() diff --git a/indra/llimage/llimagej2c.h b/indra/llimage/llimagej2c.h index 03172d344f..4dc39ccc36 100644 --- a/indra/llimage/llimagej2c.h +++ b/indra/llimage/llimagej2c.h @@ -54,6 +54,10 @@ public:  	/*virtual*/ S32 calcDataSize(S32 discard_level = 0);  	/*virtual*/ S32 calcDiscardLevelBytes(S32 bytes);  	/*virtual*/ S8  getRawDiscardLevel(); +	// Override these so that we don't try to set a global variable from a DLL +	/*virtual*/ void resetLastError(); +	/*virtual*/ void setLastError(const std::string& message, const std::string& filename = std::string()); +	  	// Encode with comment text   	BOOL encode(const LLImageRaw *raw_imagep, const char* comment_text, F32 encode_time=0.0); @@ -86,6 +90,7 @@ protected:  	F32 mRate;  	BOOL mReversible;  	LLImageJ2CImpl *mImpl; +	std::string mLastError;  };  // Derive from this class to implement JPEG2000 decoding diff --git a/indra/llimage/llimageworker.cpp b/indra/llimage/llimageworker.cpp index cdec2bfe6c..cbc6ea7911 100644 --- a/indra/llimage/llimageworker.cpp +++ b/indra/llimage/llimageworker.cpp @@ -41,13 +41,13 @@ LLWorkerThread* LLImageWorker::sWorkerThread = NULL;  S32 LLImageWorker::sCount = 0;  //static -void LLImageWorker::initClass(LLWorkerThread* workerthread) +void LLImageWorker::initImageWorker(LLWorkerThread* workerthread)  {  	sWorkerThread = workerthread;  }  //static -void LLImageWorker::cleanupClass() +void LLImageWorker::cleanupImageWorker()  {  } diff --git a/indra/llimage/llimageworker.h b/indra/llimage/llimageworker.h index f9c592fa51..f3304130ea 100644 --- a/indra/llimage/llimageworker.h +++ b/indra/llimage/llimageworker.h @@ -38,8 +38,10 @@  class LLImageWorker : public LLWorkerClass  {  public: -	static void initClass(LLWorkerThread* workerthread); -	static void cleanupClass(); +	static void initImageWorker(LLWorkerThread* workerthread); +	static void cleanupImageWorker(); +	 +public:  	static LLWorkerThread* getWorkerThread() { return sWorkerThread; }  	// LLWorkerThread diff --git a/indra/llmath/v3color.h b/indra/llmath/v3color.h index e2a8274839..05f6186893 100644 --- a/indra/llmath/v3color.h +++ b/indra/llmath/v3color.h @@ -82,13 +82,23 @@ public:  	const LLColor3&	setToBlack();					// Clears LLColor3 to (0, 0, 0)  	const LLColor3&	setToWhite();					// Zero LLColor3 to (0, 0, 0) -	const LLColor3&	setVec(F32 x, F32 y, F32 z);	// Sets LLColor3 to (x, y, z) -	const LLColor3&	setVec(const LLColor3 &vec);	// Sets LLColor3 to vec -	const LLColor3&	setVec(const F32 *vec);			// Sets LLColor3 to vec +	 +	const LLColor3&	setVec(F32 x, F32 y, F32 z);	// deprecated +	const LLColor3&	setVec(const LLColor3 &vec);	// deprecated +	const LLColor3&	setVec(const F32 *vec);			// deprecated + +	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 + +	F32		magVec() const;				// deprecated +	F32		magVecSquared() const;		// deprecated +	F32		normVec();					// deprecated + +	F32		length() const;				// Returns magnitude of LLColor3 +	F32		lengthSquared() const;		// Returns magnitude squared of LLColor3 +	F32		normalize();				// Normalizes and returns the magnitude of LLColor3 -	F32		magVec() const;				// Returns magnitude of LLColor3 -	F32		magVecSquared() const;		// Returns magnitude squared of LLColor3 -	F32		normVec();					// Normalizes and returns the magnitude of LLColor3  	F32		brightness() const;			// Returns brightness of LLColor3  	const LLColor3&	operator=(const LLColor4 &a); @@ -214,6 +224,31 @@ inline const LLColor3&	LLColor3::setToWhite(void)  	return (*this);  } +inline const LLColor3&	LLColor3::set(F32 r, F32 g, F32 b) +{ +	mV[0] = r; +	mV[1] = g; +	mV[2] = b; +	return (*this); +} + +inline const LLColor3&	LLColor3::set(const LLColor3 &vec) +{ +	mV[0] = vec.mV[0]; +	mV[1] = vec.mV[1]; +	mV[2] = vec.mV[2]; +	return (*this); +} + +inline const LLColor3&	LLColor3::set(const F32 *vec) +{ +	mV[0] = vec[0]; +	mV[1] = vec[1]; +	mV[2] = vec[2]; +	return (*this); +} + +// deprecated  inline const LLColor3&	LLColor3::setVec(F32 r, F32 g, F32 b)  {  	mV[0] = r; @@ -222,6 +257,7 @@ inline const LLColor3&	LLColor3::setVec(F32 r, F32 g, F32 b)  	return (*this);  } +// deprecated  inline const LLColor3&	LLColor3::setVec(const LLColor3 &vec)  {  	mV[0] = vec.mV[0]; @@ -230,6 +266,7 @@ inline const LLColor3&	LLColor3::setVec(const LLColor3 &vec)  	return (*this);  } +// deprecated  inline const LLColor3&	LLColor3::setVec(const F32 *vec)  {  	mV[0] = vec[0]; @@ -243,16 +280,44 @@ inline F32		LLColor3::brightness(void) const  	return (mV[0] + mV[1] + mV[2]) / 3.0f;  } +inline F32		LLColor3::length(void) const +{ +	return fsqrtf(mV[0]*mV[0] + mV[1]*mV[1] + mV[2]*mV[2]); +} + +inline F32		LLColor3::lengthSquared(void) const +{ +	return mV[0]*mV[0] + mV[1]*mV[1] + mV[2]*mV[2]; +} + +inline F32		LLColor3::normalize(void) +{ +	F32 mag = fsqrtf(mV[0]*mV[0] + mV[1]*mV[1] + mV[2]*mV[2]); +	F32 oomag; + +	if (mag) +	{ +		oomag = 1.f/mag; +		mV[0] *= oomag; +		mV[1] *= oomag; +		mV[2] *= oomag; +	} +	return (mag); +} + +// deprecated  inline F32		LLColor3::magVec(void) const  {  	return fsqrtf(mV[0]*mV[0] + mV[1]*mV[1] + mV[2]*mV[2]);  } +// deprecated  inline F32		LLColor3::magVecSquared(void) const  {  	return mV[0]*mV[0] + mV[1]*mV[1] + mV[2]*mV[2];  } +// deprecated  inline F32		LLColor3::normVec(void)  {  	F32 mag = fsqrtf(mV[0]*mV[0] + mV[1]*mV[1] + mV[2]*mV[2]); diff --git a/indra/llmath/v4color.cpp b/indra/llmath/v4color.cpp index 8ba329eaf2..c66fe66c92 100644 --- a/indra/llmath/v4color.cpp +++ b/indra/llmath/v4color.cpp @@ -161,6 +161,38 @@ LLColor4::LLColor4(const LLVector4& vector4)  	mV[VW] = vector4.mV[VW];  } +const LLColor4&	LLColor4::set(const LLColor4U& color4u) +{ +	const F32 SCALE = 1.f/255.f; +	mV[VX] = color4u.mV[VX] * SCALE; +	mV[VY] = color4u.mV[VY] * SCALE; +	mV[VZ] = color4u.mV[VZ] * SCALE; +	mV[VW] = color4u.mV[VW] * SCALE; +	return (*this); +} + +const LLColor4&	LLColor4::set(const LLColor3 &vec) +{ +	mV[VX] = vec.mV[VX]; +	mV[VY] = vec.mV[VY]; +	mV[VZ] = vec.mV[VZ]; + +//  no change to alpha! +//	mV[VW] = 1.f;   + +	return (*this); +} + +const LLColor4&	LLColor4::set(const LLColor3 &vec, F32 a) +{ +	mV[VX] = vec.mV[VX]; +	mV[VY] = vec.mV[VY]; +	mV[VZ] = vec.mV[VZ]; +	mV[VW] = a; +	return (*this); +} + +// deprecated -- use set()  const LLColor4&	LLColor4::setVec(const LLColor4U& color4u)  {  	const F32 SCALE = 1.f/255.f; @@ -171,6 +203,7 @@ const LLColor4&	LLColor4::setVec(const LLColor4U& color4u)  	return (*this);  } +// deprecated -- use set()  const LLColor4&	LLColor4::setVec(const LLColor3 &vec)  {  	mV[VX] = vec.mV[VX]; @@ -183,6 +216,7 @@ const LLColor4&	LLColor4::setVec(const LLColor3 &vec)  	return (*this);  } +// deprecated -- use set()  const LLColor4&	LLColor4::setVec(const LLColor3 &vec, F32 a)  {  	mV[VX] = vec.mV[VX]; @@ -338,270 +372,270 @@ BOOL LLColor4::parseColor(const std::string& buf, LLColor4* color)  		{  			v = v * (1.f / 255.f);  		} -		color->setVec( v ); +		color->set( v );  	}  	else // Single value.  Read as a named color.  	{  		// We have a color name  		if ( "red" == color_name )  		{ -			color->setVec(LLColor4::red); +			color->set(LLColor4::red);  		}  		else if ( "red1" == color_name )  		{ -			color->setVec(LLColor4::red1); +			color->set(LLColor4::red1);  		}  		else if ( "red2" == color_name )  		{ -			color->setVec(LLColor4::red2); +			color->set(LLColor4::red2);  		}  		else if ( "red3" == color_name )  		{ -			color->setVec(LLColor4::red3); +			color->set(LLColor4::red3);  		}  		else if ( "red4" == color_name )  		{ -			color->setVec(LLColor4::red4); +			color->set(LLColor4::red4);  		}  		else if ( "red5" == color_name )  		{ -			color->setVec(LLColor4::red5); +			color->set(LLColor4::red5);  		}  		else if( "green" == color_name )  		{ -			color->setVec(LLColor4::green); +			color->set(LLColor4::green);  		}  		else if( "green1" == color_name )  		{ -			color->setVec(LLColor4::green1); +			color->set(LLColor4::green1);  		}  		else if( "green2" == color_name )  		{ -			color->setVec(LLColor4::green2); +			color->set(LLColor4::green2);  		}  		else if( "green3" == color_name )  		{ -			color->setVec(LLColor4::green3); +			color->set(LLColor4::green3);  		}  		else if( "green4" == color_name )  		{ -			color->setVec(LLColor4::green4); +			color->set(LLColor4::green4);  		}  		else if( "green5" == color_name )  		{ -			color->setVec(LLColor4::green5); +			color->set(LLColor4::green5);  		}  		else if( "green6" == color_name )  		{ -			color->setVec(LLColor4::green6); +			color->set(LLColor4::green6);  		}  		else if( "blue" == color_name )  		{ -			color->setVec(LLColor4::blue); +			color->set(LLColor4::blue);  		}  		else if( "blue1" == color_name )  		{ -			color->setVec(LLColor4::blue1); +			color->set(LLColor4::blue1);  		}  		else if( "blue2" == color_name )  		{ -			color->setVec(LLColor4::blue2); +			color->set(LLColor4::blue2);  		}  		else if( "blue3" == color_name )  		{ -			color->setVec(LLColor4::blue3); +			color->set(LLColor4::blue3);  		}  		else if( "blue4" == color_name )  		{ -			color->setVec(LLColor4::blue4); +			color->set(LLColor4::blue4);  		}  		else if( "blue5" == color_name )  		{ -			color->setVec(LLColor4::blue5); +			color->set(LLColor4::blue5);  		}  		else if( "blue6" == color_name )  		{ -			color->setVec(LLColor4::blue6); +			color->set(LLColor4::blue6);  		}  		else if( "black" == color_name )  		{ -			color->setVec(LLColor4::black); +			color->set(LLColor4::black);  		}  		else if( "white" == color_name )  		{ -			color->setVec(LLColor4::white); +			color->set(LLColor4::white);  		}  		else if( "yellow" == color_name )  		{ -			color->setVec(LLColor4::yellow); +			color->set(LLColor4::yellow);  		}  		else if( "yellow1" == color_name )  		{ -			color->setVec(LLColor4::yellow1); +			color->set(LLColor4::yellow1);  		}  		else if( "yellow2" == color_name )  		{ -			color->setVec(LLColor4::yellow2); +			color->set(LLColor4::yellow2);  		}  		else if( "yellow3" == color_name )  		{ -			color->setVec(LLColor4::yellow3); +			color->set(LLColor4::yellow3);  		}  		else if( "yellow4" == color_name )  		{ -			color->setVec(LLColor4::yellow4); +			color->set(LLColor4::yellow4);  		}  		else if( "yellow5" == color_name )  		{ -			color->setVec(LLColor4::yellow5); +			color->set(LLColor4::yellow5);  		}  		else if( "yellow6" == color_name )  		{ -			color->setVec(LLColor4::yellow6); +			color->set(LLColor4::yellow6);  		}  		else if( "magenta" == color_name )  		{ -			color->setVec(LLColor4::magenta); +			color->set(LLColor4::magenta);  		}  		else if( "magenta1" == color_name )  		{ -			color->setVec(LLColor4::magenta1); +			color->set(LLColor4::magenta1);  		}  		else if( "magenta2" == color_name )  		{ -			color->setVec(LLColor4::magenta2); +			color->set(LLColor4::magenta2);  		}  		else if( "magenta3" == color_name )  		{ -			color->setVec(LLColor4::magenta3); +			color->set(LLColor4::magenta3);  		}  		else if( "magenta4" == color_name )  		{ -			color->setVec(LLColor4::magenta4); +			color->set(LLColor4::magenta4);  		}  		else if( "purple" == color_name )  		{ -			color->setVec(LLColor4::purple); +			color->set(LLColor4::purple);  		}  		else if( "purple1" == color_name )  		{ -			color->setVec(LLColor4::purple1); +			color->set(LLColor4::purple1);  		}  		else if( "purple2" == color_name )  		{ -			color->setVec(LLColor4::purple2); +			color->set(LLColor4::purple2);  		}  		else if( "purple3" == color_name )  		{ -			color->setVec(LLColor4::purple3); +			color->set(LLColor4::purple3);  		}  		else if( "purple4" == color_name )  		{ -			color->setVec(LLColor4::purple4); +			color->set(LLColor4::purple4);  		}  		else if( "purple5" == color_name )  		{ -			color->setVec(LLColor4::purple5); +			color->set(LLColor4::purple5);  		}  		else if( "purple6" == color_name )  		{ -			color->setVec(LLColor4::purple6); +			color->set(LLColor4::purple6);  		}  		else if( "pink" == color_name )  		{ -			color->setVec(LLColor4::pink); +			color->set(LLColor4::pink);  		}  		else if( "pink1" == color_name )  		{ -			color->setVec(LLColor4::pink1); +			color->set(LLColor4::pink1);  		}  		else if( "pink2" == color_name )  		{ -			color->setVec(LLColor4::pink2); +			color->set(LLColor4::pink2);  		}  		else if( "cyan" == color_name )  		{ -			color->setVec(LLColor4::cyan); +			color->set(LLColor4::cyan);  		}  		else if( "cyan1" == color_name )  		{ -			color->setVec(LLColor4::cyan1); +			color->set(LLColor4::cyan1);  		}  		else if( "cyan2" == color_name )  		{ -			color->setVec(LLColor4::cyan2); +			color->set(LLColor4::cyan2);  		}  		else if( "cyan3" == color_name )  		{ -			color->setVec(LLColor4::cyan3); +			color->set(LLColor4::cyan3);  		}  		else if( "cyan4" == color_name )  		{ -			color->setVec(LLColor4::cyan4); +			color->set(LLColor4::cyan4);  		}  		else if( "cyan5" == color_name )  		{ -			color->setVec(LLColor4::cyan5); +			color->set(LLColor4::cyan5);  		}  		else if( "cyan6" == color_name )  		{ -			color->setVec(LLColor4::cyan6); +			color->set(LLColor4::cyan6);  		}  		else if( "smoke" == color_name )  		{ -			color->setVec(LLColor4::smoke); +			color->set(LLColor4::smoke);  		}  		else if( "grey" == color_name )  		{ -			color->setVec(LLColor4::grey); +			color->set(LLColor4::grey);  		}  		else if( "grey1" == color_name )  		{ -			color->setVec(LLColor4::grey1); +			color->set(LLColor4::grey1);  		}  		else if( "grey2" == color_name )  		{ -			color->setVec(LLColor4::grey2); +			color->set(LLColor4::grey2);  		}  		else if( "grey3" == color_name )  		{ -			color->setVec(LLColor4::grey3); +			color->set(LLColor4::grey3);  		}  		else if( "grey4" == color_name )  		{ -			color->setVec(LLColor4::grey4); +			color->set(LLColor4::grey4);  		}  		else if( "orange" == color_name )  		{ -			color->setVec(LLColor4::orange); +			color->set(LLColor4::orange);  		}  		else if( "orange1" == color_name )  		{ -			color->setVec(LLColor4::orange1); +			color->set(LLColor4::orange1);  		}  		else if( "orange2" == color_name )  		{ -			color->setVec(LLColor4::orange2); +			color->set(LLColor4::orange2);  		}  		else if( "orange3" == color_name )  		{ -			color->setVec(LLColor4::orange3); +			color->set(LLColor4::orange3);  		}  		else if( "orange4" == color_name )  		{ -			color->setVec(LLColor4::orange4); +			color->set(LLColor4::orange4);  		}  		else if( "orange5" == color_name )  		{ -			color->setVec(LLColor4::orange5); +			color->set(LLColor4::orange5);  		}  		else if( "orange6" == color_name )  		{ -			color->setVec(LLColor4::orange6); +			color->set(LLColor4::orange6);  		}  		else if ( "clear" == color_name )  		{ -			color->setVec(0.f, 0.f, 0.f, 0.f); +			color->set(0.f, 0.f, 0.f, 0.f);  		}  		else  		{ diff --git a/indra/llmath/v4color.h b/indra/llmath/v4color.h index 62c0b663b8..98f04130d6 100644 --- a/indra/llmath/v4color.h +++ b/indra/llmath/v4color.h @@ -84,20 +84,33 @@ class LLColor4  		const LLColor4&	setToBlack();						// zero LLColor4 to (0, 0, 0, 1)  		const LLColor4&	setToWhite();						// zero LLColor4 to (0, 0, 0, 1) -		const LLColor4&	setVec(F32 r, F32 g, F32 b, F32 a);	// Sets LLColor4 to (r, g, b, a) -		const LLColor4&	setVec(F32 r, F32 g, F32 b);	// Sets LLColor4 to (r, g, b) (no change in a) -		const LLColor4&	setVec(const LLColor4 &vec);	// Sets LLColor4 to vec -		const LLColor4&	setVec(const LLColor3 &vec);	// Sets LLColor4 to LLColor3 vec (no change in alpha) -		const LLColor4&	setVec(const LLColor3 &vec, F32 a);	// Sets LLColor4 to LLColor3 vec, with alpha specified -		const LLColor4&	setVec(const F32 *vec);			// Sets LLColor4 to vec -		const LLColor4&	setVec(const LLColor4U& color4u); // Sets LLColor4 to color4u, rescaled. +		const LLColor4&	setVec(F32 r, F32 g, F32 b, F32 a);	// deprecated -- use set() +		const LLColor4&	setVec(F32 r, F32 g, F32 b);		// deprecated -- use set() +		const LLColor4&	setVec(const LLColor4 &vec);		// deprecated -- use set() +		const LLColor4&	setVec(const LLColor3 &vec);		// deprecated -- use set() +		const LLColor4&	setVec(const LLColor3 &vec, F32 a);	// deprecated -- use set() +		const LLColor4&	setVec(const F32 *vec);				// deprecated -- use set() +		const LLColor4&	setVec(const LLColor4U& color4u); 	// deprecated -- use set() + +		const LLColor4&	set(F32 r, F32 g, F32 b, F32 a);	// Sets LLColor4 to (r, g, b, a) +		const LLColor4&	set(F32 r, F32 g, F32 b);	// Sets LLColor4 to (r, g, b) (no change in a) +		const LLColor4&	set(const LLColor4 &vec);	// Sets LLColor4 to vec +		const LLColor4&	set(const LLColor3 &vec);	// Sets LLColor4 to LLColor3 vec (no change in alpha) +		const LLColor4&	set(const LLColor3 &vec, F32 a);	// Sets LLColor4 to LLColor3 vec, with alpha specified +		const LLColor4&	set(const F32 *vec);			// Sets LLColor4 to vec +		const LLColor4&	set(const LLColor4U& color4u); // Sets LLColor4 to color4u, rescaled.  		const LLColor4&    setAlpha(F32 a); -		F32			magVec() const;				// Returns magnitude of LLColor4 -		F32			magVecSquared() const;		// Returns magnitude squared of LLColor4 -		F32			normVec();					// Normalizes and returns the magnitude of LLColor4 +		F32			magVec() const;				// deprecated -- use length() +		F32			magVecSquared() const;		// deprecated -- use lengthSquared() +		F32			normVec();					// deprecated -- use normalize() + +		F32			length() const;				// Returns magnitude of LLColor4 +		F32			lengthSquared() const;		// Returns magnitude squared of LLColor4 +		F32			normalize();				// deprecated -- use normalize() +  		BOOL		isOpaque() { return mV[VALPHA] == 1.f; }  		F32 operator[](int idx) const { return mV[idx]; } @@ -289,6 +302,47 @@ inline const LLColor4&	LLColor4::setToWhite(void)  	return (*this);  } +inline const LLColor4&	LLColor4::set(F32 x, F32 y, F32 z) +{ +	mV[VX] = x; +	mV[VY] = y; +	mV[VZ] = z; + +//  no change to alpha! +//	mV[VW] = 1.f;   + +	return (*this); +} + +inline const LLColor4&	LLColor4::set(F32 x, F32 y, F32 z, F32 a) +{ +	mV[VX] = x; +	mV[VY] = y; +	mV[VZ] = z; +	mV[VW] = a;   +	return (*this); +} + +inline const LLColor4&	LLColor4::set(const LLColor4 &vec) +{ +	mV[VX] = vec.mV[VX]; +	mV[VY] = vec.mV[VY]; +	mV[VZ] = vec.mV[VZ]; +	mV[VW] = vec.mV[VW]; +	return (*this); +} + + +inline const LLColor4&	LLColor4::set(const F32 *vec) +{ +	mV[VX] = vec[VX]; +	mV[VY] = vec[VY]; +	mV[VZ] = vec[VZ]; +	mV[VW] = vec[VW]; +	return (*this); +} + +// deprecated  inline const LLColor4&	LLColor4::setVec(F32 x, F32 y, F32 z)  {  	mV[VX] = x; @@ -301,6 +355,7 @@ inline const LLColor4&	LLColor4::setVec(F32 x, F32 y, F32 z)  	return (*this);  } +// deprecated  inline const LLColor4&	LLColor4::setVec(F32 x, F32 y, F32 z, F32 a)  {  	mV[VX] = x; @@ -310,6 +365,7 @@ inline const LLColor4&	LLColor4::setVec(F32 x, F32 y, F32 z, F32 a)  	return (*this);  } +// deprecated  inline const LLColor4&	LLColor4::setVec(const LLColor4 &vec)  {  	mV[VX] = vec.mV[VX]; @@ -320,6 +376,7 @@ inline const LLColor4&	LLColor4::setVec(const LLColor4 &vec)  } +// deprecated  inline const LLColor4&	LLColor4::setVec(const F32 *vec)  {  	mV[VX] = vec[VX]; @@ -337,16 +394,44 @@ inline const LLColor4&	LLColor4::setAlpha(F32 a)  // LLColor4 Magnitude and Normalization Functions +inline F32		LLColor4::length(void) const +{ +	return fsqrtf(mV[VX]*mV[VX] + mV[VY]*mV[VY] + mV[VZ]*mV[VZ]); +} + +inline F32		LLColor4::lengthSquared(void) const +{ +	return mV[VX]*mV[VX] + mV[VY]*mV[VY] + mV[VZ]*mV[VZ]; +} + +inline F32		LLColor4::normalize(void) +{ +	F32 mag = fsqrtf(mV[VX]*mV[VX] + mV[VY]*mV[VY] + mV[VZ]*mV[VZ]); +	F32 oomag; + +	if (mag) +	{ +		oomag = 1.f/mag; +		mV[VX] *= oomag; +		mV[VY] *= oomag; +		mV[VZ] *= oomag; +	} +	return (mag); +} + +// deprecated  inline F32		LLColor4::magVec(void) const  {  	return fsqrtf(mV[VX]*mV[VX] + mV[VY]*mV[VY] + mV[VZ]*mV[VZ]);  } +// deprecated  inline F32		LLColor4::magVecSquared(void) const  {  	return mV[VX]*mV[VX] + mV[VY]*mV[VY] + mV[VZ]*mV[VZ];  } +// deprecated  inline F32		LLColor4::normVec(void)  {  	F32 mag = fsqrtf(mV[VX]*mV[VX] + mV[VY]*mV[VY] + mV[VZ]*mV[VZ]); @@ -497,13 +582,13 @@ inline const LLColor4& operator%=(LLColor4 &a, F32 k)  inline F32		distVec(const LLColor4 &a, const LLColor4 &b)  {  	LLColor4 vec = a - b; -	return (vec.magVec()); +	return (vec.length());  }  inline F32		distVec_squared(const LLColor4 &a, const LLColor4 &b)  {  	LLColor4 vec = a - b; -	return (vec.magVecSquared()); +	return (vec.lengthSquared());  }  inline LLColor4 lerp(const LLColor4 &a, const LLColor4 &b, F32 u) diff --git a/indra/llmath/v4coloru.cpp b/indra/llmath/v4coloru.cpp index 26f3804209..17a198b392 100644 --- a/indra/llmath/v4coloru.cpp +++ b/indra/llmath/v4coloru.cpp @@ -120,6 +120,6 @@ BOOL LLColor4U::parseColor4U(const std::string& buf, LLColor4U* value)  		}  	} -	value->setVec( U8(v[0]), U8(v[1]), U8(v[2]), U8(v[3]) ); +	value->set( U8(v[0]), U8(v[1]), U8(v[2]), U8(v[3]) );  	return TRUE;  } diff --git a/indra/llmath/v4coloru.h b/indra/llmath/v4coloru.h index 1d3f31e968..aa830e0035 100644 --- a/indra/llmath/v4coloru.h +++ b/indra/llmath/v4coloru.h @@ -97,15 +97,23 @@ public:  	const LLColor4U&	setToBlack();						// zero LLColor4U to (0, 0, 0, 1)  	const LLColor4U&	setToWhite();						// zero LLColor4U to (0, 0, 0, 1) -	const LLColor4U&	setVec(U8 r, U8 g, U8 b, U8 a);	// Sets LLColor4U to (r, g, b, a) -	const LLColor4U&	setVec(U8 r, U8 g, U8 b);	// Sets LLColor4U to (r, g, b) (no change in a) -	const LLColor4U&	setVec(const LLColor4U &vec);	// Sets LLColor4U to vec -	const LLColor4U&	setVec(const U8 *vec);			// Sets LLColor4U to vec +	const LLColor4U&	set(U8 r, U8 g, U8 b, U8 a);// Sets LLColor4U to (r, g, b, a) +	const LLColor4U&	set(U8 r, U8 g, U8 b);		// Sets LLColor4U to (r, g, b) (no change in a) +	const LLColor4U&	set(const LLColor4U &vec);	// Sets LLColor4U to vec +	const LLColor4U&	set(const U8 *vec);			// Sets LLColor4U to vec + +	const LLColor4U&	setVec(U8 r, U8 g, U8 b, U8 a);	// deprecated -- use set() +	const LLColor4U&	setVec(U8 r, U8 g, U8 b);		// deprecated -- use set() +	const LLColor4U&	setVec(const LLColor4U &vec);	// deprecated -- use set() +	const LLColor4U&	setVec(const U8 *vec);			// deprecated -- use set()  	const LLColor4U&    setAlpha(U8 a); -	F32			magVec() const;				// Returns magnitude of LLColor4U -	F32			magVecSquared() const;		// Returns magnitude squared of LLColor4U +	F32			magVec() const;				// deprecated -- use length() +	F32			magVecSquared() const;		// deprecated -- use lengthSquared() + +	F32			length() const;				// Returns magnitude squared of LLColor4U +	F32			lengthSquared() const;		// Returns magnitude squared of LLColor4U  	friend std::ostream&	 operator<<(std::ostream& s, const LLColor4U &a);		// Print a  	friend LLColor4U operator+(const LLColor4U &a, const LLColor4U &b);	// Return vector a + b @@ -199,7 +207,7 @@ inline const LLColor4U&	LLColor4U::setToWhite(void)  	return (*this);  } -inline const LLColor4U&	LLColor4U::setVec(const U8 x, const U8 y, const U8 z) +inline const LLColor4U&	LLColor4U::set(const U8 x, const U8 y, const U8 z)  {  	mV[VX] = x;  	mV[VY] = y; @@ -211,7 +219,7 @@ inline const LLColor4U&	LLColor4U::setVec(const U8 x, const U8 y, const U8 z)  	return (*this);  } -inline const LLColor4U&	LLColor4U::setVec(const U8 r, const U8 g, const U8 b, U8 a) +inline const LLColor4U&	LLColor4U::set(const U8 r, const U8 g, const U8 b, U8 a)  {  	mV[0] = r;  	mV[1] = g; @@ -220,7 +228,7 @@ inline const LLColor4U&	LLColor4U::setVec(const U8 r, const U8 g, const U8 b, U8  	return (*this);  } -inline const LLColor4U&	LLColor4U::setVec(const LLColor4U &vec) +inline const LLColor4U&	LLColor4U::set(const LLColor4U &vec)  {  	mV[VX] = vec.mV[VX];  	mV[VY] = vec.mV[VY]; @@ -229,17 +237,49 @@ inline const LLColor4U&	LLColor4U::setVec(const LLColor4U &vec)  	return (*this);  } -/* -inline const LLColor4U&	LLColor4U::setVec(const LLColor4 &vec) +inline const LLColor4U&	LLColor4U::set(const U8 *vec)  { -	mV[VX] = (U8) (llmin(1.f, vec.mV[VX]) * 255.f); -	mV[VY] = (U8) (llmin(1.f, vec.mV[VY]) * 255.f); -	mV[VZ] = (U8) (llmin(1.f, vec.mV[VZ]) * 255.f); -	mV[VW] = (U8) (llmin(1.f, vec.mV[VW]) * 255.f); +	mV[VX] = vec[VX]; +	mV[VY] = vec[VY]; +	mV[VZ] = vec[VZ]; +	mV[VW] = vec[VW];  	return (*this);  } -*/ +// deprecated +inline const LLColor4U&	LLColor4U::setVec(const U8 x, const U8 y, const U8 z) +{ +	mV[VX] = x; +	mV[VY] = y; +	mV[VZ] = z; + +//  no change to alpha! +//	mV[VW] = 255;   + +	return (*this); +} + +// deprecated +inline const LLColor4U&	LLColor4U::setVec(const U8 r, const U8 g, const U8 b, U8 a) +{ +	mV[0] = r; +	mV[1] = g; +	mV[2] = b; +	mV[3] = a;   +	return (*this); +} + +// deprecated +inline const LLColor4U&	LLColor4U::setVec(const LLColor4U &vec) +{ +	mV[VX] = vec.mV[VX]; +	mV[VY] = vec.mV[VY]; +	mV[VZ] = vec.mV[VZ]; +	mV[VW] = vec.mV[VW]; +	return (*this); +} + +// deprecated  inline const LLColor4U&	LLColor4U::setVec(const U8 *vec)  {  	mV[VX] = vec[VX]; @@ -256,13 +296,24 @@ inline const LLColor4U&	LLColor4U::setAlpha(U8 a)  }  // LLColor4U Magnitude and Normalization Functions -// bookmark +inline F32		LLColor4U::length(void) const +{ +	return fsqrtf( ((F32)mV[VX]) * mV[VX] + ((F32)mV[VY]) * mV[VY] + ((F32)mV[VZ]) * mV[VZ] ); +} + +inline F32		LLColor4U::lengthSquared(void) const +{ +	return ((F32)mV[VX]) * mV[VX] + ((F32)mV[VY]) * mV[VY] + ((F32)mV[VZ]) * mV[VZ]; +} + +// deprecated  inline F32		LLColor4U::magVec(void) const  {  	return fsqrtf( ((F32)mV[VX]) * mV[VX] + ((F32)mV[VY]) * mV[VY] + ((F32)mV[VZ]) * mV[VZ] );  } +// deprecated  inline F32		LLColor4U::magVecSquared(void) const  {  	return ((F32)mV[VX]) * mV[VX] + ((F32)mV[VY]) * mV[VY] + ((F32)mV[VZ]) * mV[VZ]; @@ -407,13 +458,13 @@ inline const LLColor4U& operator%=(LLColor4U &a, U8 k)  inline F32		distVec(const LLColor4U &a, const LLColor4U &b)  {  	LLColor4U vec = a - b; -	return (vec.magVec()); +	return (vec.length());  }  inline F32		distVec_squared(const LLColor4U &a, const LLColor4U &b)  {  	LLColor4U vec = a - b; -	return (vec.magVecSquared()); +	return (vec.lengthSquared());  }  void LLColor4U::setVecScaleClamp(const LLColor4& color) diff --git a/indra/llmessage/llcurl.cpp b/indra/llmessage/llcurl.cpp index c3ffbcc8ed..8c7392090c 100644 --- a/indra/llmessage/llcurl.cpp +++ b/indra/llmessage/llcurl.cpp @@ -265,6 +265,10 @@ LLCurl::Easy* LLCurl::Easy::getEasy()  		delete easy;  		return NULL;  	} +	 +	// set no DMS caching as default for all easy handles. This prevents them adopting a +	// multi handles cache if they are added to one. +	curl_easy_setopt(easy->mCurlEasyHandle, CURLOPT_DNS_CACHE_TIMEOUT, 0);  	++gCurlEasyCount;  	return easy;  } diff --git a/indra/llmessage/llhttpassetstorage.cpp b/indra/llmessage/llhttpassetstorage.cpp index 6332c247a9..bf76c17873 100644 --- a/indra/llmessage/llhttpassetstorage.cpp +++ b/indra/llmessage/llhttpassetstorage.cpp @@ -256,6 +256,10 @@ void LLHTTPAssetRequest::setupCurlHandle()  			// disable use of proxy, which can't handle chunked transfers  	}  	mHTTPHeaders = curl_slist_append(mHTTPHeaders, "Pragma:"); + +	// bug in curl causes DNS to be cached for too long a time, 0 sets it to never cache DNS results internally (to curl) +	curl_easy_setopt(mCurlHandle, CURLOPT_DNS_CACHE_TIMEOUT, 0); +	  	// resist the temptation to explicitly add the Transfer-Encoding: chunked  	// header here - invokes a libCURL bug  	curl_easy_setopt(mCurlHandle, CURLOPT_HTTPHEADER, mHTTPHeaders); diff --git a/indra/llmessage/llnamevalue.cpp b/indra/llmessage/llnamevalue.cpp index 13dca3e51f..5875587186 100644 --- a/indra/llmessage/llnamevalue.cpp +++ b/indra/llmessage/llnamevalue.cpp @@ -896,7 +896,7 @@ void LLNameValue::setVec3(const LLVector3 &a)  } -std::string LLNameValue::printNameValue() +std::string LLNameValue::printNameValue() const  {  	std::string buffer;  	buffer = llformat("%s %s %s %s ", mName, mStringType, mStringClass, mStringSendto); @@ -905,7 +905,7 @@ std::string LLNameValue::printNameValue()  	return buffer;  } -std::string LLNameValue::printData() +std::string LLNameValue::printData() const  {  	std::string buffer;  	switch(mType) diff --git a/indra/llmessage/llnamevalue.h b/indra/llmessage/llnamevalue.h index f50ed08207..f492015b4a 100644 --- a/indra/llmessage/llnamevalue.h +++ b/indra/llmessage/llnamevalue.h @@ -148,8 +148,8 @@ public:  	BOOL			sendToViewer() const;  	void			callCallback(); -	std::string		printNameValue(); -	std::string		printData(); +	std::string		printNameValue() const; +	std::string		printData() const;  	ENameValueType		getTypeEnum() const		{ return mType; }  	ENameValueClass		getClassEnum() const	{ return mClass; } diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp index bacfe67ad8..a41b2af2b4 100644 --- a/indra/llui/lllineeditor.cpp +++ b/indra/llui/lllineeditor.cpp @@ -2282,7 +2282,7 @@ LLView* LLLineEditor::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory  }  //static -void LLLineEditor::cleanupClass() +void LLLineEditor::cleanupLineEditor()  {  	sImage = NULL;  } diff --git a/indra/llui/lllineeditor.h b/indra/llui/lllineeditor.h index c2dbedd3f5..98242a493d 100644 --- a/indra/llui/lllineeditor.h +++ b/indra/llui/lllineeditor.h @@ -82,7 +82,7 @@ public:  	virtual LLXMLNodePtr getXML(bool save_children = true) const;  	void setColorParameters(LLXMLNodePtr node);  	static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); -	static void cleanupClass(); +	static void cleanupLineEditor();  	// mousehandler overrides  	/*virtual*/ BOOL	handleMouseDown(S32 x, S32 y, MASK mask); diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp index 2b6895aa09..f34c48b729 100644 --- a/indra/llui/llui.cpp +++ b/indra/llui/llui.cpp @@ -1575,7 +1575,7 @@ void LLUI::initClass(LLControlGroup* config,  void LLUI::cleanupClass()  {  	sImageProvider->cleanUp(); -	LLLineEditor::cleanupClass(); +	LLLineEditor::cleanupLineEditor();  } diff --git a/indra/lscript/lscript_byteconvert.h b/indra/lscript/lscript_byteconvert.h index b5e09602c7..9344a1e90a 100644 --- a/indra/lscript/lscript_byteconvert.h +++ b/indra/lscript/lscript_byteconvert.h @@ -250,7 +250,7 @@ inline void bytestream2vector(LLVector3 &vector, const U8 *stream, S32 &offset)  	}  } -inline void vector2bytestream(U8 *stream, S32 &offset, LLVector3 &vector) +inline void vector2bytestream(U8 *stream, S32 &offset, const LLVector3 &vector)  {  	S32 value = *(S32 *)&vector.mV[VZ];  	integer2bytestream(stream, offset, value); @@ -292,7 +292,7 @@ inline void bytestream2quaternion(LLQuaternion &quat, const U8 *stream, S32 &off  	}  } -inline void quaternion2bytestream(U8 *stream, S32 &offset, LLQuaternion &quat) +inline void quaternion2bytestream(U8 *stream, S32 &offset, const LLQuaternion &quat)  {  	S32 value = *(S32 *)&quat.mQ[VS];  	integer2bytestream(stream, offset, value); @@ -528,7 +528,7 @@ inline void lscript_push(U8 *stream, F32 value)  	}  } -inline void lscript_push(U8 *stream, LLVector3 &value) +inline void lscript_push(U8 *stream, const LLVector3 &value)  {  	S32 sp = get_register(stream, LREG_SP);  	sp -= LSCRIPTDataSize[LST_VECTOR]; @@ -539,7 +539,7 @@ inline void lscript_push(U8 *stream, LLVector3 &value)  	}  } -inline void lscript_push(U8 *stream, LLQuaternion &value) +inline void lscript_push(U8 *stream, const LLQuaternion &value)  {  	S32 sp = get_register(stream, LREG_SP);  	sp -= LSCRIPTDataSize[LST_QUATERNION]; @@ -679,13 +679,13 @@ inline void lscript_local_store(U8 *stream, S32 address, F32 value)  		float2bytestream(stream, address, value);  } -inline void lscript_local_store(U8 *stream, S32 address, LLVector3 value) +inline void lscript_local_store(U8 *stream, S32 address, const LLVector3 value)  {  	if (lscript_check_local(stream, address, LSCRIPTDataSize[LST_VECTOR]))  		vector2bytestream(stream, address, value);  } -inline void lscript_local_store(U8 *stream, S32 address, LLQuaternion value) +inline void lscript_local_store(U8 *stream, S32 address, const LLQuaternion value)  {  	if (lscript_check_local(stream, address, LSCRIPTDataSize[LST_QUATERNION]))  		quaternion2bytestream(stream, address, value); @@ -703,13 +703,13 @@ inline void lscript_global_store(U8 *stream, S32 address, F32 value)  		float2bytestream(stream, address, value);  } -inline void lscript_global_store(U8 *stream, S32 address, LLVector3 value) +inline void lscript_global_store(U8 *stream, S32 address, const LLVector3 value)  {  	if (lscript_check_global(stream, address, LSCRIPTDataSize[LST_VECTOR]))  		vector2bytestream(stream, address, value);  } -inline void lscript_global_store(U8 *stream, S32 address, LLQuaternion value) +inline void lscript_global_store(U8 *stream, S32 address, const LLQuaternion value)  {  	if (lscript_check_global(stream, address, LSCRIPTDataSize[LST_QUATERNION]))  		quaternion2bytestream(stream, address, value); @@ -1125,7 +1125,7 @@ inline void safe_instruction_bytestream2vector(LLVector3 &value, U8 *stream, S32  	}  } -inline void safe_instruction_vector2bytestream(U8 *stream, S32 &offset, LLVector3 &value) +inline void safe_instruction_vector2bytestream(U8 *stream, S32 &offset, const LLVector3 &value)  {  	if (safe_instruction_check_address(stream, offset, LSCRIPTDataSize[LST_VECTOR]))  	{ @@ -1141,7 +1141,7 @@ inline void safe_instruction_bytestream2quaternion(LLQuaternion &value, U8 *stre  	}  } -inline void safe_instruction_quaternion2bytestream(U8 *stream, S32 &offset, LLQuaternion &value) +inline void safe_instruction_quaternion2bytestream(U8 *stream, S32 &offset, const LLQuaternion &value)  {  	if (safe_instruction_check_address(stream, offset, LSCRIPTDataSize[LST_QUATERNION]))  	{ diff --git a/indra/lscript/lscript_byteformat.h b/indra/lscript/lscript_byteformat.h index 474e8a67a6..09033615d4 100644 --- a/indra/lscript/lscript_byteformat.h +++ b/indra/lscript/lscript_byteformat.h @@ -470,6 +470,7 @@ const U8 LSCRIPTTypeHi4Bits[LST_EOF] =  	LST_VECTOR << 4,  	LST_QUATERNION << 4,  	LST_LIST << 4, +	LST_UNDEFINED << 4,  };  const char * const LSCRIPTTypeNames[LST_EOF] = 	/*Flawfinder: ignore*/ diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 1e8f37e75f..826538d8e2 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -198,6 +198,7 @@ set(viewer_SOURCE_FILES      llglsandbox.cpp      llgroupmgr.cpp      llgroupnotify.cpp +    llhomelocationresponder.cpp      llhoverview.cpp      llhudeffectbeam.cpp      llhudeffect.cpp @@ -590,6 +591,7 @@ set(viewer_HEADER_FILES      llgivemoney.h      llgroupmgr.h      llgroupnotify.h +    llhomelocationresponder.h      llhoverview.h      llhudeffect.h      llhudeffectbeam.h diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index cb32dfb904..19a0676374 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -80,6 +80,7 @@  #include "llfloatertools.h"  #include "llfloaterworldmap.h"  #include "llgroupmgr.h" +#include "llhomelocationresponder.h"  #include "llhudeffectlookat.h"  #include "llhudmanager.h"  #include "llinventorymodel.h" @@ -90,6 +91,7 @@  #include "llmoveview.h"  #include "llnotify.h"  #include "llquantize.h" +#include "llsdutil.h"  #include "llselectmgr.h"  #include "llsky.h"  #include "llrendersphere.h" @@ -445,7 +447,7 @@ void LLAgent::init()  	mCameraFocusOffsetTarget = LLVector4(gSavedSettings.getVector3("CameraOffsetBuild"));  	mCameraOffsetDefault = gSavedSettings.getVector3("CameraOffsetDefault");  //	mCameraOffsetNorm = mCameraOffsetDefault; -//	mCameraOffsetNorm.normVec(); +//	mCameraOffsetNorm.normalize();  	mCameraCollidePlane.clearVec();  	mCurrentCameraDistance = mCameraOffsetDefault.magVec();  	mTargetCameraDistance = mCurrentCameraDistance; @@ -522,7 +524,7 @@ void LLAgent::resetView(BOOL reset_camera)  			// leaving mouse-steer mode  			LLVector3 agent_at_axis = getAtAxis();  			agent_at_axis -= projected_vec(agent_at_axis, getReferenceUpVector()); -			agent_at_axis.normVec(); +			agent_at_axis.normalize();  			gAgent.resetAxes(lerp(getAtAxis(), agent_at_axis, LLCriticalDamp::getInterpolant(0.3f)));  		} @@ -1033,7 +1035,7 @@ void LLAgent::slamLookAt(const LLVector3 &look_at)  {  	LLVector3 look_at_norm = look_at;  	look_at_norm.mV[VZ] = 0.f; -	look_at_norm.normVec(); +	look_at_norm.normalize();  	resetAxes(look_at_norm);  } @@ -1305,7 +1307,7 @@ LLVector3 LLAgent::calcFocusOffset(LLViewerObject *object, S32 x, S32 y)  	LLVector3 obj_dir_abs = obj_pos - LLViewerCamera::getInstance()->getOrigin();  	obj_dir_abs.rotVec(inv_obj_rot); -	obj_dir_abs.normVec(); +	obj_dir_abs.normalize();  	obj_dir_abs.abs();  	LLVector3 object_extents = object->getScale(); @@ -1330,7 +1332,7 @@ LLVector3 LLAgent::calcFocusOffset(LLViewerObject *object, S32 x, S32 y)  	{  		normal.setVec(obj_matrix.getUpRow4());  	} -	normal.normVec(); +	normal.normalize();  	LLVector3d focus_pt_global;  	// RN: should we check return value for valid pick? @@ -1534,7 +1536,7 @@ BOOL LLAgent::calcCameraMinDistance(F32 &obj_min_distance)  	camera_offset_target_abs_norm.abs();  	// make sure offset is non-zero  	camera_offset_target_abs_norm.clamp(0.001f, F32_MAX); -	camera_offset_target_abs_norm.normVec(); +	camera_offset_target_abs_norm.normalize();  	// find camera position relative to normalized object extents  	LLVector3 camera_offset_target_scaled = camera_offset_target_abs_norm; @@ -1580,7 +1582,7 @@ BOOL LLAgent::calcCameraMinDistance(F32 &obj_min_distance)  	LLVector3 object_split_axis;  	LLVector3 target_offset_scaled = target_offset_origin;  	target_offset_scaled.abs(); -	target_offset_scaled.normVec(); +	target_offset_scaled.normalize();  	target_offset_scaled.mV[VX] /= object_extents.mV[VX];  	target_offset_scaled.mV[VY] /= object_extents.mV[VY];  	target_offset_scaled.mV[VZ] /= object_extents.mV[VZ]; @@ -1703,7 +1705,7 @@ void LLAgent::setCameraZoomFraction(F32 fraction)  	else if (cameraCustomizeAvatar())  	{  		LLVector3d camera_offset_dir = mCameraFocusOffsetTarget; -		camera_offset_dir.normVec(); +		camera_offset_dir.normalize();  		mCameraFocusOffsetTarget = camera_offset_dir * rescale(fraction, 0.f, 1.f, APPEARANCE_MAX_ZOOM, APPEARANCE_MIN_ZOOM);  	}  	else @@ -1730,7 +1732,7 @@ void LLAgent::setCameraZoomFraction(F32 fraction)  		}  		LLVector3d camera_offset_dir = mCameraFocusOffsetTarget; -		camera_offset_dir.normVec(); +		camera_offset_dir.normalize();  		mCameraFocusOffsetTarget = camera_offset_dir * rescale(fraction, 0.f, 1.f, max_zoom, min_zoom);  	}  	startCameraAnimation(); @@ -1777,7 +1779,7 @@ void LLAgent::cameraOrbitOver(const F32 angle)  	else  	{  		LLVector3 camera_offset_unit(mCameraFocusOffsetTarget); -		camera_offset_unit.normVec(); +		camera_offset_unit.normalize();  		F32 angle_from_up = acos( camera_offset_unit * getReferenceUpVector() ); @@ -1812,7 +1814,7 @@ void LLAgent::cameraZoomIn(const F32 fraction)  	LLVector3d	camera_offset(mCameraFocusOffsetTarget);  	LLVector3d	camera_offset_unit(mCameraFocusOffsetTarget);  	F32 min_zoom = LAND_MIN_ZOOM; -	F32 current_distance = (F32)camera_offset_unit.normVec(); +	F32 current_distance = (F32)camera_offset_unit.normalize();  	F32 new_distance = current_distance * fraction;  	// Don't move through focus point @@ -1881,7 +1883,7 @@ void LLAgent::cameraOrbitIn(const F32 meters)  	{  		LLVector3d	camera_offset(mCameraFocusOffsetTarget);  		LLVector3d	camera_offset_unit(mCameraFocusOffsetTarget); -		F32 current_distance = (F32)camera_offset_unit.normVec(); +		F32 current_distance = (F32)camera_offset_unit.normalize();  		F32 new_distance = current_distance - meters;  		F32 min_zoom = LAND_MIN_ZOOM; @@ -2246,7 +2248,7 @@ void LLAgent::startAutoPilotGlobal(const LLVector3d &target_global, const std::s  		mAutoPilotUseRotation = TRUE;  		mAutoPilotTargetFacing = LLVector3::x_axis * *target_rotation;  		mAutoPilotTargetFacing.mV[VZ] = 0.f; -		mAutoPilotTargetFacing.normVec(); +		mAutoPilotTargetFacing.normalize();  	}  	else  	{ @@ -2369,8 +2371,8 @@ void LLAgent::autoPilot(F32 *delta_yaw)  		at.mV[VZ] = 0.f;  		direction.mV[VZ] = 0.f; -		at.normVec(); -		F32 xy_distance = direction.normVec(); +		at.normalize(); +		F32 xy_distance = direction.normalize();  		F32 yaw = 0.f;  		if (mAutoPilotTargetDist > mAutoPilotStopDistance) @@ -3529,7 +3531,7 @@ void LLAgent::setupSitCamera()  		// slam agent coordinate frame to proper parent local version  		LLVector3 at_axis = mFrameAgent.getAtAxis();  		at_axis.mV[VZ] = 0.f; -		at_axis.normVec(); +		at_axis.normalize();  		resetAxes(at_axis * ~parent_rot);  	}  } @@ -3665,7 +3667,7 @@ LLVector3d LLAgent::calcCameraPositionTargetGlobal(BOOL *hit_limit)  				// slam agent coordinate frame to proper parent local version  				LLVector3 at_axis = mFrameAgent.getAtAxis() * parent_rot;  				at_axis.mV[VZ] = 0.f; -				at_axis.normVec(); +				at_axis.normalize();  				resetAxes(at_axis * ~parent_rot);  				local_camera_offset = local_camera_offset * mFrameAgent.getQuaternion() * parent_rot; @@ -3686,7 +3688,7 @@ LLVector3d LLAgent::calcCameraPositionTargetGlobal(BOOL *hit_limit)  					offset_dot_norm = 0.001f;  				} -				camera_distance = local_camera_offset.normVec(); +				camera_distance = local_camera_offset.normalize();  				F32 pos_dot_norm = getPosAgentFromGlobal(frame_center_global + head_offset) * plane_normal; @@ -3710,7 +3712,7 @@ LLVector3d LLAgent::calcCameraPositionTargetGlobal(BOOL *hit_limit)  			}  			else  			{ -				camera_distance = local_camera_offset.normVec(); +				camera_distance = local_camera_offset.normalize();  			}  			mTargetCameraDistance = llmax(camera_distance, MIN_CAMERA_DISTANCE); @@ -3745,7 +3747,7 @@ LLVector3d LLAgent::calcCameraPositionTargetGlobal(BOOL *hit_limit)  				{  					LLVector3 frame_at_axis = mFrameAgent.getAtAxis();  					frame_at_axis -= projected_vec(frame_at_axis, getReferenceUpVector()); -					frame_at_axis.normVec(); +					frame_at_axis.normalize();  					//transition smoothly in air mode, to avoid camera pop  					F32 u = (time_in_air - GROUND_TO_AIR_CAMERA_TRANSITION_START_TIME) / GROUND_TO_AIR_CAMERA_TRANSITION_TIME; @@ -3932,7 +3934,7 @@ void LLAgent::resetCamera()  	// Remove any pitch from the avatar  	LLVector3 at = mFrameAgent.getAtAxis();  	at.mV[VZ] = 0.f; -	at.normVec(); +	at.normalize();  	gAgent.resetAxes(at);  	// have to explicitly clear field of view zoom now  	mCameraFOVZoomFactor = 0.f; @@ -4147,14 +4149,14 @@ void LLAgent::changeCameraToThirdPerson(BOOL animate)  		LLQuaternion obj_rot = ((LLViewerObject*)mAvatarObject->getParent())->getRenderRotation();  		at_axis = LLViewerCamera::getInstance()->getAtAxis();  		at_axis.mV[VZ] = 0.f; -		at_axis.normVec(); +		at_axis.normalize();  		resetAxes(at_axis * ~obj_rot);  	}  	else  	{  		at_axis = mFrameAgent.getAtAxis();  		at_axis.mV[VZ] = 0.f; -		at_axis.normVec(); +		at_axis.normalize();  		resetAxes(at_axis);  	} @@ -4201,7 +4203,7 @@ void LLAgent::changeCameraToCustomizeAvatar(BOOL avatar_animate, BOOL camera_ani  	// Remove any pitch from the avatar  	//LLVector3 at = mFrameAgent.getAtAxis();  	//at.mV[VZ] = 0.f; -	//at.normVec(); +	//at.normalize();  	//gAgent.resetAxes(at);  	if( mCameraMode != CAMERA_MODE_CUSTOMIZE_AVATAR ) @@ -4228,7 +4230,7 @@ void LLAgent::changeCameraToCustomizeAvatar(BOOL avatar_animate, BOOL camera_ani  				// Remove any pitch from the avatar  			LLVector3 at = mFrameAgent.getAtAxis();  			at.mV[VZ] = 0.f; -			at.normVec(); +			at.normalize();  			gAgent.resetAxes(at);  			sendAnimationRequest(ANIM_AGENT_CUSTOMIZE, ANIM_REQUEST_START); @@ -4508,14 +4510,14 @@ void LLAgent::setFocusOnAvatar(BOOL focus_on_avatar, BOOL animate)  				LLQuaternion obj_rot = ((LLViewerObject*)mAvatarObject->getParent())->getRenderRotation();  				at_axis = LLViewerCamera::getInstance()->getAtAxis();  				at_axis.mV[VZ] = 0.f; -				at_axis.normVec(); +				at_axis.normalize();  				resetAxes(at_axis * ~obj_rot);  			}  			else  			{  				at_axis = LLViewerCamera::getInstance()->getAtAxis();  				at_axis.mV[VZ] = 0.f; -				at_axis.normVec(); +				at_axis.normalize();  				resetAxes(at_axis);  			}  		} @@ -4578,7 +4580,7 @@ void LLAgent::lookAtLastChat()  			{  				delta_pos = chatter->getPositionAgent() - getPositionAgent();  			} -			delta_pos.normVec(); +			delta_pos.normalize();  			setControlFlags(AGENT_CONTROL_STOP); @@ -4586,9 +4588,9 @@ void LLAgent::lookAtLastChat()  			LLVector3 new_camera_pos = mAvatarObject->mHeadp->getWorldPosition();  			LLVector3 left = delta_pos % LLVector3::z_axis; -			left.normVec(); +			left.normalize();  			LLVector3 up = left % delta_pos; -			up.normVec(); +			up.normalize();  			new_camera_pos -= delta_pos * 0.4f;  			new_camera_pos += left * 0.3f;  			new_camera_pos += up * 0.2f; @@ -4607,7 +4609,7 @@ void LLAgent::lookAtLastChat()  		else  		{  			delta_pos = chatter->getRenderPosition() - getPositionAgent(); -			delta_pos.normVec(); +			delta_pos.normalize();  			setControlFlags(AGENT_CONTROL_STOP); @@ -4615,9 +4617,9 @@ void LLAgent::lookAtLastChat()  			LLVector3 new_camera_pos = mAvatarObject->mHeadp->getWorldPosition();  			LLVector3 left = delta_pos % LLVector3::z_axis; -			left.normVec(); +			left.normalize();  			LLVector3 up = left % delta_pos; -			up.normVec(); +			up.normalize();  			new_camera_pos -= delta_pos * 0.4f;  			new_camera_pos += left * 0.3f;  			new_camera_pos += up * 0.2f; @@ -4631,68 +4633,107 @@ void LLAgent::lookAtLastChat()  const F32 SIT_POINT_EXTENTS = 0.2f; -// Grabs current position -void LLAgent::setStartPosition(U32 location_id) -{ -	LLViewerObject		*object; - -	if ( !(gAgentID == LLUUID::null) ) -	{ -		// we've got an ID for an agent viewerobject -		object = gObjectList.findObject(gAgentID); -		if (object) -		{ -			// we've got the viewer object -			// Sometimes the agent can be velocity interpolated off of -			// this simulator.  Clamp it to the region the agent is -			// in, a little bit in on each side. -			const F32 INSET = 0.5f;	//meters -			const F32 REGION_WIDTH = LLWorld::getInstance()->getRegionWidthInMeters(); - -			LLVector3 agent_pos = getPositionAgent(); - -			if (mAvatarObject) -			{ -				// the z height is at the agent's feet -				agent_pos.mV[VZ] -= 0.5f * mAvatarObject->mBodySize.mV[VZ]; -			} - -			agent_pos.mV[VX] = llclamp( agent_pos.mV[VX], INSET, REGION_WIDTH - INSET ); -			agent_pos.mV[VY] = llclamp( agent_pos.mV[VY], INSET, REGION_WIDTH - INSET ); - -			// Don't let them go below ground, or too high. -			agent_pos.mV[VZ] = llclamp( agent_pos.mV[VZ],  -				mRegionp->getLandHeightRegion( agent_pos ),  -				LLWorld::getInstance()->getRegionMaxHeight() ); - -			LLMessageSystem* msg = gMessageSystem; -			msg->newMessageFast(_PREHASH_SetStartLocationRequest); -			msg->nextBlockFast( _PREHASH_AgentData); -			msg->addUUIDFast(_PREHASH_AgentID, getID()); -			msg->addUUIDFast(_PREHASH_SessionID, getSessionID()); -			msg->nextBlockFast( _PREHASH_StartLocationData); -			// corrected by sim -			msg->addStringFast(_PREHASH_SimName, ""); -			msg->addU32Fast(_PREHASH_LocationID, location_id); -			msg->addVector3Fast(_PREHASH_LocationPos, agent_pos); -			msg->addVector3Fast(_PREHASH_LocationLookAt,mFrameAgent.getAtAxis()); - -			// Reliable only helps when setting home location.  Last -			// location is sent on quit, and we don't have time to ack -			// the packets. -			msg->sendReliable(mRegionp->getHost()); - -			const U32 HOME_INDEX = 1; -			if( HOME_INDEX == location_id ) -			{ -				setHomePosRegion( mRegionp->getHandle(), getPositionAgent() ); -			} -		} -		else -		{ -			llinfos << "setStartPosition - Can't find agent viewerobject id " << gAgentID << llendl; -		} -	} +void LLAgent::setStartPosition( U32 location_id ) +{ +  LLViewerObject          *object; + +  if ( !(gAgentID == LLUUID::null) ) +  { +    // we've got an ID for an agent viewerobject +    object = gObjectList.findObject(gAgentID); +    if (object) +    { +      // we've got the viewer object +      // Sometimes the agent can be velocity interpolated off of +      // this simulator.  Clamp it to the region the agent is +      // in, a little bit in on each side. +      const F32 INSET = 0.5f; //meters +      const F32 REGION_WIDTH = LLWorld::getInstance()->getRegionWidthInMeters(); + +      LLVector3 agent_pos = getPositionAgent(); +      LLVector3 agent_look_at = mFrameAgent.getAtAxis(); + +      if (mAvatarObject) +      { +	// the z height is at the agent's feet +	agent_pos.mV[VZ] -= 0.5f * mAvatarObject->mBodySize.mV[VZ]; +      } + +      agent_pos.mV[VX] = llclamp( agent_pos.mV[VX], INSET, REGION_WIDTH - INSET ); +      agent_pos.mV[VY] = llclamp( agent_pos.mV[VY], INSET, REGION_WIDTH - INSET ); + +      // Don't let them go below ground, or too high. +      agent_pos.mV[VZ] = llclamp( agent_pos.mV[VZ], +				  mRegionp->getLandHeightRegion( agent_pos ), +				  LLWorld::getInstance()->getRegionMaxHeight() ); +      // Send the CapReq + +      LLSD body; + +      std::string url = gAgent.getRegion()->getCapability("HomeLocation"); +      std::ostringstream strBuffer; +      if( url.empty() ) +      { +	LLMessageSystem* msg = gMessageSystem; +	msg->newMessageFast(_PREHASH_SetStartLocationRequest); +	msg->nextBlockFast( _PREHASH_AgentData); +	msg->addUUIDFast(_PREHASH_AgentID, getID()); +	msg->addUUIDFast(_PREHASH_SessionID, getSessionID()); +	msg->nextBlockFast( _PREHASH_StartLocationData); +	// corrected by sim +	msg->addStringFast(_PREHASH_SimName, ""); +	msg->addU32Fast(_PREHASH_LocationID, location_id); +	msg->addVector3Fast(_PREHASH_LocationPos, agent_pos); +	msg->addVector3Fast(_PREHASH_LocationLookAt,mFrameAgent.getAtAxis()); +	 +	// Reliable only helps when setting home location.  Last +	// location is sent on quit, and we don't have time to ack +	// the packets. +	msg->sendReliable(mRegionp->getHost()); + +	const U32 HOME_INDEX = 1; +	if( HOME_INDEX == location_id ) +	  { +	    setHomePosRegion( mRegionp->getHandle(), getPositionAgent() ); +	  } +      } +      else +      { +	strBuffer << location_id; +	body["HomeLocation"]["LocationId"] = strBuffer.str(); + +	strBuffer.str(""); +	strBuffer << agent_pos.mV[VX]; +	body["HomeLocation"]["LocationPos"]["X"] = strBuffer.str(); + +	strBuffer.str(""); +	strBuffer << agent_pos.mV[VY]; +	body["HomeLocation"]["LocationPos"]["Y"] = strBuffer.str(); + +	strBuffer.str(""); +	strBuffer << agent_pos.mV[VZ]; +	body["HomeLocation"]["LocationPos"]["Z"] = strBuffer.str(); + +	strBuffer.str(""); +	strBuffer << agent_look_at.mV[VX]; +	body["HomeLocation"]["LocationLookAt"]["X"] = strBuffer.str(); + +	strBuffer.str(""); +	strBuffer << agent_look_at.mV[VY]; +	body["HomeLocation"]["LocationLookAt"]["Y"] = strBuffer.str(); + +	strBuffer.str(""); +	strBuffer << agent_look_at.mV[VZ]; +	body["HomeLocation"]["LocationLookAt"]["Z"] = strBuffer.str(); + +	LLHTTPClient::post( url, body, new LLHomeLocationResponder() ); +      } +    } +    else +    { +      llinfos << "setStartPosition - Can't find agent viewerobject id " << gAgentID << llendl; +    } +  }  }  void LLAgent::requestStopMotion( LLMotion* motion ) diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 045e7ccf16..4c8ea54d8d 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -1366,8 +1366,7 @@ bool LLAppViewer::cleanup()  	gImageList.shutdown(); // shutdown again in case a callback added something  	// This should eventually be done in LLAppViewer -	LLImageJ2C::closeDSO(); -	LLImageFormatted::cleanupClass(); +	LLImage::cleanupClass();  	LLVFSThread::cleanupClass();  	LLLFSThread::cleanupClass(); @@ -1435,8 +1434,7 @@ bool LLAppViewer::initThreads()  	LLAppViewer::sImageDecodeThread = new LLWorkerThread("ImageDecode", enable_threads && true);  	LLAppViewer::sTextureCache = new LLTextureCache(enable_threads && true);  	LLAppViewer::sTextureFetch = new LLTextureFetch(LLAppViewer::getTextureCache(), enable_threads && false); -	LLImageWorker::initClass(LLAppViewer::getImageDecodeThread()); -	LLImageJ2C::openDSO(); +	LLImage::initClass(LLAppViewer::getImageDecodeThread());  	// *FIX: no error handling here!  	return true; diff --git a/indra/newview/llhomelocationresponder.cpp b/indra/newview/llhomelocationresponder.cpp new file mode 100644 index 0000000000..9eccc18ccd --- /dev/null +++ b/indra/newview/llhomelocationresponder.cpp @@ -0,0 +1,108 @@ +/**  + * @file llhomelocationresponder.cpp + * @author Meadhbh Hamrick + * @brief Processes responses to the HomeLocation CapReq + * + * $LicenseInfo:firstyear=2008&license=viewergpl$ + *  + * Copyright (c) 2008, 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://secondlife.com/developers/opensource/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://secondlife.com/developers/opensource/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$ + */ + +/* File Inclusions */ +#include "llviewerprecompiledheaders.h" + +#include "llhomelocationresponder.h" +#include "llsdutil.h" +#include "llagent.h" +#include "llviewerregion.h" + +void LLHomeLocationResponder::result( const LLSD& content ) +{ +  LLVector3 agent_pos; +  bool      error = true; +		 +  do { +	 +    // was the call to /agent/<agent-id>/home-location successful? +    // If not, we keep error set to true +    if( ! content.has("success") ) +    { +      break; +    } +		 +    if( 0 != strncmp("true", content["success"].asString().c_str(), 4 ) ) +    { +      break; +    } +		 +    // did the simulator return a "justified" home location? +    // If no, we keep error set to true +    if( ! content.has( "HomeLocation" ) ) +    { +      break; +    } +		 +    if( ! content["HomeLocation"].has("LocationPos") ) +    { +      break; +    } +		 +    if( ! content["HomeLocation"]["LocationPos"].has("X") ) +    { +      break; +    } + +    agent_pos.mV[VX] = content["HomeLocation"]["LocationPos"]["X"].asInteger(); +		 +    if( ! content["HomeLocation"]["LocationPos"].has("Y") ) +    { +      break; +    } + +    agent_pos.mV[VY] = content["HomeLocation"]["LocationPos"]["Y"].asInteger(); +		 +    if( ! content["HomeLocation"]["LocationPos"].has("Z") ) +    { +      break; +    } + +    agent_pos.mV[VZ] = content["HomeLocation"]["LocationPos"]["Z"].asInteger(); +		 +    error = false; +  } while( 0 ); +	 +  if( ! error ) +  { +    llinfos << "setting home position" << llendl; +		 +    LLViewerRegion *viewer_region = gAgent.getRegion(); +    gAgent.setHomePosRegion( viewer_region->getHandle(), agent_pos ); +  } +} + +void LLHomeLocationResponder::error( const LLSD& content ) +{ +  llinfos << "received error(" << ll_pretty_print_sd( content ) << ")" << llendl; +} diff --git a/indra/newview/llhomelocationresponder.h b/indra/newview/llhomelocationresponder.h new file mode 100644 index 0000000000..0851cb8fc1 --- /dev/null +++ b/indra/newview/llhomelocationresponder.h @@ -0,0 +1,47 @@ +/**  + * @file llhomelocationresponder.h + * @author Meadhbh Hamrick + * @brief Processes responses to the HomeLocation CapReq + * + * $LicenseInfo:firstyear=2008&license=viewergpl$ + *  + * Copyright (c) 2008, 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://secondlife.com/developers/opensource/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://secondlife.com/developers/opensource/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$ + */ +  + /* Macro Definitions */ +#ifndef LL_LLHOMELOCATIONRESPONDER_H +#define LL_LLHOMELOCATIONRESPONDER_H + +/* File Inclusions */ +#include "llhttpclient.h" + +/* Typedef, Enum, Class, Struct, etc. */ +class LLHomeLocationResponder : public LLHTTPClient::Responder +{ +	virtual void result( const LLSD& content ); +	virtual void error( const LLSD& content ); +}; + +#endif diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index 9aa7f54fa9..b890781ab2 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -73,7 +73,6 @@ F32  LLInventoryModel::sMinTimeBetweenFetches = 0.3f;  F32  LLInventoryModel::sMaxTimeBetweenFetches = 10.f;  BOOL LLInventoryModel::sTimelyFetchPending = FALSE;  LLFrameTimer LLInventoryModel::sFetchTimer; -LLInventoryModel::cat_map_t LLInventoryModel::sBulkFetchMap;  S16 LLInventoryModel::sBulkFetchCount = 0;  // RN: for some reason, using std::queue in the header file confuses the compiler which things it's an xmlrpc_queue @@ -1021,18 +1020,27 @@ void LLInventoryModel::fetchDescendentsOf(const LLUUID& folder_id)  }  //Initialize statics. -LLAlertDialog* LLInventoryModel::fetchDescendentsResponder::sRetryDialog=NULL; -LLSD LLInventoryModel::fetchDescendentsResponder::sRetrySD; -  bool LLInventoryModel::isBulkFetchProcessingComplete()  {  	return ( (sFetchQueue.empty()  -			&& sBulkFetchMap.empty()  -			&& sBulkFetchCount==0)  ?  TRUE : FALSE ) ; +			&& sBulkFetchCount<=0)  ?  TRUE : FALSE ) ;  } +class fetchDescendentsResponder: public LLHTTPClient::Responder +{ +	public: +		fetchDescendentsResponder(const LLSD& request_sd) : mRequestSD(request_sd) {}; +		//fetchDescendentsResponder() {}; +		void result(const LLSD& content); +		void error(U32 status, const std::string& reason); +	public: +		typedef std::vector<LLViewerInventoryCategory*> folder_ref_t; +	protected: +		LLSD mRequestSD; +}; +  //If we get back a normal response, handle it here -void  LLInventoryModel::fetchDescendentsResponder::result(const LLSD& content) +void  fetchDescendentsResponder::result(const LLSD& content)  {	  	if (content.has("folders"))	  	{ @@ -1049,13 +1057,20 @@ void  LLInventoryModel::fetchDescendentsResponder::result(const LLSD& content)  			{  				llwarns << "Got a UpdateInventoryItem for the wrong agent."  						<< llendl; -				break; +				continue;  			}  			LLUUID parent_id = folder_sd["folder-id"];  			LLUUID owner_id = folder_sd["owner-id"];  			S32    version  = (S32)folder_sd["version"].asInteger();  			S32    descendents = (S32)folder_sd["descendents"].asInteger();  			LLPointer<LLViewerInventoryCategory> tcategory = new LLViewerInventoryCategory(owner_id); + +	                LLViewerInventoryCategory* pcat = gInventory.getCategory(parent_id); +			if (!pcat) +			{ +				continue; +			} +  			for(LLSD::array_const_iterator category_it = folder_sd["categories"].beginArray();  				category_it != folder_sd["categories"].endArray();  				++category_it) @@ -1063,7 +1078,7 @@ void  LLInventoryModel::fetchDescendentsResponder::result(const LLSD& content)  				LLSD category = *category_it;  				tcategory->fromLLSD(category);  -				if (sFullFetchStarted) +				if (LLInventoryModel::sFullFetchStarted)  				{  					sFetchQueue.push_back(tcategory->getUUID());  				} @@ -1111,21 +1126,21 @@ void  LLInventoryModel::fetchDescendentsResponder::result(const LLSD& content)  	LLInventoryModel::incrBulkFetch(-1); -	if (isBulkFetchProcessingComplete()) +	if (LLInventoryModel::isBulkFetchProcessingComplete())  	{  		llinfos << "Inventory fetch completed" << llendl; -		if (sFullFetchStarted) +		if (LLInventoryModel::sFullFetchStarted)  		{ -			sAllFoldersFetched = TRUE; +			LLInventoryModel::sAllFoldersFetched = TRUE;  		} -		stopBackgroundFetch(); +		LLInventoryModel::stopBackgroundFetch();  	}  	gInventory.notifyObservers();  }  //If we get back an error (not found, etc...), handle it here -void LLInventoryModel::fetchDescendentsResponder::error(U32 status, const std::string& reason) +void fetchDescendentsResponder::error(U32 status, const std::string& reason)  {  	llinfos << "fetchDescendentsResponder::error "  		<< status << ": " << reason << llendl; @@ -1139,63 +1154,24 @@ void LLInventoryModel::fetchDescendentsResponder::error(U32 status, const std::s  			++folder_it)  		{	  			LLSD folder_sd = *folder_it; -			sRetrySD["folders"].append(folder_sd); -		} -		sMinTimeBetweenFetches = 10.0f; //Add 10 seconds for every time out in this sequence. -		 -		if (!sRetryDialog)			//The dialog isn't up.  Prompt the resident. -		{ -			sRetryDialog = gViewerWindow->alertXml("RetryFetchInventoryDescendents", onClickRetry, this); +			LLUUID folder_id = folder_sd["folder-id"]; +			sFetchQueue.push_front(folder_id);  		}  	}  	else  	{ -		if (isBulkFetchProcessingComplete()) +		if (LLInventoryModel::isBulkFetchProcessingComplete())  		{ -			if (sFullFetchStarted) +			if (LLInventoryModel::sFullFetchStarted)  			{ -				sAllFoldersFetched = TRUE; +				LLInventoryModel::sAllFoldersFetched = TRUE;  			} -			stopBackgroundFetch(); +			LLInventoryModel::stopBackgroundFetch();  		}  	}  	gInventory.notifyObservers();  } -void LLInventoryModel::fetchDescendentsResponder::onClickRetry(S32 option, void* userdata) -{ -	if (option == 0) -	{ -		std::string url; - -		LLViewerRegion * agent_region = gAgent.getRegion(); -		if (agent_region) -		{ -			url = agent_region->getCapability("FetchInventoryDescendents"); -		} - -		if (!url.empty()) //Capability found.  Build up LLSD and use it. -		{ -			LLSD body = sRetrySD; -			LLInventoryModel::incrBulkFetch(1); -			LLHTTPClient::post(url, body, new LLInventoryModel::fetchDescendentsResponder(body),300); -		} -	} -	else -	{ -		if (isBulkFetchProcessingComplete()) -		{ -			if (sFullFetchStarted) -			{ -				sAllFoldersFetched = TRUE; -			} -			stopBackgroundFetch(); -		} -	} -	sRetryDialog=NULL; -	sRetrySD.clear(); -} -  //static   Bundle up a bunch of requests to send all at once.  void LLInventoryModel::bulkFetch(std::string url)  { @@ -1206,7 +1182,7 @@ void LLInventoryModel::bulkFetch(std::string url)  	S16 max_concurrent_fetches=8;  	F32 new_min_time = 0.5f;			//HACK!  Clean this up when old code goes away entirely. -	if (sMinTimeBetweenFetches <= new_min_time) sMinTimeBetweenFetches=new_min_time;  //HACK!  See above. +	if (sMinTimeBetweenFetches < new_min_time) sMinTimeBetweenFetches=new_min_time;  //HACK!  See above.  	if(gDisconnected   	|| sBulkFetchCount > max_concurrent_fetches @@ -1215,20 +1191,30 @@ void LLInventoryModel::bulkFetch(std::string url)  		return; // just bail if we are disconnected.  	}	 -	//HACK.  This is inelegant.  We're shuffling a dequeue to a map to get rid of  -	//redundant requests.  When we get rid of the old code entirely, we can change -	//the dequeue to a map.  In the new model, there is no benefit to queue order.  	U32 folder_count=0; -	U32 max_batch_size=10; -	while( !(sFetchQueue.empty() ) ) +	U32 max_batch_size=5; + +	U32 sort_order = gSavedSettings.getU32("InventorySortOrder") & 0x1; + +	LLSD body; + +	while( !(sFetchQueue.empty() ) && (folder_count < max_batch_size) )  	{  		LLViewerInventoryCategory* cat = gInventory.getCategory(sFetchQueue.front());  		if (cat)  		{ -			if ( !gInventory.isCategoryComplete(cat->getUUID()) )	//grab this folder. +			if ( LLViewerInventoryCategory::VERSION_UNKNOWN == cat->getVersion())  			{ -				sBulkFetchMap[(cat->getUUID())] = cat; +				LLSD folder_sd; +				folder_sd["folder-id"]		= cat->getUUID(); +				folder_sd["owner-id"]		= cat->getOwnerID(); +				folder_sd["sort-order"]		= (LLSD::Integer)sort_order; +				folder_sd["fetch-folders"]	= (LLSD::Boolean)sFullFetchStarted; +				folder_sd["fetch-items"]	= (LLSD::Boolean)TRUE; +				body["folders"].append(folder_sd); + +				folder_count++;  			}  			else if (sFullFetchStarted)  			{	//Already have this folder but append child folders to list. @@ -1249,54 +1235,14 @@ void LLInventoryModel::bulkFetch(std::string url)  		sFetchQueue.pop_front();  	} - -	if (!sBulkFetchMap.empty())	//There's stuff to fetch. -	{ -		U32 sort_order = gSavedSettings.getU32("InventorySortOrder") & 0x1; - -		LLSD body; -		 -		cat_map_t::iterator iter=sBulkFetchMap.begin(); -		while( iter!=sBulkFetchMap.end() && (folder_count < max_batch_size) ) -		{ -			LLViewerInventoryCategory* cat = iter->second; -			 -			if (cat && !gInventory.isCategoryComplete(cat->getUUID()) ) 	//Category exists -			{ -				BOOL fetchItems=TRUE; -				if ( sFullFetchStarted  -					&& gInventory.isCategoryComplete(cat->getUUID()) ) -				{ -					fetchItems=FALSE; -				} -				 -				LLSD folder_sd; -				folder_sd["folder-id"]		= cat->getUUID(); -				folder_sd["owner-id"]		= cat->getOwnerID(); -				folder_sd["sort-order"]		= (LLSD::Integer)sort_order; -				folder_sd["fetch-folders"]	= (LLSD::Boolean)sFullFetchStarted; -				folder_sd["fetch-items"]	= (LLSD::Boolean)fetchItems; -				body["folders"].append(folder_sd); - -				folder_count++; -			} -			sBulkFetchMap.erase(iter); -			iter=sBulkFetchMap.begin(); -		} -	 -		if (iter == sBulkFetchMap.end()) sBulkFetchMap.clear(); -		  		if (folder_count > 0)  		{  			sBulkFetchCount++; -			LLHTTPClient::post(url, body, new LLInventoryModel::fetchDescendentsResponder(body)); +		LLHTTPClient::post(url, body, new fetchDescendentsResponder(body));  			sFetchTimer.reset();  		} -		 -	}	 -	 -	if (isBulkFetchProcessingComplete()) +	else if (isBulkFetchProcessingComplete())  	{  		if (sFullFetchStarted)  		{ @@ -1365,14 +1311,7 @@ void LLInventoryModel::backgroundFetch(void*)  	if (sBackgroundFetchActive)  	{  		//If we'll be using the capability, we'll be sending batches and the background thing isn't as important. -		std::string url; - -		LLViewerRegion * agent_region = gAgent.getRegion(); -		if (agent_region) -		{ -			url = agent_region->getCapability("FetchInventoryDescendents"); -		} - +		std::string url = gAgent.getRegion()->getCapability("FetchInventoryDescendents");     		if (!url.empty())   		{  			bulkFetch(url); diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h index 85eb46404b..4889d622dc 100644 --- a/indra/newview/llinventorymodel.h +++ b/indra/newview/llinventorymodel.h @@ -110,21 +110,7 @@ public:  	LLInventoryModel();  	~LLInventoryModel(); -	class fetchDescendentsResponder: public LLHTTPClient::Responder -	{ -		public: -			fetchDescendentsResponder(const LLSD& request_sd) : mRequestSD(request_sd) {}; -			void result(const LLSD& content);			 -			void error(U32 status, const std::string& reason); -			static void onClickRetry(S32 option, void* userdata); -			static void appendRetryList(LLSD retry_sd); -		public: -			typedef std::vector<LLViewerInventoryCategory*> folder_ref_t; -		protected: -			LLSD mRequestSD; -			static LLSD sRetrySD; -			static LLAlertDialog		*sRetryDialog; -	}; +  	//  	// Accessors @@ -364,7 +350,6 @@ public:  	// start and stop background breadth-first fetching of inventory contents  	// this gets triggered when performing a filter-search  	static void startBackgroundFetch(const LLUUID& cat_id = LLUUID::null); // start fetch process -	static void stopBackgroundFetch(); // stop fetch process  	static BOOL backgroundFetchActive();  	static bool isEverythingFetched();  	static void backgroundFetch(void*); // background fetch idle function @@ -413,7 +398,6 @@ protected:  	static void processInventoryDescendents(LLMessageSystem* msg, void**);  	static void processMoveInventoryItem(LLMessageSystem* msg, void**);  	static void processFetchInventoryReply(LLMessageSystem* msg, void**); -	static bool isBulkFetchProcessingComplete();  	bool messageUpdateCore(LLMessageSystem* msg, bool do_accounting); @@ -447,11 +431,8 @@ protected:  	observer_list_t mObservers;  	// completing the fetch once per session should be sufficient -	static cat_map_t sBulkFetchMap;  	static BOOL sBackgroundFetchActive;  	static BOOL sTimelyFetchPending; -	static BOOL sAllFoldersFetched;  -	static BOOL sFullFetchStarted;  	static S32  sNumFetchRetries;  	static LLFrameTimer sFetchTimer;  	static F32 sMinTimeBetweenFetches; @@ -464,6 +445,11 @@ protected:  public:  	// *NOTE: DEBUG functionality  	void dumpInventory(); +	static bool isBulkFetchProcessingComplete(); +	static void stopBackgroundFetch(); // stop fetch process + +	static BOOL sFullFetchStarted; +	static BOOL sAllFoldersFetched;   };  // a special inventory model for the agent diff --git a/indra/newview/llpanelgrouplandmoney.cpp b/indra/newview/llpanelgrouplandmoney.cpp index 8483e43394..84ba2dd807 100644 --- a/indra/newview/llpanelgrouplandmoney.cpp +++ b/indra/newview/llpanelgrouplandmoney.cpp @@ -705,12 +705,13 @@ BOOL LLPanelGroupLandMoney::postBuild()  	textp = getChild<LLTextEditor>("group_money_planning_text", true);  	panelp = getChild<LLPanel>("group_money_planning_tab", true); -	if ( !can_view ) +	if ( 1 ) //!can_view  	{  		textp->setText(mImplementationp->mCantViewAccountsText);  	}  	else  	{ +		//Temporally disabled for DEV-11287.  		mImplementationp->mMoneyPlanningTabEHp =   			new LLGroupMoneyPlanningTabEventHandler(textp,  													tabcp, diff --git a/indra/newview/llsprite.cpp b/indra/newview/llsprite.cpp index 1348f85201..c8a3904d96 100644 --- a/indra/newview/llsprite.cpp +++ b/indra/newview/llsprite.cpp @@ -126,8 +126,8 @@ void LLSprite::updateFace(LLFace &face)  			LLVector3 camera_vec = mPosition - sCameraPosition;  			mScaledRight = camera_vec % LLVector3(0.f, 0.f, 1.f);  			mScaledUp = -(camera_vec % mScaledRight); -			mScaledUp.normVec(); -			mScaledRight.normVec(); +			mScaledUp.normalize(); +			mScaledRight.normalize();  			mScaledUp *= mHeightDiv2;  			mScaledRight *= mWidthDiv2; @@ -156,7 +156,7 @@ void LLSprite::updateFace(LLFace &face)  		else  		{  			x_axis = sNormal % LLVector3(0.f, -1.f, 0.f); -			x_axis.normVec(); +			x_axis.normalize();  			y_axis = sNormal % x_axis;  		} diff --git a/indra/newview/llsprite.h b/indra/newview/llsprite.h index 322150e85b..03026fd071 100644 --- a/indra/newview/llsprite.h +++ b/indra/newview/llsprite.h @@ -73,7 +73,7 @@ public:  	void setColor(const LLColor4 &color);  	void setColor(const F32 r, const F32 g, const F32 b, const F32 a);  	void setAlpha(const F32 alpha)					{ mColor.mV[VALPHA] = alpha; } -	void setNormal(const LLVector3 &normal)		{ sNormal = normal; sNormal.normVec();} +	void setNormal(const LLVector3 &normal)		{ sNormal = normal; sNormal.normalize();}  	F32 getAlpha(); diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 2f8f5a29c5..26d526c988 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -2346,37 +2346,71 @@ class LLAvatarDebug : public view_listener_t  	}  }; +struct MenuCallbackData +{ +	bool ban_enabled; +	LLUUID avatar_id; +}; +  void callback_eject(S32 option, void* data)  { -	LLUUID* avatar_id = (LLUUID*) data; +	MenuCallbackData *callback_data = (MenuCallbackData*)data; +	if (!callback_data) +	{ +		return; +	} +	if (2 == option) +	{ +		// Cancle button. +		return; +	} +	LLUUID avatar_id = callback_data->avatar_id; +	bool ban_enabled = callback_data->ban_enabled; -	if (0 == option || 1 == option) +	if (0 == option)  	{ +		// Eject button  		LLMessageSystem* msg = gMessageSystem; -		LLViewerObject* avatar = gObjectList.findObject(*avatar_id); +		LLViewerObject* avatar = gObjectList.findObject(avatar_id);  		if (avatar)  		{  			U32 flags = 0x0; -			if (1 == option) -			{ -				// eject and add to ban list -				flags |= 0x1; -			} +			msg->newMessage("EjectUser"); +			msg->nextBlock("AgentData"); +			msg->addUUID("AgentID", gAgent.getID() ); +			msg->addUUID("SessionID", gAgent.getSessionID() ); +			msg->nextBlock("Data"); +			msg->addUUID("TargetID", avatar_id ); +			msg->addU32("Flags", flags ); +			msg->sendReliable( avatar->getRegion()->getHost() ); +		} +	} +	else if (ban_enabled) +	{ +		// This is tricky. It is similar to say if it is not an 'Eject' button, +		// and it is also not an 'Cancle' button, and ban_enabled==ture,  +		// it should be the 'Eject and Ban' button. +		LLMessageSystem* msg = gMessageSystem; +		LLViewerObject* avatar = gObjectList.findObject(avatar_id); +		if (avatar) +		{ +			U32 flags = 0x1;  			msg->newMessage("EjectUser");  			msg->nextBlock("AgentData");  			msg->addUUID("AgentID", gAgent.getID() );  			msg->addUUID("SessionID", gAgent.getSessionID() );  			msg->nextBlock("Data"); -			msg->addUUID("TargetID", *avatar_id ); +			msg->addUUID("TargetID", avatar_id );  			msg->addU32("Flags", flags );  			msg->sendReliable( avatar->getRegion()->getHost() );  		}  	} -	delete avatar_id; -	avatar_id = NULL; + +	delete callback_data; +	callback_data = NULL;  }  class LLAvatarEject : public view_listener_t @@ -2386,23 +2420,50 @@ class LLAvatarEject : public view_listener_t  		LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getFirstObject() );  		if( avatar )  		{ -			LLUUID* avatar_id = new LLUUID( avatar->getID() ); +			MenuCallbackData *data = new MenuCallbackData; +			(*data).avatar_id = avatar->getID();  			std::string fullname = avatar->getFullname(); -			if (!fullname.empty()) +			const LLVector3d& pos = avatar->getPositionGlobal(); +			LLParcel* parcel = LLViewerParcelMgr::getInstance()->selectParcelAt(pos)->getParcel(); +			 +			if (LLViewerParcelMgr::getInstance()->isParcelOwnedByAgent(parcel,GP_LAND_MANAGE_BANNED))  			{ -				LLStringUtil::format_map_t args; -				args["[AVATAR_NAME]"] = fullname; -				gViewerWindow->alertXml("EjectAvatarFullname", -							args, -							callback_eject, -							(void*)avatar_id); +				(*data).ban_enabled = true; +				if (!fullname.empty()) +				{ +					LLStringUtil::format_map_t args; +					args["[AVATAR_NAME]"] = fullname; +					gViewerWindow->alertXml("EjectAvatarFullname", +						args, +						callback_eject, +						(void*)data); +				} +				else +				{ +					gViewerWindow->alertXml("EjectAvatar", +						callback_eject, +						(void*)data); +				}  			}  			else  			{ -				gViewerWindow->alertXml("EjectAvatar", -							callback_eject, -							(void*)avatar_id); +				(*data).ban_enabled = false; +				if (!fullname.empty()) +				{ +					LLStringUtil::format_map_t args; +					args["[AVATAR_NAME]"] = fullname; +					gViewerWindow->alertXml("EjectAvatarFullnameNoBan", +						args, +						callback_eject, +						(void*)data); +				} +				else +				{ +					gViewerWindow->alertXml("EjectAvatarNoBan", +						callback_eject, +						(void*)data); +				}  			}  		}  		return true; @@ -2419,12 +2480,18 @@ class LLAvatarEnableFreezeEject : public view_listener_t  		if (new_value)  		{  			const LLVector3& pos = avatar->getPositionRegion(); +			const LLVector3d& pos_global = avatar->getPositionGlobal(); +			LLParcel* parcel = LLViewerParcelMgr::getInstance()->selectParcelAt(pos_global)->getParcel();  			LLViewerRegion* region = avatar->getRegion();  			new_value = (region != NULL); - +						  			if (new_value)  			{ -				new_value = (region->isOwnedSelf(pos) || region->isOwnedGroup(pos)); +				new_value = region->isOwnedSelf(pos); +				if (!new_value || region->isOwnedGroup(pos)) +				{ +					new_value = LLViewerParcelMgr::getInstance()->isParcelOwnedByAgent(parcel,GP_LAND_ADMIN); +				}  			}  		} diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index b27d33b0e6..27badfb1dd 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -503,7 +503,7 @@ void handle_compress_image(void*)  			}  			else  			{ -				llinfos << "Compression failed: " << LLImageBase::getLastError() << llendl; +				llinfos << "Compression failed: " << LLImage::getLastError() << llendl;  			}  			infile = picker.getNextFile(); @@ -554,9 +554,9 @@ void upload_new_resource(const std::string& src_filename, std::string name,  												 IMG_CODEC_BMP ))  		{  			error_message = llformat( "Problem with file %s:\n\n%s\n", -					src_filename.c_str(), LLImageBase::getLastError().c_str()); +					 src_filename.c_str(), LLImage::getLastError().c_str());  			args["[FILE]"] = src_filename; -			args["[ERROR]"] = LLImageBase::getLastError(); +			args["[ERROR]"] = LLImage::getLastError();  			upload_error(error_message, "ProblemWithFile", filename, args);  			return;  		} @@ -569,9 +569,9 @@ void upload_new_resource(const std::string& src_filename, std::string name,  												 IMG_CODEC_TGA ))  		{  			error_message = llformat("Problem with file %s:\n\n%s\n", -					src_filename.c_str(), LLImageBase::getLastError().c_str()); +					src_filename.c_str(), LLImage::getLastError().c_str());  			args["[FILE]"] = src_filename; -			args["[ERROR]"] = LLImageBase::getLastError(); +			args["[ERROR]"] = LLImage::getLastError();  			upload_error(error_message, "ProblemWithFile", filename, args);  			return;  		} @@ -584,9 +584,9 @@ void upload_new_resource(const std::string& src_filename, std::string name,  												 IMG_CODEC_JPEG ))  		{  			error_message = llformat("Problem with file %s:\n\n%s\n", -					src_filename.c_str(), LLImageBase::getLastError().c_str()); +					src_filename.c_str(), LLImage::getLastError().c_str());  			args["[FILE]"] = src_filename; -			args["[ERROR]"] = LLImageBase::getLastError(); +			args["[ERROR]"] = LLImage::getLastError();  			upload_error(error_message, "ProblemWithFile", filename, args);  			return;  		} @@ -599,9 +599,9 @@ void upload_new_resource(const std::string& src_filename, std::string name,   												 IMG_CODEC_PNG ))   		{   			error_message = llformat("Problem with file %s:\n\n%s\n", - 					src_filename.c_str(), LLImageBase::getLastError().c_str()); + 					src_filename.c_str(), LLImage::getLastError().c_str());   			args["[FILE]"] = src_filename; - 			args["[ERROR]"] = LLImageBase::getLastError(); + 			args["[ERROR]"] = LLImage::getLastError();   			upload_error(error_message, "ProblemWithFile", filename, args);   			return;   		} diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index b22ca7d2e9..f8c7b317f0 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -1389,6 +1389,7 @@ void LLViewerRegion::setSeedCapability(const std::string& url)  	capabilityNames.append("EventQueueGet");  	capabilityNames.append("FetchInventoryDescendents");  	capabilityNames.append("GroupProposalBallot"); +	capabilityNames.append("HomeLocation");  	capabilityNames.append("MapLayer");  	capabilityNames.append("MapLayerGod");  	capabilityNames.append("NewFileAgentInventory"); diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index e9440dc9cb..d5d7056ef7 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -1131,7 +1131,7 @@ void LLVOAvatar::dumpBakedStatus()  		} -		F64 dist_to_camera = (inst->getPositionGlobal() - camera_pos_global).magVec(); +		F64 dist_to_camera = (inst->getPositionGlobal() - camera_pos_global).length();  		llcont << " " << dist_to_camera << "m ";  		llcont << " " << inst->mPixelArea << " pixels"; @@ -2684,8 +2684,8 @@ void LLVOAvatar::idleUpdateMisc(bool detailed_update)  			else  			{  				getSpatialExtents(ext[0], ext[1]); -				if ((ext[1]-mImpostorExtents[1]).magVec() > 0.05f || -					(ext[0]-mImpostorExtents[0]).magVec() > 0.05f) +				if ((ext[1]-mImpostorExtents[1]).length() > 0.05f || +					(ext[0]-mImpostorExtents[0]).length() > 0.05f)  				{  					mNeedsImpostorUpdate = TRUE;  				} @@ -2852,7 +2852,7 @@ void LLVOAvatar::idleUpdateWindEffect()  		F32 time_delta = mRippleTimer.getElapsedTimeF32() - mRippleTimeLast;  		mRippleTimeLast = mRippleTimer.getElapsedTimeF32();  		LLVector3 velocity = getVelocity(); -		F32 speed = velocity.magVec(); +		F32 speed = velocity.length();  		//RN: velocity varies too much frame to frame for this to work  		mRippleAccel.clearVec();//lerp(mRippleAccel, (velocity - mLastVel) * time_delta, LLCriticalDamp::getInterpolant(0.02f));  		mLastVel = velocity; @@ -2871,7 +2871,7 @@ void LLVOAvatar::idleUpdateWindEffect()  		}  		wind.mV[VZ] += hover_strength; -		wind.normVec(); +		wind.normalize();  		wind.mV[VW] = llmin(0.025f + (speed * 0.015f) + hover_strength, 0.5f);  		F32 interp; @@ -2994,10 +2994,10 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)  				LLVector3 pixel_up_vec;  				LLViewerCamera::getInstance()->getPixelVectors(root_pos_last, pixel_up_vec, pixel_right_vec);  				LLVector3 camera_to_av = root_pos_last - LLViewerCamera::getInstance()->getOrigin(); -				camera_to_av.normVec(); +				camera_to_av.normalize();  				LLVector3 local_camera_at = camera_to_av * ~root_rot;  				LLVector3 local_camera_up = camera_to_av % LLViewerCamera::getInstance()->getLeftAxis(); -				local_camera_up.normVec(); +				local_camera_up.normalize();  				local_camera_up = local_camera_up * ~root_rot;  				local_camera_up.scaleVec(mBodySize * 0.5f); @@ -3456,7 +3456,7 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)  	LLVector3 xyVel = getVelocity();  	xyVel.mV[VZ] = 0.0f; -	speed = xyVel.magVec(); +	speed = xyVel.length();  	BOOL throttle = TRUE; @@ -3541,14 +3541,14 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)  			if (mIsSelf)  			{  				primDir = agent.getAtAxis() - projected_vec(agent.getAtAxis(), agent.getReferenceUpVector()); -				primDir.normVec(); +				primDir.normalize();  			}  			else  			{  				primDir = getRotation().getMatrix3().getFwdRow();  			}  			LLVector3 velDir = getVelocity(); -			velDir.normVec(); +			velDir.normalize();  			if ( mSignaledAnimations.find(ANIM_AGENT_WALK) != mSignaledAnimations.end())  			{  				F32 vpD = velDir * primDir; @@ -3570,13 +3570,13 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)  					LLVector3 at_axis = LLViewerCamera::getInstance()->getAtAxis();  					LLVector3 up_vector = gAgent.getReferenceUpVector();  					at_axis -= up_vector * (at_axis * up_vector); -					at_axis.normVec(); +					at_axis.normalize();  					F32 dot = fwdDir * at_axis;  					if (dot < 0.f)  					{  						fwdDir -= 2.f * at_axis * dot; -						fwdDir.normVec(); +						fwdDir.normalize();  					}  				} @@ -3644,7 +3644,7 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)  			// Now compute the full world space rotation for the whole body (wQv)  			LLVector3 leftDir = upDir % fwdDir; -			leftDir.normVec(); +			leftDir.normalize();  			fwdDir = leftDir % upDir;  			LLQuaternion wQv( fwdDir, leftDir, upDir ); @@ -4253,7 +4253,7 @@ U32 LLVOAvatar::renderImpostor(LLColor4U color)  	LLVector3 pos(getRenderPosition()+mImpostorOffset);  	LLVector3 at = (pos - LLViewerCamera::getInstance()->getOrigin()); -	at.normVec(); +	at.normalize();  	LLVector3 left = LLViewerCamera::getInstance()->getUpAxis() % at;  	LLVector3 up = at%left; @@ -5784,7 +5784,7 @@ void LLVOAvatar::setPixelAreaAndAngle(LLAgent &agent)  	}  	else  	{ -		F32 radius = size.magVec(); +		F32 radius = size.length();  		mAppAngle = (F32) atan2( radius, range) * RAD_TO_DEG;  	} @@ -5953,7 +5953,7 @@ void LLVOAvatar::updateShadowFaces()  			sprite.setPosition(shadow_pos_agent);  			LLVector3 foot_to_knee = mKneeLeftp->getWorldPosition() - joint_world_pos; -			//foot_to_knee.normVec(); +			//foot_to_knee.normalize();  			foot_to_knee -= projected_vec(foot_to_knee, sun_vec);  			sprite.setYaw(azimuth(sun_vec - foot_to_knee)); @@ -5986,7 +5986,7 @@ void LLVOAvatar::updateShadowFaces()  			sprite.setPosition(shadow_pos_agent);  			LLVector3 foot_to_knee = mKneeRightp->getWorldPosition() - joint_world_pos; -			//foot_to_knee.normVec(); +			//foot_to_knee.normalize();  			foot_to_knee -= projected_vec(foot_to_knee, sun_vec);  			sprite.setYaw(azimuth(sun_vec - foot_to_knee)); @@ -6355,7 +6355,7 @@ void LLVOAvatar::getOffObject()  		LLVector3 at_axis = LLVector3::x_axis;  		at_axis = at_axis * av_rot;  		at_axis.mV[VZ] = 0.f; -		at_axis.normVec(); +		at_axis.normalize();  		gAgent.resetAxes(at_axis);  		//reset orientation @@ -9861,7 +9861,7 @@ void LLVOAvatar::getImpostorValues(LLVector3* extents, LLVector3& angle, F32& di  	extents[1] = ext[1];  	LLVector3 at = LLViewerCamera::getInstance()->getOrigin()-(getRenderPosition()+mImpostorOffset); -	distance = at.normVec(); +	distance = at.normalize();  	F32 da = 1.f - (at*LLViewerCamera::getInstance()->getAtAxis());  	angle.mV[0] = LLViewerCamera::getInstance()->getYaw()*da;  	angle.mV[1] = LLViewerCamera::getInstance()->getPitch()*da; diff --git a/indra/newview/llvograss.cpp b/indra/newview/llvograss.cpp index cc7d73e37a..c7326688a0 100644 --- a/indra/newview/llvograss.cpp +++ b/indra/newview/llvograss.cpp @@ -273,9 +273,9 @@ U32 LLVOGrass::processUpdateMessage(LLMessageSystem *mesgsys,  	updateSpecies(); -	if (  (getVelocity().magVecSquared() > 0.f) -		||(getAcceleration().magVecSquared() > 0.f) -		||(getAngularVelocity().magVecSquared() > 0.f)) +	if (  (getVelocity().lengthSquared() > 0.f) +		||(getAcceleration().lengthSquared() > 0.f) +		||(getAngularVelocity().lengthSquared() > 0.f))  	{  		llinfos << "ACK! Moving grass!" << llendl;  		setVelocity(LLVector3::zero); @@ -322,7 +322,7 @@ void LLVOGrass::setPixelAreaAndAngle(LLAgent &agent)  {  	// This should be the camera's center, as soon as we move to all region-local.  	LLVector3 relative_position = getPositionAgent() - agent.getCameraPositionAgent(); -	F32 range = relative_position.magVec(); +	F32 range = relative_position.length();  	F32 max_scale = getMaxScale(); @@ -501,7 +501,7 @@ void LLVOGrass::getGeometry(S32 idx,  		LLVector3 normal1 = (v1-v2) % (v2-v3);  		normal1.mV[VZ] = 0.75f; -		normal1.normVec(); +		normal1.normalize();  		LLVector3 normal2 = -normal1;  		normal2.mV[VZ] = -normal2.mV[VZ]; diff --git a/indra/newview/llvopartgroup.cpp b/indra/newview/llvopartgroup.cpp index 6cc61e36e0..3724a94edd 100644 --- a/indra/newview/llvopartgroup.cpp +++ b/indra/newview/llvopartgroup.cpp @@ -95,7 +95,7 @@ void LLVOPartGroup::setPixelAreaAndAngle(LLAgent &agent)  {  	// mPixelArea is calculated during render  	F32 mid_scale = getMidScale(); -	F32 range = (getRenderPosition()-LLViewerCamera::getInstance()->getOrigin()).magVec(); +	F32 range = (getRenderPosition()-LLViewerCamera::getInstance()->getOrigin()).length();  	if (range < 0.001f || isHUDAttachment())		// range == zero  	{ @@ -189,7 +189,7 @@ BOOL LLVOPartGroup::updateGeometry(LLDrawable *drawable)  		LLVector3 part_pos_agent(part->mPosAgent);  		at = part_pos_agent - camera_agent; -		F32 camera_dist_squared = at.magVecSquared(); +		F32 camera_dist_squared = at.lengthSquared();  		F32 inv_camera_dist_squared;  		if (camera_dist_squared > 1.f)  			inv_camera_dist_squared = 1.f / camera_dist_squared; @@ -283,26 +283,26 @@ void LLVOPartGroup::getGeometry(S32 idx,  	LLVector3 up, right;  	right = at % LLVector3(0.f, 0.f, 1.f); -	right.normVec(); +	right.normalize();  	up = right % at; -	up.normVec(); +	up.normalize();  	if (part.mFlags & LLPartData::LL_PART_FOLLOW_VELOCITY_MASK)  	{  		LLVector3 normvel = part.mVelocity; -		normvel.normVec(); +		normvel.normalize();  		LLVector2 up_fracs;  		up_fracs.mV[0] = normvel*right;  		up_fracs.mV[1] = normvel*up; -		up_fracs.normVec(); +		up_fracs.normalize();  		LLVector3 new_up;  		LLVector3 new_right;  		new_up = up_fracs.mV[0] * right + up_fracs.mV[1]*up;  		new_right = up_fracs.mV[1] * right - up_fracs.mV[0]*up;  		up = new_up;  		right = new_right; -		up.normVec(); -		right.normVec(); +		up.normalize(); +		right.normalize();  	}  	right *= 0.5f*part.mScale.mV[0]; diff --git a/indra/newview/llvosky.cpp b/indra/newview/llvosky.cpp index 330d5c370d..e619ca1754 100644 --- a/indra/newview/llvosky.cpp +++ b/indra/newview/llvosky.cpp @@ -528,7 +528,7 @@ void LLVOSky::initSkyTextureDirs(const S32 side, const S32 tile)  			coeff[x_coef] = F32((x<<1) + 1) * inv_res - 1.f;  			coeff[y_coef] = F32((y<<1) + 1) * inv_res - 1.f;  			LLVector3 dir(coeff[0], coeff[1], coeff[2]); -			dir.normVec(); +			dir.normalize();  			mSkyTex[side].setDir(dir, x, y);  			mShinyTex[side].setDir(dir, x, y);  		} @@ -762,7 +762,7 @@ void LLVOSky::calcSkyColorWLVert(LLVector3 & Pn, LLColor3 & vary_HazeColor, LLCo  		Pn *= (-32000.f / Pn[1]);  	} -	Plen = Pn.magVec(); +	Plen = Pn.length();  	Pn /= Plen;  	// Initialize temp variables @@ -1082,7 +1082,7 @@ BOOL LLVOSky::updateSky()  			const static F32 COLOR_CHANGE_THRESHOLD = 0.01f;  			LLVector3 direction = mSun.getDirection(); -			direction.normVec(); +			direction.normalize();  			const F32 dot_lighting = direction * mLastLightingDirection;  			LLColor3 delta_color; @@ -1092,7 +1092,7 @@ BOOL LLVOSky::updateSky()  			if ( mForceUpdate   				 || ((dot_lighting < LIGHT_DIRECTION_THRESHOLD) -				 || (delta_color.magVec() > COLOR_CHANGE_THRESHOLD) +				 || (delta_color.length() > COLOR_CHANGE_THRESHOLD)  				 || !mInitialized)  				&& !direction.isExactlyZero())  			{ @@ -1336,8 +1336,8 @@ BOOL LLVOSky::updateGeometry(LLDrawable *drawable)  	const LLVector3 &look_at = LLViewerCamera::getInstance()->getAtAxis();  	LLVector3 right = look_at % LLVector3::z_axis;  	LLVector3 up = right % look_at; -	right.normVec(); -	up.normVec(); +	right.normalize(); +	up.normalize();  	const static F32 elevation_factor = 0.0f/sResolution;  	const F32 cos_max_angle = cosHorizon(elevation_factor); @@ -1417,8 +1417,8 @@ BOOL LLVOSky::updateHeavenlyBodyGeometry(LLDrawable *drawable, const S32 f, cons  	LLVector3 hb_right = to_dir % LLVector3::z_axis;  	LLVector3 hb_up = hb_right % to_dir; -	hb_right.normVec(); -	hb_up.normVec(); +	hb_right.normalize(); +	hb_up.normalize();  	//const static F32 cos_max_turn = sqrt(3.f) / 2; // 30 degrees  	//const F32 cos_turn_right = 1. / (llmax(cos_max_turn, hb_right * right)); @@ -1601,8 +1601,8 @@ void LLVOSky::updateSunHaloGeometry(LLDrawable *drawable )  	const LLVector3 right = 2 * (v_corner[2] - v_corner[0]);  	LLVector3 up = 2 * (v_corner[2] - v_corner[3]); -	up.normVec(); -	F32 size = right.magVec(); +	up.normalize(); +	F32 size = right.length();  	up = size * up;  	const LLVector3 draw_pos = 0.25 * (v_corner[0] + v_corner[1] + v_corner[2] + v_corner[3]); @@ -1654,7 +1654,7 @@ void LLVOSky::updateSunHaloGeometry(LLDrawable *drawable )  F32 dtReflection(const LLVector3& p, F32 cos_dir_from_top, F32 sin_dir_from_top, F32 diff_angl_dir)  {  	LLVector3 P = p; -	P.normVec(); +	P.normalize();  	const F32 cos_dir_angle = -P.mV[VZ];  	const F32 sin_dir_angle = sqrt(1 - cos_dir_angle * cos_dir_angle); @@ -1679,9 +1679,9 @@ F32 dtClip(const LLVector3& v0, const LLVector3& v1, F32 far_clip2)  {  	F32 dt_clip;  	const LLVector3 otrezok = v1 - v0; -	const F32 A = otrezok.magVecSquared(); +	const F32 A = otrezok.lengthSquared();  	const F32 B = v0 * otrezok; -	const F32 C = v0.magVecSquared() - far_clip2; +	const F32 C = v0.lengthSquared() - far_clip2;  	const F32 det = sqrt(B*B - A*C);  	dt_clip = (-B - det) / A;  	if ((dt_clip < 0) || (dt_clip > 1)) @@ -1701,16 +1701,16 @@ void LLVOSky::updateReflectionGeometry(LLDrawable *drawable, F32 H,  	LLVector3 hb_pos = to_dir * (HORIZON_DIST - 10);  	LLVector3 to_dir_proj = to_dir;  	to_dir_proj.mV[VZ] = 0; -	to_dir_proj.normVec(); +	to_dir_proj.normalize();  	LLVector3 Right = to_dir % LLVector3::z_axis;  	LLVector3 Up = Right % to_dir; -	Right.normVec(); -	Up.normVec(); +	Right.normalize(); +	Up.normalize();  	// finding angle between  look direction and sprite.  	LLVector3 look_at_right = look_at % LLVector3::z_axis; -	look_at_right.normVec(); +	look_at_right.normalize();  	const static F32 cos_horizon_angle = cosHorizon(0.0f/sResolution);  	//const static F32 horizon_angle = acos(cos_horizon_angle); @@ -1745,7 +1745,7 @@ void LLVOSky::updateReflectionGeometry(LLDrawable *drawable, F32 H,  	else  		dt_hor = llmax(0.0f, llmin(1.0f, dt_hor)); -	top_hb.normVec(); +	top_hb.normalize();  	const F32 cos_angle_of_view = fabs(top_hb.mV[VZ]);  	const F32 extension = llmin (5.0f, 1.0f / cos_angle_of_view); @@ -1762,11 +1762,11 @@ void LLVOSky::updateReflectionGeometry(LLDrawable *drawable, F32 H,  	F32 cos_dir_from_top[2];  	LLVector3 dir = stretch_corner[0]; -	dir.normVec(); +	dir.normalize();  	cos_dir_from_top[0] = dir.mV[VZ];  	dir = stretch_corner[1]; -	dir.normVec(); +	dir.normalize();  	cos_dir_from_top[1] = dir.mV[VZ];  	const F32 sin_dir_from_top = sqrt(1 - cos_dir_from_top[0] * cos_dir_from_top[0]); @@ -1789,7 +1789,7 @@ void LLVOSky::updateReflectionGeometry(LLDrawable *drawable, F32 H,  	for (vtx = 0; vtx < 2; ++vtx)  	{  		LLVector3 light_proj = v_corner[vtx]; -		light_proj.normVec(); +		light_proj.normalize();  		const F32 z = light_proj.mV[VZ];  		const F32 sin_angle = sqrt(1 - z * z); @@ -1813,9 +1813,9 @@ void LLVOSky::updateReflectionGeometry(LLDrawable *drawable, F32 H,  	S32 side = 0;  	LLVector3 refl_corn_norm[2];  	refl_corn_norm[0] = v_refl_corner[1]; -	refl_corn_norm[0].normVec(); +	refl_corn_norm[0].normalize();  	refl_corn_norm[1] = v_refl_corner[3]; -	refl_corn_norm[1].normVec(); +	refl_corn_norm[1].normalize();  	F32 cos_refl_look_at[2];  	cos_refl_look_at[0] = refl_corn_norm[0] * look_at; @@ -1833,13 +1833,13 @@ void LLVOSky::updateReflectionGeometry(LLDrawable *drawable, F32 H,  	F32 dt_clip;  	F32 vtx_near2, vtx_far2; -	if ((vtx_far2 = v_refl_corner[side].magVecSquared()) > far_clip2) +	if ((vtx_far2 = v_refl_corner[side].lengthSquared()) > far_clip2)  	{  		// whole thing is sprite: reflection is beyond far clip plane.  		dt_clip = 1.1f;  		quads = 1;  	} -	else if ((vtx_near2 = v_refl_corner[side+1].magVecSquared()) > far_clip2) +	else if ((vtx_near2 = v_refl_corner[side+1].lengthSquared()) > far_clip2)  	{  		// part is reflection, the rest is sprite.  		dt_clip = dtClip(v_refl_corner[side + 1], v_refl_corner[side], far_clip2); @@ -1903,7 +1903,7 @@ void LLVOSky::updateReflectionGeometry(LLDrawable *drawable, F32 H,  		{  			for (S32 vtx = 0; vtx < 4; ++vtx)  			{ -				F32 ratio = far_clip / v_refl_corner[vtx].magVec(); +				F32 ratio = far_clip / v_refl_corner[vtx].length();  				*(verticesp++) = v_refl_corner[vtx] = ratio * v_refl_corner[vtx] + mCameraPosAgent;  			}  			const LLVector3 draw_pos = 0.25 * @@ -1912,10 +1912,10 @@ void LLVOSky::updateReflectionGeometry(LLDrawable *drawable, F32 H,  		}  		else  		{ -			F32 ratio = far_clip / v_refl_corner[1].magVec(); +			F32 ratio = far_clip / v_refl_corner[1].length();  			v_sprite_corner[1] = v_refl_corner[1] * ratio; -			ratio = far_clip / v_refl_corner[3].magVec(); +			ratio = far_clip / v_refl_corner[3].length();  			v_sprite_corner[3] = v_refl_corner[3] * ratio;  			v_refl_corner[1] = (1 - dt_clip) * v_refl_corner[1] + dt_clip * v_refl_corner[0]; @@ -2039,20 +2039,20 @@ void LLVOSky::updateFog(const F32 distance)  	LLVector3 tosun = getToSunLast();  	const F32 tosun_z = tosun.mV[VZ];  	tosun.mV[VZ] = 0.f; -	tosun.normVec(); +	tosun.normalize();  	LLVector3 perp_tosun;  	perp_tosun.mV[VX] = -tosun.mV[VY];  	perp_tosun.mV[VY] = tosun.mV[VX];  	LLVector3 tosun_45 = tosun + perp_tosun; -	tosun_45.normVec(); +	tosun_45.normalize();  	F32 delta = 0.06f;  	tosun.mV[VZ] = delta;  	perp_tosun.mV[VZ] = delta;  	tosun_45.mV[VZ] = delta; -	tosun.normVec(); -	perp_tosun.normVec(); -	tosun_45.normVec(); +	tosun.normalize(); +	perp_tosun.normalize(); +	tosun_45.normalize();  	// Sky colors, just slightly above the horizon in the direction of the sun, perpendicular to the sun, and at a 45 degree angle to the sun.  	initAtmospherics(); @@ -2202,8 +2202,8 @@ F32 azimuth(const LLVector3 &v)  void LLVOSky::initSunDirection(const LLVector3 &sun_dir, const LLVector3 &sun_ang_velocity)  { -	LLVector3 sun_direction = (sun_dir.magVec() == 0) ? LLVector3::x_axis : sun_dir; -	sun_direction.normVec(); +	LLVector3 sun_direction = (sun_dir.length() == 0) ? LLVector3::x_axis : sun_dir; +	sun_direction.normalize();  	mSun.setDirection(sun_direction);  	mSun.renewDirection();  	mSun.setAngularVelocity(sun_ang_velocity); @@ -2222,8 +2222,8 @@ void LLVOSky::initSunDirection(const LLVector3 &sun_dir, const LLVector3 &sun_an  void LLVOSky::setSunDirection(const LLVector3 &sun_dir, const LLVector3 &sun_ang_velocity)  { -	LLVector3 sun_direction = (sun_dir.magVec() == 0) ? LLVector3::x_axis : sun_dir; -	sun_direction.normVec(); +	LLVector3 sun_direction = (sun_dir.length() == 0) ? LLVector3::x_axis : sun_dir; +	sun_direction.normalize();  	// Push the sun "South" as it approaches directly overhead so that we can always see bump mapping  	// on the upward facing faces of cubes. @@ -2239,7 +2239,7 @@ void LLVOSky::setSunDirection(const LLVector3 &sun_dir, const LLVector3 &sun_ang  	// Blend between normal sun dir and adjusted sun dir based on how close we are  	// to having the sun overhead.  	mBumpSunDir = adjustedDir * sunDot + newDir * (1.0f - sunDot); -	mBumpSunDir.normVec(); +	mBumpSunDir.normalize();  	F32 dp = mLastLightingDirection * sun_direction;  	mSun.setDirection(sun_direction); diff --git a/indra/newview/llvotextbubble.cpp b/indra/newview/llvotextbubble.cpp index b48a5a989c..952c3c9a87 100644 --- a/indra/newview/llvotextbubble.cpp +++ b/indra/newview/llvotextbubble.cpp @@ -126,7 +126,7 @@ void LLVOTextBubble::updateTextures(LLAgent &agent)  	LLVector3 position_local = getPositionAgent() - agent.getCameraPositionAgent();  	F32 dot_product = position_local * agent.getFrameAgent().getAtAxis(); -	F32 cos_angle = dot_product / position_local.magVec(); +	F32 cos_angle = dot_product / position_local.length();  	if (cos_angle > 1.f)  	{ diff --git a/indra/newview/llvotree.cpp b/indra/newview/llvotree.cpp index 97a1ed162d..0c9b524f7f 100644 --- a/indra/newview/llvotree.cpp +++ b/indra/newview/llvotree.cpp @@ -273,9 +273,9 @@ U32 LLVOTree::processUpdateMessage(LLMessageSystem *mesgsys,  	// Do base class updates...  	U32 retval = LLViewerObject::processUpdateMessage(mesgsys, user_data, block_num, update_type, dp); -	if (  (getVelocity().magVecSquared() > 0.f) -		||(getAcceleration().magVecSquared() > 0.f) -		||(getAngularVelocity().magVecSquared() > 0.f)) +	if (  (getVelocity().lengthSquared() > 0.f) +		||(getAcceleration().lengthSquared() > 0.f) +		||(getAngularVelocity().lengthSquared() > 0.f))  	{  		llinfos << "ACK! Moving tree!" << llendl;  		setVelocity(LLVector3::zero); @@ -359,14 +359,14 @@ BOOL LLVOTree::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)  	mTrunkBend += mTrunkVel;  	mTrunkVel *= 0.99f;									//  Add damping -	if (mTrunkBend.magVec() > 1.f) +	if (mTrunkBend.length() > 1.f)  	{ -		mTrunkBend.normVec(); +		mTrunkBend.normalize();  	} -	if (mTrunkVel.magVec() > 1.f) +	if (mTrunkVel.length() > 1.f)  	{ -		mTrunkVel.normVec(); +		mTrunkVel.normalize();  	}  	return TRUE; @@ -391,7 +391,7 @@ void LLVOTree::setPixelAreaAndAngle(LLAgent &agent)  	// This should be the camera's center, as soon as we move to all region-local.  	LLVector3 relative_position = getPositionAgent() - agent.getCameraPositionAgent(); -	F32 range = relative_position.magVec();				// ugh, square root +	F32 range = relative_position.length();				// ugh, square root  	F32 max_scale = mBillboardScale * getMaxScale();  	F32 area = max_scale * (max_scale*mBillboardRatio); @@ -713,9 +713,9 @@ BOOL LLVOTree::updateGeometry(LLDrawable *drawable)  				LLVector2 tc;  				// This isn't totally accurate.  Should compute based on slope as well.  				start_radius = r0 * (1.f + 1.2f*fabs(z - 0.66f*height)/height); -				nvec.setVec(	cos(nangle * DEG_TO_RAD)*start_radius*nvec_scale,  -								sin(nangle * DEG_TO_RAD)*start_radius*nvec_scale,  -								z*nvec_scalez);  +				nvec.set(	cos(nangle * DEG_TO_RAD)*start_radius*nvec_scale,  +							sin(nangle * DEG_TO_RAD)*start_radius*nvec_scale,  +							z*nvec_scalez);   				// First and last slice at 0 radius (to bring in top/bottom of structure)  				radius = start_radius + turbulence3((F32*)&nvec.mV, (F32)fractal_depth)*noise_scale; @@ -918,7 +918,7 @@ void LLVOTree::updateRadius()  void LLVOTree::updateSpatialExtents(LLVector3& newMin, LLVector3& newMax)  { -	F32 radius = getScale().magVec()*0.05f; +	F32 radius = getScale().length()*0.05f;  	LLVector3 center = getRenderPosition();  	F32 sz = mBillboardScale*mBillboardRatio*radius*0.5f;  @@ -926,8 +926,8 @@ void LLVOTree::updateSpatialExtents(LLVector3& newMin, LLVector3& newMax)  	center += LLVector3(0, 0, size.mV[2]) * getRotation(); -	newMin.setVec(center-size); -	newMax.setVec(center+size); +	newMin.set(center-size); +	newMax.set(center+size);  	mDrawable->setPositionGroup(center);  } diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 225d9a18b2..c6a7e9e28d 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -89,7 +89,7 @@ LLVOVolume::LLVOVolume(const LLUUID &id, const LLPCode pcode, LLViewerRegion *re  	mLOD = MIN_LOD;  	mSculptLevel = -2;  	mTextureAnimp = NULL; -	mVObjRadius = LLVector3(1,1,0.5f).magVec(); +	mVObjRadius = LLVector3(1,1,0.5f).length();  	mNumFaces = 0;  	mLODChanged = FALSE;  	mSculptChanged = FALSE; @@ -570,7 +570,7 @@ F32 LLVOVolume::getTextureVirtualSize(LLFace* face)  	//get area of circle in texture space  	LLVector2 tdim = face->mTexExtents[1] - face->mTexExtents[0]; -	F32 texel_area = (tdim * 0.5f).magVecSquared()*3.14159f; +	F32 texel_area = (tdim * 0.5f).lengthSquared()*3.14159f;  	if (texel_area <= 0)  	{  		// Probably animated, use default @@ -821,7 +821,7 @@ BOOL LLVOVolume::calcLOD()  	S32 cur_detail = 0; -	F32 radius = getVolume()->mLODScaleBias.scaledVec(getScale()).magVec(); +	F32 radius = getVolume()->mLODScaleBias.scaledVec(getScale()).length();  	F32 distance = mDrawable->mDistanceWRTCamera;  	distance *= sDistanceFactor; @@ -1680,7 +1680,7 @@ void LLVOVolume::generateSilhouette(LLSelectNode* nodep, const LLVector3& view_p  		//transform view vector into volume space  		view_vector -= getRenderPosition(); -		mDrawable->mDistanceWRTCamera = view_vector.magVec(); +		mDrawable->mDistanceWRTCamera = view_vector.length();  		LLQuaternion worldRot = getRenderRotation();  		view_vector = view_vector * ~worldRot;  		if (!isVolumeGlobal()) @@ -1721,7 +1721,7 @@ void LLVOVolume::updateRadius()  		return;  	} -	mVObjRadius = getScale().magVec(); +	mVObjRadius = getScale().length();  	mDrawable->setRadius(mVObjRadius);  } @@ -1834,7 +1834,7 @@ F32 LLVOVolume::getBinRadius()  	}  	else if (shrink_wrap)  	{ -		radius = (ext[1]-ext[0]).magVec()*0.5f; +		radius = (ext[1]-ext[0]).length()*0.5f;  	}  	else if (mDrawable->isStatic())  	{ @@ -1956,13 +1956,13 @@ BOOL LLVOVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& e  			if (normal != NULL)  			{  				*normal = volumeDirectionToAgent(*normal); -				(*normal).normVec(); +				(*normal).normalize();  			}  			if (bi_normal != NULL)  			{  				*bi_normal = volumeDirectionToAgent(*bi_normal); -				(*bi_normal).normVec(); +				(*bi_normal).normalize();  			} diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index b9facb28b2..f3168be46c 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -3089,7 +3089,7 @@ void LLPipeline::setupAvatarLights(BOOL for_edit)  		camera_rot.invert();  		LLVector4 light_pos = light_pos_cam * camera_rot; -		light_pos.normVec(); +		light_pos.normalize();  		mHWLightColors[1] = diffuse;  		glLightfv(GL_LIGHT1, GL_DIFFUSE,  diffuse.mV); @@ -3107,7 +3107,7 @@ void LLPipeline::setupAvatarLights(BOOL for_edit)  		LLVector3 opposite_pos = -1.f * mSunDir;  		LLVector3 orthog_light_pos = mSunDir % LLVector3::z_axis;  		LLVector4 backlight_pos = LLVector4(lerp(opposite_pos, orthog_light_pos, 0.3f), 0.0f); -		backlight_pos.normVec(); +		backlight_pos.normalize();  		LLColor4 light_diffuse = mSunDiffuse;  		LLColor4 backlight_diffuse(1.f - light_diffuse.mV[VRED], 1.f - light_diffuse.mV[VGREEN], 1.f - light_diffuse.mV[VBLUE], 1.f); @@ -5172,11 +5172,11 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)  	LLVector3 left = camera.getLeftAxis();  	left *= left; -	left.normVec(); +	left.normalize();  	LLVector3 up = camera.getUpAxis();  	up *= up; -	up.normVec(); +	up.normalize();  	tdim.mV[0] = fabsf(half_height * left);  	tdim.mV[1] = fabsf(half_height * up);  | 
