diff --git a/etc/message.xml b/etc/message.xml
index 847f483aa..8dfd75e13 100644
--- a/etc/message.xml
+++ b/etc/message.xml
@@ -672,10 +672,10 @@
FetchInventoryDescendents
false
-
+
WebFetchInventoryDescendents
- true
-
+ false
+
FetchInventory
true
diff --git a/indra/CMakeLists.txt b/indra/CMakeLists.txt
index 3b1c1e467..11d3f7ab7 100644
--- a/indra/CMakeLists.txt
+++ b/indra/CMakeLists.txt
@@ -30,6 +30,8 @@ include(Versions)
include(UnixInstall)
+set (GCC_DISABLE_FATAL_WARNINGS TRUE)
+
if (NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE ReleaseSSE2 CACHE STRING
"Build type. One of: Debug Release ReleaseSSE2 RelWithDebInfo" FORCE)
diff --git a/indra/cmake/WebKitLibPlugin.cmake b/indra/cmake/WebKitLibPlugin.cmake
index a4befa495..9b0635e16 100644
--- a/indra/cmake/WebKitLibPlugin.cmake
+++ b/indra/cmake/WebKitLibPlugin.cmake
@@ -62,13 +62,12 @@ elseif (LINUX)
else (STANDALONE)
set(WEBKIT_PLUGIN_LIBRARIES
llqtwebkit
- qgif
- qjpeg
QtWebKit
QtOpenGL
QtNetwork
QtGui
QtCore
+ jscore
jpeg
fontconfig
X11
diff --git a/indra/llimage/llimagej2c.cpp b/indra/llimage/llimagej2c.cpp
index fc4829b2b..c8a92539f 100644
--- a/indra/llimage/llimagej2c.cpp
+++ b/indra/llimage/llimagej2c.cpp
@@ -376,7 +376,7 @@ S32 LLImageJ2C::calcDataSizeJ2C(S32 w, S32 h, S32 comp, S32 discard_level, F32 r
discard_level--;
}
S32 bytes = (S32)((F32)(w*h*comp)*rate);
- bytes = llmax(bytes, calcHeaderSizeJ2C());
+ //bytes = llmax(bytes, calcHeaderSizeJ2C());
return bytes;
}
@@ -396,9 +396,11 @@ S32 LLImageJ2C::calcDataSize(S32 discard_level)
static const LLCachedControl offset("SianaJ2CSizeOffset", 0);
S32 size = calcDataSizeJ2C(getWidth(), getHeight(), getComponents(), discard_level, mRate);
- S32 size_d0 = calcDataSizeJ2C(getWidth(), getHeight(), getComponents(), discard_level, mRate);
-
- return pow(size/size_d0, exponent)*size_d0 + offset;
+ S32 size_d0 = calcDataSizeJ2C(getWidth(), getHeight(), getComponents(), 0, mRate);
+ llassert_always(size_d0);
+ S32 bytes = pow(size/size_d0, exponent)*size_d0 + offset;
+ bytes = llmax(bytes, calcHeaderSizeJ2C());
+ return bytes;
}
discard_level = llclamp(discard_level, 0, MAX_DISCARD_LEVEL);
@@ -412,6 +414,7 @@ S32 LLImageJ2C::calcDataSize(S32 discard_level)
while ( level >= 0 )
{
mDataSizes[level] = calcDataSizeJ2C(getWidth(), getHeight(), getComponents(), level, mRate);
+ mDataSizes[level] = llmax(mDataSizes[level], calcHeaderSizeJ2C());
level--;
}
diff --git a/indra/llmessage/llassetstorage.cpp b/indra/llmessage/llassetstorage.cpp
index f9512295a..d09044109 100644
--- a/indra/llmessage/llassetstorage.cpp
+++ b/indra/llmessage/llassetstorage.cpp
@@ -283,28 +283,30 @@ LLEstateAssetRequest::~LLEstateAssetRequest()
// TODO: rework tempfile handling?
-LLAssetStorage::LLAssetStorage(LLMessageSystem *msg, LLXferManager *xfer, LLVFS *vfs, const LLHost &upstream_host)
+LLAssetStorage::LLAssetStorage(LLMessageSystem *msg, LLXferManager *xfer, LLVFS *vfs, LLVFS *static_vfs, const LLHost &upstream_host)
{
- _init(msg, xfer, vfs, upstream_host);
+ _init(msg, xfer, vfs, static_vfs, upstream_host);
}
LLAssetStorage::LLAssetStorage(LLMessageSystem *msg, LLXferManager *xfer,
- LLVFS *vfs)
+ LLVFS *vfs, LLVFS *static_vfs)
{
- _init(msg, xfer, vfs, LLHost::invalid);
+ _init(msg, xfer, vfs, static_vfs, LLHost::invalid);
}
void LLAssetStorage::_init(LLMessageSystem *msg,
LLXferManager *xfer,
LLVFS *vfs,
+ LLVFS *static_vfs,
const LLHost &upstream_host)
{
mShutDown = FALSE;
mMessageSys = msg;
mXferManager = xfer;
mVFS = vfs;
+ mStaticVFS = static_vfs;
setUpstream(upstream_host);
msg->setHandlerFuncFast(_PREHASH_AssetUploadComplete, processUploadComplete, (void **)this);
@@ -396,7 +398,39 @@ void LLAssetStorage::_cleanupRequests(BOOL all, S32 error)
BOOL LLAssetStorage::hasLocalAsset(const LLUUID &uuid, const LLAssetType::EType type)
{
- return mVFS->getExists(uuid, type);
+ return mStaticVFS->getExists(uuid, type) || mVFS->getExists(uuid, type);
+}
+
+bool LLAssetStorage::findInStaticVFSAndInvokeCallback(const LLUUID& uuid, LLAssetType::EType type,
+ LLGetAssetCallback callback, void *user_data)
+{
+ if (user_data)
+ {
+ // The *user_data should not be passed without a callback to clean it up.
+ llassert(callback != NULL)
+ }
+
+ BOOL exists = mStaticVFS->getExists(uuid, type);
+ if (exists)
+ {
+ LLVFile file(mStaticVFS, uuid, type);
+ U32 size = file.getSize();
+ if (size > 0)
+ {
+ // we've already got the file
+ if (callback)
+ {
+ callback(mStaticVFS, uuid, type, user_data, LL_ERR_NOERR, LL_EXSTAT_VFS_CACHED);
+ }
+ return true;
+ }
+ else
+ {
+ llwarns << "Asset vfile " << uuid << ":" << type
+ << " found in static cache with bad size " << file.getSize() << ", ignoring" << llendl;
+ }
+ }
+ return false;
}
///////////////////////////////////////////////////////////////////////////
@@ -404,24 +438,39 @@ BOOL LLAssetStorage::hasLocalAsset(const LLUUID &uuid, const LLAssetType::EType
///////////////////////////////////////////////////////////////////////////
// IW - uuid is passed by value to avoid side effects, please don't re-add &
-void LLAssetStorage::getAssetData(const LLUUID uuid, LLAssetType::EType type, void (*callback)(LLVFS *vfs, const LLUUID&, LLAssetType::EType, void *, S32, LLExtStat), void *user_data, BOOL is_priority)
+void LLAssetStorage::getAssetData(const LLUUID uuid, LLAssetType::EType type, LLGetAssetCallback callback, void *user_data, BOOL is_priority)
{
lldebugs << "LLAssetStorage::getAssetData() - " << uuid << "," << LLAssetType::lookup(type) << llendl;
+ llinfos << "ASSET_TRACE requesting " << uuid << " type " << LLAssetType::lookup(type) << llendl;
+
+ if (user_data)
+ {
+ // The *user_data should not be passed without a callback to clean it up.
+ llassert(callback != NULL)
+ }
+
if (mShutDown)
{
- return; // don't get the asset or do any callbacks, we are shutting down
+ llinfos << "ASSET_TRACE cancelled " << uuid << " type " << LLAssetType::lookup(type) << " shutting down" << llendl;
+
+ if (callback)
+ {
+ callback(mVFS, uuid, type, user_data, LL_ERR_ASSET_REQUEST_FAILED, LL_EXSTAT_NONE);
+ }
+ return;
}
-
+
if (uuid.isNull())
{
- // Special case early out for NULL uuid
+ // Special case early out for NULL uuid and for shutting down
if (callback)
{
callback(mVFS, uuid, type, user_data, LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE, LL_EXSTAT_NULL_UUID);
}
return;
}
+
/* */
if(std::find(mBlackListedAsset.begin(),mBlackListedAsset.end(),uuid) != mBlackListedAsset.end())
{
@@ -434,11 +483,31 @@ void LLAssetStorage::getAssetData(const LLUUID uuid, LLAssetType::EType type, vo
}
/* */
+ // Try static VFS first.
+ if (findInStaticVFSAndInvokeCallback(uuid,type,callback,user_data))
+ {
+ llinfos << "ASSET_TRACE asset " << uuid << " found in static VFS" << llendl;
+ return;
+ }
+
+
BOOL exists = mVFS->getExists(uuid, type);
LLVFile file(mVFS, uuid, type);
U32 size = exists ? file.getSize() : 0;
- if (size < 1)
+ if (size > 0)
+ {
+ // we've already got the file
+ // theoretically, partial files w/o a pending request shouldn't happen
+ // unless there's a weird error
+ if (callback)
+ {
+ callback(mVFS, uuid, type, user_data, LL_ERR_NOERR, LL_EXSTAT_VFS_CACHED);
+ }
+
+ llinfos << "ASSET_TRACE asset " << uuid << " found in VFS" << llendl;
+ }
+ else
{
if (exists)
{
@@ -477,18 +546,13 @@ void LLAssetStorage::getAssetData(const LLUUID uuid, LLAssetType::EType type, vo
// This can be overridden by subclasses
_queueDataRequest(uuid, type, callback, user_data, duplicate, is_priority);
}
- else
- {
- // we've already got the file
- // theoretically, partial files w/o a pending request shouldn't happen
- // unless there's a weird error
- if (callback)
- {
- callback(mVFS, uuid, type, user_data, LL_ERR_NOERR, LL_EXSTAT_VFS_CACHED);
- }
- }
+
}
+//
+// *NOTE: Logic here is replicated in LLViewerAssetStorage::_queueDataRequest.
+// Changes here may need to be replicated in the viewer's derived class.
+//
void LLAssetStorage::_queueDataRequest(const LLUUID& uuid, LLAssetType::EType atype,
LLGetAssetCallback callback,
void *user_data, BOOL duplicate,
@@ -516,7 +580,7 @@ void LLAssetStorage::_queueDataRequest(const LLUUID& uuid, LLAssetType::EType at
tpvf.setAsset(uuid, atype);
tpvf.setCallback(downloadCompleteCallback, req);
- llinfos << "Starting transfer for " << uuid << llendl;
+ //llinfos << "Starting transfer for " << uuid << llendl;
LLTransferTargetChannel *ttcp = gTransferManager.getTargetChannel(mUpstreamHost, LLTCT_ASSET);
ttcp->requestTransfer(spa, tpvf, 100.f + (is_priority ? 1.f : 0.f));
}
@@ -539,6 +603,8 @@ void LLAssetStorage::downloadCompleteCallback(
LLAssetType::EType file_type,
void* user_data, LLExtStat ext_status)
{
+ llinfos << "ASSET_TRACE asset " << file_id << " downloadCompleteCallback" << llendl;
+
lldebugs << "LLAssetStorage::downloadCompleteCallback() for " << file_id
<< "," << LLAssetType::lookup(file_type) << llendl;
LLAssetRequest* req = (LLAssetRequest*)user_data;
@@ -627,11 +693,27 @@ void LLAssetStorage::getEstateAsset(const LLHost &object_sim, const LLUUID &agen
return;
}
+ // Try static VFS first.
+ if (findInStaticVFSAndInvokeCallback(asset_id,atype,callback,user_data))
+ {
+ return;
+ }
+
BOOL exists = mVFS->getExists(asset_id, atype);
LLVFile file(mVFS, asset_id, atype);
U32 size = exists ? file.getSize() : 0;
- if (size < 1)
+ if (size > 0)
+ {
+ // we've already got the file
+ // theoretically, partial files w/o a pending request shouldn't happen
+ // unless there's a weird error
+ if (callback)
+ {
+ callback(mVFS, asset_id, atype, user_data, LL_ERR_NOERR, LL_EXSTAT_VFS_CACHED);
+ }
+ }
+ else
{
if (exists)
{
@@ -682,16 +764,6 @@ void LLAssetStorage::getEstateAsset(const LLHost &object_sim, const LLUUID &agen
}
}
}
- else
- {
- // we've already got the file
- // theoretically, partial files w/o a pending request shouldn't happen
- // unless there's a weird error
- if (callback)
- {
- callback(mVFS, asset_id, atype, user_data, LL_ERR_NOERR, LL_EXSTAT_VFS_CACHED);
- }
- }
}
void LLAssetStorage::downloadEstateAssetCompleteCallback(
@@ -758,6 +830,12 @@ void LLAssetStorage::getInvItemAsset(const LLHost &object_sim, const LLUUID &age
if(asset_id.notNull())
{
+ // Try static VFS first.
+ if (findInStaticVFSAndInvokeCallback( asset_id, atype, callback, user_data))
+ {
+ return;
+ }
+
exists = mVFS->getExists(asset_id, atype);
LLVFile file(mVFS, asset_id, atype);
size = exists ? file.getSize() : 0;
@@ -769,7 +847,17 @@ void LLAssetStorage::getInvItemAsset(const LLHost &object_sim, const LLUUID &age
}
- if (size < 1)
+ if (size > 0)
+ {
+ // we've already got the file
+ // theoretically, partial files w/o a pending request shouldn't happen
+ // unless there's a weird error
+ if (callback)
+ {
+ callback(mVFS, asset_id, atype, user_data, LL_ERR_NOERR, LL_EXSTAT_VFS_CACHED);
+ }
+ }
+ else
{
// See whether we should talk to the object's originating sim,
// or the upstream provider.
@@ -818,16 +906,6 @@ void LLAssetStorage::getInvItemAsset(const LLHost &object_sim, const LLUUID &age
}
}
}
- else
- {
- // we've already got the file
- // theoretically, partial files w/o a pending request shouldn't happen
- // unless there's a weird error
- if (callback)
- {
- callback(mVFS, asset_id, atype, user_data, LL_ERR_NOERR, LL_EXSTAT_VFS_CACHED);
- }
- }
}
diff --git a/indra/llmessage/llassetstorage.h b/indra/llmessage/llassetstorage.h
index e25119eb9..e9db3b71f 100644
--- a/indra/llmessage/llassetstorage.h
+++ b/indra/llmessage/llassetstorage.h
@@ -218,6 +218,7 @@ class LLAssetStorage : public LLTempAssetStorage
public:
// VFS member is public because static child methods need it :(
LLVFS *mVFS;
+ LLVFS *mStaticVFS;
typedef void (*LLStoreAssetCallback)(const LLUUID &asset_id, void *user_data, S32 status, LLExtStat ext_status);
enum ERequestType
@@ -247,10 +248,10 @@ protected:
public:
LLAssetStorage(LLMessageSystem *msg, LLXferManager *xfer,
- LLVFS *vfs, const LLHost &upstream_host);
+ LLVFS *vfs, LLVFS *static_vfs, const LLHost &upstream_host);
LLAssetStorage(LLMessageSystem *msg, LLXferManager *xfer,
- LLVFS *vfs);
+ LLVFS *vfs, LLVFS *static_vfs);
virtual ~LLAssetStorage();
void setUpstream(const LLHost &upstream_host);
@@ -317,6 +318,9 @@ public:
void markAssetToxic( const LLUUID& uuid );
protected:
+ bool findInStaticVFSAndInvokeCallback(const LLUUID& uuid, LLAssetType::EType type,
+ LLGetAssetCallback callback, void *user_data);
+
virtual LLSD getPendingDetailsImpl(const request_list_t* requests,
LLAssetType::EType asset_type,
const std::string& detail_prefix) const;
@@ -444,6 +448,7 @@ private:
void _init(LLMessageSystem *msg,
LLXferManager *xfer,
LLVFS *vfs,
+ LLVFS *static_vfs,
const LLHost &upstream_host);
protected:
diff --git a/indra/llmessage/llhttpassetstorage.cpp b/indra/llmessage/llhttpassetstorage.cpp
index 242bccde7..859842a15 100644
--- a/indra/llmessage/llhttpassetstorage.cpp
+++ b/indra/llmessage/llhttpassetstorage.cpp
@@ -400,21 +400,23 @@ size_t LLHTTPAssetRequest::curlCompressedUploadCallback(
LLHTTPAssetStorage::LLHTTPAssetStorage(LLMessageSystem *msg, LLXferManager *xfer,
- LLVFS *vfs, const LLHost &upstream_host,
+ LLVFS *vfs, LLVFS *static_vfs,
+ const LLHost &upstream_host,
const std::string& web_host,
const std::string& local_web_host,
const std::string& host_name)
- : LLAssetStorage(msg, xfer, vfs, upstream_host)
+ : LLAssetStorage(msg, xfer, vfs, static_vfs, upstream_host)
{
_init(web_host, local_web_host, host_name);
}
LLHTTPAssetStorage::LLHTTPAssetStorage(LLMessageSystem *msg, LLXferManager *xfer,
LLVFS *vfs,
+ LLVFS *static_vfs,
const std::string& web_host,
const std::string& local_web_host,
const std::string& host_name)
- : LLAssetStorage(msg, xfer, vfs)
+ : LLAssetStorage(msg, xfer, vfs, static_vfs)
{
_init(web_host, local_web_host, host_name);
}
diff --git a/indra/llmessage/llhttpassetstorage.h b/indra/llmessage/llhttpassetstorage.h
index 231437dad..3e85e898e 100644
--- a/indra/llmessage/llhttpassetstorage.h
+++ b/indra/llmessage/llhttpassetstorage.h
@@ -48,13 +48,14 @@ class LLHTTPAssetStorage : public LLAssetStorage
{
public:
LLHTTPAssetStorage(LLMessageSystem *msg, LLXferManager *xfer,
- LLVFS *vfs, const LLHost &upstream_host,
+ LLVFS *vfs, LLVFS *static_vfs,
+ const LLHost &upstream_host,
const std::string& web_host,
const std::string& local_web_host,
const std::string& host_name);
LLHTTPAssetStorage(LLMessageSystem *msg, LLXferManager *xfer,
- LLVFS *vfs,
+ LLVFS *vfs, LLVFS *static_vfs,
const std::string& web_host,
const std::string& local_web_host,
const std::string& host_name);
diff --git a/indra/llmessage/message_prehash.cpp b/indra/llmessage/message_prehash.cpp
index 855d1cccf..ad6ab9111 100644
--- a/indra/llmessage/message_prehash.cpp
+++ b/indra/llmessage/message_prehash.cpp
@@ -43,6 +43,8 @@ F32 gPrehashVersionNumber = 2.000f;
char* _PREHASH_X = LLMessageStringTable::getInstance()->getString("X");
char* _PREHASH_Y = LLMessageStringTable::getInstance()->getString("Y");
char* _PREHASH_Z = LLMessageStringTable::getInstance()->getString("Z");
+char* _PREHASH_SizeX = LLMessageStringTable::getInstance()->getString("SizeX");
+char* _PREHASH_SizeY = LLMessageStringTable::getInstance()->getString("SizeY");
char* _PREHASH_AddFlags = LLMessageStringTable::getInstance()->getString("AddFlags");
char* _PREHASH_FailureInfo = LLMessageStringTable::getInstance()->getString("FailureInfo");
char* _PREHASH_MapData = LLMessageStringTable::getInstance()->getString("MapData");
diff --git a/indra/llmessage/message_prehash.h b/indra/llmessage/message_prehash.h
index 77cfe710a..19a851a21 100644
--- a/indra/llmessage/message_prehash.h
+++ b/indra/llmessage/message_prehash.h
@@ -43,6 +43,8 @@ extern F32 gPrehashVersionNumber;
extern char * _PREHASH_X;
extern char * _PREHASH_Y;
extern char * _PREHASH_Z;
+extern char * _PREHASH_SizeX;
+extern char * _PREHASH_SizeY;
extern char * _PREHASH_AddFlags;
extern char * _PREHASH_FailureInfo;
extern char * _PREHASH_MapData;
diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp
index 5cd77af36..5383a278d 100644
--- a/indra/llrender/llrender.cpp
+++ b/indra/llrender/llrender.cpp
@@ -934,13 +934,7 @@ LLRender::LLRender()
mMode(LLRender::TRIANGLES),
mCurrTextureUnitIndex(0),
mMaxAnisotropy(0.f)
-{
- mBuffer = new LLVertexBuffer(immediate_mask, 0);
- mBuffer->allocateBuffer(4096, 0, TRUE);
- mBuffer->getVertexStrider(mVerticesp);
- mBuffer->getTexCoord0Strider(mTexcoordsp);
- mBuffer->getColorStrider(mColorsp);
-
+{
mTexUnits.reserve(LL_NUM_TEXTURE_LAYERS);
for (U32 i = 0; i < LL_NUM_TEXTURE_LAYERS; i++)
{
@@ -971,6 +965,17 @@ LLRender::~LLRender()
shutdown();
}
+void LLRender::init()
+{
+ llassert_always(mBuffer.isNull()) ;
+
+ mBuffer = new LLVertexBuffer(immediate_mask, 0);
+ mBuffer->allocateBuffer(4096, 0, TRUE);
+ mBuffer->getVertexStrider(mVerticesp);
+ mBuffer->getTexCoord0Strider(mTexcoordsp);
+ mBuffer->getColorStrider(mColorsp);
+}
+
void LLRender::shutdown()
{
for (U32 i = 0; i < mTexUnits.size(); i++)
@@ -986,6 +991,7 @@ void LLRender::shutdown()
delete mLightState[i];
}
mLightState.clear();
+ mBuffer = NULL ;
}
void LLRender::refreshState(void)
diff --git a/indra/llrender/llrender.h b/indra/llrender/llrender.h
index 0c6cc4589..09e0f8905 100644
--- a/indra/llrender/llrender.h
+++ b/indra/llrender/llrender.h
@@ -314,6 +314,7 @@ public:
LLRender();
~LLRender();
+ void init() ;
void shutdown();
// Refreshes renderer state to the cached values
diff --git a/indra/lscript/lscript_library/lscript_library.cpp b/indra/lscript/lscript_library/lscript_library.cpp
index ffbb91340..919fb758c 100644
--- a/indra/lscript/lscript_library/lscript_library.cpp
+++ b/indra/lscript/lscript_library/lscript_library.cpp
@@ -462,29 +462,35 @@ void LLScriptLibrary::init()
addFunction(10.f, 0.f, dummy_func, "llGetLinkNumberOfSides", "i", "i");
// IDEVO Name lookup calls, see lscript_avatar_names.h
- addFunction(10.f, 0.f, dummy_func, "llGetUsername", "s", "k");
- addFunction(10.f, 0.f, dummy_func, "llRequestUsername", "k", "k");
- addFunction(10.f, 0.f, dummy_func, "llGetDisplayName", "s", "k");
+ addFunction(10.f, 0.f, dummy_func, "llGetUsername", "s", "k");
+ addFunction(10.f, 0.f, dummy_func, "llRequestUsername", "k", "k");
+ addFunction(10.f, 0.f, dummy_func, "llGetDisplayName", "s", "k");
addFunction(10.f, 0.f, dummy_func, "llRequestDisplayName", "k", "k");
-
addFunction(10.f, 0.f, dummy_func, "llGetEnv", "s", "s");
addFunction(10.f, 0.f, dummy_func, "llRegionSayTo", NULL, "kis");
// Adding missing (more recent) LSL functions.
- addFunction(10.f, 0.f, dummy_func, "llCastRay", "l", "vvl");
- addFunction(10.f, 0.f, dummy_func, "llGetSPMaxMemory", "i", NULL);
- addFunction(10.f, 0.f, dummy_func, "llGetUsedMemory", "i", NULL);
- addFunction(10.f, 0.f, dummy_func, "llGodLikeRezObject", NULL, "kv");
- addFunction(10.f, 0.f, dummy_func, "llScriptProfiler", NULL, "i");
- addFunction(10.f, 0.f, dummy_func, "llSetInventoryPermMask", NULL, "sii");
- addFunction(10.f, 0.f, dummy_func, "llSetObjectPermMask", NULL, "ii");
-
- // energy, sleep, dummy_func, name, return type, parameters, help text, gods-only
-
- // IF YOU ADD NEW SCRIPT CALLS, YOU MUST PUT THEM AT THE END OF THIS LIST.
- // Otherwise the bytecode numbers for each call will be wrong, and all
- // existing scripts will crash.
+ addFunction(10.f, 0.f, dummy_func, "llCastRay", "l", "vvl");
+ addFunction(10.f, 0.f, dummy_func, "llGetSPMaxMemory", "i", NULL);
+ addFunction(10.f, 0.f, dummy_func, "llGetUsedMemory", "i", NULL);
+ addFunction(10.f, 0.f, dummy_func, "llGodLikeRezObject", NULL, "kv");
+ addFunction(10.f, 0.f, dummy_func, "llScriptProfiler", NULL, "i");
+ addFunction(10.f, 0.f, dummy_func, "llSetInventoryPermMask", NULL, "sii");
+ addFunction(10.f, 0.f, dummy_func, "llSetObjectPermMask", NULL, "ii");
+ // Even more recent
+ addFunction(10.f, 0.f, dummy_func, "llSetMemoryLimit", "i", "i");
+ addFunction(10.f, 0.f, dummy_func, "llSetLinkMedia", "i", "iil");
+ addFunction(10.f, 0.f, dummy_func, "llGetLinkMedia", "l", "iil");
+ addFunction(10.f, 0.f, dummy_func, "llClearLinkMedia", "i", "ii");
+ addFunction(10.f, 0.f, dummy_func, "llSetLinkCamera", NULL, "ivv");
+ addFunction(10.f, 0.f, dummy_func, "llSetContentType", NULL, "ki");
+ addFunction(10.f, 0.f, dummy_func, "llLinkSitTarget", NULL, "ivr");
+ addFunction(10.f, 0.f, dummy_func, "llAvatarOnLinkSitTarget", "k", "i");
+ /* No info on these new functions yet....
+ * addFunction(10.f, 0.f, dummy_func, "llSetVelocity", "", "");
+ * addFunction(10.f, 0.f, dummy_func, "llSetRotationalVelocity", "", "");
+ */
// REGARDING OSSL FUNCTIONS
// These additions should be posted underneath the llFunctions
@@ -496,6 +502,8 @@ void LLScriptLibrary::init()
// OSSL corrections and syntax additions added + set in same order as found in OSSL_stub.cs of OpenSim Source (Updated PM October-21-2010
// based on OpenSimulator Ver. 0.7.x DEV/Master Git # a7acb650d400a280a7b9edabd304376dff9c81af - a7acb65-r/14142
// Updates by WhiteStar Magic
+
+ // It should be noted though, that the order of OSSL functions is not important for correct functionality.
addFunction(10.f, 0.f, dummy_func, "osSetRegionWaterHeight", NULL, "f");
addFunction(10.f, 0.f, dummy_func, "osSetRegionSunSettings", NULL, "iif");
@@ -583,12 +591,15 @@ void LLScriptLibrary::init()
addFunction(10.f, 0.f, dummy_func, "osUnixTimeToTimestamp", "s", "i");
addFunction(10.f, 0.f, dummy_func, "osSetPenColor", NULL, "ss");
addFunction(10.f, 0.f, dummy_func, "osGetSunParam","f", "s");
- addFunction(10.f, 0.f, dummy_func, "osSetSunParam", "sf", NULL);
+ addFunction(10.f, 0.f, dummy_func, "osSetSunParam", NULL, "sf");
addFunction(10.f, 0.f, dummy_func, "osSetParcelDetails", NULL, "vl");
addFunction(10.f, 0.f, dummy_func, "osGetTerrainHeight", "f", "ii");
addFunction(10.f, 0.f, dummy_func, "osSetTerrainHeight", NULL, "iif");
addFunction(10.f, 0.f, dummy_func, "osGetAvatarList", "l", NULL);
addFunction(10.f, 0.f, dummy_func, "osTeleportOwner", NULL, "svv");
+ addFunction(10.f, 0.f, dummy_func, "osGetWindParam","f", "ss");
+ addFunction(10.f, 0.f, dummy_func, "osSetWindParam", NULL, "ssf");
+
// LightShare functions
addFunction(10.f, 0.f, dummy_func, "cmSetWindlightScene", "i", "l");
@@ -599,6 +610,20 @@ void LLScriptLibrary::init()
addFunction(10.f, 0.f, dummy_func, "lsSetWindlightScene", "i", "l");
addFunction(10.f, 0.f, dummy_func, "lsSetWindlightSceneTargeted", "i", "lk");
addFunction(10.f, 0.f, dummy_func, "lsGetWindlightScene", "l", "l");
+
+ // New OSSL functions 08-10-2011
+ addFunction(10.f, 0.f, dummy_func, "osNpcSaveAppearance", "k", "ks");
+ addFunction(10.f, 0.f, dummy_func, "osNpcLoadAppearance", NULL, "ks");
+ addFunction(10.f, 0.f, dummy_func, "osNpcMoveToTarget", NULL, "kvi");
+ addFunction(10.f, 0.f, dummy_func, "osOwnerSaveAppearance", "k", "s");
+
+ // More new stuffs
+ addFunction(10.f, 0.f, dummy_func, "osNpcGetRot", "r", "k");
+ addFunction(10.f, 0.f, dummy_func, "osNpcSetRot", NULL, "kr");
+ addFunction(10.f, 0.f, dummy_func, "osAgentSaveAppearance", "k", "ks");
+ addFunction(10.f, 0.f, dummy_func, "osNpcGetPos", "v", "k");
+ addFunction(10.f, 0.f, dummy_func, "osNpcStopMoveToTarget", NULL, "k");
+
}
LLScriptLibraryFunction::LLScriptLibraryFunction(F32 eu, F32 st, void (*exec_func)(LLScriptLibData *, LLScriptLibData *, const LLUUID &), const char *name, const char *ret_type, const char *args, BOOL god_only)
diff --git a/indra/newview/app_settings/client_tags_sg1.xml b/indra/newview/app_settings/client_tags_sg1.xml
index 2bca70a9d..bdbd53003 100644
--- a/indra/newview/app_settings/client_tags_sg1.xml
+++ b/indra/newview/app_settings/client_tags_sg1.xml
@@ -1 +1,1443 @@
-
\ No newline at end of file
+
+
+
+ 841ef25b-3b90-caf9-ea3d-5649e755db65
+
+ name
+ Combat Cubed
+ color
+
+ 0.49411764705882
+ 0.5921568627451
+ 0.68235294117647
+ 1
+
+
+ adcbe893-7643-fd12-f61c-0b39717e2e32
+
+ name
+ tyk3n
+ color
+
+ 0.9921568627451
+ 0.5921568627451
+ 0.5843137254902
+ 1
+
+
+ ccb509cf-cc69-e569-38f1-5086c687afd1
+
+ name
+ Ruby
+ color
+
+ 0.86274509803922
+ 0.29411764705882
+ 0.38823529411765
+ 1
+
+
+ d3eb4a5f-aec5-4bcb-b007-cce9efe89d37
+
+ name
+ rivlife
+ color
+
+ 0.32941176470588
+ 0.42745098039216
+ 0.12156862745098
+ 1
+
+
+ c252d89d-6f7c-7d90-f430-d140d2e3fbbe
+
+ name
+ VLife
+ color
+
+ 0.9921568627451
+ 0.34509803921569
+ 0.1843137254902
+ 1
+
+ evil
+ true
+
+ 1c29480c-c608-df87-28bb-964fb64c5366
+
+ name
+ Gemini
+ color
+
+ 0.86274509803922
+ 0.76078431372549
+ 0.38823529411765
+ 1
+
+
+ 2c9c1e0b-e5d1-263e-16b1-7fc6d169f3d6
+
+ name
+ PhoxSL
+ color
+
+ 0.49411764705882
+ 0.84313725490196
+ 0.68235294117647
+ 1
+
+ evil
+ true
+
+ 0f6723d2-5b23-6b58-08ab-308112b33786
+
+ name
+ CryoLife
+ color
+
+ 0.32941176470588
+ 0.10980392156863
+ 0.78823529411765
+ 1
+
+ evil
+ true
+
+ 58a8b7ec-1455-7162-5d96-d3c3ead2ed71
+
+ name
+ Combat Cubed
+ color
+
+ 0.49411764705882
+ 0.5921568627451
+ 0.68235294117647
+ 1
+
+
+ f5a48821-9a98-d09e-8d6a-50cc08ba9a47
+
+ name
+ NeilLife
+ color
+
+ 0.99607843137255
+ 0.89411764705882
+ 0.12156862745098
+ 1
+
+ evil
+ true
+
+ 734fed29-4c51-63e5-1648-6589949d7585
+
+ name
+ Explicit
+ color
+
+ 0.6
+ 0.42745098039216
+ 0.8078431372549
+ 1
+
+
+ ccda2b3b-e72c-a112-e126-fee238b67218
+
+ name
+ Emerald
+ color
+
+ 0.32941176470588
+ 0.89411764705882
+ 0.12156862745098
+ 1
+
+
+ 2a9a406c-f448-68f2-4e38-878f8c46c190
+
+ name
+ Meerkat
+ color
+
+ 0.9921568627451
+ 0.7921568627451
+ 0.53333333333333
+ 1
+
+
+ b6820989-bf42-ff59-ddde-fd3fd3a74fe4
+
+ name
+ Meerkat
+ color
+
+ 0.9921568627451
+ 0.7921568627451
+ 0.53333333333333
+ 1
+
+
+ 3ab7e2fa-9572-ef36-1a30-d855dbea4f92
+
+ name
+ Combat Cubed
+ color
+
+ 0.49411764705882
+ 0.5921568627451
+ 0.68235294117647
+ 1
+
+
+ 9422e9d7-7b11-83e4-6262-4a8db4716a3b
+
+ name
+ BetaLife
+ color
+
+ 0.99607843137255
+ 0.22745098039216
+ 0.78823529411765
+ 1
+
+
+ 4da16427-d81e-e816-f346-aaf4741b8056
+
+ name
+ iLife
+ color
+
+ 0.99607843137255
+ 0.89411764705882
+ 0.78823529411765
+ 1
+
+
+ ffce04ff-5303-4909-a044-d37af7ab0b0e
+
+ name
+ Corgi
+ color
+
+ 0.9921568627451
+ 0.5921568627451
+ 0.18039215686275
+ 1
+
+ evil
+ true
+
+ c5b570ca-bb7e-3c81-afd1-f62646b20014
+
+ name
+ Kung Fu
+ color
+
+ 0.99607843137255
+ 0.89411764705882
+ 0.78823529411765
+ 1
+
+
+ cc7a030f-282f-c165-44d2-b5ee572e72bf
+
+ name
+ Imprudence
+ color
+
+ 0.8078431372549
+ 0.46666666666667
+ 0.81960784313725
+ 1
+
+
+ 4e8dcf80-336b-b1d8-ef3e-08dacf015a0f
+
+ name
+ Sapphire
+ color
+
+ 0.32941176470588
+ 0.22745098039216
+ 0.12156862745098
+ 1
+
+
+ 5aa5c70d-d787-571b-0495-4fc1bdef1500
+
+ name
+ LGG Proxy
+ color
+
+ 0.99607843137255
+ 0.22745098039216
+ 0.12156862745098
+ 1
+
+
+ 0bcd5f5d-a4ce-9ea4-f9e8-15132653b3d8
+
+ name
+ MoyMix
+ color
+
+ 0.9921568627451
+ 0.56078431372549
+ 0.65490196078431
+ 1
+
+
+ 8183e823-c443-2142-6eb6-2ab763d4f81c
+
+ name
+ Day Oh proxy
+ color
+
+ 0.49411764705882
+ 0.34509803921569
+ 0.68235294117647
+ 1
+
+
+ 3da8a69a-58ca-023f-2161-57f2ab3b5702
+
+ name
+ Operator
+ color
+
+ 0
+ 0.73725490196078
+ 1
+ 1
+
+ evil
+ true
+
+ ed63fbd0-589e-fe1d-a3d0-16905efaa96b
+
+ name
+ Phoenix
+ color
+
+ 0.66274509803922
+ 0.22745098039216
+ 0.12549019607843
+ 1
+
+
+ 81b3e921-ee31-aa57-ff9b-ec1f28e41da1
+
+ name
+ Infinity
+ color
+
+ 0.72941176470588
+ 0.62745098039216
+ 0.38823529411765
+ 1
+
+
+ 5262d71a-88f7-ef40-3b15-00ea148ab4b5
+
+ name
+ Gemini.Bot
+ color
+
+ 0.86274509803922
+ 0.76078431372549
+ 0.38823529411765
+ 1
+
+
+ 77662f23-c77a-9b4d-5558-26b757b2144c
+
+ name
+ PSL
+ color
+
+ 0.7921568627451
+ 0.44313725490196
+ 0.58039215686275
+ 1
+
+
+ e734563e-1c31-2a35-3ed5-8552c807439f
+
+ name
+ Combat Cubed
+ color
+
+ 0.49411764705882
+ 0.5921568627451
+ 0.68235294117647
+ 1
+
+
+ f3fd74a6-fee7-4b2f-93ae-ddcb5991da04
+
+ name
+ PSL
+ color
+
+ 0.7921568627451
+ 0.44313725490196
+ 0.58039215686275
+ 1
+
+
+ f5feab57-bde5-2074-97af-517290213eaa
+
+ name
+ Onyx
+ color
+
+ 0.36078431372549
+ 0.36078431372549
+ 0.36078431372549
+ 1
+
+ evil
+ true
+
+ e52d21f7-3c8b-819f-a3db-65c432295dac
+
+ name
+ CryoLife
+ color
+
+ 0.32941176470588
+ 0.10980392156863
+ 0.78823529411765
+ 1
+
+ evil
+ true
+
+ 7c4d47a3-0c51-04d1-fa47-e4f3ac12f59b
+
+ name
+ Kung Fu
+ color
+
+ 0.99607843137255
+ 0.89411764705882
+ 0.78823529411765
+ 1
+
+
+ 92fc8bff-c604-815a-a716-60be97ed53d1
+
+ name
+ Banana
+ color
+
+ 1
+ 0.6
+ 0.10196078431373
+ 1
+
+
+ b32f01bc-f9b3-4535-b1f3-99dc38f022db
+
+ name
+ Meta7
+ color
+
+ 1
+ 1
+ 1
+ 1
+
+
+ 8873757c-092a-98fb-1afd-ecd347566fcd
+
+ name
+ Ascent
+ color
+
+ 0.37647058823529
+ 1
+ 1
+ 1
+
+
+ 28b4da3f-5f9b-f44e-1387-6a115ab482c5
+
+ name
+ Diamond
+ color
+
+ 0.8156862745098
+ 0.7921568627451
+ 0.68235294117647
+ 1
+
+
+ c1936b62-6db5-1bc2-cfb6-54b040db74b4
+
+ name
+ Shenanigans
+ color
+
+ 0.7843137254902
+ 0.7843137254902
+ 0.47058823529412
+ 1
+
+
+ 7d65a82d-df53-1e5d-65ea-f82c98fa9d16
+
+ name
+ BSD
+ color
+
+ 0.63137254901961
+ 0.12549019607843
+ 0.93725490196078
+ 1
+
+
+ 287aaa37-2f88-275a-edf4-7ea6bb82fb8d
+
+ name
+ lolcat
+ color
+
+ 0.69803921568627
+ 0.13333333333333
+ 0.13333333333333
+ 1
+
+
+ 806a8249-e235-f051-ac4c-0a58b570f1c1
+
+ name
+ Luna
+ color
+
+ 0.43921568627451
+ 0.72156862745098
+ 1
+ 1
+
+
+ d64bf2e9-651f-0b6e-9e8f-4311d42287e3
+
+ name
+ Pie_Viewer
+ color
+
+ 0.49803921568627
+ 0.24705882352941
+ 1
+ 1
+
+
+ 29705410-bcdf-bfd5-e811-5fca794dfbc1
+
+ name
+ HippoMeow
+ color
+
+ 0.2
+ 0.95686274509804
+ 1
+ 1
+
+
+ e8dd2ab3-e074-710c-bac9-e80790990bff
+
+ name
+ Combat Cubed
+ color
+
+ 0.49411764705882
+ 0.5921568627451
+ 0.68235294117647
+ 1
+
+
+ b8c99aa0-6e82-0a84-3fc9-f73dc89471c2
+
+ name
+ ProlapsedPussyLife
+ color
+
+ 0.66666666666667
+ 0
+ 0.6
+ 1
+
+
+ ffb65745-2120-e248-33e0-13dd9166b3ba
+
+ name
+ TWH
+ color
+
+ 1
+ 0.12941176470588
+ 0.12941176470588
+ 1
+
+ evil
+ true
+
+ b33b69ae-6b6c-b395-0175-ce76a871173b
+
+ name
+ Nicholas
+ color
+
+ 0.4
+ 0.26666666666667
+ 1
+ 1
+
+
+ af8c86bd-c377-c331-7476-58abeb7af8fc
+
+ name
+ The Sorcerer
+ color
+
+ 0.54117647058824
+ 0.16862745098039
+ 0.88627450980392
+ 1
+
+
+ 049af712-22c9-b2c4-50c7-90a9f1d1e5ef
+
+ name
+ GNR
+ color
+
+ 0.90196078431373
+ 0.90196078431373
+ 0.90196078431373
+ 1
+
+
+ 9ee02f6b-c244-75d4-1737-da8afb9d8d52
+
+ name
+ Hacked
+ color
+
+ 0.93333333333333
+ 0.93333333333333
+ 1
+ 1
+
+
+ ed943d3f-7a29-8339-11b9-cd0c06a1241b
+
+ name
+ /yiff/
+ color
+
+ 0.47843137254902
+ 0.47843137254902
+ 0.47843137254902
+ 1
+
+
+ 4ca51a79-41c0-91ec-7c58-a5195951bda2
+
+ name
+ Horny Thel
+ color
+
+ 1
+ 0.27058823529412
+ 0
+ 1
+
+
+ 8cc85294-c3d9-8f9f-e507-c324ef49786e
+
+ name
+ IncognitoLife
+ color
+
+ 0
+ 0
+ 0
+ 1
+
+
+ 91144252-196e-bac9-3737-92752eee612d
+
+ name
+ Canine
+ color
+
+ 0.87058823529412
+ 0.85882352941176
+ 1
+ 1
+
+
+ 9995490f-b248-46f2-91ed-910289676f99
+
+ name
+ $
+ color
+
+ 0.25490196078431
+ 0.25490196078431
+ 0.25490196078431
+ 1
+
+
+ 745ac6b7-5b03-450d-6b01-577da127d7d2
+
+ name
+ Zidonuke
+ color
+
+ 0
+ 0
+ 0.58823529411765
+ 1
+
+
+ d2fd7988-786f-40bc-54cb-c2ad557a639d
+
+ name
+ Firestorm
+ color
+
+ 0.94117647058824
+ 0
+ 0
+ 1
+
+
+ bb7fba3a-e7e0-14d6-b1ae-ce43f67745ab
+
+ name
+ Apple Life
+ color
+
+ 0
+ 1
+ 0.003921568627451
+ 1
+
+
+ c3e958f3-cfb5-9e8b-edb7-d12d5c0623d5
+
+ name
+ Winky
+ color
+
+ 0.26274509803922
+ 0.43137254901961
+ 0.93333333333333
+ 1
+
+
+ 54d93609-1392-2a93-255c-a9dd429ecca5
+
+ name
+ Emergence
+ color
+
+ 0.8156862745098
+ 0
+ 0
+ 1
+
+
+ 57f9da7c-0323-c412-58be-80b0441b887e
+
+ name
+ Neon Glow
+ color
+
+ 0.28235294117647
+ 0.25490196078431
+ 0.90980392156863
+ 1
+
+
+ 481a055f-36b5-af82-ac49-24709f013e50
+
+ name
+ Nano
+ color
+
+ 0.70588235294118
+ 0.84705882352941
+ 0
+ 1
+
+
+ f25263b7-6167-4f34-a4ef-af65213b2e39
+
+ name
+ Singularity
+ color
+
+ 0.70588235294118
+ 0.7843137254902
+ 0.7843137254902
+ 1
+
+
+ 734bae36-a197-b087-ee2d-a098d58fed55
+
+ name
+ Moreland Grove
+ color
+
+ 1
+ 0.49803921568627
+ 0.49803921568627
+ 1
+
+
+ 6c622b79-b49d-b5da-e4d1-2f45ecec6106
+
+ name
+ Volt Viewer
+ color
+
+ 1
+ 1
+ 0
+ 1
+
+
+ f8551a21-c960-5132-366a-f55ea63d97c3
+
+ name
+ Hacker
+ color
+
+ 0.64313725490196
+ 0.64313725490196
+ 0.64313725490196
+ 1
+
+
+ 4e6c4027-9bbd-2dc5-2c00-c55a08fd49d1
+
+ name
+ DOWN SYNDROME
+ color
+
+ 0.082352941176471
+ 0.074509803921569
+ 0.074509803921569
+ 1
+
+
+ 2b459a3b-5420-21a1-7dda-eccf02de6c37
+
+ name
+ Sun
+ color
+
+ 0.25490196078431
+ 0.36862745098039
+ 0.52549019607843
+ 1
+
+
+ af22a7af-a3f9-b4e4-79de-3d9f4653f9e3
+
+ name
+ Foxy!
+ color
+
+ 0.74509803921569
+ 0.23529411764706
+ 0.19607843137255
+ 1
+
+
+ 4b84e182-f0cc-d8da-94c8-25b59c4e4b99
+
+ name
+ Deus Ex Machina
+ color
+
+ 0.98039215686275
+ 0.54901960784314
+ 0
+ 1
+
+
+ 01f13da6-fd61-82be-5a8b-68f2d165d8cd
+
+ name
+ Smilodon
+ color
+
+ 1
+ 0.50196078431373
+ 0
+ 1
+
+
+ 4b6f6b75-bf77-d1ff-0000-000000000000
+
+ name
+ Kokua
+ color
+
+ 0.74901960784314
+ 0.46666666666667
+ 0.8078431372549
+ 1
+
+
+ 9a4d13d4-b36b-ff89-715b-9b53091c1473
+
+ name
+ SuperLife
+ color
+
+ 0.88235294117647
+ 0.88235294117647
+ 0
+ 1
+
+
+ bdef8fc2-df54-fa80-757a-f7f346bbcf77
+
+ name
+ KoreDEV
+ color
+
+ 0.54509803921569
+ 0.27058823529412
+ 0.074509803921569
+ 1
+
+
+ d0770263-aec5-6a26-f987-37c14e8f6523
+
+ name
+ HXO-Life
+ color
+
+ 0
+ 0
+ 0.88235294117647
+ 1
+
+ evil
+ true
+
+ 1a1d86b2-edda-aa01-6e23-5b0cc7c2fe35
+
+ name
+ S3aian
+ color
+
+ 0.047058823529412
+ 0.003921568627451
+ 0.88235294117647
+ 1
+
+
+ 3386a955-641c-1113-18e7-d4a5165a62bd
+
+ name
+ StreetLife
+ color
+
+ 0.54509803921569
+ 0.54509803921569
+ 0.51372549019608
+ 1
+
+
+ 14ae222f-cf97-fcff-6b90-21593d824dbd
+
+ name
+ FuckLife
+ color
+
+ 0.03921568627451
+ 0.015686274509804
+ 0.07843137254902
+ 1
+
+
+ b2848bed-38b3-3d6b-6ebe-7b4cb7d4994a
+
+ name
+ KoreDEV-Ghost
+ color
+
+ 0.03921568627451
+ 0.19607843137255
+ 0.07843137254902
+ 1
+
+
+ c58fca06-33b3-827d-d81c-a886a631affc
+
+ name
+ Whale
+ color
+
+ 1
+ 0.61176470588235
+ 0
+ 1
+
+
+ a1057672-e67b-7b40-118c-4e6898457dcb
+
+ name
+ TeeLife
+ color
+
+ 0.35294117647059
+ 0
+ 0.003921568627451
+ 1
+
+
+ f709044d-3f7e-3d94-6c40-17e9d456d35a
+
+ name
+ God Proxy
+ color
+
+ 0
+ 0.86666666666667
+ 0
+ 1
+
+
+ 0b6bc011-15c7-721d-f4c9-cdbaf3448dba
+
+ name
+ MoonBot
+ color
+
+ 0.58823529411765
+ 0.15686274509804
+ 0.90196078431373
+ 1
+
+
+ f40db76a-f6fc-449f-a6e8-47e1484fa294
+
+ name
+ JoinOurHomoMafia
+ color
+
+ 1
+ 0.31372549019608
+ 0.65882352941176
+ 1
+
+
+ 2d02f0a7-48a0-46b3-944f-6a0a7523aaf6
+
+ name
+ HomoLife
+ color
+
+ 0.85882352941176
+ 0.035294117647059
+ 0.43137254901961
+ 1
+
+
+ 3f23c201-e73a-4b86-b294-5fef9919dc23
+
+ name
+ Shotta
+ color
+
+ 0
+ 0.50196078431373
+ 1
+ 1
+
+
+ c1d1a634-7d1f-70ac-513e-471c3a81d01b
+
+ name
+ c1Tanzanite
+ color
+
+ 0.54509803921569
+ 0.035294117647059
+ 0.96470588235294
+ 1
+
+
+ 397554b9-3e2f-4255-5fde-76f93e71295b
+
+ name
+ Genesis
+ color
+
+ 0.74901960784314
+ 0.74901960784314
+ 0.74901960784314
+ 1
+
+
+ e5a99018-4886-d48d-4793-54514f3c5a7b
+
+ name
+ MarzWorld
+ color
+
+ 0.82745098039216
+ 0.82745098039216
+ 0.82745098039216
+ 1
+
+
+ 869e0c1a-a2d9-4b92-bd70-5044d6bd2284
+
+ name
+ Bluebird
+ color
+
+ 0.019607843137255
+ 0.58823529411765
+ 0.9843137254902
+ 1
+
+
+ 8cdf6c66-2f8f-1aa9-f8ee-0493acf90328
+
+ name
+ Nexus
+ color
+
+ 0.4078431372549
+ 0.13333333333333
+ 0.54509803921569
+ 1
+
+
+ 1fb9ce5c-bb36-a0c1-72b5-e4f3406c6d56
+
+ name
+ Lucid
+ color
+
+ 0.67843137254902
+ 0.98823529411765
+ 0.97254901960784
+ 1
+
+
+ 6043a54c-b320-523a-ed15-a8fdd2ebc923
+
+ name
+ Blunix
+ color
+
+ 0.047058823529412
+ 0
+ 1
+ 1
+
+
+ 611300d4-9188-102f-9530-68c7f52dc17a
+
+ name
+ C1501
+ color
+
+ 0.98039215686275
+ 0.38039215686275
+ 0.57647058823529
+ 1
+
+
+ e46e7c2b-1de3-5347-db43-42ee4e1f5bf2
+
+ name
+ Vos
+ color
+
+ 0.70588235294118
+ 0.70588235294118
+ 0.70588235294118
+ 1
+
+
+ 697e702f-29e2-2a31-8dcd-b53f5c25a27c
+
+ name
+ Milkshake
+ color
+
+ 0.74509803921569
+ 0.63137254901961
+ 0.52549019607843
+ 1
+
+
+ ae4e92fb-023d-23ba-d060-3403f953ab1a
+
+ name
+ Phoenix
+ color
+
+ 0.99607843137255
+ 0.56078431372549
+ 0.65490196078431
+ 1
+
+
+ 5d9581af-d615-bc16-2667-2f04f8eeefe4
+
+ name
+ Phoenix
+ color
+
+ 0.32941176470588
+ 0.89411764705882
+ 0.12156862745098
+ 1
+
+
+ 5f0e7c32-38c3-9214-01f0-fb16a5b40128
+
+ name
+ Phoenix
+ color
+
+ 1
+ 1
+ 0.1843137254902
+ 1
+
+
+ e35f7d40-6071-4b29-9727-5647bdafb5d5
+
+ name
+ Phoenix
+ color
+
+ 1
+ 1
+ 1
+ 1
+
+
+ e71b780e-1a57-400d-4649-959f69ec7d51
+
+ name
+ Phoenix
+ color
+
+ 0.99607843137255
+ 0.22745098039216
+ 0.12156862745098
+ 1
+
+
+ 5bb6e4a6-8e24-7c92-be2e-91419bb0ebcb
+
+ name
+ Phoenix
+ color
+
+ 0.34901960784314
+ 0.34901960784314
+ 1
+ 1
+
+
+ e4117c3f-cc02-d537-665d-c31b8c11bb18
+
+ name
+ Emerald
+ color
+
+ 1
+ 0
+ 1
+ 1
+
+
+ 8cf0577c-22d3-6a73-523c-15c0a90d6c27
+
+ name
+ Phoenix
+ color
+
+ 0.72941176470588
+ 0.36078431372549
+ 0.65490196078431
+ 1
+
+
+ ddf41cfa-f5c5-0dee-3ed9-f3fb0adb1ead
+
+ name
+ Phoenix
+ color
+
+ 1
+ 0
+ 1
+ 1
+
+
+ dd0ccfa2-8124-b165-176d-f3dc08f4189e
+
+ name
+ Phoenix
+ color
+
+ 0.50196078431373
+ 0
+ 1
+ 1
+
+
+ c1c189f5-6dab-fc03-ea5a-f9f68f90b018
+
+ name
+ Phoenix
+ color
+
+ 0.99607843137255
+ 0.39607843137255
+ 0.12156862745098
+ 1
+
+
+ bf33bd15-7020-cce1-3725-48923440b7ee
+
+ name
+ Emerald
+ color
+
+ 0.98039215686275
+ 0.69019607843137
+ 0.34117647058824
+ 1
+
+
+ 1e0948ab-706a-b309-434c-a694436a79be
+
+ name
+ Emerald
+ color
+
+ 1
+ 1
+ 1
+ 1
+
+
+ 072343d0-1ce9-0952-4106-5312af4a789a
+
+ name
+ Emerald
+ color
+
+ 0.99607843137255
+ 0.56078431372549
+ 0.65490196078431
+ 1
+
+
+ 1da8eb54-a70f-bd4a-77e5-c7b815c3b2a2
+
+ name
+ Emerald
+ color
+
+ 0.99607843137255
+ 0.22745098039216
+ 0.12156862745098
+ 1
+
+
+ 4eb67510-0924-ebb1-50ca-8af5694cd267
+
+ name
+ Emerald
+ color
+
+ 0.34901960784314
+ 0.34901960784314
+ 1
+ 1
+
+
+ e741e2bf-cf8c-191c-97f2-b2709a843dfc
+
+ name
+ Emerald
+ color
+
+ 0.99607843137255
+ 0.39607843137255
+ 0.12156862745098
+ 1
+
+
+ 8078ffb3-840c-d037-caf3-5cd02c2e7040
+
+ name
+ Emerald
+ color
+
+ 1
+ 1
+ 0.1843137254902
+ 1
+
+
+ 602243f4-8fb1-ac00-d5bc-7ab50c4433b7
+
+ name
+ Emerald
+ color
+
+ 0.50196078431373
+ 0
+ 1
+ 1
+
+
+ 0ae2f973-98c1-a4e8-9f4b-9db2044ab079
+
+ name
+ Emerald
+ color
+
+ 0.72941176470588
+ 0.36078431372549
+ 0.65490196078431
+ 1
+
+
+ b748af88-58e2-995b-cf26-9486dea8e830
+
+ name
+ Radegast
+ color
+
+ 0.56862
+ 0.78431
+ 1
+ 1
+
+
+ isComplete
+ true
+
+
diff --git a/indra/newview/app_settings/windlight/days/Colder%20Tones.xml b/indra/newview/app_settings/windlight/days/Colder%20Tones.xml
new file mode 100644
index 000000000..63d0b099e
--- /dev/null
+++ b/indra/newview/app_settings/windlight/days/Colder%20Tones.xml
@@ -0,0 +1,28 @@
+
+
+
+ 0
+ Midnight
+
+
+ 0.24999989569187164
+ Purple
+
+
+ 0.49999979138374329
+ Blue Midday
+
+
+ 0.74999970197677612
+ Blizzard
+
+
+ 0.87499958276748657
+ Ghost
+
+
+ 0.99999958276748657
+ Midnight
+
+
+
diff --git a/indra/newview/app_settings/windlight/days/Dynamic%20Richness.xml b/indra/newview/app_settings/windlight/days/Dynamic%20Richness.xml
new file mode 100644
index 000000000..f75b52e6e
--- /dev/null
+++ b/indra/newview/app_settings/windlight/days/Dynamic%20Richness.xml
@@ -0,0 +1,32 @@
+
+
+
+ 0
+ Night
+
+
+ 0.12499994784593582
+ Blizzard
+
+
+ 0.24999989569187164
+ Sunrise
+
+
+ 0.49999979138374329
+ Midday 3
+
+
+ 0.68749970197677612
+ Pirate
+
+
+ 0.81249970197677612
+ Coastal Sunset
+
+
+ 0.99999958276748657
+ Midnight
+
+
+
diff --git a/indra/newview/app_settings/windlight/days/Pirate%27s%20Dream.xml b/indra/newview/app_settings/windlight/days/Pirate%27s%20Dream.xml
new file mode 100644
index 000000000..6dc1ba9f4
--- /dev/null
+++ b/indra/newview/app_settings/windlight/days/Pirate%27s%20Dream.xml
@@ -0,0 +1,44 @@
+
+
+
+ 0
+ A-12AM
+
+
+ 0.12499994784593582
+ A-3AM
+
+
+ 0.22222213447093964
+ Barcelona
+
+
+ 0.30208322405815125
+ Sunrise
+
+
+ 0.37499985098838806
+ Sailor's Delight
+
+
+ 0.53819423913955688
+ Coastal Afternoon
+
+
+ 0.63194417953491211
+ Pirate
+
+
+ 0.7048608660697937
+ Desert Sunset
+
+
+ 0.74999970197677612
+ Coastal Sunset
+
+
+ 0.87499958276748657
+ Blizzard
+
+
+
diff --git a/indra/newview/app_settings/windlight/days/Psycho%20Strobe%21.xml b/indra/newview/app_settings/windlight/days/Psycho%20Strobe%21.xml
new file mode 100644
index 000000000..302af5a9b
--- /dev/null
+++ b/indra/newview/app_settings/windlight/days/Psycho%20Strobe%21.xml
@@ -0,0 +1,72 @@
+
+
+
+ 0
+ Sheer Surreality
+
+
+ 0.062499973922967911
+ A-12AM
+
+
+ 0.12499994784593582
+ Sheer Surreality
+
+
+ 0.18749992549419403
+ A-3AM
+
+
+ 0.24999989569187164
+ Sheer Surreality
+
+
+ 0.31249985098838806
+ A-6AM
+
+
+ 0.37499985098838806
+ Sheer Surreality
+
+
+ 0.43749979138374329
+ A-9AM
+
+
+ 0.49999979138374329
+ Sheer Surreality
+
+
+ 0.5624997615814209
+ A-12PM
+
+
+ 0.62499970197677612
+ Sheer Surreality
+
+
+ 0.68749970197677612
+ A-3PM
+
+
+ 0.74999970197677612
+ Sheer Surreality
+
+
+ 0.81249970197677612
+ A-6PM
+
+
+ 0.87499958276748657
+ Sheer Surreality
+
+
+ 0.93749958276748657
+ A-9PM
+
+
+ 0.99999958276748657
+ Sheer Surreality
+
+
+
diff --git a/indra/newview/app_settings/windlight/days/Tropicalia.xml b/indra/newview/app_settings/windlight/days/Tropicalia.xml
new file mode 100644
index 000000000..89a56d4a1
--- /dev/null
+++ b/indra/newview/app_settings/windlight/days/Tropicalia.xml
@@ -0,0 +1,32 @@
+
+
+
+ 0.062499973922967911
+ Purple
+
+
+ 0.16666659712791443
+ Funky Funky
+
+
+ 0.31249985098838806
+ Sunrise
+
+
+ 0.49999979138374329
+ Fine Day
+
+
+ 0.66666638851165771
+ Desert Sunset
+
+
+ 0.74999970197677612
+ Sailor's Delight
+
+
+ 0.95833295583724976
+ Midnight
+
+
+
diff --git a/indra/newview/app_settings/windlight/days/Weird-O.xml b/indra/newview/app_settings/windlight/days/Weird-O.xml
new file mode 100644
index 000000000..1e312f246
--- /dev/null
+++ b/indra/newview/app_settings/windlight/days/Weird-O.xml
@@ -0,0 +1,56 @@
+
+
+
+ 0
+ Funky Funky
+
+
+ 0.13194438815116882
+ Funky Funky Funky
+
+
+ 0.26041656732559204
+ Gelatto
+
+
+ 0.40624985098838806
+ Funky Funky Funky
+
+
+ 0.43749979138374329
+ Ghost
+
+
+ 0.46874979138374329
+ Gelatto
+
+
+ 0.5486108660697937
+ Sheer Surreality
+
+
+ 0.6076386570930481
+ Gelatto
+
+
+ 0.68055528402328491
+ Ghost
+
+
+ 0.75694411993026733
+ Sheer Surreality
+
+
+ 0.87847185134887695
+ Gelatto
+
+
+ 0.91319411993026733
+ Funky Funky Funky
+
+
+ 0.96527737379074097
+ Funky Funky Funky
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/B5%2DShadowDancing.xml b/indra/newview/app_settings/windlight/skies/B5%2DShadowDancing.xml
new file mode 100644
index 000000000..a1a8f026d
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/B5%2DShadowDancing.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.26999998092651367
+ 0.26999998092651367
+ 0.26999998092651367
+ 0.08999999612569809
+
+ blue_density
+
+ 0.37999999523162842
+ 0.37999999523162842
+ 0.37999999523162842
+ 0.18999999761581421
+
+ blue_horizon
+
+ 0.69999998807907104
+ 0.69999998807907104
+ 0.69999998807907104
+ 0.34999999403953552
+
+ cloud_color
+
+ 0
+ 0
+ 0
+ 0
+
+ cloud_pos_density1
+
+ 0.2800000011920929
+ 0.59999996423721313
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0
+ 0
+ 0
+ 1
+
+ cloud_scale
+
+ 0.2199999988079071
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.069999776780605
+ 9.9299997761845589
+
+ cloud_shadow
+
+ 0.22999998927116394
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00039999998989515007
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 8.6000003814697266
+ 0
+ 0
+ 1
+
+ east_angle
+ 2.7017695903778076
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.5099999904632568
+ 0
+ 0
+ 1
+
+ glow
+
+ 13.600001335144043
+ 0.0010000000474974513
+ -0.39999997615814209
+ 1
+
+ haze_density
+
+ 0.81999999284744263
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.59999996423721313
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.42413315176963806
+ 0.087851203978061676
+ -0.90132862329483032
+ 0
+
+ max_y
+
+ 2562
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 0.74000000953674316
+ sun_angle
+ 0.087964601814746857
+ sunlight_color
+
+ 1.1999999284744263
+ 1.1999999284744263
+ 1.1999999284744263
+ 0.39999997615814209
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Bryn%20Oh%27s%20Annas%20Many%20Murders.xml b/indra/newview/app_settings/windlight/skies/Bryn%20Oh%27s%20Annas%20Many%20Murders.xml
new file mode 100644
index 000000000..f585ddb6d
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Bryn%20Oh%27s%20Annas%20Many%20Murders.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.21000000834465027
+ 0.08999999612569809
+ 0
+ 0.070000000298023224
+
+ blue_density
+
+ 0.17999999225139618
+ 0.19999998807907104
+ 0.14000000059604645
+ 0.2199999988079071
+
+ blue_horizon
+
+ 0.29999998211860657
+ 0.17999999225139618
+ 0.19999998807907104
+ 0.29999998211860657
+
+ cloud_color
+
+ 0.61000001430511475
+ 0.53999996185302734
+ 0.56000000238418579
+ 0.61000001430511475
+
+ cloud_pos_density1
+
+ 0.44999998807907104
+ 0.55000001192092896
+ 0.059999998658895493
+ 1
+
+ cloud_pos_density2
+
+ 0.53999996185302734
+ 0.47999998927116394
+ 0.039999999105930328
+ 1
+
+ cloud_scale
+
+ 0.18000000715255737
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 12.989999771118164
+ 10.510000228881836
+
+ cloud_shadow
+
+ 0.63999998569488525
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00020999999833293259
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 23
+ 0
+ 0
+ 1
+
+ east_angle
+ 2.0106194019317627
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 0.74000000953674316
+ 0
+ 0
+ 1
+
+ glow
+
+ 20
+ 0.0010000000474974513
+ -0
+ 1
+
+ haze_density
+
+ 4
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.17000000178813934
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.90482699871063232
+ 1.7484555314695172e-007
+ -0.42577937245368958
+ 0
+
+ max_y
+
+ 322
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 0
+ sun_angle
+ 6.2831854820251465
+ sunlight_color
+
+ 0.65999996662139893
+ 0.53999996185302734
+ 0.59999996423721313
+ 0.65999996662139893
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Bryn%20Oh%27s%20BLUNIVERSE.xml b/indra/newview/app_settings/windlight/skies/Bryn%20Oh%27s%20BLUNIVERSE.xml
new file mode 100644
index 000000000..8c2082e43
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Bryn%20Oh%27s%20BLUNIVERSE.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0
+ 0
+ 0.14999999105930328
+ 0.14999999105930328
+
+ blue_density
+
+ 0
+ 0.37999999523162842
+ 0.56000000238418579
+ 0.56000000238418579
+
+ blue_horizon
+
+ 0.45999997854232788
+ 0.37999999523162842
+ 0.57999998331069946
+ 0.57999998331069946
+
+ cloud_color
+
+ 0.11999999731779099
+ 0.10999999940395355
+ 0.11999999731779099
+ 0.11999999731779099
+
+ cloud_pos_density1
+
+ 0.69999998807907104
+ 0.34999999403953552
+ 0.79999995231628418
+ 1
+
+ cloud_pos_density2
+
+ 0.29999998211860657
+ 0.17000000178813934
+ 0.17000000178813934
+ 1
+
+ cloud_scale
+
+ 0.39999997615814209
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.359999656677246
+ 10.029999732971191
+
+ cloud_shadow
+
+ 0.29999998211860657
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 9.9999997473787516e-005
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 37.200000762939453
+ 0
+ 0
+ 1
+
+ east_angle
+ 1.1938052177429199
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.0099999904632568
+ 0
+ 0
+ 1
+
+ glow
+
+ 3.8000011444091797
+ 0.0010000000474974513
+ -1.5999999046325684
+ 1
+
+ haze_density
+
+ 1.2699999809265137
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.35999998450279236
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0.76900023221969604
+ 0.56208312511444092
+ -0.30446872115135193
+ 0
+
+ max_y
+
+ 349
+ 0
+ 0
+ 1
+
+ preset_num
+ 24
+ star_brightness
+ 2
+ sun_angle
+ 2.5446903705596924
+ sunlight_color
+
+ 1.4099999666213989
+ 1.6500000953674316
+ 2.0399999618530273
+ 2.0399999618530273
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Bryn%20Oh%27s%20Immersiva%20Grey%20Dust.xml b/indra/newview/app_settings/windlight/skies/Bryn%20Oh%27s%20Immersiva%20Grey%20Dust.xml
new file mode 100644
index 000000000..2a07b39d0
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Bryn%20Oh%27s%20Immersiva%20Grey%20Dust.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.32999998331069946
+ 0.23999999463558197
+ 0.029999999329447746
+ 0.32999998331069946
+
+ blue_density
+
+ 0.15999999642372131
+ 0.15999999642372131
+ 0.47999998927116394
+ 0.47999998927116394
+
+ blue_horizon
+
+ 0.19999998807907104
+ 0.19999998807907104
+ 0.43999999761581421
+ 0.43999999761581421
+
+ cloud_color
+
+ 0.48999997973442078
+ 0.50999999046325684
+ 0.64999997615814209
+ 0.64999997615814209
+
+ cloud_pos_density1
+
+ 0.48999997973442078
+ 0.50999999046325684
+ 0.2199999988079071
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.039999999105930328
+ 1
+
+ cloud_scale
+
+ 0.11999999731779099
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.659999847412109
+ 20
+
+ cloud_shadow
+
+ 0.70999997854232788
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00018999999156221747
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 24.30000114440918
+ 0
+ 0
+ 1
+
+ east_angle
+ 2.3876104354858398
+ enable_cloud_scroll
+
+ 1
+ 0
+
+ gamma
+
+ 0.94999998807907104
+ 0
+ 0
+ 1
+
+ glow
+
+ 20
+ 0.0010000000474974513
+ -0.29999998211860657
+ 1
+
+ haze_density
+
+ 3.7799999713897705
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.15999999642372131
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0.64833343029022217
+ 0.32094338536262512
+ 0.69040501117706299
+ 0
+
+ max_y
+
+ 376
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 0
+ sun_angle
+ 2.8148672580718994
+ sunlight_color
+
+ 0.75
+ 0.71999996900558472
+ 0.77999997138977051
+ 0.77999997138977051
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Bryn%20Oh%27s%20Mayfly.xml b/indra/newview/app_settings/windlight/skies/Bryn%20Oh%27s%20Mayfly.xml
new file mode 100644
index 000000000..272d1e041
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Bryn%20Oh%27s%20Mayfly.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.21000000834465027
+ 0.23999999463558197
+ 0.32999998331069946
+ 0.10999999940395355
+
+ blue_density
+
+ 0.15999999642372131
+ 0.43999999761581421
+ 0.89999997615814209
+ 0.89999997615814209
+
+ blue_horizon
+
+ 0
+ 0
+ 0.059999998658895493
+ 0.029999999329447746
+
+ cloud_color
+
+ 0.29999998211860657
+ 0.31999999284744263
+ 0.22999998927116394
+ 0.31999999284744263
+
+ cloud_pos_density1
+
+ 0.98999994993209839
+ 1
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.15000000596046448
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.359999656677246
+ 10.219999313354492
+
+ cloud_shadow
+
+ 0.42999997735023499
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00052000000141561031
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 3.4000000953674316
+ 0
+ 0
+ 1
+
+ east_angle
+ 4.8380527496337891
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1
+ 0
+ 0
+ 1
+
+ glow
+
+ 7.7999997138977051
+ 0.0010000000474974513
+ -0.59999996423721313
+ 1
+
+ haze_density
+
+ 1.1100000143051147
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.12999999523162842
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.98646044731140137
+ 0.10661106556653976
+ -0.12461899220943451
+ 0
+
+ max_y
+
+ 591
+ 0
+ 0
+ 1
+
+ preset_num
+ 22
+ star_brightness
+ 0.71999996900558472
+ sun_angle
+ 3.0347785949707031
+ sunlight_color
+
+ 1.5
+ 1.5299999713897705
+ 2.8499999046325684
+ 0.94999998807907104
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Fairy%20blue%20%28Paulina%29.xml b/indra/newview/app_settings/windlight/skies/Fairy%20blue%20%28Paulina%29.xml
new file mode 100644
index 000000000..a426aac29
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Fairy%20blue%20%28Paulina%29.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 1.2300000190734863
+ 1.2300000190734863
+ 1.1914535760879517
+ 0.40999999642372131
+
+ blue_density
+
+ 0.2199999988079071
+ 0.57999998331069946
+ 0.55851858854293823
+ 0.68000000715255737
+
+ blue_horizon
+
+ 0.2159720099190805
+ 0.36269319055529792
+ 0.41333344578742803
+ 0.62444435060024084
+
+ cloud_color
+
+ 0.22616269560725816
+ 0.22616269560725816
+ 0.22616269560725816
+ 0.99997991561308353
+
+ cloud_pos_density1
+
+ 0.4699999988079071
+ 0.5
+ 0.88000017954328535
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999998605913369
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.499400261264498
+ 10.010999906567616
+
+ cloud_shadow
+
+ 0.22999998927116394
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00011000000085914508
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 16.200000762939453
+ 0
+ 0
+ 1
+
+ east_angle
+ 6.2831854820251465
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 1.8899999856948853
+ 0
+ 0
+ 1
+
+ glow
+
+ 0.19999980926513672
+ 0.0010000000474974513
+ -2.2000000476837158
+ 1
+
+ haze_density
+
+ 1.8899999856948853
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 1.2670240323586768e-007
+ 0.68911367654800415
+ -0.72465324401855469
+ 0
+
+ max_y
+
+ 403
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 1.2999999523162842
+ sun_angle
+ 2.3813273906707764
+ sunlight_color
+
+ 0.52803641557693481
+ 0.52897685766220093
+ 0.56999999284744263
+ 0.18999999761581421
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Fairy%20dark%20blue%20%28Paulina%29.xml b/indra/newview/app_settings/windlight/skies/Fairy%20dark%20blue%20%28Paulina%29.xml
new file mode 100644
index 000000000..4fbdfe121
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Fairy%20dark%20blue%20%28Paulina%29.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.58604651689529419
+ 0.7813953161239624
+ 1.0499999523162842
+ 0.34999999403953552
+
+ blue_density
+
+ 0.43999999761581421
+ 0.43999999761581421
+ 0.43999999761581421
+ 0.2199999988079071
+
+ blue_horizon
+
+ 0.2159720099190805
+ 0.36269319055529792
+ 0.41333344578742803
+ 0.62444435060024084
+
+ cloud_color
+
+ 0.22616269560725816
+ 0.22616269560725816
+ 0.22616269560725816
+ 0.99997991561308353
+
+ cloud_pos_density1
+
+ 0.4699999988079071
+ 0.5
+ 0.88000017954328535
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999998605913369
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.499400261264498
+ 10.010999906567616
+
+ cloud_shadow
+
+ 0.22999998927116394
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.0002899999963119626
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 16.200000762939453
+ 0
+ 0
+ 1
+
+ east_angle
+ 1.1938052177429199
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 1.6200000047683716
+ 0
+ 0
+ 1
+
+ glow
+
+ 0.19999980926513672
+ 0.0010000000474974513
+ -2.2000000476837158
+ 1
+
+ haze_density
+
+ 1.8899999856948853
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.9034002423286438
+ 0.23649945855140686
+ 0.35768145322799683
+ 1
+
+ max_y
+
+ 1047
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 1.2999999523162842
+ sun_angle
+ 3.3803541660308838
+ sunlight_color
+
+ 2.3344762325286865
+ 2.3386342525482178
+ 2.5199999809265137
+ 0.8399999737739563
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Fairy%20light%20pink%20%28Paulina%29.xml b/indra/newview/app_settings/windlight/skies/Fairy%20light%20pink%20%28Paulina%29.xml
new file mode 100644
index 000000000..a3d67ac73
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Fairy%20light%20pink%20%28Paulina%29.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 1.7400000095367432
+ 1.4500001668930054
+ 1.353333592414856
+ 0.57999998331069946
+
+ blue_density
+
+ 0.17032256722450256
+ 0.47999998927116394
+ 0.3449999988079071
+ 0.23999999463558197
+
+ blue_horizon
+
+ 0.93999999761581421
+ 0.2199999988079071
+ 0.25999999046325684
+ 0.93999999761581421
+
+ cloud_color
+
+ 0.22616269560725816
+ 0.22616269560725816
+ 0.22616269560725816
+ 0.99997991561308353
+
+ cloud_pos_density1
+
+ 0.4699999988079071
+ 0.5
+ 0.88000017954328535
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999998605913369
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.499400261264498
+ 10.010999906567616
+
+ cloud_shadow
+
+ 0.22999998927116394
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00089999998454004526
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 4.0999999046325684
+ 0
+ 0
+ 1
+
+ east_angle
+ 4.6495571136474609
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 1.2799999713897705
+ 0
+ 0
+ 1
+
+ glow
+
+ 0.19999980926513672
+ 0.0010000000474974513
+ -2.2000000476837158
+ 1
+
+ haze_density
+
+ 0.2199999988079071
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.08999999612569809
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0.72322285175323486
+ 0.68911415338516235
+ -0.045501336455345154
+ 1
+
+ max_y
+
+ 4000
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 2
+ sun_angle
+ 3.9018585681915283
+ sunlight_color
+
+ 1.9521123170852661
+ 2.0000483989715576
+ 2.0999999046325684
+ 0.69999998807907104
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Fairy%20warm%20pinks%20%28Paulina%29.xml b/indra/newview/app_settings/windlight/skies/Fairy%20warm%20pinks%20%28Paulina%29.xml
new file mode 100644
index 000000000..72d3345c4
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Fairy%20warm%20pinks%20%28Paulina%29.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.68999993801116943
+ 0.44999998807907104
+ 0.42000001668930054
+ 0.68999993801116943
+
+ blue_density
+
+ 0.25714284181594849
+ 0.71428567171096802
+ 1
+ 0.5
+
+ blue_horizon
+
+ 0.56000000238418579
+ 0.17999999225139618
+ 0.25999999046325684
+ 0.56000000238418579
+
+ cloud_color
+
+ 0.22616269560725816
+ 0.22616269560725816
+ 0.22616269560725816
+ 0.99997991561308353
+
+ cloud_pos_density1
+
+ 0.4699999988079071
+ 0.5
+ 0.88000017954328535
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999998605913369
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.499400261264498
+ 10.010999906567616
+
+ cloud_shadow
+
+ 0.22999998927116394
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00042999998549930751
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 9.5
+ 0
+ 0
+ 1
+
+ east_angle
+ 0.81681406497955322
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 1.8199999332427979
+ 0
+ 0
+ 1
+
+ glow
+
+ 0.19999980926513672
+ 0.0010000000474974513
+ -2.2000000476837158
+ 1
+
+ haze_density
+
+ 0.31999999284744263
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.029999999329447746
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0.63206756114959717
+ 0.49818456172943115
+ -0.59355098009109497
+ 1
+
+ max_y
+
+ 4000
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 2
+ sun_angle
+ 5.7616815567016602
+ sunlight_color
+
+ 1.7400000095367432
+ 1.5899999141693115
+ 0.71999996900558472
+ 1.7400000095367432
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Midday.xml b/indra/newview/app_settings/windlight/skies/Midday.xml
new file mode 100644
index 000000000..119b3e141
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Midday.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 1.0499999523162842
+ 1.0499999523162842
+ 1.0499999523162842
+ 0.34999999403953552
+
+ blue_density
+
+ 0.24475815892219543
+ 0.44872328639030457
+ 0.75999999046325684
+ 0.37999999523162842
+
+ blue_horizon
+
+ 0.49548381567001343
+ 0.49548381567001343
+ 0.63999998569488525
+ 0.31999999284744263
+
+ cloud_color
+
+ 0.40999999642372131
+ 0.40999999642372131
+ 0.40999999642372131
+ 0.40999999642372131
+
+ cloud_pos_density1
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999998688697815
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.199999809265137
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.26999998092651367
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00017999998817685992
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 0.80000001192092896
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1
+ 0
+ 0
+ 1
+
+ glow
+
+ 5
+ 0.0010000000474974513
+ -0.47999998927116394
+ 1
+
+ haze_density
+
+ 0.69999998807907104
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.18999999761581421
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0
+ 1
+ -4.3711388286737929e-008
+ 0
+
+ max_y
+
+ 1605
+ 0
+ 0
+ 1
+
+ preset_num
+ 22
+ star_brightness
+ 0
+ sun_angle
+ 1.5707963705062866
+ sunlight_color
+
+ 0.7342105507850647
+ 0.78157895803451538
+ 0.89999997615814209
+ 0.29999998211860657
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Midnight.xml b/indra/newview/app_settings/windlight/skies/Midnight.xml
new file mode 100644
index 000000000..0aba31214
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Midnight.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.20405027270317078
+ 0.24246673285961151
+ 0.32999998331069946
+ 0.10999999940395355
+
+ blue_density
+
+ 0.44999998807907104
+ 0.44999998807907104
+ 0.44999998807907104
+ 1
+
+ blue_horizon
+
+ 0.23999999463558197
+ 0.23999999463558197
+ 0.23999999463558197
+ 1
+
+ cloud_color
+
+ 0.22615399956703186
+ 0.22615399956703186
+ 0.22615399956703186
+ 1
+
+ cloud_pos_density1
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.87999999523162842
+ 1
+
+ cloud_pos_density2
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999998688697815
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.26999998092651367
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00030000001424923539
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 0
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1
+ 0
+ 0
+ 1
+
+ glow
+
+ 5
+ 0.0010000000474974513
+ -0.47999998927116394
+ 1
+
+ haze_density
+
+ 4
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0
+ 1
+ -4.8876205482883961e-007
+ 1
+
+ max_y
+
+ 906.20001220703125
+ 0
+ 0
+ 1
+
+ preset_num
+ 22
+ star_brightness
+ 2
+ sun_angle
+ 4.7123894691467285
+ sunlight_color
+
+ 0.34876692295074463
+ 0.35574248433113098
+ 0.65999996662139893
+ 0.2199999988079071
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Black%20fog%201.xml b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Black%20fog%201.xml
new file mode 100644
index 000000000..4dee8354e
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Black%20fog%201.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0
+ 0
+ 0
+ 0
+
+ blue_density
+
+ 0.5
+ 0.5
+ 0.5
+ 0.25
+
+ blue_horizon
+
+ 0.56000000238418579
+ 0.56000000238418579
+ 0.56000000238418579
+ 0.2800000011920929
+
+ cloud_color
+
+ 0.22617273092134837
+ 0.2261830306064212
+ 0.22618354559006093
+ 1
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.12499716758729562
+ 1
+
+ cloud_scale
+
+ 0.22999998927116394
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.499370784775238
+ 10.011009025563908
+
+ cloud_shadow
+
+ 0.26999998092651367
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00089999998454004526
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 100
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 0.19999998807907104
+ 0
+ 0
+ 1
+
+ glow
+
+ 20
+ 0.0010000000474974513
+ -2.5
+ 1
+
+ haze_density
+
+ 0
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0
+ 1
+ -4.3711388286737929e-008
+ 0
+
+ max_y
+
+ 4000
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 2
+ sun_angle
+ 1.5707963705062866
+ sunlight_color
+
+ 3
+ 3
+ 3
+ 1
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Black%20fog%202.xml b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Black%20fog%202.xml
new file mode 100644
index 000000000..ef93fdc08
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Black%20fog%202.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.29999998211860657
+ 0.29999998211860657
+ 0.29999998211860657
+ 0.099999994039535522
+
+ blue_density
+
+ 0.5
+ 0.5
+ 0.5
+ 0.25
+
+ blue_horizon
+
+ 0.56000000238418579
+ 0.56000000238418579
+ 0.56000000238418579
+ 0.2800000011920929
+
+ cloud_color
+
+ 0
+ 0
+ 0
+ 0
+
+ cloud_pos_density1
+
+ 0
+ 0
+ 0
+ 1
+
+ cloud_pos_density2
+
+ 0
+ 0
+ 0
+ 1
+
+ cloud_scale
+
+ 0.0099999997764825821
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.499370784775238
+ 10.011009025563908
+
+ cloud_shadow
+
+ 0
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00089999998454004526
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 100
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 0.19999998807907104
+ 0
+ 0
+ 1
+
+ glow
+
+ 0.19999980926513672
+ 0.0010000000474974513
+ -2.5
+ 1
+
+ haze_density
+
+ 0
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0
+ 1
+ -4.3711388286737929e-008
+ 0
+
+ max_y
+
+ 4000
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 0
+ sun_angle
+ 1.5707963705062866
+ sunlight_color
+
+ 3
+ 3
+ 3
+ 1
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Drawing%20blue.xml b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Drawing%20blue.xml
new file mode 100644
index 000000000..69a23e7f9
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Drawing%20blue.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0
+ 0
+ 3
+ 3
+
+ blue_density
+
+ 0
+ 0
+ 2
+ 2
+
+ blue_horizon
+
+ 0
+ 0
+ 2
+ 2
+
+ cloud_color
+
+ 0
+ 1
+ 0
+ 1
+
+ cloud_pos_density1
+
+ 1
+ 1
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 1
+ 1
+ 1
+ 1
+
+ cloud_scale
+
+ 1
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 9.8000001907348633
+ 8.9899997711181641
+
+ cloud_shadow
+
+ 0
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00026999998954124749
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 100
+ 0
+ 0
+ 1
+
+ east_angle
+ 2.6389377117156982
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 0.0099999997764825821
+ 0
+ 0
+ 1
+
+ glow
+
+ 20
+ 0.0010000000474974513
+ 0
+ 1
+
+ haze_density
+
+ 0.0099999997764825821
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 1
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0.48175370693206787
+ 0
+ 0.87630659341812134
+ 0
+
+ max_y
+
+ 1
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 0
+ sun_angle
+ 3.2107079029083252
+ sunlight_color
+
+ 0
+ 0
+ 3
+ 3
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Drawing%20extreme.xml b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Drawing%20extreme.xml
new file mode 100644
index 000000000..09d9c3546
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Drawing%20extreme.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 3
+ 3
+ 3
+ 3
+
+ blue_density
+
+ 2
+ 2
+ 2
+ 2
+
+ blue_horizon
+
+ 2
+ 2
+ 2
+ 2
+
+ cloud_color
+
+ 1
+ 1
+ 1
+ 1
+
+ cloud_pos_density1
+
+ 1
+ 1
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 1
+ 1
+ 1
+ 1
+
+ cloud_scale
+
+ 1
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 9.8000001907348633
+ 8.9899997711181641
+
+ cloud_shadow
+
+ 0
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00089999998454004526
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 100
+ 0
+ 0
+ 1
+
+ east_angle
+ 3.1415927410125732
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 0.0099999997764825821
+ 0
+ 0
+ 1
+
+ glow
+
+ 0.19999980926513672
+ 0.0010000000474974513
+ -2.5
+ 1
+
+ haze_density
+
+ 0
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -8.7422776573475858e-008
+ 0
+ 1
+ 0
+
+ max_y
+
+ 1
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 0
+ sun_angle
+ 3.1415927410125732
+ sunlight_color
+
+ 3
+ 3
+ 3
+ 3
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Drawing%20green.xml b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Drawing%20green.xml
new file mode 100644
index 000000000..9343abe71
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Drawing%20green.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0
+ 3
+ 0
+ 3
+
+ blue_density
+
+ 0
+ 2
+ 0
+ 2
+
+ blue_horizon
+
+ 0
+ 2
+ 0
+ 2
+
+ cloud_color
+
+ 0
+ 1
+ 0
+ 1
+
+ cloud_pos_density1
+
+ 1
+ 1
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 1
+ 1
+ 1
+ 1
+
+ cloud_scale
+
+ 1
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 9.8000001907348633
+ 8.9899997711181641
+
+ cloud_shadow
+
+ 0
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00026999998954124749
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 100
+ 0
+ 0
+ 1
+
+ east_angle
+ 2.6389377117156982
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 0.0099999997764825821
+ 0
+ 0
+ 1
+
+ glow
+
+ 20
+ 0.0010000000474974513
+ 0
+ 1
+
+ haze_density
+
+ 0.0099999997764825821
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 1
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0.48175376653671265
+ 0
+ 0.87630665302276611
+ 0
+
+ max_y
+
+ 1
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 0
+ sun_angle
+ 3.2107079029083252
+ sunlight_color
+
+ 0
+ 3
+ 0
+ 3
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Drawing%20red.xml b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Drawing%20red.xml
new file mode 100644
index 000000000..0ce00b1e8
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Drawing%20red.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 3
+ 0
+ 0
+ 3
+
+ blue_density
+
+ 2
+ 0
+ 0
+ 2
+
+ blue_horizon
+
+ 2
+ 0
+ 0
+ 2
+
+ cloud_color
+
+ 0
+ 1
+ 0
+ 1
+
+ cloud_pos_density1
+
+ 1
+ 1
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 1
+ 1
+ 1
+ 1
+
+ cloud_scale
+
+ 1
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 9.8000001907348633
+ 8.9899997711181641
+
+ cloud_shadow
+
+ 0
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00026999998954124749
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 100
+ 0
+ 0
+ 1
+
+ east_angle
+ 2.6389377117156982
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 0.0099999997764825821
+ 0
+ 0
+ 1
+
+ glow
+
+ 20
+ 0.0010000000474974513
+ 0
+ 1
+
+ haze_density
+
+ 0.0099999997764825821
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 1
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0.48175376653671265
+ 0
+ 0.87630665302276611
+ 0
+
+ max_y
+
+ 1
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 0
+ sun_angle
+ 3.2107079029083252
+ sunlight_color
+
+ 3
+ 0
+ 0
+ 3
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Drawing%20underground%20comic.xml b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Drawing%20underground%20comic.xml
new file mode 100644
index 000000000..62ebaa233
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20Drawing%20underground%20comic.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 3
+ 3
+ 3
+ 3
+
+ blue_density
+
+ 0.35000002384185791
+ 0.28999707102775574
+ 0.57999998331069946
+ 0.57999998331069946
+
+ blue_horizon
+
+ 0.56000000238418579
+ 0.42976745963096619
+ 0.2734883725643158
+ 0.56000000238418579
+
+ cloud_color
+
+ 1
+ 1
+ 1
+ 1
+
+ cloud_pos_density1
+
+ 1
+ 1
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 1
+ 1
+ 1
+ 1
+
+ cloud_scale
+
+ 1
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 9.8000001907348633
+ 8.9899997711181641
+
+ cloud_shadow
+
+ 0
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00020999999833293259
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 24.200000762939453
+ 0
+ 0
+ 1
+
+ east_angle
+ 3.1415927410125732
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 0.0099999997764825821
+ 0
+ 0
+ 1
+
+ glow
+
+ 0.19999980926513672
+ 0.0010000000474974513
+ -2.5
+ 1
+
+ haze_density
+
+ 0.56000000238418579
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.2199999988079071
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -8.7422776573475858e-008
+ 0
+ 1
+ 0
+
+ max_y
+
+ 632
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 0
+ sun_angle
+ 3.1415927410125732
+ sunlight_color
+
+ 3
+ 3
+ 3
+ 3
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Orac%20%2D%20fog.xml b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20fog.xml
new file mode 100644
index 000000000..088f09cbb
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20fog.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0
+ 0
+ 0
+ 0
+
+ blue_density
+
+ 0.39999997615814209
+ 0.39999997615814209
+ 0.39999997615814209
+ 0.19999998807907104
+
+ blue_horizon
+
+ 1
+ 1
+ 1
+ 0.5
+
+ cloud_color
+
+ 0.22617273092134837
+ 0.2261830306064212
+ 0.22618354559006093
+ 1
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.12499716758729562
+ 1
+
+ cloud_scale
+
+ 0.22999998927116394
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.499370784775238
+ 10.011009025563908
+
+ cloud_shadow
+
+ 0.26999998092651367
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00089999998454004526
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 100
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 1
+ 0
+ 0
+ 1
+
+ glow
+
+ 0.19999980926513672
+ 0.0010000000474974513
+ 0
+ 1
+
+ haze_density
+
+ 0.5
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.32999998331069946
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0
+ 1
+ -4.3711388286737929e-008
+ 0
+
+ max_y
+
+ 4000
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 0
+ sun_angle
+ 1.5707963705062866
+ sunlight_color
+
+ 3
+ 3
+ 3
+ 1
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Orac%20%2D%20gray.xml b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20gray.xml
new file mode 100644
index 000000000..fbbf36485
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20gray.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0
+ 0
+ 0
+ 0
+
+ blue_density
+
+ 2
+ 2
+ 2
+ 1
+
+ blue_horizon
+
+ 2
+ 2
+ 2
+ 1
+
+ cloud_color
+
+ 0.22617273092134837
+ 0.2261830306064212
+ 0.22618354559006093
+ 1
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.12499716758729562
+ 1
+
+ cloud_scale
+
+ 0.22999998927116394
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.499370784775238
+ 10.011009025563908
+
+ cloud_shadow
+
+ 0.26999998092651367
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00089999998454004526
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 100
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 1
+ 0
+ 0
+ 1
+
+ glow
+
+ 20
+ 0.0010000000474974513
+ 0
+ 1
+
+ haze_density
+
+ 1
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0
+ 0
+ 1
+ 0
+
+ max_y
+
+ 1
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 0
+ sun_angle
+ 0
+ sunlight_color
+
+ 3
+ 3
+ 3
+ 1
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Orac%20%2D%20green.xml b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20green.xml
new file mode 100644
index 000000000..8c5e8f119
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Orac%20%2D%20green.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0
+ 1.2599999904632568
+ 0
+ 1.2599999904632568
+
+ blue_density
+
+ 0.019999999552965164
+ 0.019999999552965164
+ 0.019999999552965164
+ 0.0099999997764825821
+
+ blue_horizon
+
+ 0
+ 0
+ 0
+ 0
+
+ cloud_color
+
+ 0
+ 0.5
+ 0
+ 0.5
+
+ cloud_pos_density1
+
+ 0
+ 0
+ 0.5
+ 1
+
+ cloud_pos_density2
+
+ 0
+ 0
+ 0
+ 1
+
+ cloud_scale
+
+ 1
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.5
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 0
+ 0
+ 0
+ 1
+
+ east_angle
+ 0.062831856310367584
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 1
+ 0
+ 0
+ 1
+
+ glow
+
+ 20
+ 0.0010000000474974513
+ 0
+ 1
+
+ haze_density
+
+ 0
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.05404643714427948
+ 0.509041428565979
+ 0.85904353857040405
+ 0
+
+ max_y
+
+ 1
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 0
+ sun_angle
+ 0.53407078981399536
+ sunlight_color
+
+ 0
+ 1.1399999856948853
+ 0
+ 1.1399999856948853
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Orange%20Incubus.xml b/indra/newview/app_settings/windlight/skies/Orange%20Incubus.xml
new file mode 100644
index 000000000..6ab92ce6f
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Orange%20Incubus.xml
@@ -0,0 +1,142 @@
+
+
+
+ ambient
+
+ 1.8999998569488525
+ 0.80384618043899536
+ 2.8499999046325684
+ 0.94999998807907104
+
+ blue_density
+
+ 0.43999999761581421
+ 0
+ 0
+ 0.2199999988079071
+
+ blue_horizon
+
+ 0.2800000011920929
+ 0
+ 0
+ 0.2800000011920929
+
+ cloud_color
+
+ 0.75
+ 0.56999999284744263
+ 0
+ 0.75
+
+ cloud_pos_density1
+
+ 1
+ 0.48999997973442078
+ 0.34999999403953552
+ 1
+
+ cloud_pos_density2
+
+ 0.31000000238418579
+ 0
+ 0
+ 1
+
+ cloud_scale
+
+ 0.59999996423721313
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 8.1899995803833008
+ 9.7199993133544922
+
+ cloud_shadow
+
+ 0.28999999165534973
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 9.9999997473787516e-006
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 18.100000381469727
+ 0
+ 0
+ 1
+
+ east_angle
+ 2.4504423141479492
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 0.57999998331069946
+ 0
+ 0
+ 1
+
+ glow
+
+ 20
+ 0.0010000000474974513
+ -2.2000000476837158
+ 1
+
+ haze_density
+
+ 4
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.019999999552965164
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 3.1154863222582208e-007
+ 1
+ 3.765976543945726e-007
+ 1
+
+ max_y
+
+ 4000
+ 0
+ 0
+ 1
+
+ preset_num
+ 26
+ star_brightness
+ 2
+ sun_angle
+ 4.7123894691467285
+ sunlight_color
+
+ 0
+ 0.80999994277954102
+ 2.0699999332427979
+ 2.0699999332427979
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/PaperSnow.xml b/indra/newview/app_settings/windlight/skies/PaperSnow.xml
new file mode 100644
index 000000000..a34ac8df6
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/PaperSnow.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.62999999523162842
+ 0.62999999523162842
+ 0.62999999523162842
+ 0.62999999523162842
+
+ blue_density
+
+ 0.56000000238418579
+ 0.56000000238418579
+ 0.23999999463558197
+ 0.56000000238418579
+
+ blue_horizon
+
+ 0.59999996423721313
+ 0.59999996423721313
+ 0.68000000715255737
+ 0.74000000953674316
+
+ cloud_color
+
+ 0.12862999737262726
+ 0.12862999737262726
+ 0.12862999737262726
+ 1
+
+ cloud_pos_density1
+
+ 0.88419097661972046
+ 0.53047597408294678
+ 0.4270470142364502
+ 1
+
+ cloud_pos_density2
+
+ 0.38419300317764282
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999998688697815
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10
+ 10
+
+ cloud_shadow
+
+ 0.61711597442626953
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00013000000035390258
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 16.200000762939453
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 0.94999998807907104
+ 0
+ 0
+ 1
+
+ glow
+
+ 6.4079799652099609
+ 0.0012815999798476696
+ -0.44999998807907104
+ 1
+
+ haze_density
+
+ 4
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.12999999523162842
+ 0.21744099259376526
+ 0.21744099259376526
+ 1
+
+ lightnorm
+
+ 0
+ 0.25477027893066406
+ -0.96700161695480347
+ 1
+
+ max_y
+
+ 4000
+ 0
+ 0
+ 1
+
+ preset_num
+ 2
+ star_brightness
+ 0
+ sun_angle
+ 6.0255751609802246
+ sunlight_color
+
+ 3
+ 3
+ 3
+ 1
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Abracadabra.xml b/indra/newview/app_settings/windlight/skies/Places%20Abracadabra.xml
new file mode 100644
index 000000000..21e73f0a4
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Abracadabra.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.35999998450279236
+ 0.25200003385543823
+ 0
+ 0.11999999731779099
+
+ blue_density
+
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.48999997973442078
+
+ blue_horizon
+
+ 0.47999998927116394
+ 0.29999998211860657
+ 0.2800000011920929
+ 0.51999998092651367
+
+ cloud_color
+
+ 0.50999999046325684
+ 0.50999999046325684
+ 0.50999999046325684
+ 1
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.079999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.25999999046325684
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00022000000171829015
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 31.100000381469727
+ 0
+ 0
+ 1
+
+ east_angle
+ 4.3353981971740723
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1
+ 0
+ 0
+ 1
+
+ glow
+
+ 5
+ 0.0010000000474974513
+ -0.33000001311302185
+ 1
+
+ haze_density
+
+ 1.2699999809265137
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.2800000011920929
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.86661803722381592
+ 0.36227512359619141
+ 0.34311801195144653
+ 0
+
+ max_y
+
+ 752
+ 0
+ 0
+ 1
+
+ preset_num
+ 21
+ star_brightness
+ 0
+ sun_angle
+ 2.7708849906921387
+ sunlight_color
+
+ 1.3799998760223389
+ 1.3799998760223389
+ 1.3799998760223389
+ 0.45999997854232788
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Abracadabra2.xml b/indra/newview/app_settings/windlight/skies/Places%20Abracadabra2.xml
new file mode 100644
index 000000000..55158516c
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Abracadabra2.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.35999998450279236
+ 0.25200003385543823
+ 0
+ 0.11999999731779099
+
+ blue_density
+
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.48999997973442078
+
+ blue_horizon
+
+ 0.47999998927116394
+ 0.53999996185302734
+ 0.45999997854232788
+ 0.53999996185302734
+
+ cloud_color
+
+ 0.50999999046325684
+ 0.50999999046325684
+ 0.50999999046325684
+ 1
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.079999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.25999999046325684
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00013000000035390258
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 24.30000114440918
+ 0
+ 0
+ 1
+
+ east_angle
+ 5.9061942100524902
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.6899999380111694
+ 0
+ 0
+ 1
+
+ glow
+
+ 15.59999942779541
+ 0.0010000000474974513
+ -0.59999996423721313
+ 1
+
+ haze_density
+
+ 1.2699999809265137
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.26999998092651367
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.34311828017234802
+ 0.36227512359619141
+ -0.86661791801452637
+ 0
+
+ max_y
+
+ 483
+ 0
+ 0
+ 1
+
+ preset_num
+ 21
+ star_brightness
+ 0
+ sun_angle
+ 2.7708849906921387
+ sunlight_color
+
+ 1.3799998760223389
+ 1.3799998760223389
+ 1.3799998760223389
+ 0.45999997854232788
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Abracadabra3.xml b/indra/newview/app_settings/windlight/skies/Places%20Abracadabra3.xml
new file mode 100644
index 000000000..9b5388ab6
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Abracadabra3.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.35999998450279236
+ 0.25200003385543823
+ 0
+ 0.11999999731779099
+
+ blue_density
+
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.48999997973442078
+
+ blue_horizon
+
+ 0.47999998927116394
+ 0.53999996185302734
+ 0.45999997854232788
+ 0.53999996185302734
+
+ cloud_color
+
+ 0.50999999046325684
+ 0.50999999046325684
+ 0.50999999046325684
+ 1
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.079999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.25999999046325684
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00013000000035390258
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 24.30000114440918
+ 0
+ 0
+ 1
+
+ east_angle
+ 5.026547908782959
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.6899999380111694
+ 0
+ 0
+ 1
+
+ glow
+
+ 15.59999942779541
+ 0.0010000000474974513
+ -0.59999996423721313
+ 1
+
+ haze_density
+
+ 1.2699999809265137
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.26999998092651367
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.88645249605178833
+ 0.36227512359619141
+ -0.28802555799484253
+ 0
+
+ max_y
+
+ 483
+ 0
+ 0
+ 1
+
+ preset_num
+ 21
+ star_brightness
+ 0
+ sun_angle
+ 2.7708849906921387
+ sunlight_color
+
+ 1.3799998760223389
+ 1.3799998760223389
+ 1.3799998760223389
+ 0.45999997854232788
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Annamaria.xml b/indra/newview/app_settings/windlight/skies/Places%20Annamaria.xml
new file mode 100644
index 000000000..15876975d
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Annamaria.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.17999999225139618
+ 0.17999999225139618
+ 0
+ 0.17999999225139618
+
+ blue_density
+
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.75999999046325684
+ 1
+
+ blue_horizon
+
+ 0.084897957742214203
+ 0.11000000685453415
+ 0.25999999046325684
+ 0.12999999523162842
+
+ cloud_color
+
+ 0.47999998927116394
+ 0.47999998927116394
+ 0.47999998927116394
+ 0.47999998927116394
+
+ cloud_pos_density1
+
+ 0.63999998569488525
+ 0.5
+ 0.56999999284744263
+ 1
+
+ cloud_pos_density2
+
+ 0.37000000476837158
+ 0.35999998450279236
+ 0
+ 1
+
+ cloud_scale
+
+ 0.079999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.219999775290489
+ 9.9899997767060995
+
+ cloud_shadow
+
+ 0.31999999284744263
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00013000000035390258
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 2
+ 0
+ 0
+ 1
+
+ east_angle
+ 3.1415927410125732
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1
+ 0
+ 0
+ 1
+
+ glow
+
+ 5.3999996185302734
+ 0.0010000000474974513
+ -0.33000001311302185
+ 1
+
+ haze_density
+
+ 1.8899999856948853
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.23999999463558197
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -8.1484252234531596e-008
+ 0.36227512359619141
+ 0.93207120895385742
+ 0
+
+ max_y
+
+ 671
+ 0
+ 0
+ 1
+
+ preset_num
+ 21
+ star_brightness
+ 0.2199999988079071
+ sun_angle
+ 2.7708849906921387
+ sunlight_color
+
+ 1.3799998760223389
+ 1.3799998760223389
+ 1.3799998760223389
+ 1.3799998760223389
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Astryls%20Wild.xml b/indra/newview/app_settings/windlight/skies/Places%20Astryls%20Wild.xml
new file mode 100644
index 000000000..c9783190b
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Astryls%20Wild.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 1.7372221946716309
+ 1.7699999809265137
+ 1.5899999141693115
+ 1.7999999523162842
+
+ blue_density
+
+ 0.5
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.48999997973442078
+
+ blue_horizon
+
+ 0.31999999284744263
+ 0.2800000011920929
+ 0.37999999523162842
+ 0.37999999523162842
+
+ cloud_color
+
+ 0.50999999046325684
+ 0.50999999046325684
+ 0.50999999046325684
+ 1
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.079999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.25999999046325684
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00053999997908249497
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 8.8000001907348633
+ 0
+ 0
+ 1
+
+ east_angle
+ 0.56548666954040527
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 0.94999998807907104
+ 0
+ 0
+ 1
+
+ glow
+
+ 11.600000381469727
+ 0.0010000000474974513
+ -2.2999999523162842
+ 1
+
+ haze_density
+
+ 1.4299999475479126
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.15999999642372131
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0.38828861713409424
+ 0.68911367654800415
+ -0.61184495687484741
+ 0
+
+ max_y
+
+ 886
+ 0
+ 0
+ 1
+
+ preset_num
+ 21
+ star_brightness
+ 0
+ sun_angle
+ 2.3813273906707764
+ sunlight_color
+
+ 1.4399999380111694
+ 1.4699999094009399
+ 1.4399999380111694
+ 1.4699999094009399
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Babbage.xml b/indra/newview/app_settings/windlight/skies/Places%20Babbage.xml
new file mode 100644
index 000000000..a7176d14e
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Babbage.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.32999998331069946
+ 0.32999998331069946
+ 0.32999998331069946
+ 0.10999999940395355
+
+ blue_density
+
+ 0
+ 0.39999699592590332
+ 0.80000197887420654
+ 0.97999995946884155
+
+ blue_horizon
+
+ 0.16199998557567596
+ 0.76855206489562988
+ 0.89999997615814209
+ 0.44999998807907104
+
+ cloud_color
+
+ 0.69999998807907104
+ 0.69999998807907104
+ 0.69999998807907104
+ 0.69999998807907104
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 0.53999996185302734
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.29999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.39999997615814209
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00072999997064471245
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 7.4000000953674316
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1
+ 0
+ 0
+ 1
+
+ glow
+
+ 3.7999999523162842
+ 0.0010000000474974513
+ -0.5
+ 1
+
+ haze_density
+
+ 4
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.64999997615814209
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0
+ 1
+ -4.3711388286737929e-008
+ 0
+
+ max_y
+
+ 1745
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 0
+ sun_angle
+ 1.5707963705062866
+ sunlight_color
+
+ 0.53999996185302734
+ 0.53999996185302734
+ 0.53999996185302734
+ 0.17999999225139618
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Beach%20Cay%20Surreal.xml b/indra/newview/app_settings/windlight/skies/Places%20Beach%20Cay%20Surreal.xml
new file mode 100644
index 000000000..1b06037ae
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Beach%20Cay%20Surreal.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.35999998450279236
+ 0.25200003385543823
+ 0
+ 0.11999999731779099
+
+ blue_density
+
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.48999997973442078
+
+ blue_horizon
+
+ 0.47999998927116394
+ 0.53999996185302734
+ 0.45999997854232788
+ 0.53999996185302734
+
+ cloud_color
+
+ 0.50999999046325684
+ 0.50999999046325684
+ 0.50999999046325684
+ 1
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.079999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.25999999046325684
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 7.0000001869630069e-005
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 31.100000381469727
+ 0
+ 0
+ 1
+
+ east_angle
+ 4.0840702056884766
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.6899999380111694
+ 0
+ 0
+ 1
+
+ glow
+
+ 15.59999942779541
+ 0.0010000000474974513
+ -0.59999996423721313
+ 1
+
+ haze_density
+
+ 1.2699999809265137
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.26999998092651367
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.75406128168106079
+ 0.36227512359619141
+ 0.54785788059234619
+ 0
+
+ max_y
+
+ 403
+ 0
+ 0
+ 1
+
+ preset_num
+ 21
+ star_brightness
+ 0
+ sun_angle
+ 2.7708849906921387
+ sunlight_color
+
+ 1.3799998760223389
+ 1.3799998760223389
+ 1.3799998760223389
+ 0.45999997854232788
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Beach%20Cay.xml b/indra/newview/app_settings/windlight/skies/Places%20Beach%20Cay.xml
new file mode 100644
index 000000000..d4fa195fe
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Beach%20Cay.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.21000000834465027
+ 0.029999999329447746
+ 0
+ 0.21000000834465027
+
+ blue_density
+
+ 0.29999998211860657
+ 0.29999998211860657
+ 0.29999998211860657
+ 0.14999999105930328
+
+ blue_horizon
+
+ 0.47999998927116394
+ 0.17142856121063232
+ 0
+ 0.23999999463558197
+
+ cloud_color
+
+ 0.26999998092651367
+ 0.34999999403953552
+ 0.029999999329447746
+ 0.34999999403953552
+
+ cloud_pos_density1
+
+ 0.85999995470046997
+ 0.42999997735023499
+ 0.45999997854232788
+ 1
+
+ cloud_pos_density2
+
+ 1
+ 1
+ 0.099999994039535522
+ 1
+
+ cloud_scale
+
+ 0.14000000059604645
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 9.644780158996582
+ 10.423800468444824
+
+ cloud_shadow
+
+ 0.2800000011920929
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00013999998918734491
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 37.799999237060547
+ 0
+ 0
+ 1
+
+ east_angle
+ 1.7592918872833252
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 2.2999999523162842
+ 0
+ 0
+ 1
+
+ glow
+
+ 2.5999999046325684
+ 0.0013735899701714516
+ -2.5
+ 1
+
+ haze_density
+
+ 1.7300000190734863
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.14999999105930328
+ 0.13210900127887726
+ 0.13210900127887726
+ 1
+
+ lightnorm
+
+ -0.98228722810745239
+ 0
+ -0.187381312251091
+ 0
+
+ max_y
+
+ 1396
+ 0
+ 0
+ 1
+
+ preset_num
+ 5
+ star_brightness
+ 2
+ sun_angle
+ 0
+ sunlight_color
+
+ 1.9199999570846558
+ 1.7699999809265137
+ 0
+ 1.9199999570846558
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Bentham.xml b/indra/newview/app_settings/windlight/skies/Places%20Bentham.xml
new file mode 100644
index 000000000..db35e04ec
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Bentham.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.59999996423721313
+ 0.4888889491558075
+ 0.40000000596046448
+ 0.19999998807907104
+
+ blue_density
+
+ 1.059999942779541
+ 0.47638890147209167
+ 0.47638890147209167
+ 1.059999942779541
+
+ blue_horizon
+
+ 0.14000000059604645
+ 0.31999999284744263
+ 0.62000000476837158
+ 0.62000000476837158
+
+ cloud_color
+
+ 0.28999999165534973
+ 0.28999999165534973
+ 0.31999999284744263
+ 0.31999999284744263
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.079999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 9.9299993515014648
+
+ cloud_shadow
+
+ 0.32999998331069946
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00032999998074956238
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 6.8000001907348633
+ 0
+ 0
+ 1
+
+ east_angle
+ 4.7752208709716797
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.0799999237060547
+ 0
+ 0
+ 1
+
+ glow
+
+ 5
+ 0.0010000000474974513
+ -0.33000001311302185
+ 1
+
+ haze_density
+
+ 1.8899999856948853
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.23999999463558197
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.91343516111373901
+ 0.4029063880443573
+ -0.057468503713607788
+ 0
+
+ max_y
+
+ 644
+ 0
+ 0
+ 1
+
+ preset_num
+ 21
+ star_brightness
+ 0
+ sun_angle
+ 2.7269024848937988
+ sunlight_color
+
+ 2.25
+ 1.8899999856948853
+ 1.6800000667572021
+ 2.25
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Cornfield.xml b/indra/newview/app_settings/windlight/skies/Places%20Cornfield.xml
new file mode 100644
index 000000000..77416688e
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Cornfield.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 1.7400000095367432
+ 1.619999885559082
+ 1.4099999666213989
+ 2.4600000381469727
+
+ blue_density
+
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.48999997973442078
+
+ blue_horizon
+
+ 0.2800000011920929
+ 0.29999998211860657
+ 0.37999999523162842
+ 0.39999997615814209
+
+ cloud_color
+
+ 0.50999999046325684
+ 0.50999999046325684
+ 0.50999999046325684
+ 1
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.079999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.25999999046325684
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00031000000308267772
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 6.8000001907348633
+ 0
+ 0
+ 1
+
+ east_angle
+ 4.5238933563232422
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 0.74000000953674316
+ 0
+ 0
+ 1
+
+ glow
+
+ 11.600000381469727
+ 0.0010000000474974513
+ -2.2999999523162842
+ 1
+
+ haze_density
+
+ 1.4299999475479126
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.15999999642372131
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.71181762218475342
+ 0.68911367654800415
+ 0.1357865184545517
+ 0
+
+ max_y
+
+ 242
+ 0
+ 0
+ 1
+
+ preset_num
+ 21
+ star_brightness
+ 0
+ sun_angle
+ 2.3813273906707764
+ sunlight_color
+
+ 1.4399999380111694
+ 1.4399999380111694
+ 1.4399999380111694
+ 0.47999998927116394
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Cromac.xml b/indra/newview/app_settings/windlight/skies/Places%20Cromac.xml
new file mode 100644
index 000000000..efec78721
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Cromac.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 1.0799999237060547
+ 0.98999994993209839
+ 0.77999997138977051
+ 1.0799999237060547
+
+ blue_density
+
+ 0.64736837148666382
+ 0.48414888978004456
+ 0.81999999284744263
+ 0.40999999642372131
+
+ blue_horizon
+
+ 0.5
+ 0.49548381567001343
+ 0.45999997854232788
+ 0.51999998092651367
+
+ cloud_color
+
+ 0.4100000062111997
+ 0.4100000062111997
+ 0.4100000062111997
+ 0.4100000062111997
+
+ cloud_pos_density1
+
+ 0.14000000059604645
+ 0.62000000476837158
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.35999998450279236
+ 0.56999999284744263
+ 0.12999999523162842
+ 1
+
+ cloud_scale
+
+ 0.35999998450279236
+ 0
+ 0
+ 1.0000000149011612
+
+ cloud_scroll_rate
+
+ 10.199999791580112
+ 10.010999679880427
+
+ cloud_shadow
+
+ 0.29999998211860657
+ 0
+ 0
+ 1.0000000149011612
+
+ density_multiplier
+
+ 7.9999997979030013e-005
+ 0
+ 0
+ 1.0000000149011612
+
+ distance_multiplier
+
+ 5.4000000953674316
+ 0
+ 0
+ 1.0000000149011612
+
+ east_angle
+ 4.2725663185119629
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 2.8399999141693115
+ 0
+ 0
+ 1.0000000149011612
+
+ glow
+
+ 5
+ 0.0010000000474974513
+ -0.55000001192092896
+ 1
+
+ haze_density
+
+ 0.31999999284744263
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.17999999225139618
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.14154624938964844
+ 0.98768830299377441
+ 0.066606558859348297
+ 0
+
+ max_y
+
+ 805
+ 0
+ 0
+ 1.0000000149011612
+
+ preset_num
+ 28
+ star_brightness
+ 0.25999999046325684
+ sun_angle
+ 1.7278760671615601
+ sunlight_color
+
+ 0.69882339239120483
+ 0.8258824348449707
+ 1.0799999237060547
+ 0.35999998450279236
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Crucible.xml b/indra/newview/app_settings/windlight/skies/Places%20Crucible.xml
new file mode 100644
index 000000000..08c15adf0
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Crucible.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.20405015781398106
+ 0.24246659642869872
+ 0.33000011563842691
+ 0.11000042485298422
+
+ blue_density
+
+ 0.44999968444335536
+ 0.44999993884084688
+ 0.45000033684982554
+ 1
+
+ blue_horizon
+
+ 0.2399998628207527
+ 0.23999996847777538
+ 0.24000000489354534
+ 1
+
+ cloud_color
+
+ 0.22615399956703186
+ 0.22615399956703186
+ 0.22615399956703186
+ 1
+
+ cloud_pos_density1
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.87999999523162842
+ 1
+
+ cloud_pos_density2
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999998688697815
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.26999998092651367
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00030000017352815878
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 2.6920993051460229e-006
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1
+ 0
+ 0
+ 1
+
+ glow
+
+ 5
+ 0.0010000000474974513
+ -0.47999998927116394
+ 1
+
+ haze_density
+
+ 3.9999967092453517
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 1.5953180371869324e-007
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0
+ 0.99963462352752686
+ 0.027029547840356827
+ 1
+
+ max_y
+
+ 906.19966977159493
+ 0
+ 0
+ 1
+
+ preset_num
+ 22
+ star_brightness
+ 1.9999979734420776
+ sun_angle
+ 4.6853561401367187
+ sunlight_color
+
+ 0.34876771076233126
+ 0.35574326291055058
+ 0.66000120168018839
+ 0.22000041117803448
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20District8.xml b/indra/newview/app_settings/windlight/skies/Places%20District8.xml
new file mode 100644
index 000000000..0ef69a361
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20District8.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.26999998092651367
+ 0.21000000834465027
+ 0.08999999612569809
+ 0.26999998092651367
+
+ blue_density
+
+ 0.71999996900558472
+ 1.0199999809265137
+ 1.059999942779541
+ 1.059999942779541
+
+ blue_horizon
+
+ 0.35999998450279236
+ 0.36272725462913513
+ 0.41999998688697815
+ 0.5
+
+ cloud_color
+
+ 0.50999999046325684
+ 0.50999999046325684
+ 0.50999999046325684
+ 1
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.079999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.25
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00020999999833293259
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 4.7000002861022949
+ 0
+ 0
+ 1
+
+ east_angle
+ 3.3300881385803223
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.2200000286102295
+ 0
+ 0
+ 1
+
+ glow
+
+ 16.600000381469727
+ 0.0010000000474974513
+ -0.049999997019767761
+ 1
+
+ haze_density
+
+ 2.1599998474121094
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.25999999046325684
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0.17994101345539093
+ 0.27899131178855896
+ -0.94328427314758301
+ 1
+
+ max_y
+
+ 698
+ 0
+ 0
+ 1
+
+ preset_num
+ 21
+ star_brightness
+ 0
+ sun_angle
+ 3.4243361949920654
+ sunlight_color
+
+ 2.0999999046325684
+ 2.1599998474121094
+ 2.1599998474121094
+ 2.1599998474121094
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Duskwood.xml b/indra/newview/app_settings/windlight/skies/Places%20Duskwood.xml
new file mode 100644
index 000000000..2389e9660
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Duskwood.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.17999999225139618
+ 0.17999999225139618
+ 0
+ 0.17999999225139618
+
+ blue_density
+
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.75999999046325684
+ 1
+
+ blue_horizon
+
+ 0.084897957742214203
+ 0.11000000685453415
+ 0.25999999046325684
+ 0.12999999523162842
+
+ cloud_color
+
+ 0.47999998927116394
+ 0.47999998927116394
+ 0.47999998927116394
+ 0.47999998927116394
+
+ cloud_pos_density1
+
+ 0.63999998569488525
+ 0.5
+ 0.56999999284744263
+ 1
+
+ cloud_pos_density2
+
+ 0.37000000476837158
+ 0.35999998450279236
+ 0
+ 1
+
+ cloud_scale
+
+ 0.079999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.219999775290489
+ 9.9899997767060995
+
+ cloud_shadow
+
+ 0.31999999284744263
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00031000000308267772
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 33.100002288818359
+ 0
+ 0
+ 1
+
+ east_angle
+ 3.1415927410125732
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1
+ 0
+ 0
+ 1
+
+ glow
+
+ 5.3999996185302734
+ 0.0010000000474974513
+ -0.33000001311302185
+ 1
+
+ haze_density
+
+ 1.8899999856948853
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.23999999463558197
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -8.1484252234531596e-008
+ 0.36227512359619141
+ 0.93207120895385742
+ 0
+
+ max_y
+
+ 671
+ 0
+ 0
+ 1
+
+ preset_num
+ 21
+ star_brightness
+ 0.2199999988079071
+ sun_angle
+ 2.7708849906921387
+ sunlight_color
+
+ 1.3799998760223389
+ 1.3799998760223389
+ 1.3799998760223389
+ 1.3799998760223389
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Eridu.xml b/indra/newview/app_settings/windlight/skies/Places%20Eridu.xml
new file mode 100644
index 000000000..d93310016
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Eridu.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.50999999046325684
+ 0.57310229539871216
+ 0.59999996423721313
+ 0.59999996423721313
+
+ blue_density
+
+ 0.14522500336170197
+ 0.39999699592590332
+ 0.80000197887420654
+ 1
+
+ blue_horizon
+
+ 0.15130999684333801
+ 0.30000001192092896
+ 0.35131001472473145
+ 1
+
+ cloud_color
+
+ 0.12862999737262726
+ 0.12862999737262726
+ 0.12862999737262726
+ 1
+
+ cloud_pos_density1
+
+ 0.88419097661972046
+ 0.53047597408294678
+ 0.4270470142364502
+ 1
+
+ cloud_pos_density2
+
+ 0.38419300317764282
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999998688697815
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10
+ 10
+
+ cloud_shadow
+
+ 0.61711597442626953
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.0001250890054507181
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 11.40000057220459
+ 0
+ 0
+ 1
+
+ east_angle
+ 5.4035391807556152
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 0.87999999523162842
+ 0
+ 0
+ 1
+
+ glow
+
+ 6.4079799652099609
+ 0.0012815999798476696
+ -0.42292699217796326
+ 1
+
+ haze_density
+
+ 4
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.21744099259376526
+ 0.21744099259376526
+ 0.21744099259376526
+ 1
+
+ lightnorm
+
+ 0.76102709770202637
+ 0.15643447637557983
+ 0.62957614660263062
+ 0
+
+ max_y
+
+ 4000
+ 0
+ 0
+ 1
+
+ preset_num
+ 2
+ star_brightness
+ 0
+ sun_angle
+ 0.15707963705062866
+ sunlight_color
+
+ 3
+ 3
+ 3
+ 1
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Erie.xml b/indra/newview/app_settings/windlight/skies/Places%20Erie.xml
new file mode 100644
index 000000000..7be0e3ffd
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Erie.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.26999998092651367
+ 0.26999998092651367
+ 0.26999998092651367
+ 0.08999999612569809
+
+ blue_density
+
+ 0.35999998450279236
+ 0.35999998450279236
+ 0.35999998450279236
+ 0.17999999225139618
+
+ blue_horizon
+
+ 0.16199998557567596
+ 0.76855206489562988
+ 1.9799998998641968
+ 1.9799998998641968
+
+ cloud_color
+
+ 0.69999998807907104
+ 0.69999998807907104
+ 0.69999998807907104
+ 0.69999998807907104
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 0.53999996185302734
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.29999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.39999997615814209
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00054999999701976776
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 6.0999999046325684
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.5499999523162842
+ 0
+ 0
+ 1
+
+ glow
+
+ 3.7999999523162842
+ 0.0010000000474974513
+ -0.5
+ 1
+
+ haze_density
+
+ 4
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.64999997615814209
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0
+ 1
+ -4.3711388286737929e-008
+ 0
+
+ max_y
+
+ 1745
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 0
+ sun_angle
+ 1.5707963705062866
+ sunlight_color
+
+ 0.08999999612569809
+ 0.070000007748603821
+ 0.08999999612569809
+ 0.029999999329447746
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Eugene%202.xml b/indra/newview/app_settings/windlight/skies/Places%20Eugene%202.xml
new file mode 100644
index 000000000..85a0a2d93
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Eugene%202.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.21000000834465027
+ 0.029999997466802597
+ 0
+ 0.070000000298023224
+
+ blue_density
+
+ 0.29999998211860657
+ 0.29999998211860657
+ 0.29999998211860657
+ 0.14999999105930328
+
+ blue_horizon
+
+ 0.47999998927116394
+ 0.47999998927116394
+ 0.47999998927116394
+ 0.47999998927116394
+
+ cloud_color
+
+ 0.29999998211860657
+ 0.34999999403953552
+ 0.029999999329447746
+ 0.34999999403953552
+
+ cloud_pos_density1
+
+ 0.85999995470046997
+ 0.42999997735023499
+ 0.45999997854232788
+ 1
+
+ cloud_pos_density2
+
+ 1
+ 1
+ 0.099999994039535522
+ 1
+
+ cloud_scale
+
+ 0.14000000059604645
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 9.644780158996582
+ 10.423800468444824
+
+ cloud_shadow
+
+ 0.2800000011920929
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00013999998918734491
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 37.799999237060547
+ 0
+ 0
+ 1
+
+ east_angle
+ 1.382300853729248
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 4.190000057220459
+ 0
+ 0
+ 1
+
+ glow
+
+ 8.8000011444091797
+ 0.0013735899701714516
+ -0.94999998807907104
+ 1
+
+ haze_density
+
+ 4
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.019999999552965164
+ 0.13210900127887726
+ 0.13210900127887726
+ 1
+
+ lightnorm
+
+ -0.98228728771209717
+ 0
+ 0.18738122284412384
+ 0
+
+ max_y
+
+ 1396
+ 0
+ 0
+ 1
+
+ preset_num
+ 5
+ star_brightness
+ 2
+ sun_angle
+ 0
+ sunlight_color
+
+ 1.2300000190734863
+ 0.82000011205673218
+ 0.84000003337860107
+ 1.2899999618530273
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Eugene%20BL.xml b/indra/newview/app_settings/windlight/skies/Places%20Eugene%20BL.xml
new file mode 100644
index 000000000..2402f44d0
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Eugene%20BL.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.21000000834465027
+ 0.029999997466802597
+ 0
+ 0.070000000298023224
+
+ blue_density
+
+ 0.29999998211860657
+ 0.29999998211860657
+ 0.29999998211860657
+ 0.14999999105930328
+
+ blue_horizon
+
+ 0.47999998927116394
+ 0.17142856121063232
+ 0
+ 0.23999999463558197
+
+ cloud_color
+
+ 0.29999998211860657
+ 0.34999999403953552
+ 0.029999999329447746
+ 0.34999999403953552
+
+ cloud_pos_density1
+
+ 0.85999995470046997
+ 0.42999997735023499
+ 0.45999997854232788
+ 1
+
+ cloud_pos_density2
+
+ 1
+ 1
+ 0.099999994039535522
+ 1
+
+ cloud_scale
+
+ 0.14000000059604645
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 9.644780158996582
+ 10.423800468444824
+
+ cloud_shadow
+
+ 0.2800000011920929
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00013999998918734491
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 37.799999237060547
+ 0
+ 0
+ 1
+
+ east_angle
+ 1.382300853729248
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.1499999761581421
+ 0
+ 0
+ 1
+
+ glow
+
+ 8.8000011444091797
+ 0.0013735899701714516
+ -0.94999998807907104
+ 1
+
+ haze_density
+
+ 1.7300000190734863
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.14999999105930328
+ 0.13210900127887726
+ 0.13210900127887726
+ 1
+
+ lightnorm
+
+ -0.98228728771209717
+ 0
+ 0.18738122284412384
+ 0
+
+ max_y
+
+ 1396
+ 0
+ 0
+ 1
+
+ preset_num
+ 5
+ star_brightness
+ 2
+ sun_angle
+ 0
+ sunlight_color
+
+ 1.2300000190734863
+ 0.82000011205673218
+ 0
+ 0.40999999642372131
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Greed.xml b/indra/newview/app_settings/windlight/skies/Places%20Greed.xml
new file mode 100644
index 000000000..268716b94
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Greed.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 1.1699999570846558
+ 0.95727264881134033
+ 0.95727264881134033
+ 0.38999998569488525
+
+ blue_density
+
+ 0.14522500336170197
+ 0.39999699592590332
+ 0.80000197887420654
+ 1
+
+ blue_horizon
+
+ 0.10767599940299988
+ 0.21348699927330017
+ 0.25
+ 1
+
+ cloud_color
+
+ 0.22615399956703186
+ 0.22615399956703186
+ 0.22615399956703186
+ 1
+
+ cloud_pos_density1
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.87999999523162842
+ 1
+
+ cloud_pos_density2
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999998688697815
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.26999998092651367
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00046000001020729542
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 1
+ 0
+ 0
+ 1
+
+ east_angle
+ 5.4035391807556152
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.6200000047683716
+ 0
+ 0
+ 1
+
+ glow
+
+ 4.2000007629394531
+ 0.0010000000474974513
+ -0
+ 1
+
+ haze_density
+
+ 0.69999998807907104
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.15999999642372131
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.75594335794448853
+ 0.19354932010173798
+ -0.6253705620765686
+ 0
+
+ max_y
+
+ 562.5
+ 0
+ 0
+ 1
+
+ preset_num
+ 22
+ star_brightness
+ 0
+ sun_angle
+ 2.9468140602111816
+ sunlight_color
+
+ 2.8385701179504395
+ 2.8385701179504395
+ 2.8385701179504395
+ 1
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Greed2.xml b/indra/newview/app_settings/windlight/skies/Places%20Greed2.xml
new file mode 100644
index 000000000..ec5282f7e
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Greed2.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 1.1699999570846558
+ 0.95727264881134033
+ 0.95727264881134033
+ 0.38999998569488525
+
+ blue_density
+
+ 0.14522500336170197
+ 0.39999699592590332
+ 0.80000197887420654
+ 1
+
+ blue_horizon
+
+ 0.10767599940299988
+ 0.21348699927330017
+ 0.25
+ 1
+
+ cloud_color
+
+ 0.22615399956703186
+ 0.22615399956703186
+ 0.22615399956703186
+ 1
+
+ cloud_pos_density1
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.87999999523162842
+ 1
+
+ cloud_pos_density2
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999998688697815
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.26999998092651367
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00046000001020729542
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 1
+ 0
+ 0
+ 1
+
+ east_angle
+ 2.9530971050262451
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.2200000286102295
+ 0
+ 0
+ 1
+
+ glow
+
+ 4.2000007629394531
+ 0.0010000000474974513
+ -0
+ 1
+
+ haze_density
+
+ 0.69999998807907104
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.15999999642372131
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0.18383802473545074
+ 0.19354932010173798
+ 0.96371269226074219
+ 0
+
+ max_y
+
+ 562.5
+ 0
+ 0
+ 1
+
+ preset_num
+ 22
+ star_brightness
+ 0
+ sun_angle
+ 2.9468140602111816
+ sunlight_color
+
+ 2.8385701179504395
+ 2.8385701179504395
+ 2.8385701179504395
+ 1
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Imagine.xml b/indra/newview/app_settings/windlight/skies/Places%20Imagine.xml
new file mode 100644
index 000000000..48fba1e31
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Imagine.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.68999993801116943
+ 0.68999993801116943
+ 0.68999993801116943
+ 0.68999993801116943
+
+ blue_density
+
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.48999997973442078
+
+ blue_horizon
+
+ 0.25999999046325684
+ 0.29999998211860657
+ 0.37999999523162842
+ 0.37999999523162842
+
+ cloud_color
+
+ 0.50999999046325684
+ 0.50999999046325684
+ 0.50999999046325684
+ 1
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.079999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.25999999046325684
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00038999997195787728
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 11.5
+ 0
+ 0
+ 1
+
+ east_angle
+ 5.7176985740661621
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 0.68000000715255737
+ 0
+ 0
+ 1
+
+ glow
+
+ 12.399999618530273
+ 0.0010000000474974513
+ -1.8500000238418579
+ 1
+
+ haze_density
+
+ 1.8899999856948853
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.23999999463558197
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.41922605037689209
+ 0.6227877140045166
+ -0.6605944037437439
+ 0
+
+ max_y
+
+ 940
+ 0
+ 0
+ 1
+
+ preset_num
+ 21
+ star_brightness
+ 0
+ sun_angle
+ 2.4692919254302979
+ sunlight_color
+
+ 2.6700000762939453
+ 2.6700000762939453
+ 2.6700000762939453
+ 0.88999998569488525
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Kingsport.xml b/indra/newview/app_settings/windlight/skies/Places%20Kingsport.xml
new file mode 100644
index 000000000..dfaf68596
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Kingsport.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.32999998331069946
+ 0.32999998331069946
+ 0.32999998331069946
+ 0.32999998331069946
+
+ blue_density
+
+ 0
+ 0
+ 0
+ 0
+
+ blue_horizon
+
+ 0.16199998557567596
+ 0.76855206489562988
+ 0.89999997615814209
+ 0.44999998807907104
+
+ cloud_color
+
+ 0.69999998807907104
+ 0.69999998807907104
+ 0.69999998807907104
+ 0.69999998807907104
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 0.53999996185302734
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.29999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.39999997615814209
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00058999995235353708
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 12.800000190734863
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.4199999570846558
+ 0
+ 0
+ 1
+
+ glow
+
+ 3.7999999523162842
+ 0.0010000000474974513
+ -0.5
+ 1
+
+ haze_density
+
+ 4
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.64999997615814209
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0
+ 1
+ -4.3711388286737929e-008
+ 0
+
+ max_y
+
+ 2013
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 0
+ sun_angle
+ 1.5707963705062866
+ sunlight_color
+
+ 0.53999996185302734
+ 0.53999996185302734
+ 0.53999996185302734
+ 0.17999999225139618
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Kunming.xml b/indra/newview/app_settings/windlight/skies/Places%20Kunming.xml
new file mode 100644
index 000000000..e641bebcc
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Kunming.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.89999997615814209
+ 0.80999994277954102
+ 0.80999994277954102
+ 0.89999997615814209
+
+ blue_density
+
+ 0.14522500336170197
+ 0.39999699592590332
+ 0.80000197887420654
+ 1
+
+ blue_horizon
+
+ 0.10767599940299988
+ 0.21348699927330017
+ 0.25
+ 1
+
+ cloud_color
+
+ 0.22615399956703186
+ 0.22615399956703186
+ 0.22615399956703186
+ 1
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 0.87999999523162842
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.32999998331069946
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.48999997973442078
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00059999997029080987
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 18.200000762939453
+ 0
+ 0
+ 1
+
+ east_angle
+ 3.2044246196746826
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.4199999570846558
+ 0
+ 0
+ 1
+
+ glow
+
+ 5
+ 0.0010000000474974513
+ -0.39999997615814209
+ 1
+
+ haze_density
+
+ 0.68000000715255737
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.43999999761581421
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.062790632247924805
+ 0
+ 0.99802672863006592
+ 0
+
+ max_y
+
+ 859
+ 0
+ 0
+ 1
+
+ preset_num
+ 21
+ star_brightness
+ 0
+ sun_angle
+ 3.2044248580932617
+ sunlight_color
+
+ 2.8385701179504395
+ 2.8385701179504395
+ 2.8385701179504395
+ 1
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Las%20Legunas.xml b/indra/newview/app_settings/windlight/skies/Places%20Las%20Legunas.xml
new file mode 100644
index 000000000..4121f8fa6
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Las%20Legunas.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 1.7372221946716309
+ 1.7699999809265137
+ 1.5899999141693115
+ 1.7999999523162842
+
+ blue_density
+
+ 0.5
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.48999997973442078
+
+ blue_horizon
+
+ 0.31999999284744263
+ 0.2800000011920929
+ 0.37999999523162842
+ 0.37999999523162842
+
+ cloud_color
+
+ 0.50999999046325684
+ 0.50999999046325684
+ 0.50999999046325684
+ 1
+
+ cloud_pos_density1
+
+ 0.8399999737739563
+ 0.5899999737739563
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.079999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.17000000178813934
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00033999999868683517
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 4.0999999046325684
+ 0
+ 0
+ 1
+
+ east_angle
+ 0.56548666954040527
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 0.94999998807907104
+ 0
+ 0
+ 1
+
+ glow
+
+ 11.600000381469727
+ 0.0010000000474974513
+ -2.2999999523162842
+ 1
+
+ haze_density
+
+ 1.9199999570846558
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.15999999642372131
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0.38828861713409424
+ 0.68911367654800415
+ -0.61184495687484741
+ 0
+
+ max_y
+
+ 403
+ 0
+ 0
+ 1
+
+ preset_num
+ 21
+ star_brightness
+ 0
+ sun_angle
+ 2.3813273906707764
+ sunlight_color
+
+ 1.4399999380111694
+ 1.4699999094009399
+ 1.4399999380111694
+ 1.4699999094009399
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Legacies.xml b/indra/newview/app_settings/windlight/skies/Places%20Legacies.xml
new file mode 100644
index 000000000..a8284bb2a
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Legacies.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.32999998331069946
+ 0.32999998331069946
+ 0.32999998331069946
+ 0.10999999940395355
+
+ blue_density
+
+ 0.19999998807907104
+ 0.39999699592590332
+ 1.0199999809265137
+ 1.0199999809265137
+
+ blue_horizon
+
+ 0.16199998557567596
+ 0.76855206489562988
+ 0.89999997615814209
+ 0.44999998807907104
+
+ cloud_color
+
+ 0.69999998807907104
+ 0.69999998807907104
+ 0.69999998807907104
+ 0.69999998807907104
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 0.53999996185302734
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.29999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.39999997615814209
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00039999998989515007
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 14.199999809265137
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.2799999713897705
+ 0
+ 0
+ 1
+
+ glow
+
+ 3.7999999523162842
+ 0.0010000000474974513
+ -0.39999997615814209
+ 1
+
+ haze_density
+
+ 3.8599998950958252
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.77999997138977051
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0
+ 0.99715888500213623
+ -0.07532694935798645
+ 0
+
+ max_y
+
+ 1745
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 0
+ sun_angle
+ 1.6461946964263916
+ sunlight_color
+
+ 0.53999996185302734
+ 0.53999996185302734
+ 0.53999996185302734
+ 0.17999999225139618
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Midian.xml b/indra/newview/app_settings/windlight/skies/Places%20Midian.xml
new file mode 100644
index 000000000..40a34a4a9
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Midian.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.85248766300455259
+ 0.69348653809556993
+ 0.71145841248196007
+ 0.83318269234937503
+
+ blue_density
+
+ 0.20779243499502797
+ 0.41026214234642566
+ 0.72814986965084927
+ 1
+
+ blue_horizon
+
+ 0.13484086845960519
+ 0.21892986884401466
+ 0.24794709491764877
+ 1
+
+ cloud_color
+
+ 0.22615399956703186
+ 0.22615399956703186
+ 0.22615399956703186
+ 1
+
+ cloud_pos_density1
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.87999999523162842
+ 1
+
+ cloud_pos_density2
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999998688697815
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.26999998092651367
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00029999998514540493
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 4.0999999046325684
+ 0
+ 0
+ 1
+
+ east_angle
+ 6.2831854820251465
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.3500000238418579
+ 0
+ 0
+ 1
+
+ glow
+
+ 5
+ 0.0010000000474974513
+ -0.47999998927116394
+ 1
+
+ haze_density
+
+ 1.3774588671593051
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.29999998211860657
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 1.7484556735780643e-007
+ 0
+ -1
+ 0
+
+ max_y
+
+ 564
+ 0
+ 0
+ 1
+
+ preset_num
+ 22
+ star_brightness
+ 0.41058114171028137
+ sun_angle
+ 3.2044248580932617
+ sunlight_color
+
+ 2.3274268943138168
+ 2.3288588977004565
+ 2.3913246215581694
+ 0.83987117651068388
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Mother.xml b/indra/newview/app_settings/windlight/skies/Places%20Mother.xml
new file mode 100644
index 000000000..753cf0706
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Mother.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.71999996900558472
+ 0.54638898372650146
+ 0.58705025911331177
+ 0.71999996900558472
+
+ blue_density
+
+ 0.28678349408657766
+ 0.42322183665254443
+ 0.63743695308465931
+ 1
+
+ blue_horizon
+
+ 0.16913637525681224
+ 0.22580146354854946
+ 0.24535531286049661
+ 1
+
+ cloud_color
+
+ 0.22615399956703186
+ 0.22615399956703186
+ 0.22615399956703186
+ 1
+
+ cloud_pos_density1
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.70999997854232788
+ 1
+
+ cloud_pos_density2
+
+ 1.6884100437164307
+ 0.20999999344348907
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.3399999737739563
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 8.6099996566772461
+ 6.2799997329711914
+
+ cloud_shadow
+
+ 0.23999999463558197
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00031999999191612005
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 40.5
+ 0
+ 0
+ 1
+
+ east_angle
+ 1.8849555253982544
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.7599999904632568
+ 0
+ 0
+ 1
+
+ glow
+
+ 5.7999992370605469
+ 0.0010000000474974513
+ -1.1000000238418579
+ 1
+
+ haze_density
+
+ 2.2327472009226881
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.085684981703968377
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.60160976648330688
+ 0.77450323104858398
+ -0.19547481834888458
+ 1
+
+ max_y
+
+ 644
+ 0
+ 0
+ 1
+
+ preset_num
+ 22
+ star_brightness
+ 0.92893773317337036
+ sun_angle
+ 4.027522087097168
+ sunlight_color
+
+ 2.624443531036377
+ 2.6294984817504883
+ 2.8499999046325684
+ 0.94999998807907104
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Old%20New%20York.xml b/indra/newview/app_settings/windlight/skies/Places%20Old%20New%20York.xml
new file mode 100644
index 000000000..df356084b
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Old%20New%20York.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.56999999284744263
+ 0.59999996423721313
+ 0.71999996900558472
+ 0.71999996900558472
+
+ blue_density
+
+ 0.14522500336170197
+ 0.39999699592590332
+ 0.80000197887420654
+ 1
+
+ blue_horizon
+
+ 0.23999999463558197
+ 0.30000001192092896
+ 0.35131001472473145
+ 0.37999999523162842
+
+ cloud_color
+
+ 0.12862999737262726
+ 0.12862999737262726
+ 0.12862999737262726
+ 1
+
+ cloud_pos_density1
+
+ 0.88419097661972046
+ 0.53047597408294678
+ 0.4270470142364502
+ 1
+
+ cloud_pos_density2
+
+ 0.38419300317764282
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999998688697815
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10
+ 10
+
+ cloud_shadow
+
+ 0.61711597442626953
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00013000000035390258
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 18.899999618530273
+ 0
+ 0
+ 1
+
+ east_angle
+ 5.4035391807556152
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.6899999380111694
+ 0
+ 0
+ 1
+
+ glow
+
+ 4.4000005722045898
+ 0.0012815999798476696
+ -0.64999997615814209
+ 1
+
+ haze_density
+
+ 4
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.17000000178813934
+ 0.21744099259376526
+ 0.21744099259376526
+ 1
+
+ lightnorm
+
+ 0.76102709770202637
+ 0.15643447637557983
+ 0.62957614660263062
+ 0
+
+ max_y
+
+ 4000
+ 0
+ 0
+ 1
+
+ preset_num
+ 2
+ star_brightness
+ 0.65999996662139893
+ sun_angle
+ 0.15707963705062866
+ sunlight_color
+
+ 1.3199999332427979
+ 0.69959986209869385
+ 0.71279996633529663
+ 0.43999999761581421
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Paris%202.xml b/indra/newview/app_settings/windlight/skies/Places%20Paris%202.xml
new file mode 100644
index 000000000..431ee1867
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Paris%202.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.85248766300455259
+ 0.69348653809556993
+ 0.71145841248196007
+ 0.83318269234937503
+
+ blue_density
+
+ 0.20779243499502797
+ 0.41026214234642566
+ 0.72814986965084927
+ 1
+
+ blue_horizon
+
+ 0.13484086845960519
+ 0.21892986884401466
+ 0.24794709491764877
+ 1
+
+ cloud_color
+
+ 0.22615399956703186
+ 0.22615399956703186
+ 0.22615399956703186
+ 1
+
+ cloud_pos_density1
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.87999999523162842
+ 1
+
+ cloud_pos_density2
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.34999999403953552
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.31999999284744263
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00029999998514540493
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 4.0999999046325684
+ 0
+ 0
+ 1
+
+ east_angle
+ 3.0787608623504639
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 2.1599998474121094
+ 0
+ 0
+ 1
+
+ glow
+
+ 8.4000015258789063
+ 0.0010000000474974513
+ -0.34999999403953552
+ 1
+
+ haze_density
+
+ 1.3774588671593051
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.29999998211860657
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0.062790460884571075
+ 0
+ 0.99802672863006592
+ 0
+
+ max_y
+
+ 564
+ 0
+ 0
+ 1
+
+ preset_num
+ 22
+ star_brightness
+ 0.41058114171028137
+ sun_angle
+ 3.2044248580932617
+ sunlight_color
+
+ 2.3274268943138168
+ 2.3288588977004565
+ 2.3913246215581694
+ 0.83987117651068388
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Paris.xml b/indra/newview/app_settings/windlight/skies/Places%20Paris.xml
new file mode 100644
index 000000000..ebd2970c9
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Paris.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 1.2300000190734863
+ 1.0553969144821167
+ 1.0920002460479736
+ 1.2300000190734863
+
+ blue_density
+
+ 0.57999998331069946
+ 0.59999996423721313
+ 0.77111077308654785
+ 0.55220913887023926
+
+ blue_horizon
+
+ 0.29999998211860657
+ 0.41715732216835022
+ 0.53167486190795898
+ 0.65999996662139893
+
+ cloud_color
+
+ 0.35893553611745688
+ 0.35893553611745688
+ 0.35893553611745688
+ 0.57387644052505493
+
+ cloud_pos_density1
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.96666919575807242
+ 1
+
+ cloud_pos_density2
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999999993404913
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.283160487214445
+ 10.010999818490745
+
+ cloud_shadow
+
+ 0.23999999463558197
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 7.0000001869630069e-005
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 2
+ 0
+ 0
+ 1
+
+ east_angle
+ 3.8955750465393066
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 2.2300000190734863
+ 0
+ 0
+ 1
+
+ glow
+
+ 7.4000000953674316
+ 0.0010000000474974513
+ -0
+ 1
+
+ haze_density
+
+ 1.0499999523162842
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.37999999523162842
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.68454724550247192
+ 0
+ 0.72896856069564819
+ 0
+
+ max_y
+
+ 268
+ 0
+ 0
+ 1
+
+ preset_num
+ 22
+ star_brightness
+ 0
+ sun_angle
+ 3.2044248580932617
+ sunlight_color
+
+ 1.3187105655670166
+ 1.3529220819473267
+ 1.7100000381469727
+ 1.7100000381469727
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Pathfinder.xml b/indra/newview/app_settings/windlight/skies/Places%20Pathfinder.xml
new file mode 100644
index 000000000..43e69daea
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Pathfinder.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.47999998927116394
+ 0.39111119508743286
+ 0.31999999284744263
+ 0.47999998927116394
+
+ blue_density
+
+ 0.059999998658895493
+ 0.059999998658895493
+ 0.059999998658895493
+ 0.029999999329447746
+
+ blue_horizon
+
+ 1.8600000143051147
+ 0.47999998927116394
+ 0.47999998927116394
+ 1.8600000143051147
+
+ cloud_color
+
+ 0.28999999165534973
+ 0.28999999165534973
+ 0.31999999284744263
+ 0.31999999284744263
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.079999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 9.9299993515014648
+
+ cloud_shadow
+
+ 0.32999998331069946
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00019999999494757503
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 3.4000000953674316
+ 0
+ 0
+ 1
+
+ east_angle
+ 1.8849555253982544
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 0.74000000953674316
+ 0
+ 0
+ 1
+
+ glow
+
+ 5
+ 0.0010000000474974513
+ -0.33000001311302185
+ 1
+
+ haze_density
+
+ 2.809999942779541
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.23999999463558197
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0.87044608592987061
+ 0.4029063880443573
+ 0.28282502293586731
+ 0
+
+ max_y
+
+ 752
+ 0
+ 0
+ 1
+
+ preset_num
+ 21
+ star_brightness
+ 0
+ sun_angle
+ 2.7269024848937988
+ sunlight_color
+
+ 1.8600000143051147
+ 1.7699999809265137
+ 1.6537500619888306
+ 1.8600000143051147
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Sand.xml b/indra/newview/app_settings/windlight/skies/Places%20Sand.xml
new file mode 100644
index 000000000..da66198d5
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Sand.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.59999996423721313
+ 0.4888889491558075
+ 0.40000000596046448
+ 0.19999998807907104
+
+ blue_density
+
+ 2
+ 0.97999995946884155
+ 0.97999995946884155
+ 2
+
+ blue_horizon
+
+ 0.71999996900558472
+ 0.50086963176727295
+ 0.50086963176727295
+ 0.35999998450279236
+
+ cloud_color
+
+ 0.28999999165534973
+ 0.28999999165534973
+ 0.31999999284744263
+ 0.31999999284744263
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.079999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 9.9299993515014648
+
+ cloud_shadow
+
+ 0.32999998331069946
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00031000000308267772
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 6.8000001907348633
+ 0
+ 0
+ 1
+
+ east_angle
+ 5.6548666954040527
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.1499999761581421
+ 0
+ 0
+ 1
+
+ glow
+
+ 5
+ 0.0010000000474974513
+ -0.33000001311302185
+ 1
+
+ haze_density
+
+ 1.8899999856948853
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.23999999463558197
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.53796529769897461
+ 0.4029063880443573
+ -0.74044561386108398
+ 0
+
+ max_y
+
+ 752
+ 0
+ 0
+ 1
+
+ preset_num
+ 21
+ star_brightness
+ 0
+ sun_angle
+ 2.7269024848937988
+ sunlight_color
+
+ 2.25
+ 1.8899999856948853
+ 1.6800000667572021
+ 2.25
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Terre%20Des%20Mortes.xml b/indra/newview/app_settings/windlight/skies/Places%20Terre%20Des%20Mortes.xml
new file mode 100644
index 000000000..00ae35765
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Terre%20Des%20Mortes.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.21000000834465027
+ 0.26999998092651367
+ 0.35999998450279236
+ 0.35999998450279236
+
+ blue_density
+
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.48999997973442078
+
+ blue_horizon
+
+ 0.25999999046325684
+ 0.29999998211860657
+ 0.37999999523162842
+ 0.37999999523162842
+
+ cloud_color
+
+ 0.50999999046325684
+ 0.50999999046325684
+ 0.50999999046325684
+ 1
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.079999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.25999999046325684
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00076999998418614268
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 16.899999618530273
+ 0
+ 0
+ 1
+
+ east_angle
+ 4.0840702056884766
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 0.74000000953674316
+ 0
+ 0
+ 1
+
+ glow
+
+ 5
+ 0.0010000000474974513
+ -0.33000001311302185
+ 1
+
+ haze_density
+
+ 1.8899999856948853
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.23999999463558197
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.63296741247177124
+ 0.6227877140045166
+ 0.45987796783447266
+ 0
+
+ max_y
+
+ 752
+ 0
+ 0
+ 1
+
+ preset_num
+ 21
+ star_brightness
+ 0
+ sun_angle
+ 2.4692919254302979
+ sunlight_color
+
+ 1.4399999380111694
+ 1.4399999380111694
+ 1.4399999380111694
+ 0.47999998927116394
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Urbania.xml b/indra/newview/app_settings/windlight/skies/Places%20Urbania.xml
new file mode 100644
index 000000000..4aed800ea
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Urbania.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0
+ 0.029999997466802597
+ 0
+ 0.029999999329447746
+
+ blue_density
+
+ 0.29999998211860657
+ 0.29999998211860657
+ 0.29999998211860657
+ 0.14999999105930328
+
+ blue_horizon
+
+ 0.39999997615814209
+ 0.17142856121063232
+ 0
+ 0.39999997615814209
+
+ cloud_color
+
+ 0.29999998211860657
+ 0.34999999403953552
+ 0.029999999329447746
+ 0.34999999403953552
+
+ cloud_pos_density1
+
+ 0.85999995470046997
+ 0.42999997735023499
+ 0.45999997854232788
+ 1
+
+ cloud_pos_density2
+
+ 1
+ 1
+ 0.099999994039535522
+ 1
+
+ cloud_scale
+
+ 0.14000000059604645
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 9.644780158996582
+ 10.423800468444824
+
+ cloud_shadow
+
+ 0.2800000011920929
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00058999995235353708
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 20.30000114440918
+ 0
+ 0
+ 1
+
+ east_angle
+ 1.2566369771957397
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.9599999189376831
+ 0
+ 0
+ 1
+
+ glow
+
+ 8.8000011444091797
+ 0.0013735899701714516
+ -0.94999998807907104
+ 1
+
+ haze_density
+
+ 1.7300000190734863
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.45999997854232788
+ 0.13210900127887726
+ 0.13210900127887726
+ 1
+
+ lightnorm
+
+ -0.95105648040771484
+ 0
+ 0.30901706218719482
+ 0
+
+ max_y
+
+ 1450
+ 0
+ 0
+ 1
+
+ preset_num
+ 5
+ star_brightness
+ 2
+ sun_angle
+ 0
+ sunlight_color
+
+ 1.2300000190734863
+ 0.82000011205673218
+ 0
+ 0.40999999642372131
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20Wiccan.xml b/indra/newview/app_settings/windlight/skies/Places%20Wiccan.xml
new file mode 100644
index 000000000..7e220c9ff
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20Wiccan.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.71999996900558472
+ 0.54638898372650146
+ 0.58705025911331177
+ 0.71999996900558472
+
+ blue_density
+
+ 0.28678349408657766
+ 0.42322183665254443
+ 0.63743695308465931
+ 1
+
+ blue_horizon
+
+ 0.16913637525681224
+ 0.22580146354854946
+ 0.24535531286049661
+ 1
+
+ cloud_color
+
+ 0.22615399956703186
+ 0.22615399956703186
+ 0.22615399956703186
+ 1
+
+ cloud_pos_density1
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.70999997854232788
+ 1
+
+ cloud_pos_density2
+
+ 1.6884100437164307
+ 0.20999999344348907
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.3399999737739563
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 8.6099996566772461
+ 6.2799997329711914
+
+ cloud_shadow
+
+ 0.23999999463558197
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00038568499229132969
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 0.53555402121232365
+ 0
+ 0
+ 1
+
+ east_angle
+ 6.2831854820251465
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.6899999380111694
+ 0
+ 0
+ 1
+
+ glow
+
+ 5
+ 0.0010000000474974513
+ -0.47999998927116394
+ 1
+
+ haze_density
+
+ 2.2327472009226881
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.085684981703968377
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -1.6790306744951522e-007
+ 0.27899131178855896
+ 0.96029365062713623
+ 1
+
+ max_y
+
+ 722.13795372575987
+ 0
+ 0
+ 1
+
+ preset_num
+ 22
+ star_brightness
+ 0.92893773317337036
+ sun_angle
+ 3.4243361949920654
+ sunlight_color
+
+ 2.624443531036377
+ 2.6294984817504883
+ 2.8499999046325684
+ 0.94999998807907104
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%20alirium.xml b/indra/newview/app_settings/windlight/skies/Places%20alirium.xml
new file mode 100644
index 000000000..6bed05a85
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%20alirium.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.26999998092651367
+ 0.21000000834465027
+ 0.08999999612569809
+ 0.26999998092651367
+
+ blue_density
+
+ 0.47886797785758972
+ 0.90452831983566284
+ 0.93999999761581421
+ 0.4699999988079071
+
+ blue_horizon
+
+ 0.28636360168457031
+ 0.36272725462913513
+ 0.41999998688697815
+ 0.20999999344348907
+
+ cloud_color
+
+ 0.50999999046325684
+ 0.50999999046325684
+ 0.50999999046325684
+ 0.50999999046325684
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.10999999940395355
+ 1
+
+ cloud_scale
+
+ 0.079999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.800000190734863
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.22999998927116394
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00013000000035390258
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 6.8000001907348633
+ 0
+ 0
+ 1
+
+ east_angle
+ 4.2725663185119629
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.7599999904632568
+ 0
+ 0
+ 1
+
+ glow
+
+ 16.600000381469727
+ 0.0010000000474974513
+ -0.24999998509883881
+ 1
+
+ haze_density
+
+ 1.1899999380111694
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.2199999988079071
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.84336334466934204
+ 0.36227512359619141
+ 0.39685636758804321
+ 0
+
+ max_y
+
+ 564
+ 0
+ 0
+ 1
+
+ preset_num
+ 21
+ star_brightness
+ 0
+ sun_angle
+ 2.7708849906921387
+ sunlight_color
+
+ 2.4600000381469727
+ 2.4600000381469727
+ 2.4600000381469727
+ 0.81999999284744263
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Places%2DEmbryo.xml b/indra/newview/app_settings/windlight/skies/Places%2DEmbryo.xml
new file mode 100644
index 000000000..66d490aa9
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Places%2DEmbryo.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.35999998450279236
+ 0.23999999463558197
+ 0
+ 0.35999998450279236
+
+ blue_density
+
+ 0.15999999642372131
+ 0.15999999642372131
+ 0.15999999642372131
+ 0.079999998211860657
+
+ blue_horizon
+
+ 0.19999998807907104
+ 0.19999998807907104
+ 0.19999998807907104
+ 0.099999994039535522
+
+ cloud_color
+
+ 0.50999999046325684
+ 0.50999999046325684
+ 0.50999999046325684
+ 0.50999999046325684
+
+ cloud_pos_density1
+
+ 0.53999996185302734
+ 0.50999999046325684
+ 0.2199999988079071
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.039999999105930328
+ 1
+
+ cloud_scale
+
+ 0.15999999642372131
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 20
+ 20
+
+ cloud_shadow
+
+ 0.68000000715255737
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00020999999833293259
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 23
+ 0
+ 0
+ 1
+
+ east_angle
+ 2.2619466781616211
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 0.94999998807907104
+ 0
+ 0
+ 1
+
+ glow
+
+ 20
+ 0.0010000000474974513
+ 0
+ 1
+
+ haze_density
+
+ 4
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.17000000178813934
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0.70520544052124023
+ 0.4029063880443573
+ 0.58339667320251465
+ 0
+
+ max_y
+
+ 322
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 0
+ sun_angle
+ 2.7269024848937988
+ sunlight_color
+
+ 0.71999996900558472
+ 0.71999996900558472
+ 0.71999996900558472
+ 0.23999999463558197
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/StrawberrySingh%2Ecom%20%2D%20Closeups.xml b/indra/newview/app_settings/windlight/skies/StrawberrySingh%2Ecom%20%2D%20Closeups.xml
new file mode 100644
index 000000000..d9a45e832
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/StrawberrySingh%2Ecom%20%2D%20Closeups.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 1.9524954557418823
+ 2.0699999332427979
+ 2.059481143951416
+ 0.68999999761581421
+
+ blue_density
+
+ 2
+ 2
+ 2
+ 1
+
+ blue_horizon
+
+ 1.5
+ 1.5
+ 1.5
+ 0.75
+
+ cloud_color
+
+ 0.40999999642372131
+ 0.40999999642372131
+ 0.40999999642372131
+ 0.40999999642372131
+
+ cloud_pos_density1
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999998688697815
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.199999809265137
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.12999999523162842
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.0002899999963119626
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 0
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1.2599999904632568
+ 0
+ 0
+ 1
+
+ glow
+
+ 10.199999809265137
+ 0.0010000000474974513
+ -1.3999999761581421
+ 1
+
+ haze_density
+
+ 1.0099999904632568
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.5
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0
+ 0
+ 1
+ 0
+
+ max_y
+
+ 493
+ 0
+ 0
+ 1
+
+ preset_num
+ 22
+ star_brightness
+ 0
+ sun_angle
+ 0
+ sunlight_color
+
+ 1.5299999713897705
+ 1.5299999713897705
+ 1.5299999713897705
+ 0.50999999046325684
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Sunrise.xml b/indra/newview/app_settings/windlight/skies/Sunrise.xml
new file mode 100644
index 000000000..bbc7aeec5
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Sunrise.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.80999994277954102
+ 0.46289783716201782
+ 0.62999993562698364
+ 0.26999998092651367
+
+ blue_density
+
+ 0.15793180465698242
+ 0.43499568104743958
+ 0.87000000476837158
+ 0.87000000476837158
+
+ blue_horizon
+
+ 0.20673196017742157
+ 0.40988314151763916
+ 0.47999998927116394
+ 0.47999998927116394
+
+ cloud_color
+
+ 0.22616604226328718
+ 0.22616604226328718
+ 0.22616604226328718
+ 0.99997219085526012
+
+ cloud_pos_density1
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.88000025272481253
+ 1
+
+ cloud_pos_density2
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999998688697815
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013883861
+ 10.010999679576344
+
+ cloud_shadow
+
+ 0.26999998092651367
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00062000000616535544
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 2.6999279499073054
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1
+ 0
+ 0
+ 1
+
+ glow
+
+ 5.0009990693069994
+ 0.0010000000474963411
+ -0.48000101923815919
+ 1
+
+ haze_density
+
+ 0.53999996185302734
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.15999999642372131
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0
+ 0.094108223915100098
+ 0.99556195735931396
+ 0
+
+ max_y
+
+ 563
+ 0
+ 0
+ 1
+
+ preset_num
+ 22
+ star_brightness
+ 0
+ sun_angle
+ 0.094247691333293915
+ sunlight_color
+
+ 2.369999885559082
+ 2.369999885559082
+ 2.369999885559082
+ 0.78999996185302734
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Sunset%20Pink%20%28Paulina%29.xml b/indra/newview/app_settings/windlight/skies/Sunset%20Pink%20%28Paulina%29.xml
new file mode 100644
index 000000000..9b5b74f03
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Sunset%20Pink%20%28Paulina%29.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.65999996662139893
+ 0.30564266443252563
+ 0.31655827164649963
+ 0.2199999988079071
+
+ blue_density
+
+ 1.1599999666213989
+ 0.59999996423721313
+ 1.3199999332427979
+ 1.3199999332427979
+
+ blue_horizon
+
+ 0.71153849363327026
+ 0.74000000953674316
+ 0.74000000953674316
+ 0.37000000476837158
+
+ cloud_color
+
+ 0
+ 0
+ 0.0099999997764825821
+ 0.0099999997764825821
+
+ cloud_pos_density1
+
+ 0.53999996185302734
+ 0.50999999046325684
+ 0.23999999463558197
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.059999998658895493
+ 1
+
+ cloud_scale
+
+ 0.15999999642372131
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 20
+ 20
+
+ cloud_shadow
+
+ 0.2199999988079071
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 4.9999998736893758e-005
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 8.1000003814697266
+ 0
+ 0
+ 1
+
+ east_angle
+ 3.5185837745666504
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 0.61000001430511475
+ 0
+ 0
+ 1
+
+ glow
+
+ 0.59999942779541016
+ 0.0010000000474974513
+ -0.59999996423721313
+ 1
+
+ haze_density
+
+ 1.8600000143051147
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.76999998092651367
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ -0.36805915832519531
+ 0.01884840801358223
+ 0.92961132526397705
+ 0
+
+ max_y
+
+ 2443
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 1.8600000143051147
+ sun_angle
+ 3.1227431297302246
+ sunlight_color
+
+ 1.1999999284744263
+ 0.7486223578453064
+ 0.39302670955657959
+ 1.1999999284744263
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Sunset.xml b/indra/newview/app_settings/windlight/skies/Sunset.xml
new file mode 100644
index 000000000..ebf08e1a3
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Sunset.xml
@@ -0,0 +1,142 @@
+
+
+ ambient
+
+ 1.0199999809265137
+ 0.80999994277954102
+ 0.80999994277954102
+ 1.0199999809265137
+
+ blue_density
+
+ 0.14522500336170197
+ 0.39999699592590332
+ 0.80000197887420654
+ 1
+
+ blue_horizon
+
+ 0.10767599940299988
+ 0.21348699927330017
+ 0.25
+ 1
+
+ cloud_color
+
+ 0.22615399956703186
+ 0.22615399956703186
+ 0.22615399956703186
+ 1
+
+ cloud_pos_density1
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.87999999523162842
+ 1
+
+ cloud_pos_density2
+
+ 1.6884100437164307
+ 0.52609699964523315
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.41999998688697815
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.26999998092651367
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00046000001020729542
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 1
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1
+ 0
+ 0
+ 1
+
+ glow
+
+ 5
+ 0.0010000000474974513
+ -0.47999998927116394
+ 1
+
+ haze_density
+
+ 0.69999998807907104
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.15999999642372131
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0
+ 0.07532646507024765
+ -0.99715894460678101
+ 0
+
+ max_y
+
+ 562.5
+ 0
+ 0
+ 1
+
+ preset_num
+ 22
+ star_brightness
+ 0
+ sun_angle
+ 3.0661947727203369
+ sunlight_color
+
+ 2.8385701179504395
+ 2.8385701179504395
+ 2.8385701179504395
+ 1
+
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Surreal%20%2D%20Brazil%20%28Paulina%29.xml b/indra/newview/app_settings/windlight/skies/Surreal%20%2D%20Brazil%20%28Paulina%29.xml
new file mode 100644
index 000000000..97044da7b
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Surreal%20%2D%20Brazil%20%28Paulina%29.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 1.5
+ 2.2799999713897705
+ 0.93000000715255737
+ 2.2799999713897705
+
+ blue_density
+
+ 1.2799999713897705
+ 1.2999999523162842
+ 1.3999999761581421
+ 1.3999999761581421
+
+ blue_horizon
+
+ 1
+ 1.1200000047683716
+ 0.068059712648391724
+ 1.1200000047683716
+
+ cloud_color
+
+ 0.52756190160579308
+ 0.52756190160579308
+ 0.52756190160579308
+ 1
+
+ cloud_pos_density1
+
+ 0.72999995946884155
+ 0.34000000357627869
+ 0.32999998331069946
+ 1
+
+ cloud_pos_density2
+
+ 0.28999999165534973
+ 0.84999996423721313
+ 0.019999999552965164
+ 1
+
+ cloud_scale
+
+ 0.32999998058761548
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.499399946934318
+ 10.010999746491507
+
+ cloud_shadow
+
+ 0.34999999403953552
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 5.999999848427251e-005
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 12.800000190734863
+ 0
+ 0
+ 1
+
+ east_angle
+ 3.8327431678771973
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 0.14000000059604645
+ 0
+ 0
+ 1
+
+ glow
+
+ 10
+ 0.0010000000474974513
+ -1.0499999523162842
+ 1
+
+ haze_density
+
+ 0.18999999761581421
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.5899999737739563
+ 0.19915598630905151
+ 0.19915598630905151
+ 1
+
+ lightnorm
+
+ -0.60370332002639771
+ 0.32094338536262512
+ 0.72975176572799683
+ 0
+
+ max_y
+
+ 537
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 1.2200000286102295
+ sun_angle
+ 2.8148672580718994
+ sunlight_color
+
+ 3
+ 2.3461534976959229
+ 3
+ 1
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Surreal%20%2D%20Fire%20%28Paulina%29.xml b/indra/newview/app_settings/windlight/skies/Surreal%20%2D%20Fire%20%28Paulina%29.xml
new file mode 100644
index 000000000..5519f5ec9
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Surreal%20%2D%20Fire%20%28Paulina%29.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 3
+ 3
+ 3
+ 3
+
+ blue_density
+
+ 0.89999997615814209
+ 0
+ 0.41999998688697815
+ 0.89999997615814209
+
+ blue_horizon
+
+ 1.4800000190734863
+ 1.6799999475479126
+ 2
+ 2
+
+ cloud_color
+
+ 0.52756190160579308
+ 0.52756190160579308
+ 0.52756190160579308
+ 1
+
+ cloud_pos_density1
+
+ 0.72999995946884155
+ 0.34000000357627869
+ 0.32999998331069946
+ 1
+
+ cloud_pos_density2
+
+ 0.28999999165534973
+ 0.84999996423721313
+ 0.019999999552965164
+ 1
+
+ cloud_scale
+
+ 0.32999998058761548
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.499399946934318
+ 10.010999746491507
+
+ cloud_shadow
+
+ 0.28999999165534973
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00020999999833293259
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 8.1000003814697266
+ 0
+ 0
+ 1
+
+ east_angle
+ 3.2044246196746826
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 0.070000000298023224
+ 0
+ 0
+ 1
+
+ glow
+
+ 3.0000019073486328
+ 0.0010000000474974513
+ -1.0499999523162842
+ 1
+
+ haze_density
+
+ 2.8899998664855957
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.62000000476837158
+ 0.19915598630905151
+ 0.19915598630905151
+ 1
+
+ lightnorm
+
+ 0.061363283544778824
+ 0.21200713515281677
+ -0.97533971071243286
+ 0
+
+ max_y
+
+ 752
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 1.2200000286102295
+ sun_angle
+ 0.21362832188606262
+ sunlight_color
+
+ 3
+ 3
+ 3
+ 3
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Surreal%20%2D%20Flirt%20%28Paulina%29.xml b/indra/newview/app_settings/windlight/skies/Surreal%20%2D%20Flirt%20%28Paulina%29.xml
new file mode 100644
index 000000000..70dd0d106
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Surreal%20%2D%20Flirt%20%28Paulina%29.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 3
+ 3
+ 3
+ 3
+
+ blue_density
+
+ 1
+ 0
+ 0.41999998688697815
+ 1
+
+ blue_horizon
+
+ 1.4399999380111694
+ 2
+ 2
+ 2
+
+ cloud_color
+
+ 0.52756190160579308
+ 0.52756190160579308
+ 0.52756190160579308
+ 1
+
+ cloud_pos_density1
+
+ 0.72999995946884155
+ 0.34000000357627869
+ 0.32999998331069946
+ 1
+
+ cloud_pos_density2
+
+ 0.28999999165534973
+ 0.84999996423721313
+ 0.019999999552965164
+ 1
+
+ cloud_scale
+
+ 0.32999998058761548
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.499399946934318
+ 10.010999746491507
+
+ cloud_shadow
+
+ 0.28999999165534973
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.0006399999838322401
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 5.4000000953674316
+ 0
+ 0
+ 1
+
+ east_angle
+ 1.8221237659454346
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 0.070000000298023224
+ 0
+ 0
+ 1
+
+ glow
+
+ 2.2000002861022949
+ 0.0010000000474974513
+ -1.4499999284744263
+ 1
+
+ haze_density
+
+ 2.8899998664855957
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.62000000476837158
+ 0.19915598630905151
+ 0.19915598630905151
+ 1
+
+ lightnorm
+
+ -0.96764647960662842
+ 0.043968122452497482
+ -0.2484494149684906
+ 0
+
+ max_y
+
+ 27
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 2
+ sun_angle
+ 0.043982300907373428
+ sunlight_color
+
+ 3
+ 3
+ 3
+ 1
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Surreal%20%2D%20Night%20%28Paulina%29.xml b/indra/newview/app_settings/windlight/skies/Surreal%20%2D%20Night%20%28Paulina%29.xml
new file mode 100644
index 000000000..80ee99ef6
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Surreal%20%2D%20Night%20%28Paulina%29.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 3
+ 3
+ 3
+ 3
+
+ blue_density
+
+ 1
+ 0
+ 0.41999998688697815
+ 1
+
+ blue_horizon
+
+ 1.4800000190734863
+ 1.6799999475479126
+ 2
+ 2
+
+ cloud_color
+
+ 0.52756190160579308
+ 0.52756190160579308
+ 0.52756190160579308
+ 1
+
+ cloud_pos_density1
+
+ 0.72999995946884155
+ 0.34000000357627869
+ 0.32999998331069946
+ 1
+
+ cloud_pos_density2
+
+ 0.28999999165534973
+ 0.84999996423721313
+ 0.019999999552965164
+ 1
+
+ cloud_scale
+
+ 0.32999998058761548
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.499399946934318
+ 10.010999746491507
+
+ cloud_shadow
+
+ 0.28999999165534973
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 22.30000114440918
+ 0
+ 0
+ 1
+
+ east_angle
+ 1.8221237659454346
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 0.070000000298023224
+ 0
+ 0
+ 1
+
+ glow
+
+ 3.0000019073486328
+ 0.0010000000474974513
+ -1.0499999523162842
+ 1
+
+ haze_density
+
+ 2.8899998664855957
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.62000000476837158
+ 0.19915598630905151
+ 0.19915598630905151
+ 1
+
+ lightnorm
+
+ -0.96764647960662842
+ 0.043968122452497482
+ -0.2484494149684906
+ 0
+
+ max_y
+
+ 1289
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 1.2200000286102295
+ sun_angle
+ 0.043982300907373428
+ sunlight_color
+
+ 3
+ 3
+ 3
+ 1
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/Surreal%20%2D%20Summer%20%28Paulina%29.xml b/indra/newview/app_settings/windlight/skies/Surreal%20%2D%20Summer%20%28Paulina%29.xml
new file mode 100644
index 000000000..6929904cc
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Surreal%20%2D%20Summer%20%28Paulina%29.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 1.5
+ 2.2799999713897705
+ 0.93000000715255737
+ 2.2799999713897705
+
+ blue_density
+
+ 1.4800000190734863
+ 1.4399999380111694
+ 2
+ 2
+
+ blue_horizon
+
+ 1.2400000095367432
+ 1.1399999856948853
+ 0.71999996900558472
+ 1.2799999713897705
+
+ cloud_color
+
+ 0.2199999988079071
+ 0.23999999463558197
+ 0.68999999761581421
+ 0.68999999761581421
+
+ cloud_pos_density1
+
+ 0.72999995946884155
+ 0.34000000357627869
+ 0.32999998331069946
+ 1
+
+ cloud_pos_density2
+
+ 0.28999999165534973
+ 0.84999996423721313
+ 0.019999999552965164
+ 1
+
+ cloud_scale
+
+ 0.42999997735023499
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.499399946934318
+ 10.010999746491507
+
+ cloud_shadow
+
+ 0.65999996662139893
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 1.9999999494757503e-005
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 15.5
+ 0
+ 0
+ 1
+
+ east_angle
+ 4.1469020843505859
+ enable_cloud_scroll
+
+ 0
+ 0
+
+ gamma
+
+ 0.14000000059604645
+ 0
+ 0
+ 1
+
+ glow
+
+ 10
+ 0.0010000000474974513
+ -1.0499999523162842
+ 1
+
+ haze_density
+
+ 1.6999999284744263
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.52999997138977051
+ 0.19915598630905151
+ 0.19915598630905151
+ 1
+
+ lightnorm
+
+ -0.82513469457626343
+ 0.21200692653656006
+ 0.52364665269851685
+ 1
+
+ max_y
+
+ 456
+ 0
+ 0
+ 1
+
+ preset_num
+ 18
+ star_brightness
+ 1.2200000286102295
+ sun_angle
+ 6.0695571899414062
+ sunlight_color
+
+ 3
+ 1.3499999046325684
+ 3
+ 3
+
+
+
diff --git a/indra/newview/app_settings/windlight/skies/names.txt b/indra/newview/app_settings/windlight/skies/names.txt
new file mode 100644
index 000000000..2d80cde58
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/names.txt
@@ -0,0 +1,77 @@
+- Orac - Black fog 1
+- Orac - Black fog 2
+- Orac - Drawing blue
+- Orac - Drawing extreme
+- Orac - Drawing green
+- Orac - Drawing red
+- Orac - Drawing underground comic
+- Orac - fog
+- Orac - gray
+- Orac - green
+AnaLu - outdoor city night
+AnaLutetia - AvatarOpt(2)
+AnaLutetia - AvatarOpt2 whiter
+AnaLutetia - outdoor
+AnaLutetia - Studio Light
+AnaLutetia - STUDIO2
+AnaLutetia - STUDIO3
+AnaLutetia-default
+AnaLutetia-outdoor2(2)
+AnaLutetia
+B5-ShadowDancing
+CB'%s %Rouge 1
+CB'%s %Rouge 2
+CB'%s %Rouge 3
+CB'%s %Rouge 4
+CB'%s %Rouge 5
+CB'%s %Rouge 6
+Fairy blue (Paulina)
+Fairy dark blue (Paulina)
+Fairy light pink (Paulina)
+Fairy warm pinks (Paulina)
+PaperSnow
+Places Abracadabra
+Places Abracadabra2
+Places Abracadabra3
+Places alirium
+Places Annamaria
+Places Astryls Wild
+Places Babbage
+Places Beach Cay Surreal
+Places Beach Cay
+Places Bentham
+Places Cornfield
+Places Cromac
+Places Crucible
+Places District8
+Places Duskwood
+Places Eridu
+Places Erie
+Places Eugene 2
+Places Eugene BL
+Places Greed
+Places Greed2
+Places Imagine
+Places Kingsport
+Places Kunming
+Places Las Legunas
+Places Legacies
+Places Midian
+Places Mother
+Places Old New York
+Places Paris 2
+Places Paris
+Places Pathfinder
+Places Sand
+Places Terre Des Mortes
+Places Urbania
+Places Wiccan
+Places-Embryo
+StrawberrySingh.com - Closeups
+Sunset Pink (Paulina)
+Surreal - Brazil (Paulina)
+Surreal - Fire (Paulina)
+Surreal - Flirt (Paulina)
+Surreal - Night (Paulina)
+Surreal - Summer (Paulina)
+wastelands
\ No newline at end of file
diff --git a/indra/newview/app_settings/windlight/skies/wastelands.xml b/indra/newview/app_settings/windlight/skies/wastelands.xml
new file mode 100644
index 000000000..ffb22cf37
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/wastelands.xml
@@ -0,0 +1,141 @@
+
+
+ ambient
+
+ 0.29999998211860657
+ 0.17999999225139618
+ 0
+ 0.29999998211860657
+
+ blue_density
+
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.97999995946884155
+ 0.48999997973442078
+
+ blue_horizon
+
+ 0.31999999284744263
+ 0.31999999284744263
+ 0.31999999284744263
+ 0.15999999642372131
+
+ cloud_color
+
+ 0.50999999046325684
+ 0.50999999046325684
+ 0.50999999046325684
+ 1
+
+ cloud_pos_density1
+
+ 0.5
+ 0.5
+ 1
+ 1
+
+ cloud_pos_density2
+
+ 0.5
+ 0.5
+ 0.125
+ 1
+
+ cloud_scale
+
+ 0.079999998211860657
+ 0
+ 0
+ 1
+
+ cloud_scroll_rate
+
+ 10.49940013885498
+ 10.01099967956543
+
+ cloud_shadow
+
+ 0.25999999046325684
+ 0
+ 0
+ 1
+
+ density_multiplier
+
+ 0.00031000000308267772
+ 0
+ 0
+ 1
+
+ distance_multiplier
+
+ 6.8000001907348633
+ 0
+ 0
+ 1
+
+ east_angle
+ 0
+ enable_cloud_scroll
+
+ 1
+ 1
+
+ gamma
+
+ 1
+ 0
+ 0
+ 1
+
+ glow
+
+ 5
+ 0.0010000000474974513
+ -0.33000001311302185
+ 1
+
+ haze_density
+
+ 1.8899999856948853
+ 0
+ 0
+ 1
+
+ haze_horizon
+
+ 0.23999999463558197
+ 0.19915600121021271
+ 0.19915600121021271
+ 1
+
+ lightnorm
+
+ 0
+ 0.36227512359619141
+ -0.93207120895385742
+ 0
+
+ max_y
+
+ 752
+ 0
+ 0
+ 1
+
+ preset_num
+ 21
+ star_brightness
+ 0
+ sun_angle
+ 2.7708849906921387
+ sunlight_color
+
+ 1.3799998760223389
+ 1.3799998760223389
+ 1.3799998760223389
+ 0.45999997854232788
+
+
+
\ No newline at end of file
diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml
index 47433ae01..c018f19a8 100755
--- a/indra/newview/character/avatar_lad.xml
+++ b/indra/newview/character/avatar_lad.xml
@@ -1320,6 +1320,7 @@
name="Hair_Egg_Head"
wearable="hair"
edit_group="hair_style"
+ cross_wearable="true"
value_min="-1.3"
value_max="1">
@@ -1331,6 +1332,7 @@
name="Hair_Squash_Stretch_Head"
wearable="hair"
edit_group="hair_style"
+ cross_wearable="true"
value_min="-.5"
value_max="1">
@@ -1342,6 +1344,7 @@
name="Hair_Square_Head"
wearable="hair"
edit_group="hair_style"
+ cross_wearable="true"
value_min="0"
value_max="1">
@@ -1353,6 +1356,7 @@
name="Hair_Round_Head"
wearable="hair"
edit_group="hair_style"
+ cross_wearable="true"
value_min="0"
value_max="1">
@@ -1364,6 +1368,7 @@
name="Hair_Forehead_Round"
wearable="hair"
edit_group="hair_style"
+ cross_wearable="true"
value_min="0"
value_max="1">
@@ -1375,6 +1380,7 @@
name="Hair_Forehead_Slant"
wearable="hair"
edit_group="hair_style"
+ cross_wearable="true"
value_min="0"
value_max="1">
@@ -1386,6 +1392,7 @@
name="Shear_Head_Hair"
wearable="hair"
edit_group="hair_style"
+ cross_wearable="true"
value_min="-2"
value_max="2">
@@ -1397,6 +1404,7 @@
name="Elongate_Head_Hair"
wearable="hair"
edit_group="hair_style"
+ cross_wearable="true"
value_min="-1"
value_max="1">
@@ -4902,6 +4910,7 @@
clothing_morph="false"
wearable="skirt"
edit_group="skirt"
+ cross_wearable="true"
label_min="form fitting"
label_max="loose"
value_min="0"
@@ -4936,6 +4945,7 @@
label="legs skirt"
wearable="skirt"
edit_group="driven"
+ cross_wearable="true"
value_min="-1"
value_max="1"
value_default="0">
@@ -4948,6 +4958,7 @@
name="skirt_bigbutt"
wearable="skirt"
edit_group="driven"
+ cross_wearable="true"
label="bigbutt skirt"
label_min="less"
label_max="more"
@@ -4962,6 +4973,7 @@
name="skirt_belly"
wearable="skirt"
edit_group="driven"
+ cross_wearable="true"
label="big belly skirt"
value_min="0"
value_max="1">
@@ -4973,6 +4985,7 @@
group="1"
wearable="skirt"
edit_group="driven"
+ cross_wearable="true"
name="skirt_saddlebags"
value_min="-.5"
value_max="3">
@@ -4985,6 +4998,7 @@
name="skirt_chubby"
wearable="skirt"
edit_group="driven"
+ cross_wearable="true"
label_min="less"
label_max="more"
value_min="0"
@@ -4999,6 +5013,7 @@
name="skirt_lovehandles"
wearable="skirt"
edit_group="driven"
+ cross_wearable="true"
label_min="less"
label_max="more"
value_min="-1"
@@ -5018,6 +5033,7 @@
name="skirt_male"
wearable="skirt"
edit_group="driven"
+ cross_wearable="true"
value_min="0"
value_max="1">
@@ -7623,6 +7639,7 @@
id="1020"
group="1"
edit_group="driven"
+ wearable="jacket"
name="jacket Sleeve Length"
value_min="0"
value_max="1">
@@ -7635,6 +7652,7 @@
@@ -8428,6 +8448,7 @@
group="1"
wearable="jacket"
edit_group="driven"
+ cross_wearable="true"
name="jacket bottom length lower bump"
value_min="0"
value_max="1">
@@ -8906,7 +8927,7 @@
id="1017" />
+ id="1035" />
getHandle(), pos_local);
}
else if(regionp &&
teleportCore(regionp->getHandle() == to_region_handle_global((F32)pos_global.mdV[VX], (F32)pos_global.mdV[VY])))
@@ -3631,6 +3631,10 @@ void LLAgent::teleportViaLocationLookAt(const LLVector3d& pos_global)
mbTeleportKeepsLookAt = true;
gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE); // detach camera form avatar, so it keeps direction
U64 region_handle = to_region_handle(pos_global);
+ LLSimInfo* simInfo = LLWorldMap::instance().simInfoFromHandle(region_handle);
+ if(simInfo)
+ region_handle = simInfo->getHandle();
+
LLVector3 pos_local = (LLVector3)(pos_global - from_region_handle(region_handle));
teleportRequest(region_handle, pos_local, getTeleportKeepsLookAt());
}
diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp
index ef9ecb967..886348d1a 100644
--- a/indra/newview/llagentwearables.cpp
+++ b/indra/newview/llagentwearables.cpp
@@ -64,6 +64,8 @@
LLAgentWearables gAgentWearables;
+BOOL LLAgentWearables::mInitialWearablesUpdateReceived = FALSE;
+
using namespace LLVOAvatarDefines;
LLAgentWearables::LLAgentWearables() :
mWearablesLoaded(FALSE)
@@ -104,8 +106,8 @@ LLAgentWearables::sendAgentWearablesUpdateCallback::~sendAgentWearablesUpdateCal
}
LLAgentWearables::addWearableToAgentInventoryCallback::addWearableToAgentInventoryCallback(
- LLPointer cb, S32 index, LLWearable* wearable, U32 todo) :
- mIndex(index),
+ LLPointer cb, LLWearableType::EType type, LLWearable* wearable, U32 todo) :
+ mType(type),
mWearable(wearable),
mTodo(todo),
mCB(cb)
@@ -118,7 +120,7 @@ void LLAgentWearables::addWearableToAgentInventoryCallback::fire(const LLUUID& i
if (inv_item.isNull())
return;
- gAgentWearables.addWearabletoAgentInventoryDone(mIndex, inv_item, mWearable);
+ gAgentWearables.addWearabletoAgentInventoryDone(mType, inv_item, mWearable);
if (mTodo & CALL_UPDATE)
{
@@ -133,28 +135,41 @@ void LLAgentWearables::addWearableToAgentInventoryCallback::fire(const LLUUID& i
*/
if (mTodo & CALL_CREATESTANDARDDONE)
{
- gAgentWearables.createStandardWearablesDone(mIndex);
+ gAgentWearables.createStandardWearablesDone(mType);
}
if (mTodo & CALL_MAKENEWOUTFITDONE)
{
- gAgentWearables.makeNewOutfitDone(mIndex);
+ gAgentWearables.makeNewOutfitDone(mType);
}
}
-void LLAgentWearables::addWearabletoAgentInventoryDone(
- S32 index,
+void LLAgentWearables::addWearabletoAgentInventoryDone(const LLWearableType::EType type,
const LLUUID& item_id,
LLWearable* wearable)
{
+ llinfos << "type " << type << " item " << item_id.asString() << llendl;
+
if (item_id.isNull())
return;
- LLUUID old_item_id = mWearableEntry[index].mItemID;
- mWearableEntry[index].mItemID = item_id;
- mWearableEntry[index].mWearable = wearable;
- if (old_item_id.notNull())
- gInventory.addChangedMask(LLInventoryObserver::LABEL, old_item_id);
+ LLUUID old_item_id = getWearableItemID(type);
+ if (wearable)
+ {
+ wearable->setItemID(item_id);
+
+ if (old_item_id.notNull())
+ {
+ gInventory.addChangedMask(LLInventoryObserver::LABEL, old_item_id);
+ setWearable(type,wearable);
+ }
+ else
+ {
+ pushWearable(type,wearable);
+ }
+ }
+
gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id);
+
LLViewerInventoryItem* item = gInventory.getItem(item_id);
if(item && wearable)
{
@@ -172,26 +187,27 @@ void LLAgentWearables::addWearabletoAgentInventoryDone(
void LLAgentWearables::sendAgentWearablesUpdate()
{
// First make sure that we have inventory items for each wearable
- S32 i;
- for(i=0; i < LLWearableType::WT_COUNT; ++i)
+ for (S32 type=0; type < LLWearableType::WT_COUNT; ++type)
{
- LLWearable* wearable = mWearableEntry[ i ].mWearable;
- if (wearable)
{
- if( mWearableEntry[ i ].mItemID.isNull() )
+ LLWearable* wearable = getWearable((LLWearableType::EType)type);
+ if (wearable)
{
- LLPointer cb =
- new addWearableToAgentInventoryCallback(
- LLPointer(NULL),
- i,
- wearable,
- addWearableToAgentInventoryCallback::CALL_NONE);
- addWearableToAgentInventory(cb, wearable);
- }
- else
- {
- gInventory.addChangedMask( LLInventoryObserver::LABEL,
- mWearableEntry[i].mItemID );
+ if (wearable->getItemID().isNull())
+ {
+ LLPointer cb =
+ new addWearableToAgentInventoryCallback(
+ LLPointer(NULL),
+ (LLWearableType::EType)type,
+ wearable,
+ addWearableToAgentInventoryCallback::CALL_NONE);
+ addWearableToAgentInventory(cb, wearable);
+ }
+ else
+ {
+ gInventory.addChangedMask( LLInventoryObserver::LABEL,
+ wearable->getItemID());
+ }
}
}
}
@@ -209,19 +225,19 @@ void LLAgentWearables::sendAgentWearablesUpdate()
gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
- LL_DEBUGS("Wearables") << "sendAgentWearablesUpdate()" << LL_ENDL;
- for(i=0; i < LLWearableType::WT_COUNT; ++i)
+ lldebugs << "sendAgentWearablesUpdate()" << llendl;
+ for (S32 type=0; type < LLWearableType::WT_COUNT; ++type)
{
gMessageSystem->nextBlockFast(_PREHASH_WearableData);
- U8 type_u8 = (U8)i;
+ U8 type_u8 = (U8)type;
gMessageSystem->addU8Fast(_PREHASH_WearableType, type_u8 );
- LLWearable* wearable = mWearableEntry[ i ].mWearable;
+ LLWearable* wearable = getWearable((LLWearableType::EType)type);
if( wearable )
{
- LL_DEBUGS("Wearables") << "Sending wearable " << wearable->getName() << " mItemID = " << mWearableEntry[ i ].mItemID << LL_ENDL;
- LLUUID item_id = mWearableEntry[i].mItemID;
+ LLUUID item_id = wearable->getItemID();
+ LL_DEBUGS("Wearables") << "Sending wearable " << wearable->getName() << " mItemID = " << item_id << LL_ENDL;
const LLViewerInventoryItem *item = gInventory.getItem(item_id);
if (item && item->getIsLinkType())
{
@@ -233,26 +249,37 @@ void LLAgentWearables::sendAgentWearablesUpdate()
}
else
{
- LL_DEBUGS("Wearables") << "Not wearing wearable type " << LLWearableType::getTypeName((LLWearableType::EType)i) << LL_ENDL;
+ LL_DEBUGS("Wearables") << "Not wearing wearable type " << LLWearableType::getTypeName((LLWearableType::EType)type) << LL_ENDL;
gMessageSystem->addUUIDFast(_PREHASH_ItemID, LLUUID::null );
}
- LL_DEBUGS("Wearables") << " " << LLWearableType::getTypeLabel((LLWearableType::EType)i) << " : " << (wearable ? wearable->getAssetID() : LLUUID::null) << LL_ENDL;
+ lldebugs << " " << LLWearableType::getTypeLabel((LLWearableType::EType)type) << ": " << (wearable ? wearable->getAssetID() : LLUUID::null) << llendl;
}
gAgent.sendReliableMessage();
}
-void LLAgentWearables::saveWearable( LLWearableType::EType type, BOOL send_update )
+void LLAgentWearables::saveWearable(const LLWearableType::EType type, BOOL send_update,
+ const std::string new_name)
{
- LLWearable* old_wearable = mWearableEntry[(S32)type].mWearable;
- if( old_wearable && (old_wearable->isDirty() || old_wearable->isOldVersion()) )
+ LLWearable* old_wearable = getWearable(type);
+ if(!old_wearable) return;
+ bool name_changed = !new_name.empty() && (new_name != old_wearable->getName());
+ if (name_changed || old_wearable->isDirty() || old_wearable->isOldVersion())
{
- LLWearable* new_wearable = gWearableList.createCopyFromAvatar( old_wearable );
- mWearableEntry[(S32)type].mWearable = new_wearable;
+ LLUUID old_item_id = old_wearable->getItemID();
+ LLWearable* new_wearable = LLWearableList::instance().createCopyFromAvatar( old_wearable );
+ new_wearable->setItemID(old_item_id); // should this be in LLWearable::copyDataFrom()?
+ setWearable(type,new_wearable);
- LLInventoryItem* item = gInventory.getItem(mWearableEntry[(S32)type].mItemID);
+ LLInventoryItem* item = gInventory.getItem(old_item_id);
if( item )
{
+ std::string item_name = item->getName();
+ if (name_changed)
+ {
+ llinfos << "saveWearable changing name from " << item->getName() << " to " << new_name << llendl;
+ item_name = new_name;
+ }
// Update existing inventory item
LLPointer template_item =
new LLViewerInventoryItem(item->getUUID(),
@@ -261,7 +288,7 @@ void LLAgentWearables::saveWearable( LLWearableType::EType type, BOOL send_updat
new_wearable->getAssetID(),
new_wearable->getAssetType(),
item->getInventoryType(),
- item->getName(),
+ item_name,
item->getDescription(),
item->getSaleInfo(),
item->getFlags(),
@@ -269,6 +296,10 @@ void LLAgentWearables::saveWearable( LLWearableType::EType type, BOOL send_updat
template_item->setTransactionID(new_wearable->getTransactionID());
template_item->updateServer(FALSE);
gInventory.updateItem(template_item);
+ if (name_changed)
+ {
+ gInventory.notifyObservers();
+ }
}
else
{
@@ -281,14 +312,14 @@ void LLAgentWearables::saveWearable( LLWearableType::EType type, BOOL send_updat
LLPointer cb =
new addWearableToAgentInventoryCallback(
LLPointer(NULL),
- (S32)type,
+ type,
new_wearable,
todo);
addWearableToAgentInventory(cb, new_wearable);
return;
}
- gAgentAvatarp->wearableUpdated( type );
+ gAgentAvatarp->wearableUpdated( type, TRUE );
if( send_update )
{
@@ -297,10 +328,9 @@ void LLAgentWearables::saveWearable( LLWearableType::EType type, BOOL send_updat
}
}
-void LLAgentWearables::saveWearableAs(
- LLWearableType::EType type,
- const std::string& new_name,
- BOOL save_in_lost_and_found)
+void LLAgentWearables::saveWearableAs(const LLWearableType::EType type,
+ const std::string& new_name,
+ BOOL save_in_lost_and_found)
{
if(!isWearableCopyable(type))
{
@@ -313,7 +343,8 @@ void LLAgentWearables::saveWearableAs(
llwarns << "LLAgent::saveWearableAs() no old wearable." << llendl;
return;
}
- LLInventoryItem* item = gInventory.getItem(mWearableEntry[type].mItemID);
+
+ LLInventoryItem* item = gInventory.getItem(getWearableItemID(type));
if(!item)
{
llwarns << "LLAgent::saveWearableAs() no inventory item." << llendl;
@@ -321,7 +352,7 @@ void LLAgentWearables::saveWearableAs(
}
std::string trunc_name(new_name);
LLStringUtil::truncate(trunc_name, DB_INV_ITEM_NAME_STR_LEN);
- LLWearable* new_wearable = gWearableList.createCopyFromAvatar(
+ LLWearable* new_wearable = LLWearableList::instance().createCopyFromAvatar(
old_wearable,
trunc_name);
LLPointer cb =
@@ -356,7 +387,7 @@ void LLAgentWearables::saveWearableAs(
{
std::string old_name = old_wearable->getName();
old_wearable->setName( new_name );
- LLWearable* new_wearable = gWearableList.createCopyFromAvatar( old_wearable );
+ LLWearable* new_wearable = LLWearableList::instance().createCopyFromAvatar( old_wearable );
old_wearable->setName( old_name );
LLUUID category_id;
@@ -393,11 +424,13 @@ void LLAgentWearables::saveWearableAs(
void LLAgentWearables::revertWearable( LLWearableType::EType type )
{
- LLWearable* wearable = mWearableEntry[(S32)type].mWearable;
+ LLWearable* wearable = getWearable(type);
+ llassert(wearable);
if( wearable )
{
wearable->writeToAvatar( TRUE );
}
+
gAgent.sendAgentSetAppearance();
}
@@ -428,14 +461,17 @@ void LLAgentWearables::setWearableName( const LLUUID& item_id, const std::string
{
for( S32 i=0; i < LLWearableType::WT_COUNT; i++ )
{
- if( mWearableEntry[i].mItemID == item_id )
+ LLUUID curr_item_id = getWearableItemID((LLWearableType::EType)i);
+ if( curr_item_id == item_id )
{
- LLWearable* old_wearable = mWearableEntry[i].mWearable;
+ LLWearable* old_wearable = getWearable((LLWearableType::EType)i);
llassert( old_wearable );
+ if (!old_wearable) continue;
std::string old_name = old_wearable->getName();
old_wearable->setName( new_name );
- LLWearable* new_wearable = gWearableList.createCopy( old_wearable );
+ LLWearable* new_wearable = LLWearableList::instance().createCopy(old_wearable);
+ new_wearable->setItemID(item_id);
LLInventoryItem* item = gInventory.getItem(item_id);
if(item)
{
@@ -443,7 +479,7 @@ void LLAgentWearables::setWearableName( const LLUUID& item_id, const std::string
}
old_wearable->setName( old_name );
- mWearableEntry[i].mWearable = new_wearable;
+ setWearable((LLWearableType::EType)i,new_wearable);
sendAgentWearablesUpdate();
break;
}
@@ -459,9 +495,10 @@ BOOL LLAgentWearables::isWearableModifiable(LLWearableType::EType type) const
BOOL LLAgentWearables::isWearableModifiable(const LLUUID& item_id) const
{
- if(!item_id.isNull())
+ const LLUUID& linked_id = gInventory.getLinkedItemID(item_id);
+ if (linked_id.notNull())
{
- LLInventoryItem* item = gInventory.getItem(item_id);
+ LLInventoryItem* item = gInventory.getItem(linked_id);
if(item && item->getPermissions().allowModifyBy(gAgent.getID(),
gAgent.getGroupID()))
{
@@ -520,11 +557,13 @@ LLInventoryItem* LLAgentWearables::getWearableInventoryItem(LLWearableType::ETyp
const LLWearable* LLAgentWearables::getWearableFromItemID( const LLUUID& item_id ) const
{
+ const LLUUID& base_item_id = gInventory.getLinkedItemID(item_id);
for( S32 i=0; i < LLWearableType::WT_COUNT; i++ )
{
- if( mWearableEntry[i].mItemID == item_id )
+ const LLWearable * curr_wearable = getWearable((LLWearableType::EType)i);
+ if (curr_wearable && (curr_wearable->getItemID() == base_item_id))
{
- return mWearableEntry[i].mWearable;
+ return curr_wearable;
}
}
return NULL;
@@ -532,16 +571,30 @@ const LLWearable* LLAgentWearables::getWearableFromItemID( const LLUUID& item_id
LLWearable* LLAgentWearables::getWearableFromItemID( const LLUUID& item_id )
{
+ const LLUUID& base_item_id = gInventory.getLinkedItemID(item_id);
for( S32 i=0; i < LLWearableType::WT_COUNT; i++ )
{
- if( mWearableEntry[i].mItemID == item_id )
+ LLWearable * curr_wearable = getWearable((LLWearableType::EType)i);
+ if (curr_wearable && (curr_wearable->getItemID() == base_item_id))
{
- return mWearableEntry[i].mWearable;
+ return curr_wearable;
}
}
return NULL;
}
+LLWearable* LLAgentWearables::getWearableFromAssetID(const LLUUID& asset_id)
+{
+ for (S32 i=0; i < LLWearableType::WT_COUNT; i++)
+ {
+ LLWearable * curr_wearable = getWearable((LLWearableType::EType)i);
+ if (curr_wearable && (curr_wearable->getAssetID() == asset_id))
+ {
+ return curr_wearable;
+ }
+ }
+ return NULL;
+}
void LLAgentWearables::sendAgentWearablesRequest()
{
@@ -554,23 +607,213 @@ void LLAgentWearables::sendAgentWearablesRequest()
// Used to enable/disable menu items.
// static
-BOOL LLAgentWearables::selfHasWearable( void* userdata )
+BOOL LLAgentWearables::selfHasWearable(LLWearableType::EType type)
{
- LLWearableType::EType type = (LLWearableType::EType)(intptr_t)userdata;
- return gAgentWearables.getWearable( type ) != NULL;
-}
-LLWearable* LLAgentWearables::getWearable(const LLWearableType::EType type)
-{
- return (type < LLWearableType::WT_COUNT) ? mWearableEntry[ type ].mWearable : NULL;
-}
-const LLWearable* LLAgentWearables::getWearable(const LLWearableType::EType type) const
-{
- return (type < LLWearableType::WT_COUNT) ? mWearableEntry[ type ].mWearable : NULL;
+ return (gAgentWearables.getWearableCount(type) > 0);
}
-const LLUUID &LLAgentWearables::getWearableItemID(LLWearableType::EType type) const
+LLWearable* LLAgentWearables::getWearable(const LLWearableType::EType type)
{
- return (type < LLWearableType::WT_COUNT) ? mWearableEntry[ type ].mItemID : LLUUID::null;
+ wearableentry_map_t::iterator wearable_iter = mWearableDatas.find(type);
+ if (wearable_iter == mWearableDatas.end())
+ {
+ return NULL;
+ }
+ U32 index = 0; //Remove when multi-wearables are implemented.
+ wearableentry_vec_t& wearable_vec = wearable_iter->second;
+ if (index>=wearable_vec.size())
+ {
+ return NULL;
+ }
+ else
+ {
+ return wearable_vec[index];
+ }
+}
+
+void LLAgentWearables::setWearable(const LLWearableType::EType type, LLWearable *wearable)
+{
+
+ LLWearable *old_wearable = getWearable(type);
+ if (!old_wearable)
+ {
+ pushWearable(type,wearable);
+ return;
+ }
+
+ U32 index = 0; //Remove when multi-wearables are implemented.
+ wearableentry_map_t::iterator wearable_iter = mWearableDatas.find(type);
+ if (wearable_iter == mWearableDatas.end())
+ {
+ llwarns << "invalid type, type " << type << " index " << index << llendl;
+ return;
+ }
+ wearableentry_vec_t& wearable_vec = wearable_iter->second;
+ if (index>=wearable_vec.size())
+ {
+ llwarns << "invalid index, type " << type << " index " << index << llendl;
+ }
+ else
+ {
+ wearable_vec[index] = wearable;
+ old_wearable->setLabelUpdated();
+ wearableUpdated(wearable);
+ }
+}
+
+U32 LLAgentWearables::pushWearable(const LLWearableType::EType type, LLWearable *wearable)
+{
+ if (wearable == NULL)
+ {
+ // no null wearables please!
+ llwarns << "Null wearable sent for type " << type << llendl;
+ return MAX_CLOTHING_PER_TYPE;
+ }
+ if (type < LLWearableType::WT_COUNT || mWearableDatas[type].size() < MAX_CLOTHING_PER_TYPE)
+ {
+ mWearableDatas[type].push_back(wearable);
+ wearableUpdated(wearable);
+ return mWearableDatas[type].size()-1;
+ }
+ return MAX_CLOTHING_PER_TYPE;
+}
+
+void LLAgentWearables::wearableUpdated(LLWearable *wearable)
+{
+ gAgentAvatarp->wearableUpdated(wearable->getType(), FALSE);
+ wearable->refreshName();
+ wearable->setLabelUpdated();
+}
+
+void LLAgentWearables::popWearable(LLWearable *wearable)
+{
+ if (wearable == NULL)
+ {
+ // nothing to do here. move along.
+ return;
+ }
+
+ U32 index = 0; //Remove when multi-wearables are implemented.
+ LLWearableType::EType type = wearable->getType();
+
+ if (index < MAX_CLOTHING_PER_TYPE && index < getWearableCount(type))
+ {
+ popWearable(type);
+ }
+}
+
+void LLAgentWearables::popWearable(const LLWearableType::EType type)
+{
+ LLWearable *wearable = getWearable(type);
+ if (wearable)
+ {
+ mWearableDatas[type].erase(mWearableDatas[type].begin());
+ gAgentAvatarp->wearableUpdated(wearable->getType(), TRUE);
+ wearable->setLabelUpdated();
+ }
+}
+
+U32 LLAgentWearables::getWearableIndex(const LLWearable *wearable) const
+{
+ if (wearable == NULL)
+ {
+ return MAX_CLOTHING_PER_TYPE;
+ }
+
+ const LLWearableType::EType type = wearable->getType();
+ wearableentry_map_t::const_iterator wearable_iter = mWearableDatas.find(type);
+ if (wearable_iter == mWearableDatas.end())
+ {
+ llwarns << "tried to get wearable index with an invalid type!" << llendl;
+ return MAX_CLOTHING_PER_TYPE;
+ }
+ const wearableentry_vec_t& wearable_vec = wearable_iter->second;
+ for(U32 index = 0; index < wearable_vec.size(); index++)
+ {
+ if (wearable_vec[index] == wearable)
+ {
+ return index;
+ }
+ }
+
+ return MAX_CLOTHING_PER_TYPE;
+}
+
+
+const LLWearable* LLAgentWearables::getWearable(const LLWearableType::EType type) const
+{
+ wearableentry_map_t::const_iterator wearable_iter = mWearableDatas.find(type);
+ if (wearable_iter == mWearableDatas.end())
+ {
+ return NULL;
+ }
+ U32 index = 0; //Remove when multi-wearables are implemented.
+ const wearableentry_vec_t& wearable_vec = wearable_iter->second;
+ if (index>=wearable_vec.size())
+ {
+ return NULL;
+ }
+ else
+ {
+ return wearable_vec[index];
+ }
+}
+
+LLWearable* LLAgentWearables::getTopWearable(const LLWearableType::EType type)
+{
+ U32 count = getWearableCount(type);
+ if ( count == 0)
+ {
+ return NULL;
+ }
+
+ return getWearable(type);
+}
+
+LLWearable* LLAgentWearables::getBottomWearable(const LLWearableType::EType type)
+{
+ if (getWearableCount(type) == 0)
+ {
+ return NULL;
+ }
+
+ return getWearable(type);
+}
+
+U32 LLAgentWearables::getWearableCount(const LLWearableType::EType type) const
+{
+ wearableentry_map_t::const_iterator wearable_iter = mWearableDatas.find(type);
+ if (wearable_iter == mWearableDatas.end())
+ {
+ return 0;
+ }
+ const wearableentry_vec_t& wearable_vec = wearable_iter->second;
+ return wearable_vec.size();
+}
+
+U32 LLAgentWearables::getWearableCount(const U32 tex_index) const
+{
+ const LLWearableType::EType wearable_type = LLVOAvatarDictionary::getTEWearableType((LLVOAvatarDefines::ETextureIndex)tex_index);
+ return getWearableCount(wearable_type);
+}
+
+
+const LLUUID LLAgentWearables::getWearableItemID(LLWearableType::EType type) const
+{
+ const LLWearable *wearable = getWearable(type);
+ if (wearable)
+ return wearable->getItemID();
+ else
+ return LLUUID();
+}
+
+const LLUUID LLAgentWearables::getWearableAssetID(LLWearableType::EType type) const
+{
+ const LLWearable *wearable = getWearable(type);
+ if (wearable)
+ return wearable->getAssetID();
+ else
+ return LLUUID();
}
BOOL LLAgentWearables::isWearingItem( const LLUUID& item_id ) const
@@ -583,21 +826,21 @@ BOOL LLAgentWearables::isWearingItem( const LLUUID& item_id ) const
void LLAgentWearables::processAgentInitialWearablesUpdate( LLMessageSystem* mesgsys, void** user_data )
{
// We should only receive this message a single time. Ignore subsequent AgentWearablesUpdates
- // that may result from AgentWearablesRequest having been sent more than once.
- static bool first = true;
- if (!first) return;
- first = false;
+ // that may result from AgentWearablesRequest having been sent more than once.
+ if (mInitialWearablesUpdateReceived)
+ return;
+ mInitialWearablesUpdateReceived = true;
LLUUID agent_id;
gMessageSystem->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id );
- LLVOAvatar* avatar = gAgentAvatarp;
- if( avatar && (agent_id == avatar->getID()) )
+ if (isAgentAvatarValid() && (agent_id == gAgentAvatarp->getID()))
{
- gMessageSystem->getU32Fast(_PREHASH_AgentData, _PREHASH_SerialNum, gAgentQueryManager.mUpdateSerialNum );
+ gMessageSystem->getU32Fast(_PREHASH_AgentData, _PREHASH_SerialNum, gAgentQueryManager.mUpdateSerialNum);
+ const S32 NUM_BODY_PARTS = 4;
S32 num_wearables = gMessageSystem->getNumberOfBlocksFast(_PREHASH_WearableData);
- if( num_wearables < 4 )
+ if (num_wearables < NUM_BODY_PARTS)
{
// Transitional state. Avatars should always have at least their body parts (hair, eyes, shape and skin).
// The fact that they don't have any here (only a dummy is sent) implies that this account existed
@@ -607,9 +850,8 @@ void LLAgentWearables::processAgentInitialWearablesUpdate( LLMessageSystem* mesg
//lldebugs << "processAgentInitialWearablesUpdate()" << llendl;
// Add wearables
- LLUUID asset_id_array[ LLWearableType::WT_COUNT ];
- S32 i;
- for( i=0; i < num_wearables; i++ )
+ std::pair asset_id_array[ LLWearableType::WT_COUNT ];
+ for (S32 i=0; i < num_wearables; i++)
{
U8 type_u8 = 0;
gMessageSystem->getU8Fast(_PREHASH_WearableData, _PREHASH_WearableType, type_u8, i );
@@ -636,26 +878,29 @@ void LLAgentWearables::processAgentInitialWearablesUpdate( LLMessageSystem* mesg
continue;
}
- gAgentWearables.mWearableEntry[type].mItemID = item_id;
- asset_id_array[type] = asset_id;
+ asset_id_array[type] = std::pair(asset_id,item_id);
}
- LL_DEBUGS("Wearables") << " " << LLWearableType::getTypeLabel(type) << " " << asset_id << " item id " << gAgentWearables.mWearableEntry[type].mItemID.asString() << LL_ENDL;
+ LL_DEBUGS("Wearables") << " " << LLWearableType::getTypeLabel(type) << " " << asset_id << " item id " << gAgentWearables.getWearableItemID(type).asString() << LL_ENDL;
}
LLCOFMgr::instance().fetchCOF();
// now that we have the asset ids...request the wearable assets
- for( i = 0; i < LLWearableType::WT_COUNT; i++ )
+ for(S32 i = 0; i < LLWearableType::WT_COUNT; i++ )
{
- LL_DEBUGS("Wearables") << " fetching " << asset_id_array[i] << LL_ENDL;
- if( !gAgentWearables.mWearableEntry[i].mItemID.isNull() )
+ LL_DEBUGS("Wearables") << " fetching " << asset_id_array[i].first << LL_ENDL;
+ const LLUUID item_id = asset_id_array[i].second;
+ if( !item_id.isNull() )
{
- gWearableList.getAsset(
- asset_id_array[i],
+ LLWearableList::instance().getAsset(
+ asset_id_array[i].first,
LLStringUtil::null,
LLWearableType::getAssetType( (LLWearableType::EType) i ),
- LLAgentWearables::onInitialWearableAssetArrived, (void*)(intptr_t)i );
+ LLAgentWearables::onInitialWearableAssetArrived,
+ //This scary cast is to prevent messing with llwearablelist. Since ItemIDs are now tied to wearables,
+ // we now need to pass the ids to onInitialWearableAssetArrived so LLWearable::setItemID can be called there.
+ (void*)(intptr_t)new std::pair((LLWearableType::EType)i,item_id) );
}
}
@@ -668,7 +913,10 @@ void LLAgentWearables::processAgentInitialWearablesUpdate( LLMessageSystem* mesg
// static
void LLAgentWearables::onInitialWearableAssetArrived( LLWearable* wearable, void* userdata )
{
- LLWearableType::EType type = (LLWearableType::EType)(intptr_t)userdata;
+ std::pair* wearable_data = (std::pair*)(intptr_t) userdata;
+ LLWearableType::EType type = wearable_data->first;
+ LLUUID item_id = wearable_data->second;
+ delete wearable_data;
LLVOAvatar* avatar = gAgentAvatarp;
if( !avatar )
@@ -679,7 +927,8 @@ void LLAgentWearables::onInitialWearableAssetArrived( LLWearable* wearable, void
if( wearable )
{
llassert( type == wearable->getType() );
- gAgentWearables.mWearableEntry[ type ].mWearable = wearable;
+ wearable->setItemID(item_id);
+ gAgentWearables.setWearable(type,wearable);
// disable composites if initial textures are baked
avatar->setupComposites();
@@ -687,7 +936,7 @@ void LLAgentWearables::onInitialWearableAssetArrived( LLWearable* wearable, void
wearable->writeToAvatar( FALSE );
avatar->setCompositeUpdatesEnabled(TRUE);
- gInventory.addChangedMask( LLInventoryObserver::LABEL, gAgentWearables.mWearableEntry[type].mItemID );
+ gInventory.addChangedMask( LLInventoryObserver::LABEL, item_id );
}
else
{
@@ -703,7 +952,7 @@ void LLAgentWearables::onInitialWearableAssetArrived( LLWearable* wearable, void
gAgentWearables.mWearablesLoaded = TRUE;
for( S32 i = 0; i < LLWearableType::WT_COUNT; i++ )
{
- if( !gAgentWearables.mWearableEntry[i].mItemID.isNull() && !gAgentWearables.mWearableEntry[i].mWearable )
+ if( !gAgentWearables.getWearableItemID((LLWearableType::EType)i).isNull() && !gAgentWearables.getWearable((LLWearableType::EType)i) )
{
gAgentWearables.mWearablesLoaded = FALSE;
break;
@@ -733,21 +982,19 @@ void LLAgentWearables::recoverMissingWearable( LLWearableType::EType type )
// Try to recover by replacing missing wearable with a new one.
LLNotificationsUtil::add("ReplacedMissingWearable");
lldebugs << "Wearable " << LLWearableType::getTypeLabel( type ) << " could not be downloaded. Replaced inventory item with default wearable." << llendl;
- LLWearable* new_wearable = gWearableList.createNewWearable(type);
+ LLWearable* new_wearable = LLWearableList::instance().createNewWearable(type);
- S32 type_s32 = (S32) type;
- mWearableEntry[type_s32].mWearable = new_wearable;
+ setWearable(type,new_wearable);
new_wearable->writeToAvatar( TRUE );
// Add a new one in the lost and found folder.
// (We used to overwrite the "not found" one, but that could potentially
// destory content.) JC
- LLUUID lost_and_found_id =
- gInventory.findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND);
+ const LLUUID lost_and_found_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND);
LLPointer cb =
new addWearableToAgentInventoryCallback(
LLPointer(NULL),
- type_s32,
+ type,
new_wearable,
addWearableToAgentInventoryCallback::CALL_RECOVERDONE);
addWearableToAgentInventory( cb, new_wearable, lost_and_found_id, TRUE);
@@ -756,17 +1003,8 @@ void LLAgentWearables::recoverMissingWearable( LLWearableType::EType type )
void LLAgentWearables::recoverMissingWearableDone()
{
// Have all the wearables that the avatar was wearing at log-in arrived or been fabricated?
- mWearablesLoaded = TRUE;
- for( S32 i = 0; i < LLWearableType::WT_COUNT; i++ )
- {
- if( !mWearableEntry[i].mItemID.isNull() && !mWearableEntry[i].mWearable )
- {
- mWearablesLoaded = FALSE;
- break;
- }
- }
-
- if( mWearablesLoaded )
+ updateWearablesLoaded();
+ if (areWearablesLoaded())
{
// Make sure that the server's idea of the avatar's wearables actually match the wearables.
gAgent.sendAgentSetAppearance();
@@ -818,14 +1056,13 @@ void LLAgentWearables::createStandardWearables(BOOL female)
once = true;
donecb = new createStandardWearablesAllDoneCallback;
}
- llassert( mWearableEntry[i].mWearable == NULL );
- LLWearable* wearable = gWearableList.createNewWearable((LLWearableType::EType)i);
- mWearableEntry[i].mWearable = wearable;
+ llassert(getWearableCount((LLWearableType::EType)i) == 0);
+ LLWearable* wearable = LLWearableList::instance().createNewWearable((LLWearableType::EType)i);
// no need to update here...
LLPointer cb =
new addWearableToAgentInventoryCallback(
donecb,
- i,
+ (LLWearableType::EType)i,
wearable,
addWearableToAgentInventoryCallback::CALL_CREATESTANDARDDONE);
addWearableToAgentInventory(cb, wearable, LLUUID::null, FALSE);
@@ -834,7 +1071,7 @@ void LLAgentWearables::createStandardWearables(BOOL female)
}
void LLAgentWearables::createStandardWearablesDone(S32 index)
{
- LLWearable* wearable = mWearableEntry[index].mWearable;
+ LLWearable* wearable = getWearable((LLWearableType::EType)index);
if (wearable)
{
@@ -847,8 +1084,7 @@ void LLAgentWearables::createStandardWearablesAllDone()
// ... because sendAgentWearablesUpdate will notify inventory
// observers.
mWearablesLoaded = TRUE;
- sendAgentWearablesUpdate();
- gAgent.sendAgentSetAppearance();
+ updateServer();
// Treat this as the first texture entry message, if none received yet
gAgentAvatarp->onFirstTEMessageReceived();
@@ -890,10 +1126,10 @@ void LLAgentWearables::makeNewOutfit(
for( i = 0; i < count; ++i )
{
S32 index = wearables_to_include[i];
- LLWearable* old_wearable = mWearableEntry[ index ].mWearable;
+ LLWearable* old_wearable = getWearable((LLWearableType::EType)index);
if( old_wearable )
{
- LLViewerInventoryItem* item = gInventory.getItem(mWearableEntry[index].mItemID);
+ LLViewerInventoryItem* item = gInventory.getItem(getWearableItemID((LLWearableType::EType)index));
if (fUseOutfits)
{
std::string strOrdering = llformat("@%d", item->getWearableType() * 100);
@@ -920,7 +1156,7 @@ void LLAgentWearables::makeNewOutfit(
if (fUseLinks || isWearableCopyable((LLWearableType::EType)index))
{
- LLWearable* new_wearable = gWearableList.createCopy(old_wearable);
+ LLWearable* new_wearable = LLWearableList::instance().createCopy(old_wearable);
if (rename_clothing)
{
new_wearable->setName(new_name);
@@ -938,7 +1174,7 @@ void LLAgentWearables::makeNewOutfit(
LLPointer cb =
new addWearableToAgentInventoryCallback(
cbdone,
- index,
+ (LLWearableType::EType)index,
new_wearable,
todo);
if (isWearableCopyable((LLWearableType::EType)index))
@@ -1053,9 +1289,9 @@ void LLAgentWearables::makeNewOutfit(
}
}
-void LLAgentWearables::makeNewOutfitDone(S32 index)
+void LLAgentWearables::makeNewOutfitDone(S32 type)
{
- LLUUID first_item_id = mWearableEntry[index].mItemID;
+ LLUUID first_item_id = getWearableItemID((LLWearableType::EType)type);
// Open the inventory and select the first item we added.
if( first_item_id.notNull() )
{
@@ -1088,15 +1324,19 @@ void LLAgentWearables::addWearableToAgentInventory(LLPointerisDirty() )
@@ -1150,41 +1392,41 @@ bool LLAgentWearables::onRemoveWearableDialog(const LLSD& notification, const LL
// Called by removeWearable() and onRemoveWearableDialog() to actually do the removal.
void LLAgentWearables::removeWearableFinal( LLWearableType::EType type )
{
- LLWearable* old_wearable = mWearableEntry[ type ].mWearable;
+ gInventory.addChangedMask( LLInventoryObserver::LABEL, getWearableItemID(type) );
- gInventory.addChangedMask( LLInventoryObserver::LABEL, mWearableEntry[type].mItemID );
-
- mWearableEntry[ type ].mWearable = NULL;
- mWearableEntry[ type ].mItemID.setNull();
-
- queryWearableCache();
+ LLWearable* old_wearable = getWearable(type);
+ //queryWearableCache();
if( old_wearable )
{
+ popWearable(old_wearable);
old_wearable->removeFromAvatar( TRUE );
}
+ queryWearableCache();
+
// Update the server
- sendAgentWearablesUpdate();
- gAgent.sendAgentSetAppearance();
+ updateServer();
gInventory.notifyObservers();
}
void LLAgentWearables::copyWearableToInventory( LLWearableType::EType type )
{
- LLWearable* wearable = mWearableEntry[ type ].mWearable;
+ LLWearable* wearable = getWearable(type);
if( wearable )
{
// Save the old wearable if it has changed.
if( wearable->isDirty() )
{
- wearable = gWearableList.createCopyFromAvatar( wearable );
- mWearableEntry[ type ].mWearable = wearable;
+ LLWearable * new_wearable = LLWearableList::instance().createCopyFromAvatar( wearable );
+ new_wearable->setItemID(wearable->getItemID());
+ setWearable(type,new_wearable);
+ wearable = new_wearable;
}
// Make a new entry in the inventory. (Put it in the same folder as the original item if possible.)
LLUUID category_id;
- LLInventoryItem* item = gInventory.getItem( mWearableEntry[ type ].mItemID );
+ LLInventoryItem* item = gInventory.getItem( wearable->getItemID() );
if( item )
{
category_id = item->getParentUUID();
@@ -1278,37 +1520,55 @@ void LLAgentWearables::setWearableOutfit(const LLInventoryItem::item_array_t& it
LLPointer new_item = items[i];
llassert(new_wearable);
- LLWearableType::EType type = new_wearable->getType();
- wearables_to_remove[type] = FALSE;
-
- LLWearable* old_wearable = mWearableEntry[ type ].mWearable;
- if( old_wearable )
+
+ if (new_wearable)
{
- const LLUUID& old_item_id = mWearableEntry[ type ].mItemID;
- if( (old_wearable->getAssetID() == new_wearable->getAssetID()) &&
- (old_item_id == new_item->getUUID()) )
+ LLWearableType::EType type = new_wearable->getType();
+ wearables_to_remove[type] = FALSE;
+
+ LLWearable* old_wearable = getWearable(type);
+ if( old_wearable )
{
- lldebugs << "No change to wearable asset and item: " << LLWearableType::getTypeName( type ) << llendl;
- continue;
+ const LLUUID& old_item_id = getWearableItemID(type);
+ if( (old_wearable->getAssetID() == new_wearable->getAssetID()) &&
+ (old_item_id == new_item->getUUID()) )
+ {
+ lldebugs << "No change to wearable asset and item: " << LLWearableType::getTypeName( type ) << llendl;
+ continue;
+ }
+
+ gInventory.addChangedMask(LLInventoryObserver::LABEL, old_item_id);
+
+ // Assumes existing wearables are not dirty.
+ if( old_wearable->isDirty() )
+ {
+ llassert(0);
+ continue;
+ }
}
- gInventory.addChangedMask(LLInventoryObserver::LABEL, old_item_id);
-
- // Assumes existing wearables are not dirty.
- if( old_wearable->isDirty() )
+ if (isFirstPhysicsWearable(type, new_item, new_wearable))
{
- llassert(0);
- continue;
+ return;
+ }
+
+ new_wearable->setName(new_item->getName());
+ new_wearable->setItemID(new_item->getUUID());
+
+ if (LLWearableType::getAssetType(type) == LLAssetType::AT_BODYPART)
+ {
+ // exactly one wearable per body part
+ setWearable(type,new_wearable);
+ }
+ else if(old_wearable) //Remove when multi-wearables are implemented.
+ {
+ setWearable(type,new_wearable);
+ }
+ else
+ {
+ pushWearable(type,new_wearable);
}
}
-
- if (isFirstPhysicsWearable(type, new_item, new_wearable))
- {
- return;
- }
-
- mWearableEntry[ type ].mItemID = new_item->getUUID();
- mWearableEntry[ type ].mWearable = new_wearable;
}
std::vector wearables_being_removed;
@@ -1317,11 +1577,11 @@ void LLAgentWearables::setWearableOutfit(const LLInventoryItem::item_array_t& it
{
if( wearables_to_remove[i] )
{
- wearables_being_removed.push_back(mWearableEntry[ i ].mWearable);
- mWearableEntry[ i ].mWearable = NULL;
+ LLWearable* wearable = getWearable((LLWearableType::EType)i);
+ wearables_being_removed.push_back(getWearable((LLWearableType::EType)i));
+ popWearable(wearable);
- gInventory.addChangedMask(LLInventoryObserver::LABEL, mWearableEntry[ i ].mItemID);
- mWearableEntry[ i ].mItemID.setNull();
+ gInventory.addChangedMask(LLInventoryObserver::LABEL, wearable->getItemID());
}
}
@@ -1349,8 +1609,8 @@ void LLAgentWearables::setWearableOutfit(const LLInventoryItem::item_array_t& it
// Start rendering & update the server
mWearablesLoaded = TRUE;
- sendAgentWearablesUpdate();
- gAgent.sendAgentSetAppearance();
+ updateServer();
+
lldebugs << "setWearableOutfit() end" << llendl;
}
@@ -1359,9 +1619,14 @@ void LLAgentWearables::setWearableOutfit(const LLInventoryItem::item_array_t& it
// User has picked "wear on avatar" from a menu.
void LLAgentWearables::setWearableItem( LLInventoryItem* new_item, LLWearable* new_wearable )
{
+ //LLAgentDumper dumper("setWearableItem");
+ if (isWearingItem(new_item->getUUID()))
+ {
+ llwarns << "wearable " << new_item->getUUID() << " is already worn" << llendl;
+ return;
+ }
LLWearableType::EType type = new_wearable->getType();
- LLWearable* old_wearable = mWearableEntry[ type ].mWearable;
// [RLVa:KB] - Checked: 2009-07-07 (RLVa-1.0.0d)
// Block if: we can't wear on that layer; or we're already wearing something there we can't take off
@@ -1376,9 +1641,10 @@ void LLAgentWearables::setWearableItem( LLInventoryItem* new_item, LLWearable* n
return;
}
+ LLWearable* old_wearable = getWearable(type);
if( old_wearable )
{
- const LLUUID& old_item_id = mWearableEntry[ type ].mItemID;
+ const LLUUID& old_item_id = old_wearable->getItemID();
if( (old_wearable->getAssetID() == new_wearable->getAssetID()) &&
(old_item_id == new_item->getUUID()) )
{
@@ -1391,7 +1657,7 @@ void LLAgentWearables::setWearableItem( LLInventoryItem* new_item, LLWearable* n
// Bring up modal dialog: Save changes? Yes, No, Cancel
LLSD payload;
payload["item_id"] = new_item->getUUID();
- LLNotificationsUtil::add( "WearableSave", LLSD(), payload, boost::bind(LLAgentWearables::onSetWearableDialog, _1, _2, new_wearable));
+ LLNotificationsUtil::add( "WearableSave", LLSD(), payload, boost::bind(onSetWearableDialog, _1, _2, new_wearable));
return;
}
}
@@ -1440,9 +1706,14 @@ void LLAgentWearables::setWearableFinal( LLInventoryItem* new_item, LLWearable*
// Replace the old wearable with a new one.
llassert( new_item->getAssetUUID() == new_wearable->getAssetID() );
- LLUUID old_item_id = mWearableEntry[ type ].mItemID;
- mWearableEntry[ type ].mItemID = new_item->getUUID();
- mWearableEntry[ type ].mWearable = new_wearable;
+ LLWearable *old_wearable = getWearable(type);
+ LLUUID old_item_id;
+ if (old_wearable)
+ {
+ old_item_id = old_wearable->getItemID();
+ }
+ new_wearable->setItemID(new_item->getUUID());
+ setWearable(type,new_wearable);
if (old_item_id.notNull())
{
@@ -1454,9 +1725,7 @@ void LLAgentWearables::setWearableFinal( LLInventoryItem* new_item, LLWearable*
queryWearableCache();
new_wearable->writeToAvatar( TRUE );
- // Update the server
- sendAgentWearablesUpdate();
- gAgent.sendAgentSetAppearance();
+ updateServer();
}
void LLAgentWearables::queryWearableCache()
@@ -1551,10 +1820,8 @@ LLUUID LLAgentWearables::computeBakedTextureHash(LLVOAvatarDefines::EBakedTextur
// User has picked "remove from avatar" from a menu.
// static
-void LLAgentWearables::userRemoveWearable( void* userdata )
+void LLAgentWearables::userRemoveWearable(const LLWearableType::EType &type)
{
- LLWearableType::EType type = (LLWearableType::EType)(intptr_t)userdata;
-
if( !(type==LLWearableType::WT_SHAPE || type==LLWearableType::WT_SKIN || type==LLWearableType::WT_HAIR || type==LLWearableType::WT_EYES) ) //&&
//!((!gAgent.isTeen()) && ( type==WT_UNDERPANTS || type==WT_UNDERSHIRT )) )
{
@@ -1562,7 +1829,7 @@ void LLAgentWearables::userRemoveWearable( void* userdata )
}
}
-void LLAgentWearables::userRemoveAllClothes( void* userdata )
+void LLAgentWearables::userRemoveAllClothes()
{
// We have to do this up front to avoid having to deal with the case of multiple wearables being dirty.
if (gAgentCamera.cameraCustomizeAvatar())
@@ -1727,7 +1994,7 @@ void LLAgentWearables::userRemoveMultipleAttachments(llvo_vec_t& objects_to_remo
gMessageSystem->sendReliable(gAgent.getRegionHost());
}
-void LLAgentWearables::userRemoveAllAttachments( void* userdata )
+void LLAgentWearables::userRemoveAllAttachments()
{
if (!isAgentAvatarValid()) return;
@@ -1823,3 +2090,22 @@ void LLAgentWearables::userAttachMultipleAttachments(LLInventoryModel::item_arra
}
}
}
+// MULTI-WEARABLE: DEPRECATED: item pending count relies on old messages that don't support multi-wearables. do not trust to be accurate
+void LLAgentWearables::updateWearablesLoaded()
+{
+ mWearablesLoaded = TRUE;
+ for( S32 i = 0; i < LLWearableType::WT_COUNT; i++ )
+ {
+ if( !getWearableItemID((LLWearableType::EType)i).isNull() && !getWearable((LLWearableType::EType)i) )
+ {
+ mWearablesLoaded = FALSE;
+ break;
+ }
+ }
+
+}
+void LLAgentWearables::updateServer()
+{
+ sendAgentWearablesUpdate();
+ gAgent.sendAgentSetAppearance();
+}
diff --git a/indra/newview/llagentwearables.h b/indra/newview/llagentwearables.h
index 6d052142b..70f9b0969 100644
--- a/indra/newview/llagentwearables.h
+++ b/indra/newview/llagentwearables.h
@@ -52,8 +52,6 @@ class LLInitialWearablesFetch;
class LLViewerObject;
class LLTexLayerTemplate;
-typedef std::vector llvo_vec_t;
-
class LLAgentWearables : public LLInitClass
{
//--------------------------------------------------------------------
@@ -72,7 +70,7 @@ public:
// LLInitClass interface
static void initClass();
protected:
- void createStandardWearablesDone(S32 index);
+ void createStandardWearablesDone(S32 type);
void createStandardWearablesAllDone();
//--------------------------------------------------------------------
@@ -85,7 +83,7 @@ public:
BOOL isWearableCopyable(LLWearableType::EType type) const;
BOOL areWearablesLoaded() const;
- //void updateWearablesLoaded();
+ void updateWearablesLoaded();
//void checkWearablesLoaded() const;
//bool canMoveWearable(const LLUUID& item_id, bool closer_to_body);
@@ -101,24 +99,23 @@ public:
// Accessors
//--------------------------------------------------------------------
public:
- const LLUUID& getWearableItemID(LLWearableType::EType type ) const;
- //const LLUUID getWearableAssetID(LLWearableType::EType type, U32 index /*= 0*/) const;
+ const LLUUID getWearableItemID(LLWearableType::EType type ) const;
+ const LLUUID getWearableAssetID(LLWearableType::EType type) const;
const LLWearable* getWearableFromItemID(const LLUUID& item_id) const;
LLWearable* getWearableFromItemID(const LLUUID& item_id);
- //LLWearable* getWearableFromAssetID(const LLUUID& asset_id);
+ LLWearable* getWearableFromAssetID(const LLUUID& asset_id);
LLInventoryItem* getWearableInventoryItem(LLWearableType::EType type);
- static BOOL selfHasWearable( void* userdata ); // userdata is LLWearableType::EType
+ static BOOL selfHasWearable(LLWearableType::EType type);
LLWearable* getWearable( const LLWearableType::EType type );
const LLWearable* getWearable( const LLWearableType::EType type ) const;
- //const LLWearable* getWearable(const LLWearableType::EType type, U32 index /*= 0*/) const;
- //LLWearable* getTopWearable(const LLWearableType::EType type);
- //LLWearable* getBottomWearable(const LLWearableType::EType type);
- //U32 getWearableCount(const LLWearableType::EType type) const;
- //U32 getWearableCount(const U32 tex_index) const;
+ LLWearable* getTopWearable(const LLWearableType::EType type);
+ LLWearable* getBottomWearable(const LLWearableType::EType type);
+ U32 getWearableCount(const LLWearableType::EType type) const;
+ U32 getWearableCount(const U32 tex_index) const;
void copyWearableToInventory( LLWearableType::EType type );
- static const U32 MAX_CLOTHING_PER_TYPE = 5;
+ static const U32 MAX_CLOTHING_PER_TYPE = 1;
//--------------------------------------------------------------------
@@ -127,18 +124,18 @@ public:
private:
// Low-level data structure setter - public access is via setWearableItem, etc.
- //void setWearable(const LLWearableType::EType type, U32 index, LLWearable *wearable);
- //U32 pushWearable(const LLWearableType::EType type, LLWearable *wearable);
- //void wearableUpdated(LLWearable *wearable);
- //void popWearable(LLWearable *wearable);
- //void popWearable(const LLWearableType::EType type, U32 index);
+ void setWearable(const LLWearableType::EType type, LLWearable *wearable);
+ U32 pushWearable(const LLWearableType::EType type, LLWearable *wearable);
+ void wearableUpdated(LLWearable *wearable);
+ void popWearable(LLWearable *wearable);
+ void popWearable(const LLWearableType::EType type);
public:
void setWearableItem(LLInventoryItem* new_item, LLWearable* wearable);
void setWearableOutfit(const LLInventoryItem::item_array_t& items, const LLDynamicArray< LLWearable* >& wearables, BOOL remove);
void setWearableName(const LLUUID& item_id, const std::string& new_name);
//void addLocalTextureObject(const LLWearableType::EType wearable_type, const LLVOAvatarDefines::ETextureIndex texture_type, U32 wearable_index);
- //U32 getWearableIndex(LLWearable *wearable);
+ U32 getWearableIndex(const LLWearable *wearable) const;
protected:
void setWearableFinal( LLInventoryItem* new_item, LLWearable* new_wearable );
@@ -159,8 +156,7 @@ protected:
* @param item_id The inventory item id of the new wearable to wear.
* @param wearable The actual wearable data.
*/
- void addWearabletoAgentInventoryDone(
- S32 index,
+ void addWearabletoAgentInventoryDone(const LLWearableType::EType type,
const LLUUID& item_id,
LLWearable* wearable);
@@ -206,8 +202,8 @@ protected:
void sendAgentWearablesUpdate();
void sendAgentWearablesRequest();
void queryWearableCache();
- //void updateServer();
- static void onInitialWearableAssetArrived(LLWearable* wearable, void* userdata);
+ void updateServer();
+ static void onInitialWearableAssetArrived(LLWearable* wearable, void* userdata );
//--------------------------------------------------------------------
// Outfits
@@ -224,14 +220,15 @@ public:
BOOL rename_clothing);
private:
- void makeNewOutfitDone(S32 index);
+ void makeNewOutfitDone(S32 type);
//--------------------------------------------------------------------
// Save Wearables
//--------------------------------------------------------------------
public:
- void saveWearableAs( LLWearableType::EType type, const std::string& new_name, BOOL save_in_lost_and_found );
- void saveWearable( LLWearableType::EType type, BOOL send_update = TRUE );
+ void saveWearableAs(const LLWearableType::EType type, const std::string& new_name, BOOL save_in_lost_and_found );
+ void saveWearable(const LLWearableType::EType type, BOOL send_update = TRUE,
+ const std::string new_name = "");
void saveAllWearables();
void revertWearable( LLWearableType::EType type );
@@ -241,14 +238,16 @@ public:
// Static UI hooks
//--------------------------------------------------------------------
public:
- static void userRemoveWearable( void* userdata ); // userdata is LLWearableType::EType
- static void userRemoveAllClothes( void* userdata ); // userdata is NULL
+ static void userRemoveWearable(const LLWearableType::EType &type);
+ static void userRemoveAllClothes();
+
+ typedef std::vector llvo_vec_t;
+
// static void userUpdateAttachments(LLInventoryModel::item_array_t& obj_item_array);
// [SL:KB] - Patch: Appearance-SyncAttach | Checked: 2010-09-22 (Catznip-2.2.0a) | Added: Catznip-2.2.0a
// Not the best way to go about this but other attempts changed far too much LL code to be a viable solution
static void userUpdateAttachments(LLInventoryModel::item_array_t& obj_item_array, bool fAttachOnly = false);
// [/SL:KB]
- static void userRemoveAllAttachments( void* userdata); // userdata is NULLy);
static void userRemoveMultipleAttachments(llvo_vec_t& llvo_array);
static void userRemoveAllAttachments();
static void userAttachMultipleAttachments(LLInventoryModel::item_array_t& obj_item_array);
@@ -276,14 +275,12 @@ private:
//--------------------------------------------------------------------
// Member variables
//--------------------------------------------------------------------
- struct LLWearableEntry
- {
- LLWearableEntry() : mItemID( LLUUID::null ), mWearable( NULL ) {}
+private:
+ typedef std::vector wearableentry_vec_t; // all wearables of a certain type (EG all shirts)
+ typedef std::map wearableentry_map_t; // wearable "categories" arranged by wearable type
+ wearableentry_map_t mWearableDatas;
- LLUUID mItemID; // ID of the inventory item in the agent's inventory.
- LLWearable* mWearable;
- };
- LLWearableEntry mWearableEntry[ LLWearableType::WT_COUNT ];
+ static BOOL mInitialWearablesUpdateReceived;
BOOL mWearablesLoaded;
//--------------------------------------------------------------------------------
@@ -322,15 +319,14 @@ private:
* @param wearable The wearable data.
* @param todo Bitmask of actions to take on completion.
*/
- addWearableToAgentInventoryCallback(
- LLPointer cb,
- S32 index,
- LLWearable* wearable,
- U32 todo = CALL_NONE);
+ addWearableToAgentInventoryCallback(LLPointer cb,
+ LLWearableType::EType type,
+ LLWearable* wearable,
+ U32 todo = CALL_NONE);
virtual void fire(const LLUUID& inv_item);
private:
- S32 mIndex;
+ LLWearableType::EType mType;
LLWearable* mWearable;
U32 mTodo;
LLPointer mCB;
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 11fb33c26..1b3fae454 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -3743,6 +3743,7 @@ void LLAppViewer::idle()
gEventNotifier.update();
gIdleCallbacks.callFunctions();
+ gInventory.idleNotifyObservers();
}
if (gDisconnected)
diff --git a/indra/newview/llcallbacklist.cpp b/indra/newview/llcallbacklist.cpp
index 6063995cf..1bfd2cb9b 100644
--- a/indra/newview/llcallbacklist.cpp
+++ b/indra/newview/llcallbacklist.cpp
@@ -47,7 +47,7 @@ LLCallbackList gIdleCallbacks;
// Member functions
//
-LLCallbackList::LLCallbackList() : mLoopingOverCallbackList(false)
+LLCallbackList::LLCallbackList()
{
// nothing
}
@@ -96,15 +96,7 @@ BOOL LLCallbackList::deleteFunction( callback_t func, void *data)
callback_list_t::iterator iter = std::find(mCallbackList.begin(), mCallbackList.end(), t);
if (iter != mCallbackList.end())
{
- if (mLoopingOverCallbackList)
- {
- iter->first = NULL; // Mark for removal later (when we return to LLCallbackList::callFunctions).
- mNeedErase = true;
- }
- else
- {
- mCallbackList.erase(iter);
- }
+ mCallbackList.erase(iter);
return TRUE;
}
else
@@ -116,39 +108,82 @@ BOOL LLCallbackList::deleteFunction( callback_t func, void *data)
void LLCallbackList::deleteAllFunctions()
{
- llassert(!mLoopingOverCallbackList); // Only called from unit tests.
mCallbackList.clear();
}
void LLCallbackList::callFunctions()
{
- llassert(!mLoopingOverCallbackList);
- mLoopingOverCallbackList = true;
- mNeedErase = false;
- for (callback_list_t::iterator iter = mCallbackList.begin(); iter != mCallbackList.end(); ++iter)
+ for (callback_list_t::iterator iter = mCallbackList.begin(); iter != mCallbackList.end(); )
{
- if (iter->first) // Not pending removal?
+ callback_list_t::iterator curiter = iter++;
+ curiter->first(curiter->second);
+ }
+}
+
+// Shim class to allow arbitrary boost::bind
+// expressions to be run as one-time idle callbacks.
+class OnIdleCallbackOneTime
+{
+public:
+ OnIdleCallbackOneTime(nullary_func_t callable):
+ mCallable(callable)
+ {
+ }
+ static void onIdle(void *data)
+ {
+ gIdleCallbacks.deleteFunction(onIdle, data);
+ OnIdleCallbackOneTime* self = reinterpret_cast(data);
+ self->call();
+ delete self;
+ }
+ void call()
+ {
+ mCallable();
+ }
+private:
+ nullary_func_t mCallable;
+};
+
+void doOnIdleOneTime(nullary_func_t callable)
+{
+ OnIdleCallbackOneTime* cb_functor = new OnIdleCallbackOneTime(callable);
+ gIdleCallbacks.addFunction(&OnIdleCallbackOneTime::onIdle,cb_functor);
+}
+
+// Shim class to allow generic boost functions to be run as
+// recurring idle callbacks. Callable should return true when done,
+// false to continue getting called.
+class OnIdleCallbackRepeating
+{
+public:
+ OnIdleCallbackRepeating(bool_func_t callable):
+ mCallable(callable)
+ {
+ }
+ // Will keep getting called until the callable returns true.
+ static void onIdle(void *data)
+ {
+ OnIdleCallbackRepeating* self = reinterpret_cast(data);
+ bool done = self->call();
+ if (done)
{
- iter->first(iter->second); // This can theorectically set any iter->first to NULL, which means the entry should be erased.
+ gIdleCallbacks.deleteFunction(onIdle, data);
+ delete self;
}
}
- mLoopingOverCallbackList = false;
- if (mNeedErase)
+ bool call()
{
- callback_list_t::iterator iter = mCallbackList.begin();
- while (iter != mCallbackList.end())
- {
- if (!iter->first)
- {
- iter = mCallbackList.erase(iter);
- }
- else
- {
- ++iter;
- }
- }
+ return mCallable();
}
+private:
+ bool_func_t mCallable;
+};
+
+void doOnIdleRepeating(bool_func_t callable)
+{
+ OnIdleCallbackRepeating* cb_functor = new OnIdleCallbackRepeating(callable);
+ gIdleCallbacks.addFunction(&OnIdleCallbackRepeating::onIdle,cb_functor);
}
#ifdef _DEBUG
diff --git a/indra/newview/llcallbacklist.h b/indra/newview/llcallbacklist.h
index 240346478..1819f865a 100644
--- a/indra/newview/llcallbacklist.h
+++ b/indra/newview/llcallbacklist.h
@@ -34,6 +34,7 @@
#define LL_LLCALLBACKLIST_H
#include "llstl.h"
+#include
class LLCallbackList
{
@@ -53,13 +54,20 @@ public:
protected:
// Use a list so that the callbacks are ordered in case that matters
- typedef std::pair callback_pair_t; // callback_t is a (function) pointer. If it is NULL it means that the entry should be considered deleted.
+ typedef std::pair callback_pair_t;
typedef std::list callback_list_t;
callback_list_t mCallbackList;
- bool mLoopingOverCallbackList; // True while looping over mCallbackList and calling the callback_t functions (see callFunctions).
- bool mNeedErase; // True when deleteFunction was called while mLoopingOverCallbackList was true.
};
+typedef boost::function nullary_func_t;
+typedef boost::function bool_func_t;
+
+// Call a given callable once in idle loop.
+void doOnIdleOneTime(nullary_func_t callable);
+
+// Repeatedly call a callable in idle loop until it returns true.
+void doOnIdleRepeating(bool_func_t callable);
+
extern LLCallbackList gIdleCallbacks;
#endif
diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp
index 0946a4ecc..059198597 100644
--- a/indra/newview/lldrawable.cpp
+++ b/indra/newview/lldrawable.cpp
@@ -1029,7 +1029,7 @@ BOOL LLDrawable::isVisible() const
return TRUE;
}
-#if 1
+#if 0
//disabling this code fixes DEV-20105. Leaving in place in case some other bug pops up as a a result.
//should be safe to just always ask the spatial group for visibility.
if (isActive())
@@ -1313,6 +1313,12 @@ void LLSpatialBridge::setVisible(LLCamera& camera_in, std::vector*
return;
}
}
+ else
+ {
+ static const LLCachedControl draw_orphans("ShyotlDrawOrphanAttachments",false);
+ if(!draw_orphans)
+ return;
+ }
}
@@ -1385,6 +1391,12 @@ void LLSpatialBridge::updateDistance(LLCamera& camera_in, bool force_update)
return;
}
}
+ else
+ {
+ static const LLCachedControl draw_orphans("ShyotlDrawOrphanAttachments",false);
+ if(!draw_orphans)
+ return;
+ }
}
LLCamera camera = transformCamera(camera_in);
diff --git a/indra/newview/lldrawpoolterrain.h b/indra/newview/lldrawpoolterrain.h
index 8eb5c5737..ec9cb2023 100644
--- a/indra/newview/lldrawpoolterrain.h
+++ b/indra/newview/lldrawpoolterrain.h
@@ -35,8 +35,6 @@
#include "lldrawpool.h"
-class LLViewerFetchedTexture;
-
class LLDrawPoolTerrain : public LLFacePool
{
LLPointer mTexturep;
diff --git a/indra/newview/lldrawpoolwater.cpp b/indra/newview/lldrawpoolwater.cpp
index 7dcc82218..8a1c120ef 100644
--- a/indra/newview/lldrawpoolwater.cpp
+++ b/indra/newview/lldrawpoolwater.cpp
@@ -114,7 +114,7 @@ void LLDrawPoolWater::prerender()
// got rid of modulation by light color since it got a little too
// green at sunset and sl-57047 (underwater turns black at 8:00)
- sWaterFogColor = LLWaterParamManager::getInstance()->getFogColor();
+ sWaterFogColor = LLWaterParamManager::instance().getFogColor();
sWaterFogColor.mV[3] = 0;
}
@@ -532,7 +532,7 @@ void LLDrawPoolWater::shade()
//bind normal map
S32 bumpTex = shader->enableTexture(LLViewerShaderMgr::BUMP_MAP);
- LLWaterParamManager * param_mgr = LLWaterParamManager::getInstance();
+ LLWaterParamManager * param_mgr = &LLWaterParamManager::instance();
// change mWaterNormp if needed
if (mWaterNormp->getID() != param_mgr->getNormalMapID())
diff --git a/indra/newview/llfloatercustomize.cpp b/indra/newview/llfloatercustomize.cpp
index 1382d6e89..5e6f8f1a5 100644
--- a/indra/newview/llfloatercustomize.cpp
+++ b/indra/newview/llfloatercustomize.cpp
@@ -719,7 +719,7 @@ bool LLPanelEditWearable::onSelectAutoWearOption(const LLSD& notification, const
if(avatar)
{
// Create a new wearable in the default folder for the wearable's asset type.
- LLWearable* wearable = gWearableList.createNewWearable( (LLWearableType::EType)notification["payload"]["wearable_type"].asInteger() );
+ LLWearable* wearable = LLWearableList::instance().createNewWearable( (LLWearableType::EType)notification["payload"]["wearable_type"].asInteger() );
LLAssetType::EType asset_type = wearable->getAssetType();
LLUUID folder_id;
diff --git a/indra/newview/llfloaterdaycycle.cpp b/indra/newview/llfloaterdaycycle.cpp
index 0799ca330..02ea83fb2 100644
--- a/indra/newview/llfloaterdaycycle.cpp
+++ b/indra/newview/llfloaterdaycycle.cpp
@@ -288,7 +288,7 @@ bool LLFloaterDayCycle::isOpen()
{
if (sDayCycle != NULL)
{
- return true;
+ return sDayCycle->getVisible();
}
return false;
}
diff --git a/indra/newview/llfloaterenvsettings.cpp b/indra/newview/llfloaterenvsettings.cpp
index 196cf92b7..e021e365c 100644
--- a/indra/newview/llfloaterenvsettings.cpp
+++ b/indra/newview/llfloaterenvsettings.cpp
@@ -197,7 +197,7 @@ bool LLFloaterEnvSettings::isOpen()
{
if (sEnvSettings != NULL)
{
- return true;
+ return sEnvSettings->getVisible();
}
return false;
}
diff --git a/indra/newview/llfloaterwater.cpp b/indra/newview/llfloaterwater.cpp
index e35d7e6c0..3b04f9387 100644
--- a/indra/newview/llfloaterwater.cpp
+++ b/indra/newview/llfloaterwater.cpp
@@ -316,7 +316,7 @@ void LLFloaterWater::show()
bool LLFloaterWater::isOpen()
{
if (sWaterMenu != NULL) {
- return true;
+ return sWaterMenu->getVisible();
}
return false;
}
diff --git a/indra/newview/llfloaterwindlight.cpp b/indra/newview/llfloaterwindlight.cpp
index dba360b88..9ec787a6c 100644
--- a/indra/newview/llfloaterwindlight.cpp
+++ b/indra/newview/llfloaterwindlight.cpp
@@ -473,7 +473,7 @@ void LLFloaterWindLight::show()
bool LLFloaterWindLight::isOpen()
{
if (sWindLight != NULL) {
- return true;
+ return sWindLight->getVisible();
}
return false;
}
diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp
index fa514014d..89b15c132 100644
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -651,10 +651,11 @@ void LLFloaterWorldMap::trackLocation(const LLVector3d& pos_global)
return;
}
- std::string sim_name;
- LLWorldMap::getInstance()->simNameFromPosGlobal( pos_global, sim_name );
- F32 region_x = (F32)fmod( pos_global.mdV[VX], (F64)REGION_WIDTH_METERS );
- F32 region_y = (F32)fmod( pos_global.mdV[VY], (F64)REGION_WIDTH_METERS );
+ std::string sim_name = sim_info->getName();
+ U32 locX, locY;
+ from_region_handle(sim_info->getHandle(), &locX, &locY);
+ F32 region_x = pos_global.mdV[VX] - locX;
+ F32 region_y = pos_global.mdV[VY] - locY;
std::string full_name = llformat("%s (%d, %d, %d)",
// sim_name.c_str(),
// [RLVa:KB] - Alternate: Snowglobe-1.2.4 | Checked: 2009-07-04 (RLVa-1.0.0a)
diff --git a/indra/newview/llglsandbox.cpp b/indra/newview/llglsandbox.cpp
index c4829d326..1844363d9 100644
--- a/indra/newview/llglsandbox.cpp
+++ b/indra/newview/llglsandbox.cpp
@@ -73,9 +73,6 @@
#include "rlvhandler.h"
// [/RLVa:KB]
-
-extern BOOL gDebugSelect;
-
// Returns true if you got at least one object
void LLToolSelectRect::handleRectangleSelection(S32 x, S32 y, MASK mask)
{
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 0295fa258..c45b05e10 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -2917,7 +2917,7 @@ void LLFolderBridge::createWearable(LLFolderBridge* bridge, LLWearableType::ETyp
// static
void LLFolderBridge::createWearable(LLUUID parent_id, LLWearableType::EType type)
{
- LLWearable* wearable = gWearableList.createNewWearable(type);
+ LLWearable* wearable = LLWearableList::instance().createNewWearable(type);
LLAssetType::EType asset_type = wearable->getAssetType();
LLInventoryType::EType inv_type = LLInventoryType::IT_WEARABLE;
create_inventory_item(gAgent.getID(), gAgent.getSessionID(),
@@ -4148,6 +4148,14 @@ std::string LLObjectBridge::getLabelSuffix() const
{
std::string attachment_point_name = avatar->getAttachedPointName(mUUID);
LLStringUtil::toLower(attachment_point_name);
+ LLViewerObject* pObj = (rlv_handler_t::isEnabled()) ? avatar->getWornAttachment( mUUID ) : NULL;
+// [RLVa:KB]
+ if ( pObj && (gRlvAttachmentLocks.isLockedAttachment(pObj) ||
+ gRlvAttachmentLocks.isLockedAttachmentPoint(RlvAttachPtLookup::getAttachPointIndex(pObj),RLV_LOCK_REMOVE)))
+ {
+ return LLItemBridge::getLabelSuffix() + std::string(" (locked to ") + attachment_point_name + std::string(")");
+ }
+// [/RLVa:KB]
return LLItemBridge::getLabelSuffix() + std::string(" (worn on ") + attachment_point_name + std::string(")");
}
else
@@ -4155,11 +4163,21 @@ std::string LLObjectBridge::getLabelSuffix() const
// testzone attachpt
if(avatar)
{
- std::map::iterator iter = avatar->mUnsupportedAttachmentPoints.begin();
- std::map::iterator end = avatar->mUnsupportedAttachmentPoints.end();
+ std::map >::iterator iter = avatar->mUnsupportedAttachmentPoints.begin();
+ std::map >::iterator end = avatar->mUnsupportedAttachmentPoints.end();
for( ; iter != end; ++iter)
- if((*iter).second == mUUID)
+ if((*iter).second.first == mUUID)
+ {
+// [RLVa:KB]
+ LLViewerObject* pObj = (rlv_handler_t::isEnabled()) ? gObjectList.findObject((*iter).second.second) : NULL;
+ if ( pObj && (gRlvAttachmentLocks.isLockedAttachment(pObj) ||
+ gRlvAttachmentLocks.isLockedAttachmentPoint(RlvAttachPtLookup::getAttachPointIndex(pObj),RLV_LOCK_REMOVE)))
+ {
+ return LLItemBridge::getLabelSuffix() + std::string(" (locked to unsupported point %d)", (*iter).first);
+ }
+// [/RLVa:KB]
return LLItemBridge::getLabelSuffix() + llformat(" (worn on unsupported point %d)", (*iter).first);
+ }
}
//
return LLItemBridge::getLabelSuffix();
@@ -4474,7 +4492,7 @@ void wear_inventory_item_on_avatar( LLInventoryItem* item )
lldebugs << "wear_inventory_item_on_avatar( " << item->getName()
<< " )" << llendl;
- gWearableList.getAsset(item->getAssetUUID(),
+ LLWearableList::instance().getAsset(item->getAssetUUID(),
item->getName(),
item->getType(),
LLWearableBridge::onWearOnAvatarArrived,
@@ -4596,8 +4614,8 @@ void LLOutfitObserver::done()
name = cat->getName();
}
LLViewerInventoryItem* item = NULL;
- item_ref_t::iterator it = mComplete.begin();
- item_ref_t::iterator end = mComplete.end();
+ uuid_vec_t::iterator it = mComplete.begin();
+ uuid_vec_t::iterator end = mComplete.end();
LLUUID pid;
for(; it < end; ++it)
{
@@ -4914,7 +4932,7 @@ void wear_inventory_category_on_avatar_step2( BOOL proceed, void* userdata )
// [/RLVa:KB]
found = found_container.get(i);
- gWearableList.getAsset(found->mAssetID,
+ LLWearableList::instance().getAsset(found->mAssetID,
found->mName,
found->mAssetType,
wear_inventory_category_on_avatar_loop,
@@ -5036,7 +5054,7 @@ void wear_inventory_category_on_avatar_step3(LLWearableHoldingPattern* holder, B
//And this code does not handle failed asset uploads properly
// if(!wearable->isMatchedToInventoryItem(item ))
// {
-// wearable = gWearableList.createWearableMatchedToInventoryItem( wearable, item );
+// wearable = LLWearableList::instance().createWearableMatchedToInventoryItem( wearable, item );
// // Now that we have an asset that matches the
// // item, update the item to point to the new
// // asset.
@@ -5152,7 +5170,7 @@ void remove_inventory_category_from_avatar_step2( BOOL proceed, void* userdata)
if ( (pWearable) && ( (!rlv_handler_t::isEnabled()) || (gRlvWearableLocks.canRemove(pWearable->getType())) ) )
// [/RLVa:KB]
{
- gWearableList.getAsset( item->getAssetUUID(),
+ LLWearableList::instance().getAsset( item->getAssetUUID(),
item->getName(),
item->getType(),
LLWearableBridge::onRemoveFromAvatarArrived,
@@ -5223,6 +5241,10 @@ std::string LLWearableBridge::getLabelSuffix() const
{
if (get_is_item_worn(getItem()))
{
+ if ( (rlv_handler_t::isEnabled()) && (!gRlvWearableLocks.canRemove(getItem())) )
+ {
+ return LLItemBridge::getLabelSuffix() + " (locked)";
+ }
return LLItemBridge::getLabelSuffix() + " (worn)";
}
else
@@ -5255,7 +5277,7 @@ void LLWearableBridge::performAction(LLFolderView* folder, LLInventoryModel* mod
LLViewerInventoryItem* item = getItem();
if (item)
{
- gWearableList.getAsset(item->getAssetUUID(),
+ LLWearableList::instance().getAsset(item->getAssetUUID(),
item->getName(),
item->getType(),
LLWearableBridge::onRemoveFromAvatarArrived,
@@ -5470,7 +5492,7 @@ void LLWearableBridge::onWearOnAvatarArrived( LLWearable* wearable, void* userda
// if(!wearable->isMatchedToInventoryItem(item))
// {
-// LLWearable* new_wearable = gWearableList.createWearableMatchedToInventoryItem( wearable, item );
+// LLWearable* new_wearable = LLWearableList::instance().createWearableMatchedToInventoryItem( wearable, item );
//
// // Now that we have an asset that matches the
// // item, update the item to point to the new
@@ -5549,7 +5571,7 @@ void LLWearableBridge::onRemoveFromAvatar(void* user_data)
LLViewerInventoryItem* item = self->getItem();
if (item)
{
- gWearableList.getAsset(item->getAssetUUID(),
+ LLWearableList::instance().getAsset(item->getAssetUUID(),
item->getName(),
item->getType(),
onRemoveFromAvatarArrived,
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index c6c205f86..f084a42ac 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -153,7 +153,10 @@ const char* NEW_CATEGORY_NAMES[LLFolderType::FT_COUNT] =
"Current Outfit", // FT_CURRENT_OUTFIT = 46,
"New Outfit", // FT_OUTFIT = 47,
"My Outfits", // FT_MY_OUTFITS = 48,
- "Inbox" // FT_INBOX = 49,
+ "Mesh", // FT_MESH = 49,
+ "Inbox", // FT_INBOX = 50,
+ "Outbox", // FT_OUTBOX = 51,
+ "Basic Root" // FT_BASIC_ROOT = 52
};
struct InventoryIDPtrLess
@@ -221,22 +224,40 @@ bool LLCanCache::operator()(LLInventoryCategory* cat, LLInventoryItem* item)
LLInventoryModel gInventory;
// Default constructor
-LLInventoryModel::LLInventoryModel() :
- mModifyMask(LLInventoryObserver::ALL),
+LLInventoryModel::LLInventoryModel()
+: mModifyMask(LLInventoryObserver::ALL),
+ mChangedItemIDs(),
+ mCategoryMap(),
+ mItemMap(),
+ mCategoryLock(),
+ mItemLock(),
mLastItem(NULL),
+ mParentChildCategoryTree(),
+ mParentChildItemTree(),
+ mObservers(),
+ mIsNotifyObservers(FALSE),
mIsAgentInvUsable(false)
{
}
// Destroys the object
LLInventoryModel::~LLInventoryModel()
+{
+ cleanupInventory();
+}
+
+void LLInventoryModel::cleanupInventory()
{
empty();
- for (observer_list_t::iterator iter = mObservers.begin();
- iter != mObservers.end(); ++iter)
+ // Deleting one observer might erase others from the list, so always pop off the front
+ while (!mObservers.empty())
{
- delete *iter;
+ observer_list_t::iterator iter = mObservers.begin();
+ LLInventoryObserver* observer = *iter;
+ mObservers.erase(iter);
+ delete observer;
}
+ mObservers.clear();
}
// This is a convenience function to check if one object has a parent
@@ -245,6 +266,7 @@ BOOL LLInventoryModel::isObjectDescendentOf(const LLUUID& obj_id,
const LLUUID& cat_id,
const BOOL break_on_recursion) const
{
+ if (obj_id == cat_id) return TRUE;
LLInventoryObject* obj = getObject(obj_id);
int depthCounter = 0;
while(obj)
@@ -502,7 +524,7 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
{
name.assign(pname);
}
- if(preferred_type < LLFolderType::FT_TEXTURE || preferred_type > LLFolderType::FT_INBOX)
+ else if(preferred_type < (LLFolderType::EType)0 || preferred_type >= LLFolderType::FT_COUNT)
name.assign(NEW_CATEGORY_NAME);
else
name.assign(NEW_CATEGORY_NAMES[preferred_type]);
@@ -758,12 +780,23 @@ U32 LLInventoryModel::updateItem(const LLViewerInventoryItem* item)
return mask;
}
+ // We're hiding mesh types
+#if 0
+ if (item->getType() == LLAssetType::AT_MESH)
+ {
+ return mask;
+ }
+#endif
+
LLViewerInventoryItem* old_item = getItem(item->getUUID());
+ LLPointer new_item;
if(old_item)
{
- // We already have an old item, modify it's values
+ // We already have an old item, modify its values
+ new_item = old_item;
LLUUID old_parent_id = old_item->getParentUUID();
LLUUID new_parent_id = item->getParentUUID();
+
if(old_parent_id != new_parent_id)
{
// need to update the parent-child tree
@@ -790,7 +823,7 @@ U32 LLInventoryModel::updateItem(const LLViewerInventoryItem* item)
else
{
// Simply add this item
- LLPointer new_item = new LLViewerInventoryItem(item);
+ new_item = new LLViewerInventoryItem(item);
addItem(new_item);
if(item->getParentUUID().isNull())
@@ -850,11 +883,40 @@ U32 LLInventoryModel::updateItem(const LLViewerInventoryItem* item)
}
mask |= LLInventoryObserver::ADD;
}
- if(item->getType() == LLAssetType::AT_CALLINGCARD)
+ if(new_item->getType() == LLAssetType::AT_CALLINGCARD)
{
mask |= LLInventoryObserver::CALLING_CARD;
+ // Handle user created calling cards.
+ // Target ID is stored in the description field of the card.
+ LLUUID id;
+ std::string desc = new_item->getDescription();
+ BOOL isId = desc.empty() ? FALSE : id.set(desc, FALSE);
+ if (isId)
+ {
+ // Valid UUID; set the item UUID and rename it
+ new_item->setCreator(id);
+ std::string avatar_name;
+
+ if (gCacheName->getFullName(id, avatar_name))
+ {
+ new_item->rename(avatar_name);
+ mask |= LLInventoryObserver::LABEL;
+ }
+ else
+ {
+ // Fetch the current name
+ gCacheName->get(id, FALSE,
+ boost::bind(&LLViewerInventoryItem::onCallingCardNameLookup, new_item.get(),
+ _1, _2, _3));
+ }
+
+ }
}
- addChangedMask(mask, item->getUUID());
+ /*else if (new_item->getType() == LLAssetType::AT_GESTURE)
+ {
+ mask |= LLInventoryObserver::GESTURE;
+ }*/
+ addChangedMask(mask, new_item->getUUID());
return mask;
}
@@ -1001,39 +1063,40 @@ void LLInventoryModel::deleteObject(const LLUUID& id)
return;
}
- lldebugs << "Deleting inventory object " << id << llendl;
- mLastItem = NULL;
- LLUUID parent_id = obj->getParentUUID();
- mCategoryMap.erase(id);
- mItemMap.erase(id);
- //mInventory.erase(id);
- item_array_t* item_list = getUnlockedItemArray(parent_id);
- if(item_list)
- {
- LLViewerInventoryItem* item = (LLViewerInventoryItem*)((LLInventoryObject*)obj);
- item_list->removeObj(item);
- }
- cat_array_t* cat_list = getUnlockedCatArray(parent_id);
- if(cat_list)
- {
- LLViewerInventoryCategory* cat = (LLViewerInventoryCategory*)((LLInventoryObject*)obj);
- cat_list->removeObj(cat);
- }
- item_list = getUnlockedItemArray(id);
- if(item_list)
- {
- delete item_list;
- mParentChildItemTree.erase(id);
- }
- cat_list = getUnlockedCatArray(id);
- if(cat_list)
- {
- delete cat_list;
- mParentChildCategoryTree.erase(id);
- }
- addChangedMask(LLInventoryObserver::REMOVE, id);
- obj = NULL; // delete obj
+ lldebugs << "Deleting inventory object " << id << llendl;
+ mLastItem = NULL;
+ LLUUID parent_id = obj->getParentUUID();
+ mCategoryMap.erase(id);
+ mItemMap.erase(id);
+ //mInventory.erase(id);
+ item_array_t* item_list = getUnlockedItemArray(parent_id);
+ if(item_list)
+ {
+ LLViewerInventoryItem* item = (LLViewerInventoryItem*)((LLInventoryObject*)obj);
+ item_list->removeObj(item);
}
+ cat_array_t* cat_list = getUnlockedCatArray(parent_id);
+ if(cat_list)
+ {
+ LLViewerInventoryCategory* cat = (LLViewerInventoryCategory*)((LLInventoryObject*)obj);
+ cat_list->removeObj(cat);
+ }
+ item_list = getUnlockedItemArray(id);
+ if(item_list)
+ {
+ delete item_list;
+ mParentChildItemTree.erase(id);
+ }
+ cat_list = getUnlockedCatArray(id);
+ if(cat_list)
+ {
+ delete cat_list;
+ mParentChildCategoryTree.erase(id);
+ }
+ addChangedMask(LLInventoryObserver::REMOVE, id);
+ obj = NULL; // delete obj
+ gInventory.notifyObservers();
+}
// Delete a particular inventory item by ID, and remove it from the server.
void LLInventoryModel::purgeObject(const LLUUID &id)
@@ -1219,39 +1282,56 @@ BOOL LLInventoryModel::containsObserver(LLInventoryObserver* observer) const
return mObservers.find(observer) != mObservers.end();
}
-// Call this method when it's time to update everyone on a new state,
-// by default, the inventory model will not update observers
-// automatically.
-// The optional argument 'service_name' is used by Agent Inventory Service [DEV-20328]
-void LLInventoryModel::notifyObservers(const std::string service_name)
+void LLInventoryModel::idleNotifyObservers()
{
+ if (mModifyMask == LLInventoryObserver::NONE && (mChangedItemIDs.size() == 0))
+ {
+ return;
+ }
+ notifyObservers();
+}
+
+// Call this method when it's time to update everyone on a new state.
+void LLInventoryModel::notifyObservers()
+{
+ if (mIsNotifyObservers)
+ {
+ // Within notifyObservers, something called notifyObservers
+ // again. This type of recursion is unsafe because it causes items to be
+ // processed twice, and this can easily lead to infinite loops.
+ llwarns << "Call was made to notifyObservers within notifyObservers!" << llendl;
+ return;
+ }
+
+ mIsNotifyObservers = TRUE;
for (observer_list_t::iterator iter = mObservers.begin();
iter != mObservers.end(); )
{
LLInventoryObserver* observer = *iter;
- if (service_name.empty())
- {
- observer->changed(mModifyMask);
- }
- else
- {
- observer->mMessageName = service_name;
- observer->changed(mModifyMask);
- }
+ observer->changed(mModifyMask);
- // safe way to incrament since changed may delete entries! (@!##%@!@&*!)
+ // safe way to increment since changed may delete entries! (@!##%@!@&*!)
iter = mObservers.upper_bound(observer);
}
mModifyMask = LLInventoryObserver::NONE;
mChangedItemIDs.clear();
+ mIsNotifyObservers = FALSE;
}
// store flag for change
// and id of object change applies to
void LLInventoryModel::addChangedMask(U32 mask, const LLUUID& referent)
{
+ if (mIsNotifyObservers)
+ {
+ // Something marked an item for change within a call to notifyObservers
+ // (which is in the process of processing the list of items marked for change).
+ // This means the change may fail to be processed.
+ llwarns << "Adding changed mask within notify observers! Change will likely be lost." << llendl;
+ }
+
mModifyMask |= mask;
if (referent.notNull())
{
@@ -1266,32 +1346,7 @@ void LLInventoryModel::addChangedMask(U32 mask, const LLUUID& referent)
}
}
-// This method to prepares a set of mock inventory which provides
-// minimal functionality before the actual arrival of inventory.
-/*
-void LLInventoryModel::mock(const LLUUID& root_id)
-{
- llinfos << "LLInventoryModel::mock() " << root_id << llendl;
- if(root_id.isNull())
- {
- llwarns << "Not a valid root id" << llendl;
- return;
- }
- LLPointer cat = new LLViewerInventoryCategory(
- root_id,
- LLUUID::null,
- LLAssetType::AT_CATEGORY,
- NEW_CATEGORY_NAMES[LLFolderType::FT_ROOT_CATEGORY],
- gAgent.getID());
- addCategory(cat);
- gInventory.buildParentChildMap();
-}
-*/
-
-//If we get back a normal response, handle it here
-// Note: this is the responder used in "fetchInventory" cap,
-// this is not responder for "WebFetchInventoryDescendents" or "agent/inventory" cap
-
+// If we get back a normal response, handle it here
void LLInventoryModel::fetchInventoryResponder::result(const LLSD& content)
{
start_new_inventory_observer();
@@ -1352,16 +1407,16 @@ void LLInventoryModel::fetchInventoryResponder::result(const LLSD& content)
{
changes |= gInventory.updateItem(*it);
}
- gInventory.notifyObservers("fetchinventory");
+ gInventory.notifyObservers();
gViewerWindow->getWindow()->decBusyCount();
}
//If we get back an error (not found, etc...), handle it here
void LLInventoryModel::fetchInventoryResponder::error(U32 status, const std::string& reason)
{
- LL_INFOS("Inventory") << "fetchInventory::error "
- << status << ": " << reason << LL_ENDL;
- gInventory.notifyObservers("fetchinventory");
+ llinfos << "fetchInventory::error "
+ << status << ": " << reason << llendl;
+ gInventory.notifyObservers();
}
bool LLInventoryModel::fetchDescendentsOf(const LLUUID& folder_id) const
@@ -1462,7 +1517,7 @@ void fetchDescendentsResponder::result(const LLSD& content)
titem->setParent(lost_uuid);
titem->updateParentOnServer(FALSE);
gInventory.updateItem(titem);
- gInventory.notifyObservers("fetchDescendents");
+ gInventory.notifyObservers();
}
}
@@ -1539,7 +1594,7 @@ void fetchDescendentsResponder::result(const LLSD& content)
LLInventoryModel::stopBackgroundFetch();
}
- gInventory.notifyObservers("fetchDescendents");
+ gInventory.notifyObservers();
}
//If we get back an error (not found, etc...), handle it here
@@ -1572,7 +1627,7 @@ void fetchDescendentsResponder::error(U32 status, const std::string& reason)
LLInventoryModel::stopBackgroundFetch();
}
}
- gInventory.notifyObservers("fetchDescendents");
+ gInventory.notifyObservers();
}
//static Bundle up a bunch of requests to send all at once.
@@ -1954,6 +2009,11 @@ void LLInventoryModel::addCategory(LLViewerInventoryCategory* category)
//llinfos << "LLInventoryModel::addCategory()" << llendl;
if(category)
{
+ // We aren't displaying the Meshes folder
+ if (category->getPreferredType() == LLFolderType::FT_MESH)
+ {
+ return;
+ }
// Insert category uniquely into the map
mCategoryMap[category->getUUID()] = category; // LLPointer will deref and delete the old one
//mInventory[category->getUUID()] = category;
@@ -1962,7 +2022,7 @@ void LLInventoryModel::addCategory(LLViewerInventoryCategory* category)
void LLInventoryModel::addItem(LLViewerInventoryItem* item)
{
- //llinfos << "LLInventoryModel::addItem()" << llendl;
+ llassert(item);
if(item)
{
// This can happen if assettype enums from llassettype.h ever change.
@@ -2030,8 +2090,8 @@ void LLInventoryModel::accountForUpdate(const LLCategoryUpdate& update) const
descendents_actual += update.mDescendentDelta;
cat->setDescendentCount(descendents_actual);
cat->setVersion(++version);
- llinfos << "accounted: '" << cat->getName() << "' "
- << version << " with " << descendents_actual
+ lldebugs << "accounted: '" << cat->getName() << "' "
+ << version << " with " << descendents_actual
<< " descendents." << llendl;
}
}
@@ -3214,7 +3274,9 @@ void LLInventoryModel::processBulkUpdateInventory(LLMessageSystem* msg, void**)
}
LLUUID tid;
msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_TransactionID, tid);
+#ifndef LL_RELEASE_FOR_DOWNLOAD
llinfos << "Bulk inventory: " << tid << llendl;
+#endif
update_map_t update;
cat_array_t folders;
@@ -3342,7 +3404,7 @@ void LLInventoryModel::processBulkUpdateInventory(LLMessageSystem* msg, void**)
LLInventoryView::sWearNewClothing = FALSE;
}
- if (tid == LLInventoryView::sWearNewClothingTransactionID)
+ if (tid.notNull() && tid == LLInventoryView::sWearNewClothingTransactionID)
{
count = wearable_ids.size();
for (i = 0; i < count; ++i)
@@ -3428,6 +3490,9 @@ void LLInventoryModel::processInventoryDescendents(LLMessageSystem* msg,void**)
{
cat->setVersion(version);
cat->setDescendentCount(descendents);
+ // Get this UUID on the changed list so that whatever's listening for it
+ // will get triggered.
+ gInventory.addChangedMask(LLInventoryObserver::INTERNAL, cat->getUUID());
}
gInventory.notifyObservers();
}
diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h
index f8e927d4a..d3d525655 100644
--- a/indra/newview/llinventorymodel.h
+++ b/indra/newview/llinventorymodel.h
@@ -131,6 +131,7 @@ public:
public:
LLInventoryModel();
~LLInventoryModel();
+ void cleanupInventory();
//
//protected:
//
@@ -375,7 +376,7 @@ public:
LLUUID createNewCategory(const LLUUID& parent_id,
LLFolderType::EType preferred_type,
const std::string& name);
-
+
// Internal methods that add inventory and make sure that all of
// the internal data structures are consistent. These methods
// should be passed pointers of newly created objects, and the
@@ -446,10 +447,13 @@ public:
**/
public:
- // Call to explicitly update everyone on a new state. The optional argument
- // 'service_name' is used by Agent Inventory Service [DEV-20328]
- void notifyObservers(const std::string service_name="");
+ // Called by the idle loop. Only updates if new state is detected. Call
+ // notifyObservers() manually to update regardless of whether state change
+ // has been indicated.
+ void idleNotifyObservers();
+ // Call to explicitly update everyone on a new state.
+ void notifyObservers();
// Allows outsiders to tell the inventory if something has
// been changed 'under the hood', but outside the control of the
// inventory. The next notify will include that notification.
@@ -459,6 +463,9 @@ protected:
// Updates all linked items pointing to this id.
void addChangedMaskForLinks(const LLUUID& object_id, U32 mask);
private:
+ // Flag set when notifyObservers is being called, to look for bugs
+ // where it's called recursively.
+ BOOL mIsNotifyObservers;
// Variables used to track what has changed since the last notify.
U32 mModifyMask;
changed_items_t mChangedItemIDs;
diff --git a/indra/newview/llmapresponders.cpp b/indra/newview/llmapresponders.cpp
index ae0090e42..cf0769bce 100644
--- a/indra/newview/llmapresponders.cpp
+++ b/indra/newview/llmapresponders.cpp
@@ -120,6 +120,8 @@ void LLMapLayerResponder::result(const LLSD& result)
S32 x_regions = map_block["X"];
S32 y_regions = map_block["Y"];
+ S32 x_size = map_block["SizeX"];
+ S32 y_size = map_block["SizeY"];
std::string name = map_block["Name"];
S32 access = map_block["Access"];
S32 region_flags = map_block["RegionFlags"];
@@ -165,6 +167,7 @@ void LLMapLayerResponder::result(const LLSD& result)
siminfo->setRegionFlags( region_flags );
siminfo->setWaterHeight( (F32) water_height );
siminfo->setMapImageID( image_id, agent_flags );
+ siminfo->setSize((U16)x_size, (U16)y_size);
if (use_web_map_tiles)
{
siminfo->mCurrentImage = LLWorldMap::loadObjectsTile((U32)x_regions, (U32)y_regions);
diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp
index 842ab3b97..8124e841d 100644
--- a/indra/newview/llmediactrl.cpp
+++ b/indra/newview/llmediactrl.cpp
@@ -966,6 +966,42 @@ void LLMediaCtrl::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_NAME_CHANGED" << LL_ENDL;
};
break;
+
+ case MEDIA_EVENT_NAVIGATE_ERROR_PAGE:
+ {
+ LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_NAVIGATE_ERROR_PAGE" << LL_ENDL;
+ };
+ break;
+
+ case MEDIA_EVENT_CLOSE_REQUEST:
+ {
+ LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_CLOSE_REQUEST" << LL_ENDL;
+ };
+ break;
+
+ case MEDIA_EVENT_PICK_FILE_REQUEST:
+ {
+ LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_PICK_FILE_REQUEST" << LL_ENDL;
+ };
+ break;
+
+ case MEDIA_EVENT_GEOMETRY_CHANGE:
+ {
+ LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_GEOMETRY_CHANGE" << LL_ENDL;
+ };
+ break;
+
+ case MEDIA_EVENT_AUTH_REQUEST:
+ {
+ LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_AUTH_REQUEST" << LL_ENDL;
+ };
+ break;
+
+ case MEDIA_EVENT_LINK_HOVERED:
+ {
+ LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_LINK_HOVERED" << LL_ENDL;
+ };
+ break;
default:
{
diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp
index bacde05f2..f58d0e6b2 100644
--- a/indra/newview/llmeshrepository.cpp
+++ b/indra/newview/llmeshrepository.cpp
@@ -453,9 +453,9 @@ LLMeshRepoThread::LLMeshRepoThread()
: LLThread("mesh repo")
{
mWaiting = false;
- mMutex = new LLMutex;
- mHeaderMutex = new LLMutex;
- mSignal = new LLCondition;
+ mMutex = new LLMutex();
+ mHeaderMutex = new LLMutex();
+ mSignal = new LLCondition();
}
LLMeshRepoThread::~LLMeshRepoThread()
@@ -1208,7 +1208,7 @@ LLMeshUploadThread::LLMeshUploadThread(LLMeshUploadThread::instance_list& data,
mUploadTextures = upload_textures;
mUploadSkin = upload_skin;
mUploadJoints = upload_joints;
- mMutex = new LLMutex(NULL);
+ mMutex = new LLMutex();
mCurlRequest = NULL;
mPendingUploads = 0;
mFinished = false;
@@ -2061,7 +2061,7 @@ LLMeshRepository::LLMeshRepository()
void LLMeshRepository::init()
{
- mMeshMutex = new LLMutex;
+ mMeshMutex = new LLMutex();
#if MESH_IMPORT
LLConvexDecomposition::getInstance()->initSystem();
diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp
index 02964a038..bc147fd7d 100644
--- a/indra/newview/llnetmap.cpp
+++ b/indra/newview/llnetmap.cpp
@@ -240,7 +240,6 @@ void LLNetMap::draw()
}
// figure out where agent is
- S32 region_width = llround(LLWorld::getInstance()->getRegionWidthInMeters());
LLColor4 this_region_color = gColors.getColor( "NetMapThisRegion" );
LLColor4 live_region_color = gColors.getColor( "NetMapLiveRegion" );
LLColor4 dead_region_color = gColors.getColor( "NetMapDeadRegion" );
@@ -249,6 +248,7 @@ void LLNetMap::draw()
iter != LLWorld::getInstance()->getRegionList().end(); ++iter)
{
LLViewerRegion* regionp = *iter;
+ S32 region_width = llround(regionp->getWidth());
// Find x and y position relative to camera's center.
LLVector3 origin_agent = regionp->getOriginAgent();
LLVector3 rel_region_pos = origin_agent - gAgentCamera.getCameraPositionAgent();
@@ -328,8 +328,6 @@ void LLNetMap::draw()
LLVector3 map_center_agent = gAgent.getPosAgentFromGlobal(mObjectImageCenterGlobal);
map_center_agent -= gAgentCamera.getCameraPositionAgent();
- map_center_agent.mV[VX] *= mScale/region_width;
- map_center_agent.mV[VY] *= mScale/region_width;
gGL.getTexUnit(0)->bind(mObjectImagep);
F32 image_half_width = 0.5f*mObjectMapPixels;
@@ -685,7 +683,7 @@ BOOL LLNetMap::handleToolTip( S32 x, S32 y, std::string& msg, LLRect* sticky_rec
// [/RLVa:KB]
//msg.append( region->getName() );
-#ifndef LL_RELEASE_FOR_DOWNLOAD
+//#ifndef LL_RELEASE_FOR_DOWNLOAD
std::string buffer;
msg.append("\n");
buffer = region->getHost().getHostName();
@@ -693,7 +691,7 @@ BOOL LLNetMap::handleToolTip( S32 x, S32 y, std::string& msg, LLRect* sticky_rec
msg.append("\n");
buffer = region->getHost().getString();
msg.append(buffer);
-#endif
+//#endif
msg.append("\n");
msg.append(getToolTip());
diff --git a/indra/newview/llphysicsmotion.cpp b/indra/newview/llphysicsmotion.cpp
index 12e1408e0..b6904308f 100644
--- a/indra/newview/llphysicsmotion.cpp
+++ b/indra/newview/llphysicsmotion.cpp
@@ -44,7 +44,7 @@
#include "llcharacter.h"
#include "llviewercontrol.h"
#include "llviewervisualparam.h"
-#include "llvoavatar.h"
+#include "llvoavatarself.h"
#include "lldriverparam.h"
typedef std::map controller_map_t;
@@ -497,9 +497,9 @@ BOOL LLPhysicsMotionController::onUpdate(F32 time, U8* joint_mask)
{
// Skip if disabled globally.
static const LLCachedControl avatar_physics("AvatarPhysics",false);
- bool supports_physics = !avatar_physics || (!((LLVOAvatar*)mCharacter)->isSelf() && !((LLVOAvatar*)mCharacter)->mSupportsPhysics);
+ bool physics_unsupported = !avatar_physics || (!((LLVOAvatar*)mCharacter)->isSelf() && !((LLVOAvatar*)mCharacter)->mSupportsPhysics);
//Treat lod 0 as AvatarPhyiscs:FALSE. AvatarPhyiscs setting is superfluous unless we decide to hook it into param sending.
- if (supports_physics || !LLVOAvatar::sPhysicsLODFactor)
+ if (physics_unsupported || !LLVOAvatar::sPhysicsLODFactor)
{
if(!mIsDefault)
{
@@ -510,8 +510,8 @@ BOOL LLPhysicsMotionController::onUpdate(F32 time, U8* joint_mask)
}
mCharacter->updateVisualParams();
}
- if(!supports_physics) //Only use emerald physics if avatarphysiscs is really off, or the client doesn't seem to support new physics.
- ((LLVOAvatar*)mCharacter)->idleUpdateBoobEffect(); //Fall back to emerald physics
+ if(physics_unsupported) //Only use emerald physics if avatarphysiscs is really off, or the client doesn't seem to support new physics.
+ ((LLVOAvatar*)mCharacter)->idleUpdateBoobEffect(); //Fall back to emerald physics
return TRUE;
}
@@ -758,7 +758,7 @@ BOOL LLPhysicsMotion::onUpdate(F32 time)
const F32 area_for_this_setting = area_for_max_settings + (area_for_min_settings-area_for_max_settings)*(1.0-lod_factor);
const F32 pixel_area = (F32) sqrt(mCharacter->getPixelArea());
- const BOOL is_self = (dynamic_cast(mCharacter) != NULL && ((LLVOAvatar*)mCharacter)->isSelf());
+ const BOOL is_self = (dynamic_cast(mCharacter) != NULL);
if ((pixel_area > area_for_this_setting) || is_self)
{
const F32 position_diff_local = llabs(mPositionLastUpdate_local-position_new_local_clamped);
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index a68f14594..33dcf21d8 100644
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -113,8 +113,6 @@ const S32 TE_SELECT_MASK_ALL = 0xFFFFFFFF;
// Globals
//
-//BOOL gDebugSelectMgr = FALSE;
-
//BOOL gHideSelectedObjects = FALSE;
//BOOL gAllowSelectAvatar = FALSE;
@@ -1882,7 +1880,7 @@ void LLSelectMgr::selectionSetFullbright(U8 fullbright)
void LLSelectMgr::selectionSetMediaTypeAndURL(U8 media_type, const std::string& media_url)
{
U8 media_flags = LLTextureEntry::MF_NONE;
- if (media_type == LLViewerObject::MEDIA_TYPE_WEB_PAGE)
+ if (media_type == LLViewerObject::MEDIA_SET)
{
media_flags = LLTextureEntry::MF_HAS_MEDIA;
}
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index c79a77884..a99400cb1 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -607,7 +607,7 @@ bool idle_startup()
gXferManager->setUseAckThrottling(TRUE);
gXferManager->setAckThrottleBPS(xfer_throttle_bps);
}
- gAssetStorage = new LLViewerAssetStorage(msg, gXferManager, gVFS);
+ gAssetStorage = new LLViewerAssetStorage(msg, gXferManager, gVFS, gStaticVFS);
F32 dropPercent = gSavedSettings.getF32("PacketDropPercentage");
@@ -2743,7 +2743,7 @@ bool idle_startup()
if (gAgent.isFirstLogin()
&& !sInitialOutfit.empty() // registration set up an outfit
&& !sInitialOutfitGender.empty() // and a gender
- && gAgentAvatarp // can't wear clothes without object
+ && isAgentAvatarValid() // can't wear clothes without object
&& !gAgent.isGenderChosen() ) // nothing already loading
{
// Start loading the wearables, textures, gestures
@@ -2766,7 +2766,7 @@ bool idle_startup()
}
// wait precache-delay and for agent's avatar or a lot longer.
- if(((timeout_frac > 1.f) && gAgentAvatarp)
+ if(((timeout_frac > 1.f) && isAgentAvatarValid())
|| (timeout_frac > 3.f))
{
LLStartUp::setStartupState( STATE_WEARABLES_WAIT );
@@ -2822,7 +2822,7 @@ bool idle_startup()
if (gAgent.isFirstLogin())
{
// wait for avatar to be completely loaded
- if (gAgentAvatarp
+ if (isAgentAvatarValid()
&& gAgentAvatarp->isFullyLoaded())
{
//llinfos << "avatar fully loaded" << llendl;
@@ -2889,7 +2889,6 @@ bool idle_startup()
// Start automatic replay if the flag is set.
if (gSavedSettings.getBOOL("StatsAutoRun"))
{
- LLUUID id;
LL_DEBUGS("AppInit") << "Starting automatic playback" << LL_ENDL;
gAgentPilot.startPlayback();
}
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index 1f4815d53..1e09a5154 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -400,7 +400,6 @@ class SGHostBlackList{
int errorCount;
};
- static LLMutex* sMutex;
typedef std::vector blacklist_t;
//Why is it a vector? because using std::map for just 1-2 values is insane-ish.
typedef blacklist_t::iterator iter;
@@ -423,22 +422,10 @@ class SGHostBlackList{
return blacklist.end();
}
- static void lock() {
- if (!sMutex)
- sMutex = new LLMutex;
- sMutex->lock();
- }
-
- static void unlock() {
- sMutex->unlock();
- }
-
public:
static bool isBlacklisted(std::string url) {
- lock();
iter found = find(url);
bool r = (found != blacklist.end()) && (found->errorCount > MAX_ERRORCOUNT);
- unlock();
return r;
}
@@ -450,7 +437,6 @@ public:
entry.timeUntil = LLTimer::getTotalTime() + timeout*1000;
entry.reason = reason;
entry.errorCount = 0;
- lock();
iter found = find(entry.host);
if(found != blacklist.end()) {
entry.errorCount = found->errorCount + 1;
@@ -465,18 +451,14 @@ public:
}
}
else blacklist.push_back(entry);
- unlock();
}
};
-LLMutex* SGHostBlackList::sMutex = 0;
SGHostBlackList::blacklist_t SGHostBlackList::blacklist;
//call every time a connection is opened
//return true if connecting allowed
static bool sgConnectionThrottle() {
- static LLMutex mutex;
- LLMutexLock lock(&mutex);
const U32 THROTTLE_TIMESTEPS_PER_SECOND = 10;
static const LLCachedControl max_connections_per_second("HTTPRequestRate", 30);
U32 max_connections = max_connections_per_second/THROTTLE_TIMESTEPS_PER_SECOND;
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index 52d538fee..32e7c2777 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -391,6 +391,11 @@ BOOL LLToolPie::pickAndShowMenu(BOOL always_show)
object = (LLViewerObject*)object->getParent();
}
+ if (!object)
+ {
+ return TRUE; // unexpected, but escape
+ }
+
// Object is an avatar, so check for mute by id.
LLVOAvatar* avatar = (LLVOAvatar*)object;
std::string name = avatar->getFullname();
diff --git a/indra/newview/llviewerassetstorage.cpp b/indra/newview/llviewerassetstorage.cpp
index bce482eb1..ffd44ed78 100644
--- a/indra/newview/llviewerassetstorage.cpp
+++ b/indra/newview/llviewerassetstorage.cpp
@@ -40,16 +40,18 @@
#include "llvfile.h"
#include "llvfs.h"
+
LLViewerAssetStorage::LLViewerAssetStorage(LLMessageSystem *msg, LLXferManager *xfer,
- LLVFS *vfs, const LLHost &upstream_host)
- : LLAssetStorage(msg, xfer, vfs, upstream_host)
+ LLVFS *vfs, LLVFS *static_vfs,
+ const LLHost &upstream_host)
+ : LLAssetStorage(msg, xfer, vfs, static_vfs, upstream_host)
{
}
LLViewerAssetStorage::LLViewerAssetStorage(LLMessageSystem *msg, LLXferManager *xfer,
- LLVFS *vfs)
- : LLAssetStorage(msg, xfer, vfs)
+ LLVFS *vfs, LLVFS *static_vfs)
+ : LLAssetStorage(msg, xfer, vfs, static_vfs)
{
}
diff --git a/indra/newview/llviewerassetstorage.h b/indra/newview/llviewerassetstorage.h
index 8bc8d4f88..15d9a748e 100644
--- a/indra/newview/llviewerassetstorage.h
+++ b/indra/newview/llviewerassetstorage.h
@@ -42,10 +42,10 @@ class LLViewerAssetStorage : public LLAssetStorage
{
public:
LLViewerAssetStorage(LLMessageSystem *msg, LLXferManager *xfer,
- LLVFS *vfs, const LLHost &upstream_host);
+ LLVFS *vfs, LLVFS *static_vfs, const LLHost &upstream_host);
LLViewerAssetStorage(LLMessageSystem *msg, LLXferManager *xfer,
- LLVFS *vfs);
+ LLVFS *vfs, LLVFS *static_vfs);
using LLAssetStorage::storeAssetData;
virtual void storeAssetData(
diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
index 7fd6dfed0..0571badb8 100644
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -364,7 +364,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot, boo
const F32 TELEPORT_ARRIVAL_DELAY = 2.f; // Time to preload the world before raising the curtain after we've actually already arrived.
S32 attach_count = 0;
- if (gAgentAvatarp)
+ if (isAgentAvatarValid())
{
attach_count = gAgentAvatarp->getAttachmentCount();
}
@@ -546,7 +546,6 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot, boo
{
LLAppViewer::instance()->pingMainloopTimeout("Display:Disconnected");
render_ui();
- render_disconnected_background();
}
//////////////////////////
@@ -1128,13 +1127,11 @@ LLRect get_whole_screen_region()
bool get_hud_matrices(const LLRect& screen_region, glh::matrix4f &proj, glh::matrix4f &model)
{
- LLVOAvatar* my_avatarp = gAgentAvatarp;
- if (my_avatarp && my_avatarp->hasHUDAttachment())
+ if (isAgentAvatarValid() && gAgentAvatarp->hasHUDAttachment())
{
F32 zoom_level = gAgentCamera.mHUDCurZoom;
- LLBBox hud_bbox = my_avatarp->getHUDBBox();
-
- // set up transform to keep HUD objects in front of camera
+ LLBBox hud_bbox = gAgentAvatarp->getHUDBBox();
+
F32 hud_depth = llmax(1.f, hud_bbox.getExtentLocal().mV[VX] * 1.1f);
proj = gl_ortho(-0.5f * LLViewerCamera::getInstance()->getAspect(), 0.5f * LLViewerCamera::getInstance()->getAspect(), -0.5f, 0.5f, 0.f, hud_depth);
proj.element(2,2) = -0.01f;
@@ -1422,10 +1419,6 @@ void render_ui_2d()
stop_glerror();
}
gViewerWindow->draw();
- if (gDebugSelect)
- {
- gViewerWindow->drawPickBuffer();
- }
// reset current origin for font rendering, in case of tiling render
LLFontGL::sCurOrigin.set(0, 0);
diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp
index 2a521e018..022398eb9 100644
--- a/indra/newview/llviewerinventory.cpp
+++ b/indra/newview/llviewerinventory.cpp
@@ -1077,3 +1077,9 @@ LLViewerInventoryCategory *LLViewerInventoryItem::getLinkedCategory() const
}
return NULL;
}
+void LLViewerInventoryItem::onCallingCardNameLookup(const LLUUID& id, const std::string& name, bool is_group)
+{
+ rename(name);
+ gInventory.addChangedMask(LLInventoryObserver::LABEL, getUUID());
+ gInventory.notifyObservers();
+}
diff --git a/indra/newview/llviewerinventory.h b/indra/newview/llviewerinventory.h
index 00782eb25..bb63824bb 100644
--- a/indra/newview/llviewerinventory.h
+++ b/indra/newview/llviewerinventory.h
@@ -145,6 +145,8 @@ public:
LLViewerInventoryItem *getLinkedItem() const;
LLViewerInventoryCategory *getLinkedCategory() const;
+ // callback
+ void onCallingCardNameLookup(const LLUUID& id, const std::string& name, bool is_group);
protected:
BOOL mIsComplete;
LLTransactionID mTransactionID;
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 9faee6106..4850d5453 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -291,7 +291,6 @@ void handle_test_load_url(void*);
extern BOOL gDebugClicks;
extern BOOL gDebugWindowProc;
extern BOOL gDebugTextEditorTips;
-//extern BOOL gDebugSelectMgr;
extern BOOL gDebugAvatarRotation;
extern BOOL gShowOverlayTitle;
extern BOOL gOcclusionCull;
@@ -2391,7 +2390,7 @@ class LLSelfRemoveAllAttachments : public view_listener_t
{
bool handleEvent(LLPointer event, const LLSD& userdata)
{
- LLAgentWearables::userRemoveAllAttachments(NULL);
+ LLAgentWearables::userRemoveAllAttachments();
return true;
}
};
@@ -9174,7 +9173,7 @@ class LLEditEnableTakeOff : public view_listener_t
if ( !(rlv_handler_t::isEnabled()) || (gRlvWearableLocks.canRemove(type)) )
// [/RLVa:KB]
- new_value = LLAgentWearables::selfHasWearable((void *)type);
+ new_value = LLAgentWearables::selfHasWearable(type);
gMenuHolder->findControl(control_name)->setValue(new_value);
return false;
@@ -9188,14 +9187,14 @@ class LLEditTakeOff : public view_listener_t
std::string clothing = userdata.asString();
if (clothing == "all")
{
- LLAgentWearables::userRemoveAllClothes(NULL);
+ LLAgentWearables::userRemoveAllClothes();
}
else
{
LLWearableType::EType type = LLWearableType::typeNameToType(clothing);
if (type >= LLWearableType::WT_SHAPE
&& type < LLWearableType::WT_COUNT)
- LLAgentWearables::userRemoveWearable((void*)type);
+ LLAgentWearables::userRemoveWearable(type);
}
return true;
}
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index 6b1710b48..9bd7e57a2 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -140,7 +140,6 @@ LLViewerObject *LLViewerObject::createObject(const LLUUID &id, const LLPCode pco
{
if (!gAgentAvatarp)
{
- lldebugs << "Marking avatar as self " << id << llendl;
gAgentAvatarp = new LLVOAvatarSelf(id, pcode, regionp);
gAgentAvatarp->initInstance();
}
@@ -741,6 +740,42 @@ void LLViewerObject::hideExtraDisplayItems( BOOL hidden )
}
}
+U32 LLViewerObject::checkMediaURL(const std::string &media_url)
+{
+ U32 retval = (U32)0x0;
+ if (!mMedia && !media_url.empty())
+ {
+ retval |= MEDIA_URL_ADDED;
+ mMedia = new LLViewerObjectMedia;
+ mMedia->mMediaURL = media_url;
+ mMedia->mMediaType = LLViewerObject::MEDIA_SET;
+ mMedia->mPassedWhitelist = FALSE;
+ }
+ else if (mMedia)
+ {
+ if (media_url.empty())
+ {
+ retval |= MEDIA_URL_REMOVED;
+ delete mMedia;
+ mMedia = NULL;
+ }
+ else if (mMedia->mMediaURL != media_url) // <-- This is an optimization. If they are equal don't bother with below's test.
+ {
+ /*if (! (LLTextureEntry::getAgentIDFromMediaVersionString(media_url) == gAgent.getID() &&
+ LLTextureEntry::getVersionFromMediaVersionString(media_url) ==
+ LLTextureEntry::getVersionFromMediaVersionString(mMedia->mMediaURL) + 1))
+ */
+ {
+ // If the media URL is different and WE were not the one who
+ // changed it, mark dirty.
+ retval |= MEDIA_URL_UPDATED;
+ }
+ mMedia->mMediaURL = media_url;
+ mMedia->mPassedWhitelist = FALSE;
+ }
+ }
+ return retval;
+}
U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
void **user_data,
@@ -1119,35 +1154,8 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
std::string media_url;
mesgsys->getStringFast(_PREHASH_ObjectData, _PREHASH_MediaURL, media_url, block_num);
- //if (!media_url.empty())
- //{
- // llinfos << "WEBONPRIM media_url " << media_url << llendl;
- //}
- if (!mMedia && !media_url.empty())
- {
- retval |= MEDIA_URL_ADDED;
- mMedia = new LLViewerObjectMedia;
- mMedia->mMediaURL = media_url;
- mMedia->mMediaType = LLViewerObject::MEDIA_TYPE_WEB_PAGE;
- mMedia->mPassedWhitelist = FALSE;
- }
- else if (mMedia)
- {
- if (media_url.empty())
- {
- retval |= MEDIA_URL_REMOVED;
- delete mMedia;
- mMedia = NULL;
- }
- else if (mMedia->mMediaURL != media_url)
- {
- // We just added or changed a web page.
- retval |= MEDIA_URL_UPDATED;
- mMedia->mMediaURL = media_url;
- mMedia->mPassedWhitelist = FALSE;
- }
- }
-
+ retval |= checkMediaURL(media_url);
+
//
// Unpack particle system data
//
@@ -1547,31 +1555,12 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
mText = NULL;
}
+ std::string media_url;
if (value & 0x200)
{
- std::string media_url;
dp->unpackString(media_url, "MediaURL");
- if (!mMedia)
- {
- retval |= MEDIA_URL_ADDED;
- mMedia = new LLViewerObjectMedia;
- mMedia->mMediaURL = media_url;
- mMedia->mMediaType = LLViewerObject::MEDIA_TYPE_WEB_PAGE;
- mMedia->mPassedWhitelist = FALSE;
- }
- else if (mMedia->mMediaURL != media_url)
- {
- retval |= MEDIA_URL_UPDATED;
- mMedia->mMediaURL = media_url;
- mMedia->mPassedWhitelist = FALSE;
- }
- }
- else if (mMedia)
- {
- retval |= MEDIA_URL_REMOVED;
- delete mMedia;
- mMedia = NULL;
}
+ retval |= checkMediaURL(media_url);
//
// Unpack particle system data
@@ -3864,7 +3853,7 @@ U8 LLViewerObject::getMediaType() const
}
else
{
- return LLViewerObject::MEDIA_TYPE_NONE;
+ return LLViewerObject::MEDIA_NONE;
}
}
@@ -5682,6 +5671,17 @@ std::string LLViewerObject::getAttachmentPointName()
return llformat("unsupported point %d", point);
}
//
+
+const LLUUID &LLViewerObject::getAttachmentItemID() const
+{
+ return mAttachmentItemID;
+}
+
+void LLViewerObject::setAttachmentItemID(const LLUUID &id)
+{
+ mAttachmentItemID = id;
+}
+
EObjectUpdateType LLViewerObject::getLastUpdateType() const
{
return mLastUpdateType;
@@ -5725,7 +5725,7 @@ LLVOAvatar* LLViewerObject::getAvatar() const
{
LLViewerObject* vobj = (LLViewerObject*) getParent();
- while (vobj && !vobj->isAvatar())
+ while (vobj && !vobj->asAvatar())
{
vobj = (LLViewerObject*) vobj->getParent();
}
diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h
index 0da84ef08..12ba19443 100644
--- a/indra/newview/llviewerobject.h
+++ b/indra/newview/llviewerobject.h
@@ -158,10 +158,15 @@ public:
virtual BOOL idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
// Types of media we can associate
- enum { MEDIA_TYPE_NONE = 0, MEDIA_TYPE_WEB_PAGE = 1 };
+ enum { MEDIA_NONE = 0, MEDIA_SET = 1 };
// Return codes for processUpdateMessage
- enum { MEDIA_URL_REMOVED = 0x1, MEDIA_URL_ADDED = 0x2, MEDIA_URL_UPDATED = 0x4, INVALID_UPDATE = 0x80000000 };
+ enum {
+ MEDIA_URL_REMOVED = 0x1,
+ MEDIA_URL_ADDED = 0x2,
+ MEDIA_URL_UPDATED = 0x4,
+ INVALID_UPDATE = 0x80000000
+ };
virtual U32 processUpdateMessage(LLMessageSystem *mesgsys,
void **user_data,
@@ -546,6 +551,10 @@ private:
ExtraParameter* getExtraParameterEntry(U16 param_type) const;
ExtraParameter* getExtraParameterEntryCreate(U16 param_type);
bool unpackParameterEntry(U16 param_type, LLDataPacker *dp);
+
+ // This function checks to see if the given media URL has changed its version
+ // and the update wasn't due to this agent's last action.
+ U32 checkMediaURL(const std::string &media_url);
// Motion prediction between updates
void interpolateLinearMotion(const F64 & time, const F32 & dt);
@@ -763,8 +772,8 @@ public:
S32 getAttachmentPoint();
std::string getAttachmentPointName();
//
- const LLUUID &getAttachmentItemID() const { return mAttachmentItemID; }
- void setAttachmentItemID(const LLUUID &id) { mAttachmentItemID = id; }
+ const LLUUID &getAttachmentItemID() const;
+ void setAttachmentItemID(const LLUUID &id);
const LLUUID &extractAttachmentItemID(); // find&set the inventory item ID of the attached object
EObjectUpdateType getLastUpdateType() const;
void setLastUpdateType(EObjectUpdateType last_update_type);
@@ -812,8 +821,8 @@ public:
class LLAlphaObject : public LLViewerObject
{
public:
- LLAlphaObject(const LLUUID &id, const LLPCode type, LLViewerRegion *regionp)
- : LLViewerObject(id,type,regionp)
+ LLAlphaObject(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp)
+ : LLViewerObject(id,pcode,regionp)
{ mDepth = 0.f; }
virtual F32 getPartSize(S32 idx);
diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp
index 24860ab25..37d6dd2ac 100644
--- a/indra/newview/llviewerobjectlist.cpp
+++ b/indra/newview/llviewerobjectlist.cpp
@@ -488,7 +488,6 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
if (objectp->getRegion() != regionp)
{ // Object changed region, so update it
- objectp->setRegion(regionp);
objectp->updateRegion(regionp); // for LLVOAvatar
}
}
@@ -1239,8 +1238,9 @@ void LLViewerObjectList::removeDrawable(LLDrawable* drawablep)
BOOL LLViewerObjectList::killObject(LLViewerObject *objectp)
{
- // Don't commit suicide just because someone thinks you are on a ledge. -SG
- if (objectp == gAgentAvatarp)
+ // Don't ever kill gAgentAvatarp, just force it to the agent's region
+ // unless region is NULL which is assumed to mean you are logging out.
+ if ((objectp == gAgentAvatarp) && gAgent.getRegion())
{
objectp->setRegion(gAgent.getRegion());
return FALSE;
@@ -1746,22 +1746,21 @@ void LLViewerObjectList::generatePickList(LLCamera &camera)
// add all hud objects to pick list
if (isAgentAvatarValid())
{
- LLVOAvatar* avatarp = gAgentAvatarp;
- for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin();
- iter != avatarp->mAttachmentPoints.end(); )
+ for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatarp->mAttachmentPoints.begin();
+ iter != gAgentAvatarp->mAttachmentPoints.end(); )
{
LLVOAvatar::attachment_map_t::iterator curiter = iter++;
- LLViewerJointAttachment* attachmentp = curiter->second;
- if (attachmentp->getIsHUDAttachment())
+ LLViewerJointAttachment* attachment = curiter->second;
+ if (attachment->getIsHUDAttachment())
{
- for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachmentp->mAttachedObjects.begin();
- attachment_iter != attachmentp->mAttachedObjects.end();
+ for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin();
+ attachment_iter != attachment->mAttachedObjects.end();
++attachment_iter)
{
- if (LLViewerObject* objectp = (*attachment_iter))
+ if (LLViewerObject* attached_object = (*attachment_iter))
{
- mSelectPickList.insert(objectp);
- LLViewerObject::const_child_list_t& child_list = objectp->getChildren();
+ mSelectPickList.insert(attached_object);
+ LLViewerObject::const_child_list_t& child_list = attached_object->getChildren();
for (LLViewerObject::child_list_t::const_iterator iter = child_list.begin();
iter != child_list.end(); iter++)
{
diff --git a/indra/newview/llviewerobjectlist.h b/indra/newview/llviewerobjectlist.h
index a458f8e10..795e4cbcc 100644
--- a/indra/newview/llviewerobjectlist.h
+++ b/indra/newview/llviewerobjectlist.h
@@ -201,7 +201,7 @@ public:
S32 mNumUnknownKills;
S32 mNumDeadObjects;
S32 mMinNumDeadObjects;
-protected:
+//protected:
std::vector mOrphanParents; // LocalID/ip,port of orphaned objects
std::vector mOrphanChildren; // UUID's of orphaned objects
S32 mNumOrphans;
diff --git a/indra/newview/llviewerparcelmedia.cpp b/indra/newview/llviewerparcelmedia.cpp
index a233136b5..1493f4abb 100644
--- a/indra/newview/llviewerparcelmedia.cpp
+++ b/indra/newview/llviewerparcelmedia.cpp
@@ -561,6 +561,42 @@ void LLViewerParcelMedia::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent
LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_NAME_CHANGED" << LL_ENDL;
};
break;
+
+ case MEDIA_EVENT_NAVIGATE_ERROR_PAGE:
+ {
+ LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_NAVIGATE_ERROR_PAGE" << LL_ENDL;
+ };
+ break;
+
+ case MEDIA_EVENT_CLOSE_REQUEST:
+ {
+ LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_CLOSE_REQUEST" << LL_ENDL;
+ };
+ break;
+
+ case MEDIA_EVENT_PICK_FILE_REQUEST:
+ {
+ LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_PICK_FILE_REQUEST" << LL_ENDL;
+ };
+ break;
+
+ case MEDIA_EVENT_GEOMETRY_CHANGE:
+ {
+ LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_GEOMETRY_CHANGE" << LL_ENDL;
+ };
+ break;
+
+ case MEDIA_EVENT_AUTH_REQUEST:
+ {
+ LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_AUTH_REQUEST" << LL_ENDL;
+ };
+ break;
+
+ case MEDIA_EVENT_LINK_HOVERED:
+ {
+ LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_LINK_HOVERED" << LL_ENDL;
+ };
+ break;
default:
{
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 684c7e405..2426c75a5 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -190,6 +190,7 @@
#include "llviewerjoystick.h"
#include "llviewernetwork.h"
#include "llpostprocess.h"
+#include "llwearablelist.h"
#include "llnotifications.h"
#include "llnotificationsutil.h"
@@ -220,9 +221,6 @@ extern S32 gJamesInt;
LLViewerWindow *gViewerWindow = NULL;
LLVelocityBar *gVelocityBar = NULL;
-
-BOOL gDebugSelect = FALSE;
-
LLFrameTimer gMouseIdleTimer;
LLFrameTimer gAwayTimer;
LLFrameTimer gAwayTriggerTimer;
@@ -363,7 +361,7 @@ public:
agent_center_text = llformat("AgentCenter %f %f %f",
(F32)(tvector.mdV[VX]), (F32)(tvector.mdV[VY]), (F32)(tvector.mdV[VZ]));
- if (gAgentAvatarp)
+ if (isAgentAvatarValid())
{
tvector = gAgent.getPosGlobalFromAgent(gAgentAvatarp->mRoot.getWorldPosition());
agent_root_center_text = llformat("AgentRootCenter %f %f %f",
@@ -578,6 +576,57 @@ public:
ypos += y_inc;
+ S32 total_objects = gObjectList.getNumObjects();
+ S32 ID_objects = gObjectList.mUUIDObjectMap.size();
+ S32 dead_objects = gObjectList.mNumDeadObjects;
+ S32 dead_object_list = gObjectList.mDeadObjects.size();
+ S32 dead_object_check = 0;
+ S32 total_avatars = 0;
+ S32 ID_avatars = gObjectList.mUUIDAvatarMap.size();
+ S32 dead_avatar_list = 0;
+ S32 dead_avatar_check = 0;
+
+ S32 orphan_parents = gObjectList.getOrphanParentCount();
+ S32 orphan_parents_check = gObjectList.mOrphanParents.size();
+ S32 orphan_children = gObjectList.mOrphanChildren.size();
+ S32 orphan_total = gObjectList.getOrphanCount();
+ S32 orphan_child_attachments = 0;
+
+ for(U32 i = 0;iisAvatar())
+ ++total_avatars;
+ if(obj->isDead())
+ {
+ ++dead_object_check;
+ if(obj->isAvatar())
+ ++dead_avatar_check;
+ }
+ }
+ }
+ for(std::set::iterator it = gObjectList.mDeadObjects.begin();it!=gObjectList.mDeadObjects.end();++it)
+ {
+ LLViewerObject *obj = gObjectList.findObject(*it);
+ if(obj && obj->isAvatar())
+ ++dead_avatar_list;
+ }
+ for(std::vector::iterator it = gObjectList.mOrphanChildren.begin();it!=gObjectList.mOrphanChildren.end();++it)
+ {
+ LLViewerObject *obj = gObjectList.findObject(it->mChildInfo);
+ if(obj && obj->isAttachment())
+ ++orphan_child_attachments;
+ }
+ addText(xpos,ypos, llformat("%d|%d (%d|%d|%d) Objects", total_objects, ID_objects, dead_objects, dead_object_list,dead_object_check));
+ ypos += y_inc;
+ addText(xpos,ypos, llformat("%d|%d (%d|%d) Avatars", total_avatars, ID_avatars, dead_avatar_list,dead_avatar_check));
+ ypos += y_inc;
+ addText(xpos,ypos, llformat("%d (%d|%d %d %d) Orphans", orphan_total, orphan_parents, orphan_parents_check,orphan_children, orphan_child_attachments));
+
+ ypos += y_inc;
+
#if MESH_ENABLED
if (gMeshRepo.meshRezEnabled())
{
@@ -1449,6 +1498,7 @@ LLViewerWindow::LLViewerWindow(
}
LLVertexBuffer::initClass(gSavedSettings.getBOOL("RenderVBOEnable"), gSavedSettings.getBOOL("RenderVBOMappingDisable"));
LL_INFOS("RenderInit") << "LLVertexBuffer initialization done." << LL_ENDL ;
+ gGL.init() ;
if (LLFeatureManager::getInstance()->isSafe()
|| (gSavedSettings.getS32("LastFeatureVersion") != LLFeatureManager::getInstance()->getVersion())
@@ -1943,6 +1993,8 @@ void LLViewerWindow::shutdownGL()
gSky.cleanup();
stop_glerror();
+ LLWearableList::instance().cleanup() ;
+
gTextureList.shutdown();
stop_glerror();
@@ -3391,27 +3443,8 @@ void LLViewerWindow::pickAsync(S32 x, S32 y_from_bot, MASK mask, void (*callback
pick_transparent = TRUE;
}
- // center initial pick frame buffer region under mouse cursor
- // since that area is guaranteed to be onscreen and hence a valid
- // part of the framebuffer
- if (mPicks.empty())
- {
- mPickScreenRegion.setCenterAndSize(x, y_from_bot, PICK_DIAMETER, PICK_DIAMETER);
-
- if (mPickScreenRegion.mLeft < 0) mPickScreenRegion.translate(-mPickScreenRegion.mLeft, 0);
- if (mPickScreenRegion.mBottom < 0) mPickScreenRegion.translate(0, -mPickScreenRegion.mBottom);
- if (mPickScreenRegion.mRight > mWindowRectRaw.getWidth() ) mPickScreenRegion.translate(mWindowRectRaw.getWidth() - mPickScreenRegion.mRight, 0);
- if (mPickScreenRegion.mTop > mWindowRectRaw.getHeight() ) mPickScreenRegion.translate(0, mWindowRectRaw.getHeight() - mPickScreenRegion.mTop);
- }
-
- // set frame buffer region for picking results
- // stack multiple picks left to right
- LLRect screen_region = mPickScreenRegion;
- screen_region.translate(mPicks.size() * PICK_DIAMETER, 0);
-
- LLPickInfo pick(LLCoordGL(x, y_from_bot), screen_region, mask, pick_transparent, get_surface_info, callback);
-
- schedulePick(pick);
+ LLPickInfo pick_info(LLCoordGL(x, y_from_bot), mask, pick_transparent, get_surface_info, callback);
+ schedulePick(pick_info);
}
void LLViewerWindow::schedulePick(LLPickInfo& pick_info)
@@ -3426,7 +3459,6 @@ void LLViewerWindow::schedulePick(LLPickInfo& pick_info)
return;
}
- llassert_always(pick_info.mScreenRegion.notEmpty());
mPicks.push_back(pick_info);
// delay further event processing until we receive results of pick
@@ -3477,11 +3509,10 @@ LLPickInfo LLViewerWindow::pickImmediate(S32 x, S32 y_from_bot, BOOL pick_trans
return LLPickInfo();
}
- pickAsync(x, y_from_bot, gKeyboard->currentMask(TRUE), NULL, pick_transparent);
- // assume that pickAsync put the results in the back of the mPicks list
- mLastPick = mPicks.back();
+ // shortcut queueing in mPicks and just update mLastPick in place
+ MASK key_mask = gKeyboard->currentMask(TRUE);
+ mLastPick = LLPickInfo(LLCoordGL(x, y_from_bot), key_mask, pick_transparent, TRUE, NULL);
mLastPick.fetchResults();
- mPicks.pop_back();
return mLastPick;
}
@@ -5038,12 +5069,6 @@ F32 LLViewerWindow::getDisplayAspectRatio() const
}
}
-
-void LLViewerWindow::drawPickBuffer() const
-{
- mHoverPick.drawPickBuffer();
-}
-
void LLViewerWindow::calcDisplayScale()
{
F32 ui_scale_factor = gSavedSettings.getF32("UIScaleFactor");
@@ -5213,13 +5238,11 @@ LLPickInfo::LLPickInfo()
}
LLPickInfo::LLPickInfo(const LLCoordGL& mouse_pos,
- const LLRect& screen_region,
MASK keyboard_mask,
BOOL pick_transparent,
BOOL pick_uv_coords,
void (*pick_callback)(const LLPickInfo& pick_info))
: mMousePt(mouse_pos),
- mScreenRegion(screen_region),
mKeyMask(keyboard_mask),
mPickCallback(pick_callback),
mPickType(PICK_INVALID),
@@ -5235,10 +5258,6 @@ LLPickInfo::LLPickInfo(const LLCoordGL& mouse_pos,
{
}
-LLPickInfo::~LLPickInfo()
-{
-}
-
void LLPickInfo::fetchResults()
{
@@ -5257,59 +5276,14 @@ void LLPickInfo::fetchResults()
NULL, -1, mPickTransparent, &face_hit,
&intersection, &uv, &normal, &binormal);
- // read back colors and depth values from buffer
- //glReadPixels(mScreenRegion.mLeft, mScreenRegion.mBottom, mScreenRegion.getWidth(), mScreenRegion.getHeight(), GL_RGBA, GL_UNSIGNED_BYTE, mPickBuffer);
- //glReadPixels(mScreenRegion.mLeft, mScreenRegion.mBottom, mScreenRegion.getWidth(), mScreenRegion.getHeight(), GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, mPickDepthBuffer );
-
- // find pick region that is fully onscreen
- //LLCoordGL scaled_pick_point;;
- //scaled_pick_point.mX = llclamp(llround((F32)mMousePt.mX * gViewerWindow->getDisplayScale().mV[VX]), PICK_HALF_WIDTH, gViewerWindow->getWindowDisplayWidth() - PICK_HALF_WIDTH);
- //scaled_pick_point.mY = llclamp(llround((F32)mMousePt.mY * gViewerWindow->getDisplayScale().mV[VY]), PICK_HALF_WIDTH, gViewerWindow->getWindowDisplayHeight() - PICK_HALF_WIDTH);
- //S32 pixel_index = PICK_HALF_WIDTH * PICK_DIAMETER + PICK_HALF_WIDTH;
- //S32 pick_id = (U32)mPickBuffer[(pixel_index * 4) + 0] << 16 | (U32)mPickBuffer[(pixel_index * 4) + 1] << 8 | (U32)mPickBuffer[(pixel_index * 4) + 2];
- //F32 depth = mPickDepthBuffer[pixel_index];
-
- //S32 x_offset = mMousePt.mX - llround((F32)scaled_pick_point.mX / gViewerWindow->getDisplayScale().mV[VX]);
- //S32 y_offset = mMousePt.mY - llround((F32)scaled_pick_point.mY / gViewerWindow->getDisplayScale().mV[VY]);
-
mPickPt = mMousePt;
- // we hit nothing, scan surrounding pixels for something useful
- /*if (!pick_id)
- {
- S32 closest_distance = 10000;
- //S32 closest_pick_name = 0;
- for (S32 col = 0; col < PICK_DIAMETER; col++)
- {
- for (S32 row = 0; row < PICK_DIAMETER; row++)
- {
- S32 distance_squared = (llabs(col - x_offset - PICK_HALF_WIDTH) * llabs(col - x_offset - PICK_HALF_WIDTH)) + (llabs(row - y_offset - PICK_HALF_WIDTH) * llabs(row - y_offset - PICK_HALF_WIDTH));
- pixel_index = row * PICK_DIAMETER + col;
- S32 test_name = (U32)mPickBuffer[(pixel_index * 4) + 0] << 16 | (U32)mPickBuffer[(pixel_index * 4) + 1] << 8 | (U32)mPickBuffer[(pixel_index * 4) + 2];
- if (test_name && distance_squared < closest_distance)
- {
- closest_distance = distance_squared;
- pick_id = test_name;
- depth = mPickDepthBuffer[pixel_index];
- mPickPt.mX = mMousePt.mX + (col - PICK_HALF_WIDTH);
- mPickPt.mY = mMousePt.mY + (row - PICK_HALF_WIDTH);
- }
- }
- }
- }*/
-
-
U32 te_offset = face_hit > -1 ? face_hit : 0;
- //pick_id &= 0x000fffff;
//unproject relative clicked coordinate from window coordinate using GL
LLViewerObject* objectp = hit_object;
- //if (pick_id == (S32)GL_NAME_PARCEL_WALL)
- //{
- // mPickType = PICK_PARCEL_WALL;
- //}
if (hit_icon &&
(!objectp ||
icon_dist < (LLViewerCamera::getInstance()->getOrigin()-intersection).magVec()))
@@ -5353,20 +5327,6 @@ void LLPickInfo::fetchResults()
mObjectID = objectp->mID;
mObjectFace = (te_offset == NO_FACE) ? -1 : (S32)te_offset;
- /*glh::matrix4f newModel((F32*)LLViewerCamera::getInstance()->getModelview().mMatrix);
-
- for(U32 i = 0; i < 16; ++i)
- {
- modelview[i] = newModel.m[i];
- projection[i] = LLViewerCamera::getInstance()->getProjection().mMatrix[i/4][i%4];
- }
- glGetIntegerv( GL_VIEWPORT, viewport );
-
- winX = ((F32)mPickPt.mX) * gViewerWindow->getDisplayScale().mV[VX];
- winY = ((F32)mPickPt.mY) * gViewerWindow->getDisplayScale().mV[VY];
-
- gluUnProject( winX, winY, depth, modelview, projection, viewport, &posX, &posY, &posZ);*/
-
mPosGlobal = gAgent.getPosGlobalFromAgent(intersection);
if (mWantSurfaceInfo)
@@ -5401,49 +5361,6 @@ void LLPickInfo::updateXYCoords()
}
}
-void LLPickInfo::drawPickBuffer() const
-{
- if (mPickBuffer)
- {
- gGL.pushMatrix();
- LLGLDisable no_blend(GL_BLEND);
- LLGLDisable no_alpha_test(GL_ALPHA_TEST);
- gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
- glPixelZoom(10.f, 10.f);
- LLVector2 display_scale = gViewerWindow->getDisplayScale();
- glRasterPos2f(((F32)mMousePt.mX * display_scale.mV[VX] + 10.f),
- ((F32)mMousePt.mY * display_scale.mV[VY] + 10.f));
- glDrawPixels(PICK_DIAMETER, PICK_DIAMETER, GL_RGBA, GL_UNSIGNED_BYTE, mPickBuffer);
- glPixelZoom(1.f, 1.f);
- gGL.color4fv(LLColor4::white.mV);
- gl_rect_2d(llround((F32)mMousePt.mX * display_scale.mV[VX] - (F32)(PICK_HALF_WIDTH)),
- llround((F32)mMousePt.mY * display_scale.mV[VY] + (F32)(PICK_HALF_WIDTH)),
- llround((F32)mMousePt.mX * display_scale.mV[VX] + (F32)(PICK_HALF_WIDTH)),
- llround((F32)mMousePt.mY * display_scale.mV[VY] - (F32)(PICK_HALF_WIDTH)),
- FALSE);
- gl_line_2d(llround((F32)mMousePt.mX * display_scale.mV[VX] - (F32)(PICK_HALF_WIDTH)),
- llround((F32)mMousePt.mY * display_scale.mV[VY] + (F32)(PICK_HALF_WIDTH)),
- llround((F32)mMousePt.mX * display_scale.mV[VX] + 10.f),
- llround((F32)mMousePt.mY * display_scale.mV[VY] + (F32)(PICK_DIAMETER) * 10.f + 10.f));
- gl_line_2d(llround((F32)mMousePt.mX * display_scale.mV[VX] + (F32)(PICK_HALF_WIDTH)),
- llround((F32)mMousePt.mY * display_scale.mV[VY] - (F32)(PICK_HALF_WIDTH)),
- llround((F32)mMousePt.mX * display_scale.mV[VX] + (F32)(PICK_DIAMETER) * 10.f + 10.f),
- llround((F32)mMousePt.mY * display_scale.mV[VY] + 10.f));
- gGL.translatef(10.f, 10.f, 0.f);
- gl_rect_2d(llround((F32)mPickPt.mX * display_scale.mV[VX]),
- llround((F32)mPickPt.mY * display_scale.mV[VY] + (F32)(PICK_DIAMETER) * 10.f),
- llround((F32)mPickPt.mX * display_scale.mV[VX] + (F32)(PICK_DIAMETER) * 10.f),
- llround((F32)mPickPt.mY * display_scale.mV[VY]),
- FALSE);
- gl_rect_2d(llround((F32)mPickPt.mX * display_scale.mV[VX]),
- llround((F32)mPickPt.mY * display_scale.mV[VY] + 10.f),
- llround((F32)mPickPt.mX * display_scale.mV[VX] + 10.f),
- llround((F32)mPickPt.mY * display_scale.mV[VY]),
- FALSE);
- gGL.popMatrix();
- }
-}
-
void LLPickInfo::getSurfaceInfo()
{
// set values to uninitialized - this is what we return if no intersection is found
diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h
index 4624245ba..0b03fcf01 100644
--- a/indra/newview/llviewerwindow.h
+++ b/indra/newview/llviewerwindow.h
@@ -85,18 +85,15 @@ public:
public:
LLPickInfo();
LLPickInfo(const LLCoordGL& mouse_pos,
- const LLRect& screen_region,
MASK keyboard_mask,
BOOL pick_transparent,
BOOL pick_surface_info,
void (*pick_callback)(const LLPickInfo& pick_info));
- ~LLPickInfo();
void fetchResults();
LLPointer getObject() const;
LLUUID getObjectID() const { return mObjectID; }
bool isValid() const { return mPickType != PICK_INVALID; }
- void drawPickBuffer() const;
static bool isFlora(LLViewerObject* object);
@@ -119,16 +116,12 @@ public:
LLVector3 mNormal;
LLVector3 mBinormal;
BOOL mPickTransparent;
- LLRect mScreenRegion;
void getSurfaceInfo();
private:
void updateXYCoords();
BOOL mWantSurfaceInfo; // do we populate mUVCoord, mNormal, mBinormal?
- U8 mPickBuffer[PICK_DIAMETER * PICK_DIAMETER * 4];
- F32 mPickDepthBuffer[PICK_DIAMETER * PICK_DIAMETER];
- BOOL mPickParcelWall;
};
@@ -384,8 +377,6 @@ public:
const LLVector2& getDisplayScale() const { return mDisplayScale; }
void calcDisplayScale();
- void drawPickBuffer() const;
-
private:
bool shouldShowToolTipFor(LLMouseHandler *mh);
static bool onAlert(const LLSD& notify);
@@ -498,8 +489,6 @@ extern LLFrameTimer gMouseIdleTimer; // how long has it been since the mouse l
extern LLFrameTimer gAwayTimer; // tracks time before setting the avatar away state to true
extern LLFrameTimer gAwayTriggerTimer; // how long the avatar has been away
-extern BOOL gDebugSelect;
-
extern BOOL gDebugFastUIRender;
extern LLViewerObject* gDebugRaycastObject;
extern LLVector3 gDebugRaycastIntersection;
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 514030756..045e513eb 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -5132,7 +5132,12 @@ void LLVOAvatar::updateTextures()
}
else
{
- render_avatar = isVisible() && !mCulled;
+ if(!isVisible())
+ {
+ return ;//do not update for invisible avatar.
+ }
+
+ render_avatar = !mCulled; //visible and not culled.
}
std::vector layer_baked;
@@ -5799,19 +5804,6 @@ void LLVOAvatar::resetSpecificJointPosition( const std::string& name )
//-----------------------------------------------------------------------------
void LLVOAvatar::resetJointPositionsToDefault( void )
{
- const LLVector3& avPos = getCharacterPosition();
-
- //Reposition the pelvis
- LLJoint* pPelvis = mRoot.findJoint("mPelvis");
- if ( pPelvis )
- {
- pPelvis->setPosition( avPos + pPelvis->getPosition() );
- }
- else
- {
- llwarns<<"Can't get pelvis joint."<setId( LLUUID::null );
//restore joints to default positions, however skip over the pelvis
- if ( pJoint && pPelvis != pJoint )
+ if ( pJoint )
{
pJoint->restoreOldXform();
}
@@ -6165,7 +6157,8 @@ BOOL LLVOAvatar::loadSkeletonNode ()
mRoot.addChild( &mSkeleton[0] );
for (std::vector::iterator iter = mMeshLOD.begin();
- iter != mMeshLOD.end(); iter++)
+ iter != mMeshLOD.end();
+ ++iter)
{
LLViewerJoint *joint = (LLViewerJoint *) *iter;
joint->mUpdateXform = FALSE;
@@ -6201,7 +6194,8 @@ BOOL LLVOAvatar::loadSkeletonNode ()
{
LLVOAvatarXmlInfo::skeletal_distortion_info_list_t::iterator iter;
for (iter = sAvatarXmlInfo->mSkeletalDistortionInfoList.begin();
- iter != sAvatarXmlInfo->mSkeletalDistortionInfoList.end(); iter++)
+ iter != sAvatarXmlInfo->mSkeletalDistortionInfoList.end();
+ ++iter)
{
LLPolySkeletalDistortionInfo *info = *iter;
LLPolySkeletalDistortion *param = new LLPolySkeletalDistortion(this);
@@ -6221,7 +6215,8 @@ BOOL LLVOAvatar::loadSkeletonNode ()
{
LLVOAvatarXmlInfo::attachment_info_list_t::iterator iter;
for (iter = sAvatarXmlInfo->mAttachmentInfoList.begin();
- iter != sAvatarXmlInfo->mAttachmentInfoList.end(); iter++)
+ iter != sAvatarXmlInfo->mAttachmentInfoList.end();
+ ++iter)
{
LLVOAvatarXmlInfo::LLVOAvatarAttachmentInfo *info = *iter;
if (!isSelf() && info->mJointName == "mScreen")
@@ -6301,8 +6296,8 @@ BOOL LLVOAvatar::loadSkeletonNode ()
BOOL LLVOAvatar::loadMeshNodes()
{
for (LLVOAvatarXmlInfo::mesh_info_list_t::const_iterator meshinfo_iter = sAvatarXmlInfo->mMeshInfoList.begin();
- meshinfo_iter != sAvatarXmlInfo->mMeshInfoList.end();
- meshinfo_iter++)
+ meshinfo_iter != sAvatarXmlInfo->mMeshInfoList.end();
+ ++meshinfo_iter)
{
const LLVOAvatarXmlInfo::LLVOAvatarMeshInfo *info = *meshinfo_iter;
const std::string &type = info->mType;
@@ -6318,7 +6313,7 @@ BOOL LLVOAvatar::loadMeshNodes()
mesh = &mHairMesh0; */
for (LLVOAvatarDictionary::Meshes::const_iterator mesh_iter = LLVOAvatarDictionary::getInstance()->getMeshes().begin();
mesh_iter != LLVOAvatarDictionary::getInstance()->getMeshes().end();
- mesh_iter++)
+ ++mesh_iter)
{
const EMeshIndex mesh_index = mesh_iter->first;
const LLVOAvatarDictionary::MeshEntry *mesh_dict = mesh_iter->second;
@@ -6389,8 +6384,8 @@ BOOL LLVOAvatar::loadMeshNodes()
mesh->setLOD( info->mMinPixelArea );
for (LLVOAvatarXmlInfo::LLVOAvatarMeshInfo::morph_info_list_t::const_iterator xmlinfo_iter = info->mPolyMorphTargetInfoList.begin();
- xmlinfo_iter != info->mPolyMorphTargetInfoList.end();
- xmlinfo_iter++)
+ xmlinfo_iter != info->mPolyMorphTargetInfoList.end();
+ ++xmlinfo_iter)
{
const LLVOAvatarXmlInfo::LLVOAvatarMeshInfo::morph_info_pair_t *info_pair = &(*xmlinfo_iter);
LLPolyMorphTarget *param = new LLPolyMorphTarget(mesh->getMesh());
@@ -6863,7 +6858,7 @@ BOOL LLVOAvatar::attachObject(LLViewerObject *viewer_object)
}
if(!item_id.isNull())
{
- mUnsupportedAttachmentPoints[attachmentID] = item_id;
+ mUnsupportedAttachmentPoints[attachmentID] = std::pair(item_id,viewer_object->getID());
if (viewer_object->isSelected())
{
LLSelectMgr::getInstance()->updateSelectionCenter();
@@ -7033,6 +7028,14 @@ void LLVOAvatar::cleanupAttachedMesh( LLViewerObject* pVO )
if ( bindCnt > 0 )
{
LLVOAvatar::resetJointPositionsToDefault();
+ //Need to handle the repositioning of the cam, updating rig data etc during outfit editing
+ //This handles the case where we detach a replacement rig.
+ if ( gAgentCamera.cameraCustomizeAvatar() )
+ {
+ gAgent.unpauseAnimation();
+ //Still want to refocus on head bone
+ gAgentCamera.changeCameraToCustomizeAvatar();
+ }
}
}
}
@@ -7046,12 +7049,12 @@ void LLVOAvatar::cleanupAttachedMesh( LLViewerObject* pVO )
//-----------------------------------------------------------------------------
BOOL LLVOAvatar::detachObject(LLViewerObject *viewer_object)
{
- for (attachment_map_t::iterator iter = mAttachmentPoints.begin();
- iter != mAttachmentPoints.end(); )
+ for (attachment_map_t::iterator iter = mAttachmentPoints.begin();
+ iter != mAttachmentPoints.end();
+ ++iter)
{
- attachment_map_t::iterator curiter = iter++;
- LLViewerJointAttachment* attachment = curiter->second;
- // only one object per attachment point for now
+ LLViewerJointAttachment* attachment = iter->second;
+
if (attachment->isObjectAttached(viewer_object))
{
// [RLVa:KB] - Checked: 2010-03-05 (RLVa-1.2.0a) | Added: RLVa-1.2.0a
@@ -7069,7 +7072,7 @@ BOOL LLVOAvatar::detachObject(LLViewerObject *viewer_object)
}
}
// [/RLVa:KB]
-
+ cleanupAttachedMesh( viewer_object );
LLUUID item_id = viewer_object->getAttachmentItemID();
attachment->removeObject(viewer_object);
if (isSelf())
@@ -7125,11 +7128,11 @@ BOOL LLVOAvatar::detachObject(LLViewerObject *viewer_object)
}
if(!item_id.isNull())
{
- std::map::iterator iter = mUnsupportedAttachmentPoints.begin();
- std::map::iterator end = mUnsupportedAttachmentPoints.end();
+ std::map >::iterator iter = mUnsupportedAttachmentPoints.begin();
+ std::map >::iterator end = mUnsupportedAttachmentPoints.end();
for( ; iter != end; ++iter)
{
- if((*iter).second == item_id)
+ if((*iter).second.first == item_id)
{
mUnsupportedAttachmentPoints.erase((*iter).first);
if (isSelf())
@@ -7373,10 +7376,10 @@ BOOL LLVOAvatar::isWearingAttachment( const LLUUID& inv_item_id )
// testzone attachpt
BOOL LLVOAvatar::isWearingUnsupportedAttachment( const LLUUID& inv_item_id )
{
- std::map::iterator end = mUnsupportedAttachmentPoints.end();
- for(std::map::iterator iter = mUnsupportedAttachmentPoints.begin(); iter != end; ++iter)
+ std::map >::iterator end = mUnsupportedAttachmentPoints.end();
+ for(std::map >::iterator iter = mUnsupportedAttachmentPoints.begin(); iter != end; ++iter)
{
- if((*iter).second == inv_item_id)
+ if((*iter).second.first == inv_item_id)
{
return TRUE;
}
@@ -7606,20 +7609,18 @@ void LLVOAvatar::invalidateAll()
updateMeshTextures();
}
-void LLVOAvatar::onGlobalColorChanged(const LLTexGlobalColor* global_color, BOOL set_by_user )
+void LLVOAvatar::onGlobalColorChanged(const LLTexGlobalColor* global_color, BOOL upload_bake )
{
if (global_color == mTexSkinColor)
{
-// llinfos << "invalidateComposite cause: onGlobalColorChanged( skin color )" << llendl;
- invalidateComposite( mBakedTextureDatas[BAKED_HEAD].mTexLayerSet, set_by_user );
- invalidateComposite( mBakedTextureDatas[BAKED_UPPER].mTexLayerSet, set_by_user );
- invalidateComposite( mBakedTextureDatas[BAKED_LOWER].mTexLayerSet, set_by_user );
+ invalidateComposite( mBakedTextureDatas[BAKED_HEAD].mTexLayerSet, upload_bake );
+ invalidateComposite( mBakedTextureDatas[BAKED_UPPER].mTexLayerSet, upload_bake );
+ invalidateComposite( mBakedTextureDatas[BAKED_LOWER].mTexLayerSet, upload_bake );
}
else if (global_color == mTexHairColor)
{
-// llinfos << "invalidateComposite cause: onGlobalColorChanged( hair color )" << llendl;
- invalidateComposite( mBakedTextureDatas[BAKED_HEAD].mTexLayerSet, set_by_user );
- invalidateComposite( mBakedTextureDatas[BAKED_HAIR].mTexLayerSet, set_by_user );
+ invalidateComposite( mBakedTextureDatas[BAKED_HEAD].mTexLayerSet, upload_bake );
+ invalidateComposite( mBakedTextureDatas[BAKED_HAIR].mTexLayerSet, upload_bake );
// ! BACKWARDS COMPATIBILITY !
// Fix for dealing with avatars from viewers that don't bake hair.
@@ -7631,11 +7632,11 @@ void LLVOAvatar::onGlobalColorChanged(const LLTexGlobalColor* global_color, BOOL
mBakedTextureDatas[BAKED_HAIR].mMeshes[i]->setColor( color.mV[VX], color.mV[VY], color.mV[VZ], color.mV[VW] );
}
}
- }
+ }
else if (global_color == mTexEyeColor)
{
// llinfos << "invalidateComposite cause: onGlobalColorChanged( eyecolor )" << llendl;
- invalidateComposite( mBakedTextureDatas[BAKED_EYES].mTexLayerSet, set_by_user );
+ invalidateComposite( mBakedTextureDatas[BAKED_EYES].mTexLayerSet, upload_bake );
}
updateMeshTextures();
}
@@ -8728,14 +8729,14 @@ BOOL LLVOAvatar::teToColorParams( ETextureIndex te, const char* param_name[3] )
return TRUE;
}
-void LLVOAvatar::setClothesColor( ETextureIndex te, const LLColor4& new_color, BOOL set_by_user )
+void LLVOAvatar::setClothesColor( ETextureIndex te, const LLColor4& new_color, BOOL upload_bake )
{
const char* param_name[3];
if( teToColorParams( te, param_name ) )
{
- setVisualParamWeight( param_name[0], new_color.mV[VX], set_by_user );
- setVisualParamWeight( param_name[1], new_color.mV[VY], set_by_user );
- setVisualParamWeight( param_name[2], new_color.mV[VZ], set_by_user );
+ setVisualParamWeight( param_name[0], new_color.mV[VX], upload_bake );
+ setVisualParamWeight( param_name[1], new_color.mV[VY], upload_bake );
+ setVisualParamWeight( param_name[2], new_color.mV[VZ], upload_bake );
}
}
@@ -8752,8 +8753,11 @@ LLColor4 LLVOAvatar::getClothesColor( ETextureIndex te )
return color;
}
-
-
+// static
+LLColor4 LLVOAvatar::getDummyColor()
+{
+ return DUMMY_COLOR;
+}
void LLVOAvatar::dumpAvatarTEs( const std::string& context ) const
{
@@ -8765,31 +8769,31 @@ void LLVOAvatar::dumpAvatarTEs( const std::string& context ) const
iter != LLVOAvatarDictionary::getInstance()->getTextures().end();
++iter)
{
- const LLVOAvatarDictionary::TextureEntry *text_dict = iter->second;
+ const LLVOAvatarDictionary::TextureEntry *texture_dict = iter->second;
const LLViewerTexture* te_image = getTEImage(iter->first);
if( !te_image )
{
- llinfos << " " << text_dict->mName << ": null ptr" << llendl;
+ llinfos << " " << texture_dict->mName << ": null ptr" << llendl;
}
else if( te_image->getID().isNull() )
{
- llinfos << " " << text_dict->mName << ": null UUID" << llendl;
+ llinfos << " " << texture_dict->mName << ": null UUID" << llendl;
}
else if( te_image->getID() == IMG_DEFAULT )
{
- llinfos << " " << text_dict->mName << ": IMG_DEFAULT" << llendl;
+ llinfos << " " << texture_dict->mName << ": IMG_DEFAULT" << llendl;
}
else if (te_image->getID() == IMG_INVISIBLE)
{
- llinfos << " " << text_dict->mName << ": IMG_INVISIBLE" << llendl;
+ llinfos << " " << texture_dict->mName << ": IMG_INVISIBLE" << llendl;
}
else if( te_image->getID() == IMG_DEFAULT_AVATAR )
{
- llinfos << " " << text_dict->mName << ": IMG_DEFAULT_AVATAR" << llendl;
+ llinfos << " " << texture_dict->mName << ": IMG_DEFAULT_AVATAR" << llendl;
}
else
{
- llinfos << " " << text_dict->mName << ": " << te_image->getID() << llendl;
+ llinfos << " " << texture_dict->mName << ": " << te_image->getID() << llendl;
}
}
}
@@ -8850,11 +8854,6 @@ void LLVOAvatar::setInvisible(BOOL newvalue)
}
}
-LLColor4 LLVOAvatar::getDummyColor()
-{
- return DUMMY_COLOR;
-}
-
// Unlike most wearable functions, this works for both self and other.
BOOL LLVOAvatar::isWearingWearableType( LLWearableType::EType type ) const
{
@@ -9528,7 +9527,7 @@ void LLVOAvatar::dumpArchetypeXML( void* )
const std::string& wearable_name = LLWearableType::getTypeName( (LLWearableType::EType) type );
apr_file_printf( file, "\n\t\t\n", wearable_name.c_str() );
- for( LLVisualParam* param = avatar->getFirstVisualParam(); param; param = avatar->getNextVisualParam() )
+ for( LLVisualParam* param = gAgentAvatarp->getFirstVisualParam(); param; param = gAgentAvatarp->getNextVisualParam() )
{
LLViewerVisualParam* viewer_param = (LLViewerVisualParam*)param;
if( (viewer_param->getWearableType() == type) &&
@@ -10274,9 +10273,7 @@ std::string LLVOAvatar::getFullname() const
LLNameValue* last = getNVPair("LastName");
if (first && last)
{
- name += first->getString();
- name += " ";
- name += last->getString();
+ name = LLCacheName::buildFullName( first->getString(), last->getString() );
}
return name;
@@ -10523,10 +10520,10 @@ const std::string LLVOAvatar::getBakedStatusForPrintout() const
++iter)
{
const ETextureIndex index = iter->first;
- const LLVOAvatarDictionary::TextureEntry *text_dict = iter->second;
- if (text_dict->mIsBakedTexture)
+ const LLVOAvatarDictionary::TextureEntry *texture_dict = iter->second;
+ if (texture_dict->mIsBakedTexture)
{
- line += text_dict->mName;
+ line += texture_dict->mName;
if (isTextureDefined(index))
{
line += "_baked";
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index 342335b04..07a2da690 100644
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -805,7 +805,7 @@ public:
const std::string getAttachedPointName(const LLUUID& inv_item_id);
//
- std::map mUnsupportedAttachmentPoints;
+ std::map > mUnsupportedAttachmentPoints;
//
/** Wearables
diff --git a/indra/newview/llwaterparammanager.h b/indra/newview/llwaterparammanager.h
index c1042d06a..d0f1be510 100644
--- a/indra/newview/llwaterparammanager.h
+++ b/indra/newview/llwaterparammanager.h
@@ -279,9 +279,6 @@ public:
F32 getFogDensity(void);
LLColor4 getFogColor(void);
- // singleton pattern implementation
- static LLWaterParamManager * instance();
-
public:
LLWaterParamSet mCurParams;
@@ -323,7 +320,7 @@ private:
// list of all the parameters, listed by name
- std::map mParamList;
+ preset_map_t mParamList;
std::vector mShaderList;
};
diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp
index 3e1069f04..1c18245b1 100644
--- a/indra/newview/llwearable.cpp
+++ b/indra/newview/llwearable.cpp
@@ -730,7 +730,7 @@ void LLWearable::removeFromAvatar( LLWearableType::EType type, BOOL upload_bake
}
gAgentAvatarp->updateVisualParams();
- gAgentAvatarp->updateMeshTextures();
+ gAgentAvatarp->wearableUpdated(type, FALSE);
// if( upload_bake )
// {
@@ -797,6 +797,15 @@ void LLWearable::copyDataFrom( LLWearable* src )
}
}
+void LLWearable::setItemID(const LLUUID& item_id)
+{
+ mItemID = item_id;
+}
+
+const LLUUID& LLWearable::getItemID() const
+{
+ return mItemID;
+}
void LLWearable::setType(LLWearableType::EType type)
{
mType = type;
@@ -859,6 +868,20 @@ void LLWearable::readFromAvatar()
}
+void LLWearable::setLabelUpdated() const
+{
+ gInventory.addChangedMask(LLInventoryObserver::LABEL, getItemID());
+}
+
+void LLWearable::refreshName()
+{
+ LLUUID item_id = getItemID();
+ LLInventoryItem* item = gInventory.getItem(item_id);
+ if( item )
+ {
+ mName = item->getName();
+ }
+}
struct LLWearableSaveData
{
diff --git a/indra/newview/llwearable.h b/indra/newview/llwearable.h
index c206bc368..1459f4f6a 100644
--- a/indra/newview/llwearable.h
+++ b/indra/newview/llwearable.h
@@ -108,7 +108,17 @@ public:
static void setCurrentDefinitionVersion( S32 version ) { LLWearable::sCurrentDefinitionVersion = version; }
friend std::ostream& operator<<(std::ostream &s, const LLWearable &w);
+ void setItemID(const LLUUID& item_id);
+ // Something happened that requires the wearable's label to be updated (e.g. worn/unworn).
+ void setLabelUpdated() const;
+
+ // the wearable was worn. make sure the name of the wearable object matches the LLViewerInventoryItem,
+ // not the wearable asset itself.
+ void refreshName();
+
+private:
+ typedef std::map te_map_t;
static S32 sCurrentDefinitionVersion; // Depends on the current state of the avatar_lad.xml.
S32 mDefinitionVersion; // Depends on the state of the avatar_lad.xml when this asset was created.
@@ -122,8 +132,9 @@ public:
typedef std::map param_map_t;
param_map_t mVisualParamMap; // maps visual param id to weight
- typedef std::map te_map_t;
+
te_map_t mTEMap; // maps TE to Image ID
+ LLUUID mItemID; // ID of the inventory item in the agent's inventory
};
#endif // LL_LLWEARABLE_H
diff --git a/indra/newview/llwearablelist.cpp b/indra/newview/llwearablelist.cpp
index 1e6f65136..535beb3ad 100644
--- a/indra/newview/llwearablelist.cpp
+++ b/indra/newview/llwearablelist.cpp
@@ -43,18 +43,13 @@
#include "llviewerstats.h"
#include "llnotificationsutil.h"
-// Globals
-LLWearableList gWearableList; // Globally constructed; be careful that there's no dependency with gAgent.
-
-
+// Callback struct
struct LLWearableArrivedData
{
- LLWearableArrivedData(
- LLAssetType::EType asset_type,
+ LLWearableArrivedData(LLAssetType::EType asset_type,
const std::string& wearable_name,
void(*asset_arrived_callback)(LLWearable*, void* userdata),
- void* userdata )
- :
+ void* userdata) :
mAssetType( asset_type ),
mCallback( asset_arrived_callback ),
mUserdata( userdata ),
@@ -75,6 +70,11 @@ struct LLWearableArrivedData
// LLWearableList
LLWearableList::~LLWearableList()
+{
+ llassert_always(mList.empty()) ;
+}
+
+void LLWearableList::cleanup()
{
for_each(mList.begin(), mList.end(), DeletePairedPointer());
mList.clear();
@@ -90,8 +90,7 @@ void LLWearableList::getAsset( const LLAssetID& assetID, const std::string& wear
}
else
{
- gAssetStorage->getAssetData(
- assetID,
+ gAssetStorage->getAssetData(assetID,
asset_type,
LLWearableList::processGetAssetReply,
(void*)new LLWearableArrivedData( asset_type, wearable_name, asset_arrived_callback, userdata ),
@@ -110,8 +109,7 @@ void LLWearableList::processGetAssetReply( const char* filename, const LLAssetID
{
LL_WARNS("Wearable") << "Bad Wearable Asset: missing file." << LL_ENDL;
}
- else
- if( status >= 0 )
+ else if (status >= 0)
{
// read the file
LLFILE* fp = LLFile::fopen(std::string(filename), "rb"); /*Flawfinder: ignore*/
@@ -180,7 +178,7 @@ void LLWearableList::processGetAssetReply( const char* filename, const LLAssetID
if (wearable) // success
{
- gWearableList.mList[ uuid ] = wearable;
+ LLWearableList::instance().mList[ uuid ] = wearable;
LL_DEBUGS("Wearable") << "processGetAssetReply()" << LL_ENDL;
LL_DEBUGS("Wearable") << wearable << LL_ENDL;
}
diff --git a/indra/newview/llwearablelist.h b/indra/newview/llwearablelist.h
index c2a13eb66..890bf18f5 100644
--- a/indra/newview/llwearablelist.h
+++ b/indra/newview/llwearablelist.h
@@ -37,11 +37,19 @@
#include "lluuid.h"
#include "llassetstorage.h"
-class LLWearableList
+// Globally constructed; be careful that there's no dependency with gAgent.
+/*
+ BUG: mList's system of mapping between assetIDs and wearables is flawed
+ since LLWearable* has an associated itemID, and you can have multiple
+ inventory items pointing to the same asset (i.e. more than one ItemID
+ per assetID). EXT-6252
+*/
+class LLWearableList : public LLSingleton
{
public:
LLWearableList() {}
~LLWearableList();
+ void cleanup() ;
S32 getLength() { return mList.size(); }
@@ -62,9 +70,7 @@ public:
protected:
LLWearable* generateNewWearable(); // used for the create... functions
private:
- std::map< LLUUID, LLWearable* > mList;
+ std::map mList;
};
-extern LLWearableList gWearableList;
-
#endif // LL_LLWEARABLELIST_H
diff --git a/indra/newview/llworldmap.cpp b/indra/newview/llworldmap.cpp
index c6ec2047a..0a8996f5d 100644
--- a/indra/newview/llworldmap.cpp
+++ b/indra/newview/llworldmap.cpp
@@ -293,12 +293,27 @@ LLSimInfo* LLWorldMap::simInfoFromPosGlobal(const LLVector3d& pos_global)
return simInfoFromHandle(handle);
}
-LLSimInfo* LLWorldMap::simInfoFromHandle(const U64 handle)
+LLSimInfo* LLWorldMap::simInfoFromHandle(const U64 findhandle)
{
- sim_info_map_t::iterator it = mSimInfoMap.find(handle);
- if (it != mSimInfoMap.end())
- {
- return it->second;
+ std::map::const_iterator it;
+ for (it = LLWorldMap::getInstance()->mSimInfoMap.begin(); it != LLWorldMap::getInstance()->mSimInfoMap.end(); ++it)
+ {
+ const U64 handle = (*it).first;
+ LLSimInfo* info = (*it).second;
+ if(handle == findhandle)
+ {
+ return info;
+ }
+ U32 x = 0, y = 0;
+ from_region_handle(findhandle, &x, &y);
+ U32 checkRegionX, checkRegionY;
+ from_region_handle(handle, &checkRegionX, &checkRegionY);
+
+ if(x >= checkRegionX && x < (checkRegionX + info->getSizeX()) &&
+ y >= checkRegionY && y < (checkRegionY + info->getSizeY()))
+ {
+ return info;
+ }
}
return NULL;
}
@@ -659,6 +674,8 @@ void LLWorldMap::processMapBlockReply(LLMessageSystem* msg, void**)
{
U16 x_regions;
U16 y_regions;
+ U16 x_size = 256;
+ U16 y_size = 256;
std::string name;
U8 accesscode;
U32 region_flags;
@@ -673,9 +690,19 @@ void LLWorldMap::processMapBlockReply(LLMessageSystem* msg, void**)
msg->getU8Fast(_PREHASH_Data, _PREHASH_WaterHeight, water_height, block);
msg->getU8Fast(_PREHASH_Data, _PREHASH_Agents, agents, block);
msg->getUUIDFast(_PREHASH_Data, _PREHASH_MapImageID, image_id, block);
+ if(msg->getNumberOfBlocksFast(_PREHASH_Size) > 0)
+ {
+ msg->getU16Fast(_PREHASH_Size, _PREHASH_SizeX, x_size, block);
+ msg->getU16Fast(_PREHASH_Size, _PREHASH_SizeY, y_size, block);
+ }
+ if(x_size == 0 || (x_size % 16) != 0|| (y_size % 16) != 0)
+ {
+ x_size = 256;
+ y_size = 256;
+ }
U32 x_meters = x_regions * REGION_WIDTH_UNITS;
- U32 y_meters = y_regions * REGION_WIDTH_UNITS;
+ U32 y_meters = y_regions * REGION_WIDTH_UNITS;
U64 handle = to_region_handle(x_meters, y_meters);
@@ -714,6 +741,7 @@ void LLWorldMap::processMapBlockReply(LLMessageSystem* msg, void**)
siminfo->setRegionFlags( region_flags );
siminfo->setWaterHeight((F32) water_height);
siminfo->setMapImageID( image_id, agent_flags );
+ siminfo->setSize( x_size, y_size );
#ifdef IMMEDIATE_IMAGE_LOAD
if (use_web_map_tiles)
diff --git a/indra/newview/llworldmap.h b/indra/newview/llworldmap.h
index c87b514ad..c41bf28c3 100644
--- a/indra/newview/llworldmap.h
+++ b/indra/newview/llworldmap.h
@@ -100,6 +100,7 @@ public:
void updateAgentCount(F64 time); // Send an item request for agent count on that region if time's up
// Setters
void setName(std::string& name) { mName = name; }
+ void setSize(U16 sizeX, U16 sizeY) { mSizeX = sizeX; mSizeY = sizeY; }
void setAccess (U8 accesscode) { mAccess = accesscode; }
void setRegionFlags (U32 region_flags) { mRegionFlags = region_flags; }
void setWaterHeight (F32 water_height) { mWaterHeight = water_height; }
@@ -117,6 +118,8 @@ public:
const F32 getWaterHeight() const { return mWaterHeight; }
const F32 getAlpha() const { return mAlpha; }
const U64 getHandle() const { return mHandle; }
+ const U16 getSizeX() const { return mSizeX; }
+ const U16 getSizeY() const { return mSizeY; }
bool isName(const std::string& name) const;
bool isDown() { return (mAccess == SIM_ACCESS_DOWN); }
bool isPG() { return (mAccess <= SIM_ACCESS_PG); }
@@ -130,7 +133,9 @@ private:
U8 mAccess;
U32 mRegionFlags;
F32 mWaterHeight;
-
+ U16 mSizeX;
+ U16 mSizeY;
+
F32 mAlpha;
public:
diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp
index 575e8120b..0edb7765d 100644
--- a/indra/newview/llworldmapview.cpp
+++ b/indra/newview/llworldmapview.cpp
@@ -644,7 +644,7 @@ void LLWorldMapView::drawTiles(S32 width, S32 height) {
{
continue; // better to draw nothing than the missing asset image
}
-
+
LLVector3d origin_global((F64)layer->LayerExtents.mLeft * REGION_WIDTH_METERS, (F64)layer->LayerExtents.mBottom * REGION_WIDTH_METERS, 0.f);
// Find x and y position relative to camera's center.
@@ -674,7 +674,8 @@ void LLWorldMapView::drawTiles(S32 width, S32 height) {
}
current_image->setBoostLevel(LLViewerTexture::BOOST_MAP_VISIBLE);
- current_image->setKnownDrawSize(llround(pix_width * LLUI::sGLScaleFactor.mV[VX]), llround(pix_height * LLUI::sGLScaleFactor.mV[VY]));
+ current_image->setKnownDrawSize(llround(pix_width * LLUI::sGLScaleFactor.mV[VX]),
+ llround(pix_height * LLUI::sGLScaleFactor.mV[VY]));
if (!current_image->hasGLTexture())
{
@@ -762,8 +763,8 @@ void LLWorldMapView::drawTiles(S32 width, S32 height) {
// When the view isn't panned, 0,0 = center of rectangle
F32 bottom = sPanY + half_height + relative_y;
F32 left = sPanX + half_width + relative_x;
- F32 top = bottom + sMapScale ;
- F32 right = left + sMapScale ;
+ F32 top = bottom + sMapScale * ((F32)info->getSizeY() / 256.f);
+ F32 right = left + sMapScale * ((F32)info->getSizeX() / 256.f);
// Switch to world map texture (if available for this region) if either:
// 1. Tiles are zoomed out small enough, or
@@ -815,7 +816,8 @@ void LLWorldMapView::drawTiles(S32 width, S32 height) {
(textures_requested_this_tick < MAX_REQUEST_PER_TICK)))
{
textures_requested_this_tick++;
- if (use_web_map_tiles)
+ if (use_web_map_tiles && info->getSizeX() == REGION_WIDTH_UNITS &&
+ info->getSizeY() == REGION_WIDTH_UNITS)
{
LLVector3d region_pos = info->getGlobalOrigin();
info->mCurrentImage = LLWorldMap::loadObjectsTile((U32)(region_pos.mdV[VX] / REGION_WIDTH_UNITS), (U32)(region_pos.mdV[VY] / REGION_WIDTH_UNITS));
@@ -852,13 +854,15 @@ void LLWorldMapView::drawTiles(S32 width, S32 height) {
if (simimage != NULL)
{
simimage->setBoostLevel(LLViewerTexture::BOOST_MAP);
- simimage->setKnownDrawSize(llround(draw_size * LLUI::sGLScaleFactor.mV[VX]), llround(draw_size * LLUI::sGLScaleFactor.mV[VY]));
+ simimage->setKnownDrawSize(llround(draw_size * LLUI::sGLScaleFactor.mV[VX] * ((F32)info->getSizeX() / REGION_WIDTH_UNITS)),
+ llround(draw_size * LLUI::sGLScaleFactor.mV[VY] * ((F32)info->getSizeY() / REGION_WIDTH_UNITS)));
}
if (overlayimage != NULL)
{
overlayimage->setBoostLevel(LLViewerTexture::BOOST_MAP);
- overlayimage->setKnownDrawSize(llround(draw_size * LLUI::sGLScaleFactor.mV[VX]), llround(draw_size * LLUI::sGLScaleFactor.mV[VY]));
+ overlayimage->setKnownDrawSize(llround(draw_size * LLUI::sGLScaleFactor.mV[VX] * ((F32)info->getSizeX() / REGION_WIDTH_UNITS)),
+ llround(draw_size * LLUI::sGLScaleFactor.mV[VY] * ((F32)info->getSizeY() / REGION_WIDTH_UNITS)));
}
// LLTextureView::addDebugImage(simimage);
@@ -1255,8 +1259,17 @@ bool LLWorldMapView::drawMipmapLevel(S32 width, S32 height, S32 level, bool load
F32 left = pos_screen[VX];
F32 bottom = pos_screen[VY];
// Compute the NE corner coordinates of the tile now
- pos_global[VX] += tile_width;
- pos_global[VY] += tile_width;
+ LLSimInfo* simInfo = LLWorldMap::instance().simInfoFromHandle(to_region_handle(grid_x, grid_y));
+ if(simInfo != NULL)
+ {
+ pos_global[VX] += ((F32)tile_width * ((F32)simInfo->getSizeX() / REGION_WIDTH_METERS));
+ pos_global[VY] += ((F32)tile_width * ((F32)simInfo->getSizeY() / REGION_WIDTH_METERS));
+ }
+ else
+ {
+ pos_global[VX] += tile_width;
+ pos_global[VY] += tile_width;
+ }
pos_screen = globalPosToView (pos_global);
F32 right = pos_screen[VX];
F32 top = pos_screen[VY];
@@ -1283,11 +1296,6 @@ bool LLWorldMapView::drawMipmapLevel(S32 width, S32 height, S32 level, bool load
drawTileOutline(level, top, left, bottom, right);
#endif // DEBUG_DRAW_TILE
}
- //else
- //{
- // Waiting for a tile -> the level is not complete
- // LL_INFOS("World Map") << "Unfetched tile. level = " << level << LL_ENDL;
- //}
}
else
{
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 2612bf1e2..91ae2427f 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -2382,6 +2382,8 @@ void LLPipeline::markVisible(LLDrawable *drawablep, LLCamera& camera)
root->getVObj()->isAttachment())
{
LLDrawable* rootparent = root->getParent();
+ static const LLCachedControl draw_orphans("ShyotlDrawOrphanAttachments",false);
+
if (rootparent) // this IS sometimes NULL
{
LLViewerObject *vobj = rootparent->getVObj();
@@ -2389,12 +2391,16 @@ void LLPipeline::markVisible(LLDrawable *drawablep, LLCamera& camera)
if (vobj) // this test may not be needed, see above
{
const LLVOAvatar* av = vobj->asAvatar();
- if (av && av->isImpostor())
+ if (av && av->isImpostor() )
{
- return;
+ return;
}
+ else if(!draw_orphans && (!av || av->isDead()))
+ return;
}
}
+ else if(!draw_orphans)
+ return;
}
sCull->pushBridge((LLSpatialBridge*) drawablep);
}
diff --git a/indra/newview/rlvhandler.cpp b/indra/newview/rlvhandler.cpp
index 2bd383487..aa61e3640 100644
--- a/indra/newview/rlvhandler.cpp
+++ b/indra/newview/rlvhandler.cpp
@@ -17,6 +17,7 @@
#include "llviewerprecompiledheaders.h"
#include "llfloateravatarlist.h"
#include "llavatarnamecache.h"
+#include "llcallbacklist.h"
#include "llfloaterbeacons.h"
#include "llfloaterchat.h"
#include "llfloaterdaycycle.h"
diff --git a/indra/newview/rlvhelper.cpp b/indra/newview/rlvhelper.cpp
index dba0db371..2d264b879 100644
--- a/indra/newview/rlvhelper.cpp
+++ b/indra/newview/rlvhelper.cpp
@@ -845,14 +845,14 @@ void RlvForceWear::done()
return;
}
- // If all the assets are available locally then "pWearData" will be freed *before* the last "gWearableList.getAsset()" call returns
+ // If all the assets are available locally then "pWearData" will be freed *before* the last "LLWearableList::instance().getAsset()" call returns
bool fContinue = true; LLWearableHoldingPattern::found_list_t::const_iterator itWearable = pWearData->mFoundList.begin();
while ( (fContinue) && (itWearable != pWearData->mFoundList.end()) )
{
const LLFoundData* pFound = *itWearable;
++itWearable;
fContinue = (itWearable != pWearData->mFoundList.end());
- gWearableList.getAsset(pFound->mAssetID, pFound->mName, pFound->mAssetType, wear_inventory_category_on_avatar_loop, (void*)pWearData);
+ LLWearableList::instance().getAsset(pFound->mAssetID, pFound->mName, pFound->mAssetType, wear_inventory_category_on_avatar_loop, (void*)pWearData);
}
m_addWearables.clear();
diff --git a/indra/newview/rlvinventory.cpp b/indra/newview/rlvinventory.cpp
index 94327cbd9..971140224 100644
--- a/indra/newview/rlvinventory.cpp
+++ b/indra/newview/rlvinventory.cpp
@@ -16,6 +16,7 @@
#include "llviewerprecompiledheaders.h"
#include "llagent.h"
+#include "llcallbacklist.h"
#include "llstartup.h"
#include "llviewerobject.h"
#include "llvoavatar.h"
@@ -142,7 +143,7 @@ void RlvInventory::fetchWornItems()
// Fetch all currently worn clothing layers and body parts
for (int type = 0; type < LLWearableType::WT_COUNT; type++)
{
- const LLUUID& idItem = gAgentWearables.getWearableItemID((LLWearableType::EType)type);
+ const LLUUID idItem = gAgentWearables.getWearableItemID((LLWearableType::EType)type);
if (idItem.notNull())
idItems.push_back(idItem);
}
diff --git a/indra/newview/rlvlocks.cpp b/indra/newview/rlvlocks.cpp
index 88f7de3c4..c8c800bcf 100644
--- a/indra/newview/rlvlocks.cpp
+++ b/indra/newview/rlvlocks.cpp
@@ -181,6 +181,11 @@ void RlvAttachmentLocks::addAttachmentLock(const LLUUID& idAttachObj, const LLUU
#endif // RLV_RELEASE
m_AttachObjRem.insert(std::pair(idAttachObj, idRlvObj));
+ if(LLViewerObject *pObj = gObjectList.findObject(idAttachObj)) //OK
+ {
+ gInventory.addChangedMask(LLInventoryObserver::LABEL, pObj->getAttachmentItemID());
+ gInventory.notifyObservers();
+ }
updateLockedHUD();
}
@@ -197,6 +202,27 @@ void RlvAttachmentLocks::addAttachmentPointLock(S32 idxAttachPt, const LLUUID& i
if (eLock & RLV_LOCK_REMOVE)
{
m_AttachPtRem.insert(std::pair(idxAttachPt, idRlvObj));
+ LLVOAvatar* pAvatar = gAgentAvatarp;
+ if (pAvatar)
+ {
+ bool need_update = false;
+ LLVOAvatar::attachment_map_t::iterator iter = pAvatar->mAttachmentPoints.find(idxAttachPt);
+ if (iter != pAvatar->mAttachmentPoints.end())
+ {
+ for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = iter->second->mAttachedObjects.begin();
+ attachment_iter != iter->second->mAttachedObjects.end();++attachment_iter)
+ {
+ LLViewerObject* attached_object = (*attachment_iter);
+ if(attached_object)
+ {
+ gInventory.addChangedMask(LLInventoryObserver::LABEL, attached_object->getAttachmentItemID());
+ need_update = true;
+ }
+ }
+ }
+ if(need_update)
+ gInventory.notifyObservers();
+ }
updateLockedHUD();
}
if (eLock & RLV_LOCK_ADD)
@@ -314,6 +340,11 @@ void RlvAttachmentLocks::removeAttachmentLock(const LLUUID& idAttachObj, const L
if (idRlvObj == itAttachObj->second)
{
m_AttachObjRem.erase(itAttachObj);
+ if(LLViewerObject *pObj = gObjectList.findObject(idAttachObj)) //OK
+ {
+ gInventory.addChangedMask(LLInventoryObserver::LABEL, pObj->getAttachmentItemID());
+ gInventory.notifyObservers();
+ }
updateLockedHUD();
break;
}
@@ -331,6 +362,7 @@ void RlvAttachmentLocks::removeAttachmentPointLock(S32 idxAttachPt, const LLUUID
if (eLock & RLV_LOCK_REMOVE)
{
+ bool removed_entry = false;
RLV_ASSERT( m_AttachPtRem.lower_bound(idxAttachPt) != m_AttachPtRem.upper_bound(idxAttachPt) ); // The lock should always exist
for (rlv_attachptlock_map_t::iterator itAttachPt = m_AttachPtRem.lower_bound(idxAttachPt),
endAttachPt = m_AttachPtRem.upper_bound(idxAttachPt); itAttachPt != endAttachPt; ++itAttachPt)
@@ -338,10 +370,38 @@ void RlvAttachmentLocks::removeAttachmentPointLock(S32 idxAttachPt, const LLUUID
if (idRlvObj == itAttachPt->second)
{
m_AttachPtRem.erase(itAttachPt);
+ removed_entry = true;
updateLockedHUD();
break;
}
}
+ if(removed_entry)
+ {
+ if(m_AttachPtRem.find(idxAttachPt) == m_AttachPtRem.end())
+ {
+ LLVOAvatar* pAvatar = gAgentAvatarp;
+ if (pAvatar)
+ {
+ bool need_update = false;
+ LLVOAvatar::attachment_map_t::iterator iter = pAvatar->mAttachmentPoints.find(idxAttachPt);
+ if (iter != pAvatar->mAttachmentPoints.end())
+ {
+ for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = iter->second->mAttachedObjects.begin();
+ attachment_iter != iter->second->mAttachedObjects.end();++attachment_iter)
+ {
+ LLViewerObject* attached_object = (*attachment_iter);
+ if(attached_object)
+ {
+ gInventory.addChangedMask(LLInventoryObserver::LABEL, attached_object->getAttachmentItemID());
+ need_update = true;
+ }
+ }
+ if(need_update)
+ gInventory.notifyObservers();
+ }
+ }
+ }
+ }
}
if (eLock & RLV_LOCK_ADD)
{
@@ -362,7 +422,7 @@ void RlvAttachmentLocks::removeAttachmentPointLock(S32 idxAttachPt, const LLUUID
void RlvAttachmentLocks::updateLockedHUD()
{
LLVOAvatar* pAvatar = gAgentAvatarp;
- if (!pAvatar)
+ if (!pAvatar || pAvatar->isDead())
return;
m_fHasLockedHUD = false;
@@ -814,7 +874,15 @@ void RlvWearableLocks::addWearableTypeLock(LLWearableType::EType eType, const LL
// NOTE: m_WearableTypeXXX can contain duplicate pairs (ie @remoutfit:shirt=n,remoutfit=n from the same object)
if (eLock & RLV_LOCK_REMOVE)
+ {
m_WearableTypeRem.insert(std::pair(eType, idRlvObj));
+ LLUUID item_id = gAgentWearables.getWearableItemID(eType);
+ if(item_id.notNull())
+ {
+ gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id);
+ gInventory.notifyObservers();
+ }
+ }
if (eLock & RLV_LOCK_ADD)
m_WearableTypeAdd.insert(std::pair(eType, idRlvObj));
}
@@ -889,15 +957,29 @@ void RlvWearableLocks::removeWearableTypeLock(LLWearableType::EType eType, const
if (eLock & RLV_LOCK_REMOVE)
{
RLV_ASSERT( m_WearableTypeRem.lower_bound(eType) != m_WearableTypeRem.upper_bound(eType) ); // The lock should always exist
+ bool removed_entry = false;
for (rlv_wearabletypelock_map_t::iterator itWearableType = m_WearableTypeRem.lower_bound(eType),
endWearableType = m_WearableTypeRem.upper_bound(eType); itWearableType != endWearableType; ++itWearableType)
{
if (idRlvObj == itWearableType->second)
{
m_WearableTypeRem.erase(itWearableType);
+ removed_entry = true;
break;
}
}
+ if(removed_entry)
+ {
+ if(m_WearableTypeRem.find(eType) == m_WearableTypeRem.end())
+ {
+ LLUUID item_id = gAgentWearables.getWearableItemID(eType);
+ if(item_id.notNull())
+ {
+ gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id);
+ gInventory.notifyObservers();
+ }
+ }
+ }
}
if (eLock & RLV_LOCK_ADD)
{
diff --git a/indra/newview/rlvviewer2.cpp b/indra/newview/rlvviewer2.cpp
index 28caf788d..a90f93c80 100644
--- a/indra/newview/rlvviewer2.cpp
+++ b/indra/newview/rlvviewer2.cpp
@@ -26,78 +26,6 @@
#include "llviewerinventory.h"
#include "rlvviewer2.h"
-// ============================================================================
-// From llappearancemgr.cpp
-
-// Shim class to allow arbitrary boost::bind
-// expressions to be run as one-time idle callbacks.
-//
-// TODO: rework idle function spec to take a boost::function in the first place.
-class OnIdleCallbackOneTime
-{
-public:
- OnIdleCallbackOneTime(nullary_func_t callable):
- mCallable(callable)
- {
- }
- static void onIdle(void *data)
- {
- gIdleCallbacks.deleteFunction(onIdle, data);
- OnIdleCallbackOneTime* self = reinterpret_cast(data);
- self->call();
- delete self;
- }
- void call()
- {
- mCallable();
- }
-private:
- nullary_func_t mCallable;
-};
-
-void doOnIdleOneTime(nullary_func_t callable)
-{
- OnIdleCallbackOneTime* cb_functor = new OnIdleCallbackOneTime(callable);
- gIdleCallbacks.addFunction(&OnIdleCallbackOneTime::onIdle,cb_functor);
-}
-
-// Shim class to allow generic boost functions to be run as
-// recurring idle callbacks. Callable should return true when done,
-// false to continue getting called.
-//
-// TODO: rework idle function spec to take a boost::function in the first place.
-class OnIdleCallbackRepeating
-{
-public:
- OnIdleCallbackRepeating(bool_func_t callable):
- mCallable(callable)
- {
- }
- // Will keep getting called until the callable returns true.
- static void onIdle(void *data)
- {
- OnIdleCallbackRepeating* self = reinterpret_cast(data);
- bool done = self->call();
- if (done)
- {
- gIdleCallbacks.deleteFunction(onIdle, data);
- delete self;
- }
- }
- bool call()
- {
- return mCallable();
- }
-private:
- bool_func_t mCallable;
-};
-
-void doOnIdleRepeating(bool_func_t callable)
-{
- OnIdleCallbackRepeating* cb_functor = new OnIdleCallbackRepeating(callable);
- gIdleCallbacks.addFunction(&OnIdleCallbackRepeating::onIdle,cb_functor);
-}
-
// ============================================================================
// From llinventoryobserver.cpp
diff --git a/indra/newview/rlvviewer2.h b/indra/newview/rlvviewer2.h
index 41892f8b7..28075031e 100644
--- a/indra/newview/rlvviewer2.h
+++ b/indra/newview/rlvviewer2.h
@@ -29,18 +29,6 @@
#include "boost/function.hpp"
-// ============================================================================
-// From llappearancemgr.h
-
-typedef boost::function nullary_func_t;
-typedef boost::function bool_func_t;
-
-// Call a given callable once in idle loop.
-void doOnIdleOneTime(nullary_func_t callable);
-
-// Repeatedly call a callable in idle loop until it returns true.
-void doOnIdleRepeating(bool_func_t callable);
-
// ============================================================================
// From llinventoryobserver.h
diff --git a/indra/newview/skins/default/xui/en-us/strings.xml b/indra/newview/skins/default/xui/en-us/strings.xml
index 83db17102..070399959 100644
--- a/indra/newview/skins/default/xui/en-us/strings.xml
+++ b/indra/newview/skins/default/xui/en-us/strings.xml
@@ -1739,6 +1739,46 @@ llSetObjectPermMask( integer mask, integer value )
Sets the given permission mask to the new value on the root object the task is attached to.
(Requires god mode)
+
+integer llSetMemoryLimit( integer limit )
+Request ''limit'' bytes to be reserved for this script.
+
+
+integer llSetLinkMedia( integer link, integer face, list params )
+Set the media params for a particular face on the linked prim(s) without a delay.
+
+
+list llGetLinkMedia( integer link, integer face, list params )
+Returns a list with the media params for a particular face on a linked prim, given the desired list of named params.
+
+
+integer llClearLinkMedia( integer link, integer face )
+Clears the media and all params from the given face on the linked prim(s).
+
+
+llSetLinkCamera( integer link, vector eye, vector at )
+Sets the camera eye offset, and the offset that the camera is looking at, for avatars that sit on the linked prim.
+
+
+llSetContentType( key request_id, integer content_type )
+Set the Internet media type of an LSL HTTP server response.
+
+
+llLinkSitTarget( integer link, vector offset, rotation rot );
+Set the sit location for the linked prim(s). The sit location is relative to the prim's position and rotation.
+
+
+key llAvatarOnLinkSitTarget( integer link )
+Returns a key that is the UUID of the user seated on the prim.
+
+
+
+
@@ -2244,4 +2284,62 @@ list lsGetWindlightScene(list rules)
Get the current WindLight settings.
(Reguires LightShare)
+
+
+
+key osNpcSaveAppearance(key npc, string notecardName)
+Saves the NPC's appearance to a notecard.
+(OpenSim only.)
+
+
+osNpcLoadAppearance(key npc, string notecardName)
+Loads the NPC's appearance from a notecard with appearance data.
+Notecards can also be loaded by UUID.
+(OpenSim only.)
+
+
+osNpcMoveToTarget(key npc, vector position, integer options)
+Moves the NPC to a target at a given vector, using options to walk or to fly there.
+(OpenSim only.)
+
+
+key osOwnerSaveAppearance(string notecardName)
+Saves the owner's appearance to a notecard inside the prim that holds the script.
+(OpenSim only.)
+
+
+rotation osNpcGetRot(key npc)
+Retrieves the rotation of an NPC
+(OpenSim only.)
+
+
+osNpcSetRot(key npc, rotation rot)
+Sets an NPC's rotation.
+(OpenSim only.)
+
+
+key osOwnerSaveAppearance(key avatarId, string notecardName)
+Saves an avatar's appearance to a notecard inside the prim that holds the script.
+(OpenSim only.)
+
+
+vector osNpcGetPos(key npc)
+Retrieves the vector of an NPC's position within a region.
+(OpenSim only.)
+
+
+osNpcStopMoveToTarget(key npc)
+Makes an NPC stop moving to a target.
+(OpenSim only.)
+
+
+float osGetWindParam(string plugin, string param)
+Gets the value of param property for plugin module.
+(OpenSim only.)
+
+
+osSetWindParam(string plugin, string param, float value)
+Sets value of param property for plugin module.
+(OpenSim only.)
+
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index f49799b1c..7d811fb93 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -510,9 +510,14 @@ class DarwinManifest(ViewerManifest):
"libexpat.0.5.0.dylib"):
self.path(os.path.join(libdir, libfile), libfile)
- #libfmodwrapper.dylib
- self.path(self.args['configuration'] + "/libfmodwrapper.dylib", "libfmodwrapper.dylib")
-
+ # For using FMOD for sound...but, fmod is proprietary so some might not use it...
+ try:
+ self.path(self.args['configuration'] + "/libfmodwrapper.dylib", "libfmodwrapper.dylib")
+ pass
+ except:
+ print "Skipping libfmodwrapper.dylib - not found"
+ pass
+
# our apps
try:
self.path("../mac_crash_logger/" + self.args['configuration'] + "/mac-crash-logger.app", "mac-crash-logger.app")
diff --git a/install.xml b/install.xml
index 3f1347123..d61fb7cea 100644
--- a/install.xml
+++ b/install.xml
@@ -927,9 +927,9 @@ anguage Infrstructure (CLI) international standard
linux
md5sum
- 5d743c93b970abe685b185de83001a6e
+ 6e422a3548597a043223de9e9384c734
url
- http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-linux-qt4.6-20100923.tar.bz2
+ https://github.com/downloads/siana/SingularityViewer/llqtwebkit-4.7.1-linux-20111013.tar.bz2
windows
diff --git a/scripts/messages/message_template.msg b/scripts/messages/message_template.msg
index d3acb611e..3e748330d 100644
--- a/scripts/messages/message_template.msg
+++ b/scripts/messages/message_template.msg
@@ -2061,7 +2061,7 @@ version 2.0
{ IsPhantom BOOL }
{ CastsShadows BOOL }
}
- {
+ {
ExtraPhysics Variable
{ PhysicsShapeType U8 }
{ Density F32 }
@@ -8654,6 +8654,11 @@ version 2.0
{ Agents U8 }
{ MapImageID LLUUID }
}
+ {
+ Size Variable
+ { SizeX U16 }
+ { SizeY U16 }
+ }
}
// viewer -> sim