summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authorAndrew Meadows <andrew@lindenlab.com>2008-09-05 22:03:35 +0000
committerAndrew Meadows <andrew@lindenlab.com>2008-09-05 22:03:35 +0000
commit222bca24c12e162669c1a810c3102811f21cfbe4 (patch)
tree8eee52c0ffd4e9b03d624fc78d6547b8312a5c85 /indra
parent1493a212629b02a4323bf0c1f5a6960bc7b5e271 (diff)
svn merge -r95288:95907 svn+ssh://svn.lindenlab.com/svn/linden/qa/maint-server/qar-841
this is a combined mergeback of the following branches as per QAR-841: maint-server/maint-server-1 (absorbed by maint-server-2) maint-server/maint-server-2 maint-server/maint-server-3 havok4/havok4-8 havok4/havok4-9 yes dataserver-is-deprecated
Diffstat (limited to 'indra')
-rw-r--r--indra/llcommon/llcommon.cpp4
-rw-r--r--indra/llcommon/llsdserialize.cpp2
-rw-r--r--indra/llcommon/llsdserialize_xml.cpp13
-rw-r--r--indra/llcommon/llstat.cpp159
-rw-r--r--indra/llcommon/llstat.h37
-rw-r--r--indra/llcommon/llstl.h5
-rw-r--r--indra/llcommon/llthread.cpp4
-rw-r--r--indra/llcommon/llthread.h4
-rw-r--r--indra/llimage/llimage.cpp75
-rw-r--r--indra/llimage/llimage.h33
-rw-r--r--indra/llimage/llimagej2c.cpp141
-rw-r--r--indra/llimage/llimagej2c.h5
-rw-r--r--indra/llimage/llimageworker.cpp4
-rw-r--r--indra/llimage/llimageworker.h6
-rw-r--r--indra/llmath/v3color.h77
-rw-r--r--indra/llmath/v4color.cpp166
-rw-r--r--indra/llmath/v4color.h109
-rw-r--r--indra/llmath/v4coloru.cpp2
-rw-r--r--indra/llmath/v4coloru.h89
-rw-r--r--indra/llmessage/llcurl.cpp4
-rw-r--r--indra/llmessage/llhttpassetstorage.cpp4
-rw-r--r--indra/llmessage/llnamevalue.cpp4
-rw-r--r--indra/llmessage/llnamevalue.h4
-rw-r--r--indra/llui/lllineeditor.cpp2
-rw-r--r--indra/llui/lllineeditor.h2
-rw-r--r--indra/llui/llui.cpp2
-rw-r--r--indra/lscript/lscript_byteconvert.h20
-rw-r--r--indra/lscript/lscript_byteformat.h1
-rw-r--r--indra/newview/CMakeLists.txt2
-rw-r--r--indra/newview/llagent.cpp231
-rw-r--r--indra/newview/llappviewer.cpp6
-rw-r--r--indra/newview/llhomelocationresponder.cpp108
-rw-r--r--indra/newview/llhomelocationresponder.h47
-rw-r--r--indra/newview/llinventorymodel.cpp173
-rw-r--r--indra/newview/llinventorymodel.h26
-rw-r--r--indra/newview/llpanelgrouplandmoney.cpp3
-rw-r--r--indra/newview/llsprite.cpp6
-rw-r--r--indra/newview/llsprite.h2
-rw-r--r--indra/newview/llviewermenu.cpp115
-rw-r--r--indra/newview/llviewermenufile.cpp18
-rw-r--r--indra/newview/llviewerregion.cpp1
-rw-r--r--indra/newview/llvoavatar.cpp38
-rw-r--r--indra/newview/llvograss.cpp10
-rw-r--r--indra/newview/llvopartgroup.cpp16
-rw-r--r--indra/newview/llvosky.cpp76
-rw-r--r--indra/newview/llvotextbubble.cpp2
-rw-r--r--indra/newview/llvotree.cpp28
-rw-r--r--indra/newview/llvovolume.cpp16
-rw-r--r--indra/newview/pipeline.cpp8
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);