summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
Diffstat (limited to 'indra')
-rw-r--r--indra/cmake/APR.cmake12
-rw-r--r--indra/lib/python/indra/base/llsd.py73
-rw-r--r--indra/llcommon/llerror.cpp23
-rw-r--r--indra/llcommon/llmemory.cpp115
-rw-r--r--indra/llcommon/llversionviewer.h2
-rw-r--r--indra/llmath/llvolume.cpp5
-rw-r--r--indra/llrender/CMakeLists.txt6
-rw-r--r--indra/llrender/llfontgl.cpp5
-rw-r--r--indra/llrender/llimagegl.cpp114
-rw-r--r--indra/llrender/llimagegl.h19
-rw-r--r--indra/llrender/llrender.cpp704
-rw-r--r--indra/llrender/llrender.h239
-rw-r--r--indra/llrender/llrendertarget.cpp3
-rw-r--r--indra/llrender/llvertexbuffer.cpp33
-rw-r--r--indra/llui/llbutton.cpp10
-rw-r--r--indra/llui/llcombobox.cpp12
-rw-r--r--indra/llui/llmenugl.cpp2
-rw-r--r--indra/llui/llscrollbar.cpp6
-rw-r--r--indra/llui/llscrollcontainer.cpp2
-rw-r--r--indra/llui/llscrolllistctrl.cpp4
-rw-r--r--indra/llui/llstyle.cpp2
-rw-r--r--indra/llui/lltabcontainer.cpp2
-rw-r--r--indra/llui/lltexteditor.cpp2
-rw-r--r--indra/llui/llui.cpp18
-rw-r--r--indra/llui/llview.cpp2
-rw-r--r--indra/llui/llviewborder.cpp2
-rw-r--r--indra/llwindow/llwindowwin32.cpp4
-rw-r--r--indra/llxml/llcontrol.cpp67
-rw-r--r--indra/llxml/llcontrol.h2
-rw-r--r--indra/newview/English.lproj/InfoPlist.strings4
-rw-r--r--indra/newview/Info-SecondLife.plist2
-rw-r--r--indra/newview/app_settings/cmd_line.xml6
-rw-r--r--indra/newview/app_settings/settings.xml18785
-rw-r--r--indra/newview/llappviewer.cpp402
-rw-r--r--indra/newview/llappviewer.h25
-rw-r--r--indra/newview/llappviewerlinux.cpp8
-rw-r--r--indra/newview/llappviewerwin32.cpp8
-rw-r--r--indra/newview/llbox.cpp2
-rw-r--r--indra/newview/llcolorswatch.cpp2
-rw-r--r--indra/newview/llcommandlineparser.cpp33
-rw-r--r--indra/newview/llcurrencyuimanager.cpp5
-rw-r--r--indra/newview/lldrawable.cpp13
-rw-r--r--indra/newview/lldrawpool.cpp2
-rw-r--r--indra/newview/lldrawpoolalpha.cpp19
-rw-r--r--indra/newview/lldrawpoolavatar.cpp36
-rw-r--r--indra/newview/lldrawpoolbump.cpp121
-rw-r--r--indra/newview/lldrawpoolsimple.cpp18
-rw-r--r--indra/newview/lldrawpoolsky.cpp2
-rw-r--r--indra/newview/lldrawpoolterrain.cpp279
-rw-r--r--indra/newview/lldrawpooltree.cpp30
-rw-r--r--indra/newview/lldrawpoolwater.cpp47
-rw-r--r--indra/newview/lldrawpoolwlsky.cpp21
-rw-r--r--indra/newview/lldynamictexture.cpp7
-rw-r--r--indra/newview/llface.cpp10
-rw-r--r--indra/newview/llface.h4
-rw-r--r--indra/newview/llfasttimerview.cpp2
-rw-r--r--indra/newview/llfirstuse.cpp26
-rw-r--r--indra/newview/llflexibleobject.cpp2
-rw-r--r--indra/newview/llfloateranimpreview.cpp5
-rw-r--r--indra/newview/llfloaterauction.cpp2
-rw-r--r--indra/newview/llfloaterbuycurrency.cpp2
-rw-r--r--indra/newview/llfloaterbuyland.cpp5
-rw-r--r--indra/newview/llfloaterchat.cpp3
-rw-r--r--indra/newview/llfloatercolorpicker.cpp2
-rw-r--r--indra/newview/llfloaterimagepreview.cpp2
-rw-r--r--indra/newview/llfloaterregioninfo.cpp2
-rw-r--r--indra/newview/llfloaterreporter.cpp6
-rw-r--r--indra/newview/llfloatersnapshot.cpp2
-rw-r--r--indra/newview/llfloatertos.cpp2
-rw-r--r--indra/newview/llfloaterworldmap.cpp2
-rw-r--r--indra/newview/llfolderview.cpp88
-rw-r--r--indra/newview/llfolderview.h34
-rw-r--r--indra/newview/llglsandbox.cpp2
-rw-r--r--indra/newview/llhudeffectlookat.cpp2
-rw-r--r--indra/newview/llhudeffectpointat.cpp2
-rw-r--r--indra/newview/llhudicon.cpp2
-rw-r--r--indra/newview/llhudtext.cpp5
-rw-r--r--indra/newview/llimpanel.cpp5
-rw-r--r--indra/newview/lljoystickbutton.cpp2
-rw-r--r--indra/newview/llmanip.cpp2
-rw-r--r--indra/newview/llmaniprotate.cpp2
-rw-r--r--indra/newview/llmanipscale.cpp2
-rw-r--r--indra/newview/llmaniptranslate.cpp10
-rw-r--r--indra/newview/llnetmap.cpp6
-rw-r--r--indra/newview/lloverlaybar.cpp2
-rw-r--r--indra/newview/llpanellogin.cpp111
-rw-r--r--indra/newview/llprogressview.cpp2
-rw-r--r--indra/newview/llselectmgr.cpp34
-rw-r--r--indra/newview/llspatialpartition.cpp32
-rw-r--r--indra/newview/llspatialpartition.h5
-rw-r--r--indra/newview/llstartup.cpp67
-rw-r--r--indra/newview/llstartup.h2
-rw-r--r--indra/newview/llsurfacepatch.cpp3
-rw-r--r--indra/newview/lltexlayer.cpp44
-rw-r--r--indra/newview/lltexturecache.cpp9
-rw-r--r--indra/newview/lltexturectrl.cpp2
-rw-r--r--indra/newview/lltexturefetch.cpp18
-rw-r--r--indra/newview/lltextureview.cpp2
-rw-r--r--indra/newview/lltoolbrush.cpp10
-rw-r--r--indra/newview/lltoolbrush.h1
-rw-r--r--indra/newview/lltoolmorph.cpp2
-rw-r--r--indra/newview/lltoolpie.cpp1
-rw-r--r--indra/newview/lltoolselectland.cpp8
-rw-r--r--indra/newview/lltoolselectland.h1
-rw-r--r--indra/newview/lltoolselectrect.cpp2
-rw-r--r--indra/newview/lltracker.cpp2
-rw-r--r--indra/newview/llviewercontrol.cpp4
-rw-r--r--indra/newview/llviewerdisplay.cpp105
-rw-r--r--indra/newview/llviewerdisplay.h1
-rw-r--r--indra/newview/llviewerjoint.cpp6
-rw-r--r--indra/newview/llviewerjointattachment.cpp2
-rw-r--r--indra/newview/llviewerjointmesh.cpp47
-rw-r--r--indra/newview/llviewermenu.cpp19
-rw-r--r--indra/newview/llviewermessage.cpp8
-rw-r--r--indra/newview/llviewernetwork.cpp201
-rw-r--r--indra/newview/llviewernetwork.h46
-rw-r--r--indra/newview/llviewerobject.cpp30
-rw-r--r--indra/newview/llviewerobjectlist.cpp3
-rw-r--r--indra/newview/llviewerparcelmedia.cpp12
-rw-r--r--indra/newview/llviewerparceloverlay.cpp4
-rw-r--r--indra/newview/llviewerregion.cpp160
-rw-r--r--indra/newview/llviewerregion.h5
-rw-r--r--indra/newview/llviewerwindow.cpp90
-rw-r--r--indra/newview/llvoavatar.cpp14
-rw-r--r--indra/newview/llvoiceclient.cpp16
-rw-r--r--indra/newview/llvoiceclient.h6
-rw-r--r--indra/newview/llvoicevisualizer.cpp8
-rw-r--r--indra/newview/llvoicevisualizer.h2
-rw-r--r--indra/newview/llvosurfacepatch.cpp12
-rw-r--r--indra/newview/llvovolume.cpp2
-rw-r--r--indra/newview/llwatchdog.cpp134
-rw-r--r--indra/newview/llwatchdog.h12
-rw-r--r--indra/newview/llwaterparammanager.cpp2
-rw-r--r--indra/newview/llwearable.cpp33
-rw-r--r--indra/newview/llwearable.h2
-rw-r--r--indra/newview/llwearablelist.cpp112
-rw-r--r--indra/newview/llworld.cpp4
-rw-r--r--indra/newview/llworldmap.cpp5
-rw-r--r--indra/newview/llworldmapview.cpp42
-rw-r--r--indra/newview/pipeline.cpp145
140 files changed, 12338 insertions, 10926 deletions
diff --git a/indra/cmake/APR.cmake b/indra/cmake/APR.cmake
index c495b7f7c6..eb1fb68991 100644
--- a/indra/cmake/APR.cmake
+++ b/indra/cmake/APR.cmake
@@ -20,16 +20,16 @@ else (STANDALONE)
${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release
)
set(APR_LIBRARIES
- debug ${WINLIBS_PREBUILT_DEBUG_DIR}/apr-1
- optimized ${WINLIBS_PREBUILT_RELEASE_DIR}/apr-1
+ debug ${WINLIBS_PREBUILT_DEBUG_DIR}/apr-1.lib
+ optimized ${WINLIBS_PREBUILT_RELEASE_DIR}/apr-1.lib
)
set(APRUTIL_LIBRARIES
- debug ${WINLIBS_PREBUILT_DEBUG_DIR}/aprutil-1
- optimized ${WINLIBS_PREBUILT_RELEASE_DIR}/aprutil-1
+ debug ${WINLIBS_PREBUILT_DEBUG_DIR}/aprutil-1.lib
+ optimized ${WINLIBS_PREBUILT_RELEASE_DIR}/aprutil-1.lib
)
set(APRICONV_LIBRARIES
- debug ${WINLIBS_PREBUILT_DEBUG_DIR}/apriconv-1
- optimized ${WINLIBS_PREBUILT_RELEASE_DIR}/apriconv-1
+ debug ${WINLIBS_PREBUILT_DEBUG_DIR}/apriconv-1.lib
+ optimized ${WINLIBS_PREBUILT_RELEASE_DIR}/apriconv-1.lib
)
elseif (DARWIN)
set(APR_LIBRARIES
diff --git a/indra/lib/python/indra/base/llsd.py b/indra/lib/python/indra/base/llsd.py
index 9561a56710..8e71aee060 100644
--- a/indra/lib/python/indra/base/llsd.py
+++ b/indra/lib/python/indra/base/llsd.py
@@ -247,6 +247,78 @@ def format_xml(something):
_g_xml_formatter = LLSDXMLFormatter()
return _g_xml_formatter.format(something)
+class LLSDXMLPrettyFormatter(LLSDXMLFormatter):
+ def __init__(self, indent_atom = None):
+ # Call the super class constructor so that we have the type map
+ super(LLSDXMLPrettyFormatter, self).__init__()
+
+ # Override the type map to use our specialized formatters to
+ # emit the pretty output.
+ self.type_map[list] = self.PRETTY_ARRAY
+ self.type_map[tuple] = self.PRETTY_ARRAY
+ self.type_map[types.GeneratorType] = self.PRETTY_ARRAY,
+ self.type_map[dict] = self.PRETTY_MAP
+
+ # Private data used for indentation.
+ self._indent_level = 1
+ if indent_atom is None:
+ self._indent_atom = ' '
+ else:
+ self._indent_atom = indent_atom
+
+ def _indent(self):
+ "Return an indentation based on the atom and indentation level."
+ return self._indent_atom * self._indent_level
+
+ def PRETTY_ARRAY(self, v):
+ rv = []
+ rv.append('<array>\n')
+ self._indent_level = self._indent_level + 1
+ rv.extend(["%s%s\n" %
+ (self._indent(),
+ self.generate(item))
+ for item in v])
+ self._indent_level = self._indent_level - 1
+ rv.append(self._indent())
+ rv.append('</array>')
+ return ''.join(rv)
+
+ def PRETTY_MAP(self, v):
+ rv = []
+ rv.append('<map>\n')
+ self._indent_level = self._indent_level + 1
+ keys = v.keys()
+ keys.sort()
+ rv.extend(["%s%s\n%s%s\n" %
+ (self._indent(),
+ self.elt('key', key),
+ self._indent(),
+ self.generate(v[key]))
+ for key in keys])
+ self._indent_level = self._indent_level - 1
+ rv.append(self._indent())
+ rv.append('</map>')
+ return ''.join(rv)
+
+ def format(self, something):
+ data = []
+ data.append('<?xml version="1.0" ?>\n<llsd>')
+ data.append(self.generate(something))
+ data.append('</llsd>\n')
+ return '\n'.join(data)
+
+def format_pretty_xml(something):
+ """@brief Serialize a python object as 'pretty' llsd xml.
+
+ The output conforms to the LLSD DTD, unlike the output from the
+ standard python xml.dom DOM::toprettyxml() method which does not
+ preserve significant whitespace.
+ This function is not necessarily suited for serializing very large
+ objects. It is not optimized by the cllsd module, and sorts on
+ dict (llsd map) keys alphabetically to ease human reading.
+ """
+ return LLSDXMLPrettyFormatter().format(something)
+
class LLSDNotationFormatter(object):
def __init__(self):
self.type_map = {
@@ -834,6 +906,7 @@ class LLSD(object):
parse = staticmethod(parse)
toXML = staticmethod(format_xml)
+ toPrettyXML = staticmethod(format_pretty_xml)
toBinary = staticmethod(format_binary)
toNotation = staticmethod(format_notation)
diff --git a/indra/llcommon/llerror.cpp b/indra/llcommon/llerror.cpp
index fa3a01c191..1d85bc0e70 100644
--- a/indra/llcommon/llerror.cpp
+++ b/indra/llcommon/llerror.cpp
@@ -1072,6 +1072,29 @@ namespace LLError
s.uniqueLogMessages[message] = 1;
}
}
+
+ if (site.mPrintOnce)
+ {
+ std::map<std::string, unsigned int>::iterator messageIter = s.uniqueLogMessages.find(message);
+ if (messageIter != s.uniqueLogMessages.end())
+ {
+ messageIter->second++;
+ unsigned int num_messages = messageIter->second;
+ if (num_messages == 10 || num_messages == 50 || (num_messages % 100) == 0)
+ {
+ prefix << "ONCE (" << num_messages << "th time seen): ";
+ }
+ else
+ {
+ return;
+ }
+ }
+ else
+ {
+ prefix << "ONCE: ";
+ s.uniqueLogMessages[message] = 1;
+ }
+ }
prefix << message;
message = prefix.str();
diff --git a/indra/llcommon/llmemory.cpp b/indra/llcommon/llmemory.cpp
index 079f2b3258..4ca6a12435 100644
--- a/indra/llcommon/llmemory.cpp
+++ b/indra/llcommon/llmemory.cpp
@@ -314,72 +314,77 @@ U64 getCurrentRSS()
#elif defined(LL_DARWIN)
-static U32 getPageSize()
-{
- int ctl[2] = { CTL_HW, HW_PAGESIZE };
- int page_size;
- size_t size = sizeof(page_size);
-
- if (sysctl(ctl, 2, &page_size, &size, NULL, 0) == -1)
- {
- llwarns << "Couldn't get page size" << llendl;
- return 0;
- } else {
- return page_size;
- }
-}
+// This can cause bad stalls! Replace with fast version
+
+// static U32 getPageSize()
+// {
+// int ctl[2] = { CTL_HW, HW_PAGESIZE };
+// int page_size;
+// size_t size = sizeof(page_size);
+
+// if (sysctl(ctl, 2, &page_size, &size, NULL, 0) == -1)
+// {
+// llwarns << "Couldn't get page size" << llendl;
+// return 0;
+// } else {
+// return page_size;
+// }
+// }
U64 getCurrentRSS()
{
- task_t task = mach_task_self();
- vm_address_t addr = VM_MIN_ADDRESS;
- vm_size_t size = 0;
- U64 residentPages = 0;
-
- while (true)
- {
- mach_msg_type_number_t bcount = VM_REGION_BASIC_INFO_COUNT;
- vm_region_basic_info binfo;
- mach_port_t bobj;
- kern_return_t ret;
+ // Stalls!!!
+
+// task_t task = mach_task_self();
+// vm_address_t addr = VM_MIN_ADDRESS;
+// vm_size_t size = 0;
+// U64 residentPages = 0;
+
+// while (true)
+// {
+// mach_msg_type_number_t bcount = VM_REGION_BASIC_INFO_COUNT;
+// vm_region_basic_info binfo;
+// mach_port_t bobj;
+// kern_return_t ret;
- addr += size;
+// addr += size;
- ret = vm_region(task, &addr, &size, VM_REGION_BASIC_INFO,
- (vm_region_info_t) &binfo, &bcount, &bobj);
+// ret = vm_region(task, &addr, &size, VM_REGION_BASIC_INFO,
+// (vm_region_info_t) &binfo, &bcount, &bobj);
- if (ret != KERN_SUCCESS)
- {
- break;
- }
+// if (ret != KERN_SUCCESS)
+// {
+// break;
+// }
- if (bobj != MACH_PORT_NULL)
- {
- mach_port_deallocate(task, bobj);
- }
+// if (bobj != MACH_PORT_NULL)
+// {
+// mach_port_deallocate(task, bobj);
+// }
- mach_msg_type_number_t ecount = VM_REGION_EXTENDED_INFO_COUNT;
- vm_region_extended_info einfo;
- mach_port_t eobj;
-
- ret = vm_region(task, &addr, &size, VM_REGION_EXTENDED_INFO,
- (vm_region_info_t) &einfo, &ecount, &eobj);
-
- if (ret != KERN_SUCCESS)
- {
- llwarns << "vm_region failed" << llendl;
- return 0;
- }
+// mach_msg_type_number_t ecount = VM_REGION_EXTENDED_INFO_COUNT;
+// vm_region_extended_info einfo;
+// mach_port_t eobj;
+
+// ret = vm_region(task, &addr, &size, VM_REGION_EXTENDED_INFO,
+// (vm_region_info_t) &einfo, &ecount, &eobj);
+
+// if (ret != KERN_SUCCESS)
+// {
+// llwarns << "vm_region failed" << llendl;
+// return 0;
+// }
- if (eobj != MACH_PORT_NULL)
- {
- mach_port_deallocate(task, eobj);
- }
+// if (eobj != MACH_PORT_NULL)
+// {
+// mach_port_deallocate(task, eobj);
+// }
- residentPages += einfo.pages_resident;
- }
+// residentPages += einfo.pages_resident;
+// }
- return residentPages * getPageSize();
+// return residentPages * getPageSize();
+ return 0;
}
#elif defined(LL_LINUX)
diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h
index d4bbef7e13..2cdb55eb19 100644
--- a/indra/llcommon/llversionviewer.h
+++ b/indra/llcommon/llversionviewer.h
@@ -34,7 +34,7 @@
const S32 LL_VERSION_MAJOR = 1;
const S32 LL_VERSION_MINOR = 20;
-const S32 LL_VERSION_PATCH = 6;
+const S32 LL_VERSION_PATCH = 9;
const S32 LL_VERSION_BUILD = 0;
const char * const LL_CHANNEL = "Second Life Release";
diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp
index ecc4b09d10..3b01140e3a 100644
--- a/indra/llmath/llvolume.cpp
+++ b/indra/llmath/llvolume.cpp
@@ -4789,6 +4789,11 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build)
mIndices.resize(num_indices);
mEdge.resize(num_indices);
}
+ else
+ {
+ mHasBinormals = FALSE;
+ }
+
LLVector3& face_min = mExtents[0];
LLVector3& face_max = mExtents[1];
diff --git a/indra/llrender/CMakeLists.txt b/indra/llrender/CMakeLists.txt
index 9938a0198b..2dba8ef60d 100644
--- a/indra/llrender/CMakeLists.txt
+++ b/indra/llrender/CMakeLists.txt
@@ -23,11 +23,10 @@ set(llrender_SOURCE_FILES
llfont.cpp
llfontgl.cpp
llgldbg.cpp
- llglimmediate.cpp
llimagegl.cpp
+ llrender.cpp
llrendertarget.cpp
llvertexbuffer.cpp
- llvertexprogramgl.cpp
)
set(llrender_HEADER_FILES
@@ -36,11 +35,10 @@ set(llrender_HEADER_FILES
llfontgl.h
llfont.h
llgldbg.h
- llglimmediate.h
llimagegl.h
+ llrender.h
llrendertarget.h
llvertexbuffer.h
- llvertexprogramgl.h
)
set_source_files_properties(${llrender_HEADER_FILES}
diff --git a/indra/llrender/llfontgl.cpp b/indra/llrender/llfontgl.cpp
index 3a408b5550..1e0d9767ca 100644
--- a/indra/llrender/llfontgl.cpp
+++ b/indra/llrender/llfontgl.cpp
@@ -36,7 +36,7 @@
#include "llfont.h"
#include "llfontgl.h"
#include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "v4color.h"
#include "llstl.h"
@@ -665,7 +665,8 @@ S32 LLFontGL::render(const LLWString &wstr,
mImageGLp->bind(0);
- gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // Not guaranteed to be set correctly
+ // Not guaranteed to be set correctly
+ gGL.setSceneBlendType(LLRender::BT_ALPHA);
cur_x = ((F32)x * sScaleX);
cur_y = ((F32)y * sScaleY);
diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp
index 55fa48f437..dd9f22361f 100644
--- a/indra/llrender/llimagegl.cpp
+++ b/indra/llrender/llimagegl.cpp
@@ -41,7 +41,7 @@
#include "llmath.h"
#include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
//----------------------------------------------------------------------------
@@ -61,6 +61,8 @@ S32 LLImageGL::sCount = 0;
BOOL LLImageGL::sGlobalUseAnisotropic = FALSE;
F32 LLImageGL::sLastFrameTime = 0.f;
+BOOL LLImageGL::sRefCheck = TRUE ;
+
std::set<LLImageGL*> LLImageGL::sImageList;
//----------------------------------------------------------------------------
@@ -130,13 +132,13 @@ void LLImageGL::bindExternalTexture(LLGLuint gl_name, S32 stage, LLGLenum bind_t
gGL.flush();
if (stage > 0)
{
- glActiveTextureARB(GL_TEXTURE0_ARB + stage);
+ gGL.getTexUnit(stage)->activate();
}
glBindTexture(bind_target, gl_name);
sCurrentBoundTextures[stage] = gl_name;
if (stage > 0)
{
- glActiveTextureARB(GL_TEXTURE0_ARB);
+ gGL.getTexUnit(0)->activate();
}
}
@@ -149,9 +151,9 @@ void LLImageGL::unbindTexture(S32 stage, LLGLenum bind_target)
gGL.flush();
if (stage > 0)
{
- glActiveTextureARB(GL_TEXTURE0_ARB + stage);
+ gGL.getTexUnit(stage)->activate();
glBindTexture(GL_TEXTURE_2D, 0);
- glActiveTextureARB(GL_TEXTURE0_ARB);
+ gGL.getTexUnit(0)->activate();
}
else
{
@@ -276,7 +278,10 @@ LLImageGL::LLImageGL(const LLImageRaw* imageraw, BOOL usemipmaps)
setSize(0, 0, 0);
sImageList.insert(this);
sCount++;
+
+ sRefCheck = FALSE ;
createGLTexture(0, imageraw);
+ sRefCheck = TRUE ;
}
LLImageGL::~LLImageGL()
@@ -304,7 +309,9 @@ void LLImageGL::init(BOOL usemipmaps)
mIsResident = 0;
mClampS = FALSE;
mClampT = FALSE;
- mMipFilterNearest = FALSE;
+ mClampR = FALSE;
+ mMagFilterNearest = FALSE;
+ mMinFilterNearest = FALSE;
mWidth = 0;
mHeight = 0;
mComponents = 0;
@@ -331,17 +338,19 @@ void LLImageGL::cleanup()
//----------------------------------------------------------------------------
+//this function is used to check the size of a texture image.
+//so dim should be a positive number
static bool check_power_of_two(S32 dim)
{
- while(dim > 1)
+ if(dim < 0)
{
- if (dim & 1)
- {
- return false;
- }
- dim >>= 1;
+ return false ;
+ }
+ if(!dim)//0 is a power-of-two number
+ {
+ return true ;
}
- return true;
+ return !(dim & (dim - 1)) ;
}
//static
@@ -418,6 +427,8 @@ void LLImageGL::dump()
BOOL LLImageGL::bindTextureInternal(const S32 stage) const
{
+ llassert_always(!sRefCheck || (getNumRefs() > 0 && getNumRefs() < 100000)) ;
+
if (gGLManager.mIsDisabled)
{
llwarns << "Trying to bind a texture while GL is disabled!" << llendl;
@@ -439,7 +450,7 @@ BOOL LLImageGL::bindTextureInternal(const S32 stage) const
gGL.flush();
if (stage > 0)
{
- glActiveTextureARB(GL_TEXTURE0_ARB + stage);
+ gGL.getTexUnit(stage)->activate();
}
glBindTexture(mBindTarget, mTexName);
@@ -448,7 +459,7 @@ BOOL LLImageGL::bindTextureInternal(const S32 stage) const
if (stage > 0)
{
- glActiveTextureARB(GL_TEXTURE0_ARB);
+ gGL.getTexUnit(0)->activate();
}
if (mLastBindTime != sLastFrameTime)
@@ -466,12 +477,12 @@ BOOL LLImageGL::bindTextureInternal(const S32 stage) const
gGL.flush();
if (stage > 0)
{
- glActiveTextureARB(GL_TEXTURE0_ARB+stage);
+ gGL.getTexUnit(stage)->activate();
}
glBindTexture(mBindTarget, 0);
if (stage > 0)
{
- glActiveTextureARB(GL_TEXTURE0_ARB+stage);
+ gGL.getTexUnit(0)->activate();
}
sCurrentBoundTextures[stage] = 0;
return FALSE;
@@ -941,7 +952,7 @@ BOOL LLImageGL::createGLTexture(S32 discard_level, const U8* data_in, BOOL data_
setImage(data_in, data_hasmips);
setClamp(mClampS, mClampT);
- setMipFilterNearest(mMipFilterNearest);
+ setMipFilterNearest(mMagFilterNearest);
// things will break if we don't unbind after creation
unbindTexture(0, mBindTarget);
@@ -1044,8 +1055,23 @@ BOOL LLImageGL::readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool compre
S32 gl_discard = discard_level - mCurrentDiscardLevel;
+ //explicitly unbind texture
+ LLImageGL::unbindTexture(0, mTarget);
llverify(bindTextureInternal(0));
+ if (gDebugGL)
+ {
+ if (mTarget == GL_TEXTURE_2D)
+ {
+ GLint texname;
+ glGetIntegerv(GL_TEXTURE_BINDING_2D, &texname);
+ if (texname != mTexName)
+ {
+ llerrs << "Invalid texture bound!" << llendl;
+ }
+ }
+ }
+
LLGLint glwidth = 0;
glGetTexLevelParameteriv(mTarget, gl_discard, GL_TEXTURE_WIDTH, (GLint*)&glwidth);
if (glwidth == 0)
@@ -1153,25 +1179,55 @@ void LLImageGL::destroyGLTexture()
//----------------------------------------------------------------------------
-void LLImageGL::setClamp(BOOL clamps, BOOL clampt)
+void LLImageGL::glClampCubemap (BOOL clamps, BOOL clampt, BOOL clampr)
+{
+ glTexParameteri (GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S, clamps ? GL_CLAMP_TO_EDGE : GL_REPEAT);
+ glTexParameteri (GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_T, clamps ? GL_CLAMP_TO_EDGE : GL_REPEAT);
+ glTexParameteri (GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_R, clamps ? GL_CLAMP_TO_EDGE : GL_REPEAT);
+}
+
+void LLImageGL::glClamp (BOOL clamps, BOOL clampt)
{
- mClampS = clamps;
- mClampT = clampt;
if (mTexName != 0)
{
- glTexParameteri(mBindTarget, GL_TEXTURE_WRAP_S, clamps ? GL_CLAMP_TO_EDGE : GL_REPEAT);
- glTexParameteri(mBindTarget, GL_TEXTURE_WRAP_T, clampt ? GL_CLAMP_TO_EDGE : GL_REPEAT);
+ glTexParameteri (mBindTarget, GL_TEXTURE_WRAP_S, clamps ? GL_CLAMP_TO_EDGE : GL_REPEAT);
+ glTexParameteri (mBindTarget, GL_TEXTURE_WRAP_T, clampt ? GL_CLAMP_TO_EDGE : GL_REPEAT);
}
- stop_glerror();
}
-void LLImageGL::setMipFilterNearest(BOOL nearest, BOOL min_nearest)
+void LLImageGL::setClampCubemap (BOOL clamps, BOOL clampt, BOOL clampr)
+{
+ mClampS = clamps;
+ mClampT = clampt;
+ mClampR = clampr;
+ glClampCubemap (clamps, clampt, clampr);
+}
+
+void LLImageGL::setClamp(BOOL clamps, BOOL clampt)
+{
+ mClampS = clamps;
+ mClampT = clampt;
+ glClamp (clamps, clampt);
+}
+
+void LLImageGL::overrideClamp (BOOL clamps, BOOL clampt)
+{
+ glClamp (clamps, clampt);
+}
+
+void LLImageGL::restoreClamp (void)
+{
+ glClamp (mClampS, mClampT);
+}
+
+void LLImageGL::setMipFilterNearest(BOOL mag_nearest, BOOL min_nearest)
{
- mMipFilterNearest = nearest;
+ mMagFilterNearest = mag_nearest;
+ mMinFilterNearest = min_nearest;
if (mTexName != 0)
{
- if (min_nearest)
+ if (mMinFilterNearest)
{
glTexParameteri(mBindTarget, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
}
@@ -1183,7 +1239,7 @@ void LLImageGL::setMipFilterNearest(BOOL nearest, BOOL min_nearest)
{
glTexParameteri(mBindTarget, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
}
- if (mMipFilterNearest)
+ if (mMagFilterNearest)
{
glTexParameteri(mBindTarget, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
}
@@ -1193,7 +1249,7 @@ void LLImageGL::setMipFilterNearest(BOOL nearest, BOOL min_nearest)
}
if (gGLManager.mHasAnisotropic)
{
- if (sGlobalUseAnisotropic && !mMipFilterNearest)
+ if (sGlobalUseAnisotropic && !mMagFilterNearest)
{
F32 largest_anisotropy;
glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &largest_anisotropy);
diff --git a/indra/llrender/llimagegl.h b/indra/llrender/llimagegl.h
index 82ea147d6e..c5fe9b7299 100644
--- a/indra/llrender/llimagegl.h
+++ b/indra/llrender/llimagegl.h
@@ -81,6 +81,10 @@ protected:
virtual ~LLImageGL();
BOOL bindTextureInternal(const S32 stage = 0) const;
+private:
+ void glClamp (BOOL clamps, BOOL clampt);
+ void glClampCubemap (BOOL clamps, BOOL clampt, BOOL clampr = FALSE);
+
public:
virtual void dump(); // debugging info to llinfos
virtual BOOL bind(const S32 stage = 0) const;
@@ -99,8 +103,11 @@ public:
BOOL readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool compressed_ok);
void destroyGLTexture();
+ void setClampCubemap (BOOL clamps, BOOL clampt, BOOL clampr = FALSE);
void setClamp(BOOL clamps, BOOL clampt);
- void setMipFilterNearest(BOOL nearest, BOOL min_nearest = FALSE);
+ void overrideClamp (BOOL clamps, BOOL clampt);
+ void restoreClamp (void);
+ void setMipFilterNearest(BOOL mag_nearest, BOOL min_nearest = FALSE);
void setExplicitFormat(LLGLint internal_format, LLGLenum primary_format, LLGLenum type_format = 0, BOOL swap_bytes = FALSE);
void dontDiscard() { mDontDiscard = 1; }
@@ -117,7 +124,8 @@ public:
BOOL getClampS() const { return mClampS; }
BOOL getClampT() const { return mClampT; }
- BOOL getMipFilterNearest() const { return mMipFilterNearest; }
+ BOOL getClampR() const { return mClampR; }
+ BOOL getMipFilterNearest() const { return mMagFilterNearest; }
BOOL getHasGLTexture() const { return mTexName != 0; }
LLGLuint getTexName() const { return mTexName; }
@@ -167,7 +175,9 @@ protected:
S8 mClampS; // Need to save clamp state
S8 mClampT;
- S8 mMipFilterNearest; // if TRUE, set magfilter to GL_NEAREST
+ S8 mClampR;
+ S8 mMagFilterNearest; // if TRUE, set magfilter to GL_NEAREST
+ S8 mMinFilterNearest; // if TRUE, set minfilter to GL_NEAREST
LLGLint mFormatInternal; // = GL internalformat
LLGLenum mFormatPrimary; // = GL format (pixel data format)
@@ -197,6 +207,9 @@ public:
#else
BOOL getMissed() const { return FALSE; };
#endif
+
+private://paranoia error check
+ static BOOL sRefCheck ;
};
#endif // LL_LLIMAGEGL_H
diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp
new file mode 100644
index 0000000000..1168155f8b
--- /dev/null
+++ b/indra/llrender/llrender.cpp
@@ -0,0 +1,704 @@
+/**
+ * @file llrender.cpp
+ * @brief LLRender implementation
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ *
+ * Copyright (c) 2001-2007, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "linden_common.h"
+
+#include "llrender.h"
+#include "llvertexbuffer.h"
+
+LLRender gGL;
+
+static const U32 LL_NUM_TEXTURE_LAYERS = 8;
+
+static GLenum sGLCompareFunc[] =
+{
+ GL_NEVER,
+ GL_ALWAYS,
+ GL_LESS,
+ GL_LEQUAL,
+ GL_EQUAL,
+ GL_NOTEQUAL,
+ GL_GEQUAL,
+ GL_GREATER
+};
+
+const U32 immediate_mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_COLOR | LLVertexBuffer::MAP_TEXCOORD;
+
+static GLenum sGLBlendFactor[] =
+{
+ GL_ONE,
+ GL_ZERO,
+ GL_DST_COLOR,
+ GL_SRC_COLOR,
+ GL_ONE_MINUS_DST_COLOR,
+ GL_ONE_MINUS_SRC_COLOR,
+ GL_DST_ALPHA,
+ GL_SRC_ALPHA,
+ GL_ONE_MINUS_DST_ALPHA,
+ GL_ONE_MINUS_SRC_ALPHA
+};
+
+LLTexUnit::LLTexUnit(U32 index)
+: mIsEnabled(false), mCurrBlendType(TB_MULT),
+mCurrColorOp(TBO_MULT), mCurrAlphaOp(TBO_MULT),
+mCurrColorSrc1(TBS_TEX_COLOR), mCurrColorSrc2(TBS_PREV_COLOR),
+mCurrAlphaSrc1(TBS_TEX_ALPHA), mCurrAlphaSrc2(TBS_PREV_ALPHA),
+mCurrColorScale(1), mCurrAlphaScale(1)
+{
+ llassert_always(index < LL_NUM_TEXTURE_LAYERS);
+ mIndex = index;
+}
+
+U32 LLTexUnit::getIndex(void)
+{
+ return mIndex;
+}
+
+void LLTexUnit::enable(void)
+{
+ if (!mIsEnabled)
+ {
+ activate();
+ glEnable(GL_TEXTURE_2D);
+ mIsEnabled = true;
+ }
+}
+
+void LLTexUnit::disable(void)
+{
+ if (mIsEnabled)
+ {
+ activate();
+ glDisable(GL_TEXTURE_2D);
+ mIsEnabled = false;
+ }
+}
+
+void LLTexUnit::activate(void)
+{
+ //if (gGL.mCurrTextureUnitIndex != mIndex)
+ {
+ glActiveTextureARB(GL_TEXTURE0_ARB + mIndex);
+ gGL.mCurrTextureUnitIndex = mIndex;
+ }
+}
+
+// Useful for debugging that you've manually assigned a texture operation to the correct
+// texture unit based on the currently set active texture in opengl.
+void LLTexUnit::debugTextureUnit(void)
+{
+ GLint activeTexture;
+ glGetIntegerv(GL_ACTIVE_TEXTURE_ARB, &activeTexture);
+ if ((GL_TEXTURE0_ARB + mIndex) != activeTexture)
+ {
+ llerrs << "Incorrect Texture Unit! Expected: " << (activeTexture - GL_TEXTURE0_ARB) << " Actual: " << mIndex << llendl;
+ }
+}
+
+void LLTexUnit::bindTexture(const LLImageGL* texture)
+{
+ if (texture != NULL)
+ {
+ activate();
+ texture->bind(mIndex);
+ }
+}
+
+void LLTexUnit::unbindTexture(void)
+{
+ activate();
+ glBindTexture(GL_TEXTURE_2D, 0);
+}
+
+void LLTexUnit::setTextureBlendType(eTextureBlendType type)
+{
+ // Do nothing if it's already correctly set.
+ if (mCurrBlendType == type)
+ {
+ return;
+ }
+
+ activate();
+ mCurrBlendType = type;
+ S32 scale_amount = 1;
+ switch (type)
+ {
+ case TB_REPLACE:
+ glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
+ break;
+ case TB_ADD:
+ glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_ADD);
+ break;
+ case TB_MULT:
+ glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ break;
+ case TB_MULT_X2:
+ glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ scale_amount = 2;
+ break;
+ case TB_ALPHA_BLEND:
+ glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
+ break;
+ case TB_COMBINE:
+ glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
+ break;
+ default:
+ llerrs << "Unknown Texture Blend Type: " << type << llendl;
+ break;
+ }
+ setColorScale(scale_amount);
+ setAlphaScale(1);
+}
+
+GLint LLTexUnit::getTextureSource(eTextureBlendSrc src)
+{
+ switch(src)
+ {
+ // All four cases should return the same value.
+ case TBS_PREV_COLOR:
+ case TBS_PREV_ALPHA:
+ case TBS_ONE_MINUS_PREV_COLOR:
+ case TBS_ONE_MINUS_PREV_ALPHA:
+ return GL_PREVIOUS_ARB;
+
+ // All four cases should return the same value.
+ case TBS_TEX_COLOR:
+ case TBS_TEX_ALPHA:
+ case TBS_ONE_MINUS_TEX_COLOR:
+ case TBS_ONE_MINUS_TEX_ALPHA:
+ return GL_TEXTURE;
+
+ // All four cases should return the same value.
+ case TBS_VERT_COLOR:
+ case TBS_VERT_ALPHA:
+ case TBS_ONE_MINUS_VERT_COLOR:
+ case TBS_ONE_MINUS_VERT_ALPHA:
+ return GL_PRIMARY_COLOR_ARB;
+
+ // All four cases should return the same value.
+ case TBS_CONST_COLOR:
+ case TBS_CONST_ALPHA:
+ case TBS_ONE_MINUS_CONST_COLOR:
+ case TBS_ONE_MINUS_CONST_ALPHA:
+ return GL_CONSTANT_ARB;
+
+ default:
+ llwarns << "Unknown eTextureBlendSrc: " << src << ". Using Vertex Color instead." << llendl;
+ return GL_PRIMARY_COLOR_ARB;
+ }
+}
+
+GLint LLTexUnit::getTextureSourceType(eTextureBlendSrc src, bool isAlpha)
+{
+ switch(src)
+ {
+ // All four cases should return the same value.
+ case TBS_PREV_COLOR:
+ case TBS_TEX_COLOR:
+ case TBS_VERT_COLOR:
+ case TBS_CONST_COLOR:
+ return (isAlpha) ? GL_SRC_ALPHA: GL_SRC_COLOR;
+
+ // All four cases should return the same value.
+ case TBS_PREV_ALPHA:
+ case TBS_TEX_ALPHA:
+ case TBS_VERT_ALPHA:
+ case TBS_CONST_ALPHA:
+ return GL_SRC_ALPHA;
+
+ // All four cases should return the same value.
+ case TBS_ONE_MINUS_PREV_COLOR:
+ case TBS_ONE_MINUS_TEX_COLOR:
+ case TBS_ONE_MINUS_VERT_COLOR:
+ case TBS_ONE_MINUS_CONST_COLOR:
+ return (isAlpha) ? GL_ONE_MINUS_SRC_ALPHA : GL_ONE_MINUS_SRC_COLOR;
+
+ // All four cases should return the same value.
+ case TBS_ONE_MINUS_PREV_ALPHA:
+ case TBS_ONE_MINUS_TEX_ALPHA:
+ case TBS_ONE_MINUS_VERT_ALPHA:
+ case TBS_ONE_MINUS_CONST_ALPHA:
+ return GL_ONE_MINUS_SRC_ALPHA;
+
+ default:
+ llwarns << "Unknown eTextureBlendSrc: " << src << ". Using Source Color or Alpha instead." << llendl;
+ return (isAlpha) ? GL_SRC_ALPHA: GL_SRC_COLOR;
+ }
+}
+
+void LLTexUnit::setTextureCombiner(eTextureBlendOp op, eTextureBlendSrc src1, eTextureBlendSrc src2, bool isAlpha)
+{
+ activate();
+ if (mCurrBlendType != TB_COMBINE)
+ {
+ mCurrBlendType = TB_COMBINE;
+ glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
+ }
+
+ // We want an early out, because this function does a LOT of stuff.
+ if ( (isAlpha && (mCurrAlphaOp == op) && (mCurrAlphaSrc1 == src1) && (mCurrAlphaSrc2 == src2) )
+ || (!isAlpha && (mCurrColorOp == op) && (mCurrColorSrc1 == src1) && (mCurrColorSrc2 == src2) ))
+ {
+ return;
+ }
+
+ // Get the gl source enums according to the eTextureBlendSrc sources passed in
+ GLint source1 = getTextureSource(src1);
+ GLint source2 = getTextureSource(src2);
+ // Get the gl operand enums according to the eTextureBlendSrc sources passed in
+ GLint operand1 = getTextureSourceType(src1, isAlpha);
+ GLint operand2 = getTextureSourceType(src2, isAlpha);
+ // Default the scale amount to 1
+ S32 scale_amount = 1;
+ GLenum comb_enum, src0_enum, src1_enum, src2_enum, operand0_enum, operand1_enum, operand2_enum;
+
+ if (isAlpha)
+ {
+ // Set enums to ALPHA ones
+ comb_enum = GL_COMBINE_ALPHA_ARB;
+ src0_enum = GL_SOURCE0_ALPHA_ARB;
+ src1_enum = GL_SOURCE1_ALPHA_ARB;
+ src2_enum = GL_SOURCE2_ALPHA_ARB;
+ operand0_enum = GL_OPERAND0_ALPHA_ARB;
+ operand1_enum = GL_OPERAND1_ALPHA_ARB;
+ operand2_enum = GL_OPERAND2_ALPHA_ARB;
+
+ // cache current combiner
+ mCurrAlphaOp = op;
+ mCurrAlphaSrc1 = src1;
+ mCurrAlphaSrc2 = src2;
+ }
+ else
+ {
+ // Set enums to ALPHA ones
+ comb_enum = GL_COMBINE_RGB_ARB;
+ src0_enum = GL_SOURCE0_RGB_ARB;
+ src1_enum = GL_SOURCE1_RGB_ARB;
+ src2_enum = GL_SOURCE2_RGB_ARB;
+ operand0_enum = GL_OPERAND0_RGB_ARB;
+ operand1_enum = GL_OPERAND1_RGB_ARB;
+ operand2_enum = GL_OPERAND2_RGB_ARB;
+
+ // cache current combiner
+ mCurrColorOp = op;
+ mCurrColorSrc1 = src1;
+ mCurrColorSrc2 = src2;
+ }
+
+ switch(op)
+ {
+ case TBO_REPLACE:
+ // Slightly special syntax (no second sources), just set all and return.
+ glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_REPLACE);
+ glTexEnvi(GL_TEXTURE_ENV, src0_enum, source1);
+ glTexEnvi(GL_TEXTURE_ENV, operand0_enum, operand1);
+ (isAlpha) ? setAlphaScale(1) : setColorScale(1);
+ return;
+
+ case TBO_MULT:
+ glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_MODULATE);
+ break;
+
+ case TBO_MULT_X2:
+ glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_MODULATE);
+ scale_amount = 2;
+ break;
+
+ case TBO_MULT_X4:
+ glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_MODULATE);
+ scale_amount = 4;
+ break;
+
+ case TBO_ADD:
+ glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_ADD);
+ break;
+
+ case TBO_ADD_SIGNED:
+ glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_ADD_SIGNED_ARB);
+ break;
+
+ case TBO_SUBTRACT:
+ glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_SUBTRACT_ARB);
+ break;
+
+ case TBO_LERP_VERT_ALPHA:
+ glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_INTERPOLATE);
+ glTexEnvi(GL_TEXTURE_ENV, src2_enum, GL_PRIMARY_COLOR_ARB);
+ glTexEnvi(GL_TEXTURE_ENV, operand2_enum, GL_SRC_ALPHA);
+ break;
+
+ case TBO_LERP_TEX_ALPHA:
+ glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_INTERPOLATE);
+ glTexEnvi(GL_TEXTURE_ENV, src2_enum, GL_TEXTURE);
+ glTexEnvi(GL_TEXTURE_ENV, operand2_enum, GL_SRC_ALPHA);
+ break;
+
+ case TBO_LERP_PREV_ALPHA:
+ glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_INTERPOLATE);
+ glTexEnvi(GL_TEXTURE_ENV, src2_enum, GL_PREVIOUS_ARB);
+ glTexEnvi(GL_TEXTURE_ENV, operand2_enum, GL_SRC_ALPHA);
+ break;
+
+ case TBO_LERP_CONST_ALPHA:
+ glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_INTERPOLATE);
+ glTexEnvi(GL_TEXTURE_ENV, src2_enum, GL_CONSTANT_ARB);
+ glTexEnvi(GL_TEXTURE_ENV, operand2_enum, GL_SRC_ALPHA);
+ break;
+
+ case TBO_LERP_VERT_COLOR:
+ glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_INTERPOLATE);
+ glTexEnvi(GL_TEXTURE_ENV, src2_enum, GL_PRIMARY_COLOR_ARB);
+ glTexEnvi(GL_TEXTURE_ENV, operand2_enum, (isAlpha) ? GL_SRC_ALPHA : GL_SRC_COLOR);
+ break;
+
+ default:
+ llwarns << "Unknown eTextureBlendOp: " << op << ". Setting op to replace." << llendl;
+ // Slightly special syntax (no second sources), just set all and return.
+ glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_REPLACE);
+ glTexEnvi(GL_TEXTURE_ENV, src0_enum, source1);
+ glTexEnvi(GL_TEXTURE_ENV, operand0_enum, operand1);
+ (isAlpha) ? setAlphaScale(1) : setColorScale(1);
+ return;
+ }
+
+ // Set sources, operands, and scale accordingly
+ glTexEnvi(GL_TEXTURE_ENV, src0_enum, source1);
+ glTexEnvi(GL_TEXTURE_ENV, operand0_enum, operand1);
+ glTexEnvi(GL_TEXTURE_ENV, src1_enum, source2);
+ glTexEnvi(GL_TEXTURE_ENV, operand1_enum, operand2);
+ (isAlpha) ? setAlphaScale(scale_amount) : setColorScale(scale_amount);
+}
+
+void LLTexUnit::setColorScale(S32 scale)
+{
+ if (mCurrColorScale != scale)
+ {
+ mCurrColorScale = scale;
+ glTexEnvi( GL_TEXTURE_ENV, GL_RGB_SCALE, scale );
+ }
+}
+
+void LLTexUnit::setAlphaScale(S32 scale)
+{
+ if (mCurrAlphaScale != scale)
+ {
+ mCurrAlphaScale = scale;
+ glTexEnvi( GL_TEXTURE_ENV, GL_ALPHA_SCALE, scale );
+ }
+}
+
+LLRender::LLRender()
+{
+ mCount = 0;
+ mMode = LLVertexBuffer::TRIANGLES;
+ mBuffer = new LLVertexBuffer(immediate_mask, 0);
+ mBuffer->allocateBuffer(4096, 0, TRUE);
+ mBuffer->getVertexStrider(mVerticesp);
+ mBuffer->getTexCoordStrider(mTexcoordsp);
+ mBuffer->getColorStrider(mColorsp);
+
+ for (unsigned int i = 0; i < LL_NUM_TEXTURE_LAYERS; i++)
+ {
+ mTexUnits.push_back(new LLTexUnit(i));
+ }
+}
+
+LLRender::~LLRender()
+{
+ for (U32 i = 0; i < mTexUnits.size(); i++)
+ {
+ delete mTexUnits[i];
+ }
+}
+
+void LLRender::translatef(const GLfloat& x, const GLfloat& y, const GLfloat& z)
+{
+ flush();
+ glTranslatef(x,y,z);
+}
+
+void LLRender::pushMatrix()
+{
+ flush();
+ glPushMatrix();
+}
+
+void LLRender::popMatrix()
+{
+ flush();
+ glPopMatrix();
+}
+
+void LLRender::setColorMask(bool writeColor, bool writeAlpha)
+{
+ setColorMask(writeColor, writeColor, writeColor, writeAlpha);
+}
+
+void LLRender::setColorMask(bool writeColorR, bool writeColorG, bool writeColorB, bool writeAlpha)
+{
+ flush();
+ glColorMask(writeColorR, writeColorG, writeColorB, writeAlpha);
+}
+
+void LLRender::setSceneBlendType(eBlendType type)
+{
+ flush();
+ switch (type)
+ {
+ case BT_ALPHA:
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ break;
+ case BT_ADD:
+ glBlendFunc(GL_ONE, GL_ONE);
+ break;
+ case BT_ADD_WITH_ALPHA:
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE);
+ break;
+ case BT_MULT:
+ glBlendFunc(GL_DST_COLOR, GL_ZERO);
+ break;
+ case BT_MULT_X2:
+ glBlendFunc(GL_DST_COLOR, GL_SRC_COLOR);
+ break;
+ case BT_REPLACE:
+ glBlendFunc(GL_ONE, GL_ZERO);
+ break;
+ default:
+ llerrs << "Unknown Scene Blend Type: " << type << llendl;
+ break;
+ }
+}
+
+void LLRender::setAlphaRejectSettings(eCompareFunc func, F32 value)
+{
+ flush();
+ if (func == CF_DEFAULT)
+ {
+ glAlphaFunc(GL_GREATER, 0.01f);
+ }
+ else
+ {
+ glAlphaFunc(sGLCompareFunc[func], value);
+ }
+}
+
+void LLRender::blendFunc(eBlendFactor sfactor, eBlendFactor dfactor)
+{
+ flush();
+ glBlendFunc(sGLBlendFactor[sfactor], sGLBlendFactor[dfactor]);
+}
+
+LLTexUnit* LLRender::getTexUnit(U32 index)
+{
+ if (index < mTexUnits.size())
+ {
+ return mTexUnits[index];
+ }
+ llerrs << "Non-existing texture unit layer requested: " << index << llendl;
+ return NULL;
+}
+
+void LLRender::begin(const GLuint& mode)
+{
+ if (mode != mMode)
+ {
+ if (mMode == LLVertexBuffer::QUADS ||
+ mMode == LLVertexBuffer::LINES ||
+ mMode == LLVertexBuffer::TRIANGLES ||
+ mMode == LLVertexBuffer::POINTS)
+ {
+ flush();
+ }
+ else if (mCount != 0)
+ {
+ llerrs << "gGL.begin() called redundantly." << llendl;
+ }
+
+ mMode = mode;
+ }
+}
+
+void LLRender::end()
+{
+ if (mCount == 0)
+ {
+ return;
+ //IMM_ERRS << "GL begin and end called with no vertices specified." << llendl;
+ }
+
+ if ((mMode != LLVertexBuffer::QUADS &&
+ mMode != LLVertexBuffer::LINES &&
+ mMode != LLVertexBuffer::TRIANGLES &&
+ mMode != LLVertexBuffer::POINTS) ||
+ mCount > 2048)
+ {
+ flush();
+ }
+}
+void LLRender::flush()
+{
+ if (mCount > 0)
+ {
+#if 0
+ if (!glIsEnabled(GL_VERTEX_ARRAY))
+ {
+ llerrs << "foo 1" << llendl;
+ }
+
+ if (!glIsEnabled(GL_COLOR_ARRAY))
+ {
+ llerrs << "foo 2" << llendl;
+ }
+
+ if (!glIsEnabled(GL_TEXTURE_COORD_ARRAY))
+ {
+ llerrs << "foo 3" << llendl;
+ }
+
+ if (glIsEnabled(GL_NORMAL_ARRAY))
+ {
+ llerrs << "foo 7" << llendl;
+ }
+
+ GLvoid* pointer;
+
+ glGetPointerv(GL_VERTEX_ARRAY_POINTER, &pointer);
+ if (pointer != &(mBuffer[0].v))
+ {
+ llerrs << "foo 4" << llendl;
+ }
+
+ glGetPointerv(GL_COLOR_ARRAY_POINTER, &pointer);
+ if (pointer != &(mBuffer[0].c))
+ {
+ llerrs << "foo 5" << llendl;
+ }
+
+ glGetPointerv(GL_TEXTURE_COORD_ARRAY_POINTER, &pointer);
+ if (pointer != &(mBuffer[0].uv))
+ {
+ llerrs << "foo 6" << llendl;
+ }
+#endif
+
+ mBuffer->setBuffer(immediate_mask);
+ mBuffer->drawArrays(mMode, 0, mCount);
+
+ mVerticesp[0] = mVerticesp[mCount];
+ mTexcoordsp[0] = mTexcoordsp[mCount];
+ mColorsp[0] = mColorsp[mCount];
+ mCount = 0;
+ }
+}
+void LLRender::vertex3f(const GLfloat& x, const GLfloat& y, const GLfloat& z)
+{
+ if (mCount >= 4096)
+ {
+ // llwarns << "GL immediate mode overflow. Some geometry not drawn." << llendl;
+ return;
+ }
+
+ mVerticesp[mCount] = LLVector3(x,y,z);
+ mCount++;
+ if (mCount < 4096)
+ {
+ mVerticesp[mCount] = mVerticesp[mCount-1];
+ mColorsp[mCount] = mColorsp[mCount-1];
+ mTexcoordsp[mCount] = mTexcoordsp[mCount-1];
+ }
+}
+void LLRender::vertex2i(const GLint& x, const GLint& y)
+{
+ vertex3f((GLfloat) x, (GLfloat) y, 0);
+}
+
+void LLRender::vertex2f(const GLfloat& x, const GLfloat& y)
+{
+ vertex3f(x,y,0);
+}
+
+void LLRender::vertex2fv(const GLfloat* v)
+{
+ vertex3f(v[0], v[1], 0);
+}
+
+void LLRender::vertex3fv(const GLfloat* v)
+{
+ vertex3f(v[0], v[1], v[2]);
+}
+
+void LLRender::texCoord2f(const GLfloat& x, const GLfloat& y)
+{
+ mTexcoordsp[mCount] = LLVector2(x,y);
+}
+
+void LLRender::texCoord2i(const GLint& x, const GLint& y)
+{
+ texCoord2f((GLfloat) x, (GLfloat) y);
+}
+
+void LLRender::texCoord2fv(const GLfloat* tc)
+{
+ texCoord2f(tc[0], tc[1]);
+}
+
+void LLRender::color4ub(const GLubyte& r, const GLubyte& g, const GLubyte& b, const GLubyte& a)
+{
+ mColorsp[mCount] = LLColor4U(r,g,b,a);
+}
+void LLRender::color4ubv(const GLubyte* c)
+{
+ color4ub(c[0], c[1], c[2], c[3]);
+}
+
+void LLRender::color4f(const GLfloat& r, const GLfloat& g, const GLfloat& b, const GLfloat& a)
+{
+ color4ub((GLubyte) (llclamp(r, 0.f, 1.f)*255),
+ (GLubyte) (llclamp(g, 0.f, 1.f)*255),
+ (GLubyte) (llclamp(b, 0.f, 1.f)*255),
+ (GLubyte) (llclamp(a, 0.f, 1.f)*255));
+}
+
+void LLRender::color4fv(const GLfloat* c)
+{
+ color4f(c[0],c[1],c[2],c[3]);
+}
+
+void LLRender::color3f(const GLfloat& r, const GLfloat& g, const GLfloat& b)
+{
+ color4f(r,g,b,1);
+}
+
+void LLRender::color3fv(const GLfloat* c)
+{
+ color4f(c[0],c[1],c[2],1);
+}
+
diff --git a/indra/llrender/llrender.h b/indra/llrender/llrender.h
new file mode 100644
index 0000000000..2fa3237ef9
--- /dev/null
+++ b/indra/llrender/llrender.h
@@ -0,0 +1,239 @@
+/**
+ * @file llrender.h
+ * @brief LLRender definition
+ *
+ * This class acts as a wrapper for OpenGL calls.
+ * The goal of this class is to minimize the number of api calls due to legacy rendering
+ * code, to define an interface for a multiple rendering API abstraction of the UI
+ * rendering, and to abstract out direct rendering calls in a way that is cleaner and easier to maintain.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ *
+ * Copyright (c) 2001-2007, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLGLRENDER_H
+#define LL_LLGLRENDER_H
+
+#include "stdtypes.h"
+#include "llgltypes.h"
+#include "llglheaders.h"
+#include "llvertexbuffer.h"
+
+class LLTexUnit
+{
+public:
+ typedef enum
+ {
+ TB_REPLACE = 0,
+ TB_ADD,
+ TB_MULT,
+ TB_MULT_X2,
+ TB_ALPHA_BLEND,
+ TB_COMBINE // Doesn't need to be set directly, setTexture___Blend() set TB_COMBINE automatically
+ } eTextureBlendType;
+
+ typedef enum
+ {
+ TBO_REPLACE = 0, // Use Source 1
+ TBO_MULT, // Multiply: ( Source1 * Source2 )
+ TBO_MULT_X2, // Multiply then scale by 2: ( 2.0 * ( Source1 * Source2 ) )
+ TBO_MULT_X4, // Multiply then scale by 4: ( 4.0 * ( Source1 * Source2 ) )
+ TBO_ADD, // Add: ( Source1 + Source2 )
+ TBO_ADD_SIGNED, // Add then subtract 0.5: ( ( Source1 + Source2 ) - 0.5 )
+ TBO_SUBTRACT, // Subtract Source2 from Source1: ( Source1 - Source2 )
+ TBO_LERP_VERT_ALPHA, // Interpolate based on Vertex Alpha (VA): ( Source1 * VA + Source2 * (1-VA) )
+ TBO_LERP_TEX_ALPHA, // Interpolate based on Texture Alpha (TA): ( Source1 * TA + Source2 * (1-TA) )
+ TBO_LERP_PREV_ALPHA, // Interpolate based on Previous Alpha (PA): ( Source1 * PA + Source2 * (1-PA) )
+ TBO_LERP_CONST_ALPHA, // Interpolate based on Const Alpha (CA): ( Source1 * CA + Source2 * (1-CA) )
+ TBO_LERP_VERT_COLOR // Interpolate based on Vertex Col (VC): ( Source1 * VC + Source2 * (1-VC) )
+ // *Note* TBO_LERP_VERTEX_COLOR only works with setTextureColorBlend(),
+ // and falls back to TBO_LERP_VERTEX_ALPHA for setTextureAlphaBlend().
+ } eTextureBlendOp;
+
+ typedef enum
+ {
+ TBS_PREV_COLOR = 0, // Color from the previous texture stage
+ TBS_PREV_ALPHA,
+ TBS_ONE_MINUS_PREV_COLOR,
+ TBS_ONE_MINUS_PREV_ALPHA,
+ TBS_TEX_COLOR, // Color from the texture bound to this stage
+ TBS_TEX_ALPHA,
+ TBS_ONE_MINUS_TEX_COLOR,
+ TBS_ONE_MINUS_TEX_ALPHA,
+ TBS_VERT_COLOR, // The vertex color currently set
+ TBS_VERT_ALPHA,
+ TBS_ONE_MINUS_VERT_COLOR,
+ TBS_ONE_MINUS_VERT_ALPHA,
+ TBS_CONST_COLOR, // The constant color value currently set
+ TBS_CONST_ALPHA,
+ TBS_ONE_MINUS_CONST_COLOR,
+ TBS_ONE_MINUS_CONST_ALPHA
+ } eTextureBlendSrc;
+
+ LLTexUnit(U32 index);
+ U32 getIndex(void);
+
+ void enable(void);
+ void disable(void);
+ void activate(void);
+
+ void bindTexture(const LLImageGL* texture);
+ void unbindTexture(void);
+
+ void setTextureBlendType(eTextureBlendType type);
+
+ inline void setTextureColorBlend(eTextureBlendOp op, eTextureBlendSrc src1, eTextureBlendSrc src2 = TBS_PREV_COLOR)
+ { setTextureCombiner(op, src1, src2, false); }
+
+ // NOTE: If *_COLOR enums are passed to src1 or src2, the corresponding *_ALPHA enum will be used instead.
+ inline void setTextureAlphaBlend(eTextureBlendOp op, eTextureBlendSrc src1, eTextureBlendSrc src2 = TBS_PREV_ALPHA)
+ { setTextureCombiner(op, src1, src2, true); }
+
+private:
+ U32 mIndex;
+ bool mIsEnabled;
+ eTextureBlendType mCurrBlendType;
+ eTextureBlendOp mCurrColorOp;
+ eTextureBlendSrc mCurrColorSrc1;
+ eTextureBlendSrc mCurrColorSrc2;
+ eTextureBlendOp mCurrAlphaOp;
+ eTextureBlendSrc mCurrAlphaSrc1;
+ eTextureBlendSrc mCurrAlphaSrc2;
+ S32 mCurrColorScale;
+ S32 mCurrAlphaScale;
+
+ void debugTextureUnit(void);
+ void setColorScale(S32 scale);
+ void setAlphaScale(S32 scale);
+ GLint getTextureSource(eTextureBlendSrc src);
+ GLint getTextureSourceType(eTextureBlendSrc src, bool isAlpha = false);
+ void setTextureCombiner(eTextureBlendOp op, eTextureBlendSrc src1, eTextureBlendSrc src2, bool isAlpha = false);
+};
+
+class LLRender
+{
+ friend class LLTexUnit;
+public:
+ typedef enum
+ {
+ CF_NEVER = 0,
+ CF_ALWAYS,
+ CF_LESS,
+ CF_LESS_EQUAL,
+ CF_EQUAL,
+ CF_NOT_EQUAL,
+ CF_GREATER_EQUAL,
+ CF_GREATER,
+ CF_DEFAULT
+ } eCompareFunc;
+
+ typedef enum
+ {
+ BT_ALPHA = 0,
+ BT_ADD,
+ BT_ADD_WITH_ALPHA, // Additive blend modulated by the fragment's alpha.
+ BT_MULT,
+ BT_MULT_X2,
+ BT_REPLACE
+ } eBlendType;
+
+ typedef enum
+ {
+ BF_ONE = 0,
+ BF_ZERO,
+ BF_DEST_COLOR,
+ BF_SOURCE_COLOR,
+ BF_ONE_MINUS_DEST_COLOR,
+ BF_ONE_MINUS_SOURCE_COLOR,
+ BF_DEST_ALPHA,
+ BF_SOURCE_ALPHA,
+ BF_ONE_MINUS_DEST_ALPHA,
+ BF_ONE_MINUS_SOURCE_ALPHA
+ } eBlendFactor;
+
+ LLRender();
+ ~LLRender();
+
+ void translatef(const GLfloat& x, const GLfloat& y, const GLfloat& z);
+ void pushMatrix();
+ void popMatrix();
+
+ void flush();
+
+ void begin(const GLuint& mode);
+ void end();
+ void vertex2i(const GLint& x, const GLint& y);
+ void vertex2f(const GLfloat& x, const GLfloat& y);
+ void vertex3f(const GLfloat& x, const GLfloat& y, const GLfloat& z);
+ void vertex2fv(const GLfloat* v);
+ void vertex3fv(const GLfloat* v);
+
+ void texCoord2i(const GLint& x, const GLint& y);
+ void texCoord2f(const GLfloat& x, const GLfloat& y);
+ void texCoord2fv(const GLfloat* tc);
+
+ void color4ub(const GLubyte& r, const GLubyte& g, const GLubyte& b, const GLubyte& a);
+ void color4f(const GLfloat& r, const GLfloat& g, const GLfloat& b, const GLfloat& a);
+ void color4fv(const GLfloat* c);
+ void color3f(const GLfloat& r, const GLfloat& g, const GLfloat& b);
+ void color3fv(const GLfloat* c);
+ void color4ubv(const GLubyte* c);
+
+ void setColorMask(bool writeColor, bool writeAlpha);
+ void setColorMask(bool writeColorR, bool writeColorG, bool writeColorB, bool writeAlpha);
+ void setSceneBlendType(eBlendType type);
+
+ void setAlphaRejectSettings(eCompareFunc func, F32 value = 0.01f);
+
+ void blendFunc(eBlendFactor sfactor, eBlendFactor dfactor);
+
+ LLTexUnit* getTexUnit(U32 index);
+
+ typedef struct Vertex
+ {
+ GLfloat v[3];
+ GLubyte c[4];
+ GLfloat uv[2];
+ };
+
+public:
+
+private:
+ U32 mCount;
+ U32 mMode;
+ U32 mCurrTextureUnitIndex;
+ LLPointer<LLVertexBuffer> mBuffer;
+ LLStrider<LLVector3> mVerticesp;
+ LLStrider<LLVector2> mTexcoordsp;
+ LLStrider<LLColor4U> mColorsp;
+ std::vector<LLTexUnit*> mTexUnits;
+};
+
+
+
+extern LLRender gGL;
+
+#endif
diff --git a/indra/llrender/llrendertarget.cpp b/indra/llrender/llrendertarget.cpp
index 5111c7ae2d..885ccde2d1 100644
--- a/indra/llrender/llrendertarget.cpp
+++ b/indra/llrender/llrendertarget.cpp
@@ -32,7 +32,7 @@
#include "linden_common.h"
#include "llrendertarget.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "llgl.h"
@@ -181,6 +181,7 @@ void LLRenderTarget::clear()
{
LLGLEnable scissor(GL_SCISSOR_TEST);
glScissor(0, 0, mResX, mResY);
+ stop_glerror();
glClear(mask);
}
}
diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp
index 2f053a6493..d79a0d6034 100644
--- a/indra/llrender/llvertexbuffer.cpp
+++ b/indra/llrender/llvertexbuffer.cpp
@@ -38,7 +38,7 @@
#include "llglheaders.h"
#include "llmemory.h"
#include "llmemtype.h"
-#include "llglimmediate.h"
+#include "llrender.h"
//============================================================================
@@ -768,11 +768,26 @@ U8* LLVertexBuffer::mapBuffer(S32 access)
sMapped = TRUE;*/
if (!mMappedData)
{
+ GLint buff;
+ glGetIntegerv(GL_ARRAY_BUFFER_BINDING_ARB, &buff);
+ if (buff != mGLBuffer)
+ {
+ llerrs << "Invalid GL vertex buffer bound: " << buff << llendl;
+ }
+
+
llerrs << "glMapBuffer returned NULL (no vertex data)" << llendl;
}
if (!mMappedIndexData)
{
+ GLint buff;
+ glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB, &buff);
+ if (buff != mGLIndices)
+ {
+ llerrs << "Invalid GL index buffer bound: " << buff << llendl;
+ }
+
llerrs << "glMapBuffer returned NULL (no index data)" << llendl;
}
@@ -952,6 +967,22 @@ void LLVertexBuffer::setBuffer(U32 data_mask)
sIBOActive = TRUE;
}
+ if (gDebugGL)
+ {
+ GLint buff;
+ glGetIntegerv(GL_ARRAY_BUFFER_BINDING_ARB, &buff);
+ if (buff != mGLBuffer)
+ {
+ llerrs << "Invalid GL vertex buffer bound: " << buff << llendl;
+ }
+
+ glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB, &buff);
+ if (buff != mGLIndices)
+ {
+ llerrs << "Invalid GL index buffer bound: " << buff << llendl;
+ }
+ }
+
if (mResized)
{
if (gDebugGL)
diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp
index 4fa2a3de92..b8cf8f7984 100644
--- a/indra/llui/llbutton.cpp
+++ b/indra/llui/llbutton.cpp
@@ -45,7 +45,7 @@
#include "llcriticaldamp.h"
#include "llfocusmgr.h"
#include "llwindow.h"
-#include "llglimmediate.h"
+#include "llrender.h"
static LLRegisterWidget<LLButton> r("button");
@@ -571,9 +571,9 @@ void LLButton::draw()
mImagep->draw(getLocalRect(), getEnabled() ? mImageColor : mDisabledImageColor );
if (mCurGlowStrength > 0.01f)
{
- glBlendFunc(GL_SRC_ALPHA, GL_ONE);
+ gGL.setSceneBlendType(LLRender::BT_ADD_WITH_ALPHA);
mImagep->drawSolid(0, 0, getRect().getWidth(), getRect().getHeight(), LLColor4(1.f, 1.f, 1.f, mCurGlowStrength));
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ gGL.setSceneBlendType(LLRender::BT_ALPHA);
}
}
else
@@ -581,9 +581,9 @@ void LLButton::draw()
mImagep->draw(0, 0, getEnabled() ? mImageColor : mDisabledImageColor );
if (mCurGlowStrength > 0.01f)
{
- glBlendFunc(GL_SRC_ALPHA, GL_ONE);
+ gGL.setSceneBlendType(LLRender::BT_ADD_WITH_ALPHA);
mImagep->drawSolid(0, 0, LLColor4(1.f, 1.f, 1.f, mCurGlowStrength));
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ gGL.setSceneBlendType(LLRender::BT_ALPHA);
}
}
}
diff --git a/indra/llui/llcombobox.cpp b/indra/llui/llcombobox.cpp
index 538641d060..98a79fa650 100644
--- a/indra/llui/llcombobox.cpp
+++ b/indra/llui/llcombobox.cpp
@@ -783,8 +783,18 @@ BOOL LLComboBox::handleKeyHere(KEY key, MASK mask)
mList->highlightNthItem(mList->getItemIndex(last_selected_item));
}
result = mList->handleKeyHere(key, mask);
+
+ // will only see return key if it is originating from line editor
+ // since the dropdown button eats the key
+ if (key == KEY_RETURN)
+ {
+ // don't show list and don't eat key input when committing
+ // free-form text entry with RETURN since user already knows
+ // what they are trying to select
+ return FALSE;
+ }
// if selection has changed, pop open list
- if (mList->getLastSelectedItem() != last_selected_item)
+ else if (mList->getLastSelectedItem() != last_selected_item)
{
showList();
}
diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp
index c2b2e08755..62b86a6ad7 100644
--- a/indra/llui/llmenugl.cpp
+++ b/indra/llui/llmenugl.cpp
@@ -46,7 +46,7 @@
#include "llmenugl.h"
#include "llmath.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "llfocusmgr.h"
#include "llfont.h"
#include "llcoord.h"
diff --git a/indra/llui/llscrollbar.cpp b/indra/llui/llscrollbar.cpp
index 3536e6bb03..5bc2c5cf85 100644
--- a/indra/llui/llscrollbar.cpp
+++ b/indra/llui/llscrollbar.cpp
@@ -44,7 +44,7 @@
#include "llfocusmgr.h"
#include "llwindow.h"
#include "llcontrol.h"
-#include "llglimmediate.h"
+#include "llrender.h"
LLScrollbar::LLScrollbar(
const LLString& name, LLRect rect,
@@ -518,9 +518,9 @@ void LLScrollbar::draw()
rounded_rect_imagep->draw(mThumbRect, mThumbColor);
if (mCurGlowStrength > 0.01f)
{
- glBlendFunc(GL_SRC_ALPHA, GL_ONE);
+ gGL.setSceneBlendType(LLRender::BT_ADD_WITH_ALPHA);
rounded_rect_imagep->drawSolid(mThumbRect, LLColor4(1.f, 1.f, 1.f, mCurGlowStrength));
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ gGL.setSceneBlendType(LLRender::BT_ALPHA);
}
}
diff --git a/indra/llui/llscrollcontainer.cpp b/indra/llui/llscrollcontainer.cpp
index 72fe2040af..3cb4ecc172 100644
--- a/indra/llui/llscrollcontainer.cpp
+++ b/indra/llui/llscrollcontainer.cpp
@@ -32,7 +32,7 @@
#include "linden_common.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "llscrollcontainer.h"
#include "llscrollbar.h"
#include "llui.h"
diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp
index c923f6b116..b4a2ed874a 100644
--- a/indra/llui/llscrolllistctrl.cpp
+++ b/indra/llui/llscrolllistctrl.cpp
@@ -42,7 +42,7 @@
#include "llcheckboxctrl.h"
#include "llclipboard.h"
#include "llfocusmgr.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "llresmgr.h"
#include "llscrollbar.h"
#include "llstring.h"
@@ -1110,6 +1110,8 @@ BOOL LLScrollListCtrl::selectItemRange( S32 first_index, S32 last_index )
for (item_list::iterator iter = mItemList.begin(); iter != mItemList.end(); iter++)
{
LLScrollListItem *itemp = *iter;
+
+ llassert_always(itemp) ;
if( index >= first_index && index <= last_index )
{
if( itemp->getEnabled() )
diff --git a/indra/llui/llstyle.cpp b/indra/llui/llstyle.cpp
index 336fdfe2c3..38608745c1 100644
--- a/indra/llui/llstyle.cpp
+++ b/indra/llui/llstyle.cpp
@@ -102,7 +102,7 @@ LLStyle &LLStyle::operator=(const LLStyle &rhs)
mItalic = rhs.mItalic;
mBold = rhs.mBold;
mUnderline = rhs.mUnderline;
- mDropShadow = rhs.mUnderline;
+ mDropShadow = rhs.mDropShadow;
mIsEmbeddedItem = rhs.mIsEmbeddedItem;
}
diff --git a/indra/llui/lltabcontainer.cpp b/indra/llui/lltabcontainer.cpp
index fabdbd6860..ccf6e90161 100644
--- a/indra/llui/lltabcontainer.cpp
+++ b/indra/llui/lltabcontainer.cpp
@@ -40,7 +40,7 @@
#include "llcriticaldamp.h"
#include "lluictrlfactory.h"
#include "lltabcontainervertical.h"
-#include "llglimmediate.h"
+#include "llrender.h"
const F32 SCROLL_STEP_TIME = 0.4f;
const F32 SCROLL_DELAY_TIME = 0.5f;
diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp
index 8264f0cf87..06df996088 100644
--- a/indra/llui/lltexteditor.cpp
+++ b/indra/llui/lltexteditor.cpp
@@ -36,7 +36,7 @@
#include "lltexteditor.h"
#include "llfontgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "llui.h"
#include "lluictrlfactory.h"
#include "llrect.h"
diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp
index 1a238ce7fa..6ef485d82c 100644
--- a/indra/llui/llui.cpp
+++ b/indra/llui/llui.cpp
@@ -41,7 +41,7 @@
#include "audioengine.h"
#include "v2math.h"
#include "v4color.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "llrect.h"
#include "llimagegl.h"
#include "lldir.h"
@@ -487,18 +487,8 @@ void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLIma
if (solid_color)
{
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB, GL_PRIMARY_COLOR_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_ARB, GL_SRC_ALPHA);
+ gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
+ gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA);
}
gGL.pushMatrix();
@@ -634,7 +624,7 @@ void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLIma
if (solid_color)
{
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
}
}
diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp
index fa78534a83..a239968e5d 100644
--- a/indra/llui/llview.cpp
+++ b/indra/llui/llview.cpp
@@ -37,7 +37,7 @@
#include <cassert>
#include <boost/tokenizer.hpp>
-#include "llglimmediate.h"
+#include "llrender.h"
#include "llevent.h"
#include "llfontgl.h"
#include "llfocusmgr.h"
diff --git a/indra/llui/llviewborder.cpp b/indra/llui/llviewborder.cpp
index d3559baec6..2148957ce3 100644
--- a/indra/llui/llviewborder.cpp
+++ b/indra/llui/llviewborder.cpp
@@ -30,7 +30,7 @@
#include "linden_common.h"
#include "llviewborder.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "llfocusmgr.h"
static LLRegisterWidget<LLViewBorder> r("view_border");
diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp
index 3ed566062f..e715080916 100644
--- a/indra/llwindow/llwindowwin32.cpp
+++ b/indra/llwindow/llwindowwin32.cpp
@@ -605,8 +605,6 @@ LLWindowWin32::LLWindowWin32(const char *title, const char *name, S32 x, S32 y,
// Initialize (boot strap) the Language text input management,
// based on the system's (or user's) default settings.
allowLanguageTextInput(NULL, FALSE);
-
- SetTimer( mWindowHandle, 0, 1000 / 30, NULL ); // 30 fps timer
}
@@ -1349,6 +1347,8 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO
//make sure multi sampling is disabled by default
glDisable(GL_MULTISAMPLE_ARB);
+ //register joystick timer callback
+ SetTimer( mWindowHandle, 0, 1000 / 30, NULL ); // 30 fps timer
// ok to post quit messages now
mPostQuit = TRUE;
diff --git a/indra/llxml/llcontrol.cpp b/indra/llxml/llcontrol.cpp
index ef6e32a7a0..cb0c4f001a 100644
--- a/indra/llxml/llcontrol.cpp
+++ b/indra/llxml/llcontrol.cpp
@@ -58,36 +58,45 @@
//this defines the current version of the settings file
const S32 CURRENT_VERSION = 101;
-BOOL LLControlVariable::llsd_compare(const LLSD& a, const LLSD & b)
+bool LLControlVariable::llsd_compare(const LLSD& a, const LLSD & b)
{
+ bool result = false;
switch (mType)
{
case TYPE_U32:
case TYPE_S32:
- return a.asInteger() == b.asInteger();
+ result = a.asInteger() == b.asInteger();
+ break;
case TYPE_BOOLEAN:
- return a.asBoolean() == b.asBoolean();
+ result = a.asBoolean() == b.asBoolean();
+ break;
case TYPE_F32:
- return a.asReal() == b.asReal();
+ result = a.asReal() == b.asReal();
+ break;
case TYPE_VEC3:
case TYPE_VEC3D:
- return LLVector3d(a) == LLVector3d(b);
+ result = LLVector3d(a) == LLVector3d(b);
+ break;
case TYPE_RECT:
- return LLRect(a) == LLRect(b);
+ result = LLRect(a) == LLRect(b);
+ break;
case TYPE_COL4:
- return LLColor4(a) == LLColor4(b);
+ result = LLColor4(a) == LLColor4(b);
+ break;
case TYPE_COL3:
- return LLColor3(a) == LLColor3(b);
+ result = LLColor3(a) == LLColor3(b);
+ break;
case TYPE_COL4U:
- return LLColor4U(a) == LLColor4U(b);
+ result = LLColor4U(a) == LLColor4U(b);
+ break;
case TYPE_STRING:
- return a.asString() == b.asString();
+ result = a.asString() == b.asString();
+ break;
default:
- // no-op
break;
}
- return FALSE;
+ return result;
}
LLControlVariable::LLControlVariable(const LLString& name, eControlType type,
@@ -114,14 +123,34 @@ LLControlVariable::~LLControlVariable()
void LLControlVariable::setValue(const LLSD& value, bool saved_value)
{
- bool value_changed = llsd_compare(getValue(), value) == FALSE;
+ // *FIX:MEP - The following is needed to make the LLSD::ImplString
+ // work with boolean controls...
+ LLSD storable_value;
+ if(TYPE_BOOLEAN == type() && value.isString())
+ {
+ BOOL temp;
+ if(LLString::convertToBOOL(value.asString(), temp))
+ {
+ storable_value = temp;
+ }
+ else
+ {
+ storable_value = FALSE;
+ }
+ }
+ else
+ {
+ storable_value = value;
+ }
+
+ bool value_changed = llsd_compare(getValue(), storable_value) == FALSE;
if(saved_value)
{
// If we're going to save this value, return to default but don't fire
resetToDefault(false);
- if (llsd_compare(mValues.back(), value) == FALSE)
+ if (llsd_compare(mValues.back(), storable_value) == FALSE)
{
- mValues.push_back(value);
+ mValues.push_back(storable_value);
}
}
else
@@ -129,7 +158,7 @@ void LLControlVariable::setValue(const LLSD& value, bool saved_value)
// This is a unsaved value. Its needs to reside at
// mValues[2] (or greater). It must not affect
// the result of getSaveValue()
- if (llsd_compare(mValues.back(), value) == FALSE)
+ if (llsd_compare(mValues.back(), storable_value) == FALSE)
{
while(mValues.size() > 2)
{
@@ -144,13 +173,14 @@ void LLControlVariable::setValue(const LLSD& value, bool saved_value)
}
// Add the 'un-save' value.
- mValues.push_back(value);
+ mValues.push_back(storable_value);
}
}
+
if(value_changed)
{
- mSignal(value);
+ mSignal(storable_value);
}
}
@@ -1147,3 +1177,4 @@ void main()
#endif
+
diff --git a/indra/llxml/llcontrol.h b/indra/llxml/llcontrol.h
index 7287731cfa..fdbbe11b91 100644
--- a/indra/llxml/llcontrol.h
+++ b/indra/llxml/llcontrol.h
@@ -127,7 +127,7 @@ public:
{
mSignal(mValues.back());
}
- BOOL llsd_compare(const LLSD& a, const LLSD& b);
+ bool llsd_compare(const LLSD& a, const LLSD& b);
};
//const U32 STRING_CACHE_SIZE = 10000;
diff --git a/indra/newview/English.lproj/InfoPlist.strings b/indra/newview/English.lproj/InfoPlist.strings
index 6012c011c1..7272173fed 100644
--- a/indra/newview/English.lproj/InfoPlist.strings
+++ b/indra/newview/English.lproj/InfoPlist.strings
@@ -1,5 +1,5 @@
/* Localized versions of Info.plist keys */
CFBundleName = "Second Life";
-CFBundleShortVersionString = "Second Life version 1.19.1.84396";
-CFBundleGetInfoString = "Second Life version 1.19.1.84396, Copyright 2004-2008 Linden Research, Inc.";
+CFBundleShortVersionString = "Second Life version 1.20.6.86975";
+CFBundleGetInfoString = "Second Life version 1.20.6.86975, Copyright 2004-2008 Linden Research, Inc.";
diff --git a/indra/newview/Info-SecondLife.plist b/indra/newview/Info-SecondLife.plist
index 62f5ea167d..fa50503545 100644
--- a/indra/newview/Info-SecondLife.plist
+++ b/indra/newview/Info-SecondLife.plist
@@ -32,7 +32,7 @@
</dict>
</array>
<key>CFBundleVersion</key>
- <string>1.19.1.84396</string>
+ <string>1.20.6.86975</string>
<key>CSResourcesFileMapped</key>
<true/>
</dict>
diff --git a/indra/newview/app_settings/cmd_line.xml b/indra/newview/app_settings/cmd_line.xml
index ec12794bc5..746e56d821 100644
--- a/indra/newview/app_settings/cmd_line.xml
+++ b/indra/newview/app_settings/cmd_line.xml
@@ -49,7 +49,7 @@
<key>count</key>
<integer>1</integer>
<key>map-to</key>
- <string>GridChoice</string>
+ <string>CmdLineGridChoice</string>
</map>
<key>loginuri</key>
@@ -61,7 +61,7 @@
<key>compose</key>
<boolean>true</boolean>
<key>map-to</key>
- <string>LoginURI</string>
+ <string>CmdLineLoginURI</string>
</map>
<key>helperuri</key>
@@ -71,7 +71,7 @@
<key>count</key>
<integer>1</integer>
<key>map-to</key>
- <string>HelperURI</string>
+ <string>CmdLineHelperURI</string>
</map>
<key>debugviews</key>
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 165582c0a7..987ae79d59 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -1,3813 +1,4177 @@
+<?xml version="1.0" ?>
<llsd>
+<map>
+ <key>AFKTimeout</key>
<map>
+ <key>Comment</key>
+ <string>Time before automatically setting AFK (away from keyboard) mode (seconds)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>300.0</real>
+ </map>
<key>AdvanceSnapshot</key>
- <map>
- <key>Comment</key>
- <string>Display advanced parameter settings in snaphot interface</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>AFKTimeout</key>
- <map>
- <key>Comment</key>
- <string>Time before automatically setting AFK (away from keyboard) mode (seconds)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>300</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Display advanced parameter settings in snaphot interface</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>AgentChatColor</key>
- <map>
- <key>Comment</key>
- <string>Color of chat messages from other residents</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>1</real>
- <real>1</real>
- <real>1</real>
- <real>1</real>
- </array>
- </map>
- <key>IMChatColor</key>
- <map>
- <key>Comment</key>
- <string>Color of instant messages from other residents</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>1</real>
- <real>1</real>
- <real>1</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color of chat messages from other residents</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>1.0</real>
+ <real>1.0</real>
+ <real>1.0</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>AllowIdleAFK</key>
- <map>
- <key>Comment</key>
- <string>Automatically set AFK (away from keyboard) mode when idle</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Automatically set AFK (away from keyboard) mode when idle</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>AllowMultipleViewers</key>
- <map>
- <key>Comment</key>
- <string>Allow multiple viewers.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Allow multiple viewers.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>AllowTapTapHoldRun</key>
- <map>
- <key>Comment</key>
- <string>Tapping a direction key twice and holding it down makes avatar run</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Tapping a direction key twice and holding it down makes avatar run</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>AnimateTextures</key>
- <map>
- <key>Comment</key>
- <string>Enable texture animation (debug)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enable texture animation (debug)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>AnimationDebug</key>
- <map>
- <key>Comment</key>
- <string>Show active animations in a bubble above avatars head</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Show active animations in a bubble above avatars head</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>AppearanceCameraMovement</key>
- <map>
- <key>Comment</key>
- <string>When entering appearance editing mode, camera zooms in on currently selected portion of avatar</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>When entering appearance editing mode, camera zooms in on currently selected portion of avatar</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>ApplyColorImmediately</key>
- <map>
- <key>Comment</key>
- <string>Preview selections in color picker immediately</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Preview selections in color picker immediately</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>ApplyTextureImmediately</key>
- <map>
- <key>Comment</key>
- <string>Preview selections in texture picker immediately</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Preview selections in texture picker immediately</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>ArrowKeysMoveAvatar</key>
- <map>
- <key>Comment</key>
- <string>While cursor is in chat entry box, arrow keys still control your avatar</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>While cursor is in chat entry box, arrow keys still control your avatar</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>AskedAboutCrashReports</key>
- <map>
- <key>Comment</key>
- <string>Turns off dialog asking if you want to enable crash reporting</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Turns off dialog asking if you want to enable crash reporting</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>AsyncKeyboard</key>
- <map>
- <key>Comment</key>
- <string>Improves responsiveness to keyboard input when at low framerates</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Improves responsiveness to keyboard input when at low framerates</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>AuctionShowFence</key>
- <map>
- <key>Comment</key>
- <string>When auctioning land, include parcel boundary marker in snapshot</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>When auctioning land, include parcel boundary marker in snapshot</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>AudioLevelAmbient</key>
- <map>
- <key>Comment</key>
- <string>Audio level of environment sounds</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.5</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Audio level of environment sounds</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.5</real>
+ </map>
<key>AudioLevelDistance</key>
- <map>
- <key>Comment</key>
- <string>Scale factor for audio engine (multiple of world scale, 2.0 = audio falls off twice as fast)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Scale factor for audio engine (multiple of world scale, 2.0 = audio falls off twice as fast)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
<key>AudioLevelDoppler</key>
- <map>
- <key>Comment</key>
- <string>Scale of doppler effect on moving audio sources (1.0 = normal, &lt;1.0 = diminished doppler effect, &gt;1.0 = enhanced doppler effect)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Scale of doppler effect on moving audio sources (1.0 = normal, &lt;1.0 = diminished doppler effect, &gt;1.0 = enhanced doppler effect)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
<key>AudioLevelMaster</key>
- <map>
- <key>Comment</key>
- <string>Master audio level, or overall volume</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Master audio level, or overall volume</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
<key>AudioLevelMedia</key>
- <map>
- <key>Comment</key>
- <string>Audio level of Quicktime movies</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Audio level of Quicktime movies</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
<key>AudioLevelMic</key>
- <map>
- <key>Comment</key>
- <string>Audio level of microphone input</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Audio level of microphone input</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
<key>AudioLevelMusic</key>
- <map>
- <key>Comment</key>
- <string>Audio level of streaming music</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Audio level of streaming music</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
<key>AudioLevelRolloff</key>
- <map>
- <key>Comment</key>
- <string>Controls the distance-based dropoff of audio volume (fraction or multiple of default audio rolloff)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Controls the distance-based dropoff of audio volume (fraction or multiple of default audio rolloff)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
<key>AudioLevelSFX</key>
- <map>
- <key>Comment</key>
- <string>Audio level of in-world sound effects</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Audio level of in-world sound effects</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
<key>AudioLevelUI</key>
- <map>
- <key>Comment</key>
- <string>Audio level of UI sound effects</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.5</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Audio level of UI sound effects</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.5</real>
+ </map>
<key>AudioLevelVoice</key>
- <map>
- <key>Comment</key>
- <string>Audio level of voice chat</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.5</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Audio level of voice chat</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.5</real>
+ </map>
<key>AudioStreamingMusic</key>
- <map>
- <key>Comment</key>
- <string>Enable streaming audio</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enable streaming audio</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>AudioStreamingVideo</key>
- <map>
- <key>Comment</key>
- <string>Enable streaming video</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enable streaming video</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>AutoAcceptNewInventory</key>
- <map>
- <key>Comment</key>
- <string>Automatically accept new notecards/textures/landmarks</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Automatically accept new notecards/textures/landmarks</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
+ <key>AutoLeveling</key>
+ <map>
+ <key>Comment</key>
+ <string>Keep Flycam level.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>AutoLoadWebProfiles</key>
- <map>
- <key>Comment</key>
- <string>Automatically load ALL profile webpages without asking first.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Automatically load ALL profile webpages without asking first.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>AutoLogin</key>
- <map>
- <key>Comment</key>
- <string>Login automatically using last username/password combination</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Login automatically using last username/password combination</string>
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>AutoMimeDiscovery</key>
- <map>
- <key>Comment</key>
- <string>Enable viewer mime type discovery of media URLs</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enable viewer mime type discovery of media URLs</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>AutoPilotLocksCamera</key>
- <map>
- <key>Comment</key>
- <string>Keep camera position locked when avatar walks to selected position</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Keep camera position locked when avatar walks to selected position</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>AutoSnapshot</key>
- <map>
- <key>Comment</key>
- <string>Update snapshot when camera stops moving, or any parameter changes</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Update snapshot when camera stops moving, or any parameter changes</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>AutomaticFly</key>
- <map>
- <key>Comment</key>
- <string>Fly by holding jump key or using &quot;Fly&quot; command (FALSE = fly by using &quot;Fly&quot; command only)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Fly by holding jump key or using "Fly" command (FALSE = fly by using "Fly" command only)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
+ <key>AvatarAxisDeadZone0</key>
+ <map>
+ <key>Comment</key>
+ <string>Avatar axis 0 dead zone.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.1</real>
+ </map>
+ <key>AvatarAxisDeadZone1</key>
+ <map>
+ <key>Comment</key>
+ <string>Avatar axis 1 dead zone.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.1</real>
+ </map>
+ <key>AvatarAxisDeadZone2</key>
+ <map>
+ <key>Comment</key>
+ <string>Avatar axis 2 dead zone.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.1</real>
+ </map>
+ <key>AvatarAxisDeadZone3</key>
+ <map>
+ <key>Comment</key>
+ <string>Avatar axis 3 dead zone.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.1</real>
+ </map>
+ <key>AvatarAxisDeadZone4</key>
+ <map>
+ <key>Comment</key>
+ <string>Avatar axis 4 dead zone.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.1</real>
+ </map>
+ <key>AvatarAxisDeadZone5</key>
+ <map>
+ <key>Comment</key>
+ <string>Avatar axis 5 dead zone.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.1</real>
+ </map>
+ <key>AvatarAxisScale0</key>
+ <map>
+ <key>Comment</key>
+ <string>Avatar axis 0 scaler.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
+ <key>AvatarAxisScale1</key>
+ <map>
+ <key>Comment</key>
+ <string>Avatar axis 1 scaler.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
+ <key>AvatarAxisScale2</key>
+ <map>
+ <key>Comment</key>
+ <string>Avatar axis 2 scaler.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
+ <key>AvatarAxisScale3</key>
+ <map>
+ <key>Comment</key>
+ <string>Avatar axis 3 scaler.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
+ <key>AvatarAxisScale4</key>
+ <map>
+ <key>Comment</key>
+ <string>Avatar axis 4 scaler.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
+ <key>AvatarAxisScale5</key>
+ <map>
+ <key>Comment</key>
+ <string>Avatar axis 5 scaler.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
<key>AvatarBacklight</key>
- <map>
- <key>Comment</key>
- <string>Add rim lighting to avatar rendering to approximate shininess of skin</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Add rim lighting to avatar rendering to approximate shininess of skin</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>AvatarCompositeLimit</key>
- <map>
- <key>Comment</key>
- <string>Maximum number of avatars to display appearance changes on the fly</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>5</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Maximum number of avatars to display appearance changes on the fly</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>5</integer>
+ </map>
+ <key>AvatarFeathering</key>
+ <map>
+ <key>Comment</key>
+ <string>Avatar feathering (less is softer)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>16.0</real>
+ </map>
<key>AvatarPickerSortOrder</key>
- <map>
- <key>Comment</key>
- <string>Specifies sort key for textures in avatar picker (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>2</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Specifies sort key for textures in avatar picker (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>U32</string>
+ <key>Value</key>
+ <integer>2</integer>
+ </map>
<key>AvatarSex</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>U32</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>BackgroundChatColor</key>
- <map>
- <key>Comment</key>
- <string>Color of chat bubble background</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0</real>
- <real>0</real>
- <real>0</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color of chat bubble background</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>0.0</real>
+ <real>0.0</real>
+ <real>0.0</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>BackgroundYieldTime</key>
- <map>
- <key>Comment</key>
- <string>Amount of time to yield every frame to other applications when SL is not the foreground window (milliseconds)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>40</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Amount of time to yield every frame to other applications when SL is not the foreground window (milliseconds)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>40</integer>
+ </map>
<key>BackwardBtnRect</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>45</integer>
- <integer>29</integer>
- <integer>66</integer>
- <integer>4</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>45</integer>
+ <integer>29</integer>
+ <integer>66</integer>
+ <integer>4</integer>
+ </array>
+ </map>
<key>BasicHelpRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for help window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>404</integer>
- <integer>467</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for help window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>404</integer>
+ <integer>467</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>BeaconAlwaysOn</key>
- <map>
- <key>Comment</key>
- <string>Beacons / highlighting always on</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Beacons / highlighting always on</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>BrowserHomePage</key>
- <map>
- <key>Comment</key>
- <string>[NOT USED]</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>http://www.secondlife.com</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>[NOT USED]</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>http://www.secondlife.com</string>
+ </map>
<key>BrowserProxyAddress</key>
- <map>
- <key>Comment</key>
- <string>Address for the Web Proxy]</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string />
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Address for the Web Proxy]</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string />
+ </map>
<key>BrowserProxyEnabled</key>
- <map>
- <key>Comment</key>
- <string>Use Web Proxy</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Use Web Proxy</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>BrowserProxyExclusions</key>
- <map>
- <key>Comment</key>
- <string>[NOT USED]</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string />
- </map>
+ <map>
+ <key>Comment</key>
+ <string>[NOT USED]</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string />
+ </map>
<key>BrowserProxyPort</key>
- <map>
- <key>Comment</key>
- <string>Port for Web Proxy</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>3128</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Port for Web Proxy</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>3128</integer>
+ </map>
<key>BrowserProxySocks45</key>
- <map>
- <key>Comment</key>
- <string>[NOT USED]</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>5</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>[NOT USED]</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>5</integer>
+ </map>
+ <key>BuildAxisDeadZone0</key>
+ <map>
+ <key>Comment</key>
+ <string>Build axis 0 dead zone.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.1</real>
+ </map>
+ <key>BuildAxisDeadZone1</key>
+ <map>
+ <key>Comment</key>
+ <string>Build axis 1 dead zone.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.1</real>
+ </map>
+ <key>BuildAxisDeadZone2</key>
+ <map>
+ <key>Comment</key>
+ <string>Build axis 2 dead zone.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.1</real>
+ </map>
+ <key>BuildAxisDeadZone3</key>
+ <map>
+ <key>Comment</key>
+ <string>Build axis 3 dead zone.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.1</real>
+ </map>
+ <key>BuildAxisDeadZone4</key>
+ <map>
+ <key>Comment</key>
+ <string>Build axis 4 dead zone.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.1</real>
+ </map>
+ <key>BuildAxisDeadZone5</key>
+ <map>
+ <key>Comment</key>
+ <string>Build axis 5 dead zone.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.1</real>
+ </map>
+ <key>BuildAxisScale0</key>
+ <map>
+ <key>Comment</key>
+ <string>Build axis 0 scaler.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
+ <key>BuildAxisScale1</key>
+ <map>
+ <key>Comment</key>
+ <string>Build axis 1 scaler.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
+ <key>BuildAxisScale2</key>
+ <map>
+ <key>Comment</key>
+ <string>Build axis 2 scaler.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
+ <key>BuildAxisScale3</key>
+ <map>
+ <key>Comment</key>
+ <string>Build axis 3 scaler.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
+ <key>BuildAxisScale4</key>
+ <map>
+ <key>Comment</key>
+ <string>Build axis 4 scaler.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
+ <key>BuildAxisScale5</key>
+ <map>
+ <key>Comment</key>
+ <string>Build axis 5 scaler.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
<key>BuildBtnState</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
+ <key>BuildFeathering</key>
+ <map>
+ <key>Comment</key>
+ <string>Build feathering (less is softer)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>16.0</real>
+ </map>
<key>ButtonFlashCount</key>
- <map>
- <key>Comment</key>
- <string>Number of flashes after which flashing buttons stay lit up</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>3</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Number of flashes after which flashing buttons stay lit up</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>3</integer>
+ </map>
<key>ButtonFlashRate</key>
- <map>
- <key>Comment</key>
- <string>Frequency at which buttons flash (hz)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>2</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Frequency at which buttons flash (hz)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>2.0</real>
+ </map>
<key>ButtonHPad</key>
- <map>
- <key>Comment</key>
- <string>Default horizontal spacing between buttons (pixels)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>10</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Default horizontal spacing between buttons (pixels)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>10</integer>
+ </map>
<key>ButtonHeight</key>
- <map>
- <key>Comment</key>
- <string>Default height for normal buttons (pixels)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>20</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Default height for normal buttons (pixels)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>20</integer>
+ </map>
<key>ButtonHeightSmall</key>
- <map>
- <key>Comment</key>
- <string>Default height for small buttons (pixels)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>16</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Default height for small buttons (pixels)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>16</integer>
+ </map>
<key>ButtonVPad</key>
- <map>
- <key>Comment</key>
- <string>Default vertical spacing between buttons (pixels)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Default vertical spacing between buttons (pixels)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>CacheLocation</key>
- <map>
- <key>Comment</key>
- <string>Controls the location of the local disk cache</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string />
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Controls the location of the local disk cache</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string />
+ </map>
<key>CacheSize</key>
- <map>
- <key>Comment</key>
- <string>Controls amount of hard drive space reserved for local file caching in MB</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>500</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Controls amount of hard drive space reserved for local file caching in MB</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>U32</string>
+ <key>Value</key>
+ <integer>500</integer>
+ </map>
<key>CacheValidateCounter</key>
- <map>
- <key>Comment</key>
- <string>Used to distribute cache validation</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Used to distribute cache validation</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>U32</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
+ <key>CameraMouseWheelZoom</key>
+ <map>
+ <key>Comment</key>
+ <string>Camera zooms in and out with mousewheel</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>CameraOffset</key>
- <map>
- <key>Comment</key>
- <string>Render with camera offset from view frustum (rendering debug)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Render with camera offset from view frustum (rendering debug)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>CameraOffsetBuild</key>
- <map>
- <key>Comment</key>
- <string>Default camera position relative to focus point when entering build mode</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Vector3</string>
- <key>Value</key>
- <array>
- <real>-6</real>
- <real>0</real>
- <real>6</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Default camera position relative to focus point when entering build mode</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Vector3</string>
+ <key>Value</key>
+ <array>
+ <real>-6.0</real>
+ <real>0.0</real>
+ <real>6.0</real>
+ </array>
+ </map>
<key>CameraOffsetDefault</key>
- <map>
- <key>Comment</key>
- <string>Default camera offset from avatar</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Vector3</string>
- <key>Value</key>
- <array>
- <real>-3</real>
- <real>0</real>
- <real>0.75</real>
- </array>
- </map>
- <key>CameraPositionSmoothing</key>
- <map>
- <key>Comment</key>
- <string>Smooths camera position over time</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1.0</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Default camera offset from avatar</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Vector3</string>
+ <key>Value</key>
+ <array>
+ <real>-3.0</real>
+ <real>0.0</real>
+ <real>0.75</real>
+ </array>
+ </map>
<key>CameraPosOnLogout</key>
- <map>
- <key>Comment</key>
- <string>Camera position when last logged out (global coordinates)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Vector3D</string>
- <key>Value</key>
- <array>
- <real>0</real>
- <real>0</real>
- <real>0</real>
- </array>
- </map>
- <key>CameraMouseWheelZoom</key>
- <map>
- <key>Comment</key>
- <string>Camera zooms in and out with mousewheel</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Camera position when last logged out (global coordinates)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Vector3D</string>
+ <key>Value</key>
+ <array>
+ <real>0.0</real>
+ <real>0.0</real>
+ <real>0.0</real>
+ </array>
+ </map>
+ <key>CameraPositionSmoothing</key>
+ <map>
+ <key>Comment</key>
+ <string>Smooths camera position over time</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
<key>ChatBarStealsFocus</key>
- <map>
- <key>Comment</key>
- <string>Whenever keyboard focus is removed from the UI, and the chat bar is visible, the chat bar takes focus</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Whenever keyboard focus is removed from the UI, and the chat bar is visible, the chat bar takes focus</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>ChatBubbleOpacity</key>
- <map>
- <key>Comment</key>
- <string>Opacity of chat bubble background (0.0 = completely transparent, 1.0 = completely opaque)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.5</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Opacity of chat bubble background (0.0 = completely transparent, 1.0 = completely opaque)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.5</real>
+ </map>
<key>ChatFontSize</key>
- <map>
- <key>Comment</key>
- <string>Size of chat text in chat console (0 = small, 1 = big)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Size of chat text in chat console (0 = small, 1 = big)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>ChatFullWidth</key>
- <map>
- <key>Comment</key>
- <string>Chat console takes up full width of SL window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Chat console takes up full width of SL window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>ChatHistoryTornOff</key>
- <map>
- <key>Comment</key>
- <string>Show chat history window separately from Communicate window.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Show chat history window separately from Communicate window.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ChatOnlineNotification</key>
- <map>
- <key>Comment</key>
- <string>Provide notifications for when friend log on and off of SL</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Provide notifications for when friend log on and off of SL</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>ChatPersistTime</key>
- <map>
- <key>Comment</key>
- <string>Time for which chat stays visible in console (seconds)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>15</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Time for which chat stays visible in console (seconds)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>15.0</real>
+ </map>
<key>ChatShowTimestamps</key>
- <map>
- <key>Comment</key>
- <string>Show timestamps in chat</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Show timestamps in chat</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>ChatVisible</key>
- <map>
- <key>Comment</key>
- <string>Chat bar is visible</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Chat bar is visible</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>ChatterboxRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for chatterbox window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>400</integer>
- <integer>350</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for chatterbox window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>400</integer>
+ <integer>350</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>CheesyBeacon</key>
- <map>
- <key>Comment</key>
- <string>Enable cheesy beacon effects</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enable cheesy beacon effects</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ClientSettingsFile</key>
- <map>
- <key>Comment</key>
- <string>Persisted client settings file name (per install).</string>
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string />
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Persisted client settings file name (per install).</string>
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string />
+ </map>
<key>CloseChatOnReturn</key>
- <map>
- <key>Comment</key>
- <string>Close chat after hitting return</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Close chat after hitting return</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>CloseSnapshotOnKeep</key>
- <map>
- <key>Comment</key>
- <string>Close snapshot window after saving snapshot</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Close snapshot window after saving snapshot</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>ClothingBtnState</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>CmdLineDisableVoice</key>
- <map>
- <key>Comment</key>
- <string>Disable Voice.</string>
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Disable Voice.</string>
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
+ <key>CmdLineGridChoice</key>
+ <map>
+ <key>Comment</key>
+ <string>The user's grid choice or ip address.</string>
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string />
+ </map>
+ <key>CmdLineHelperURI</key>
+ <map>
+ <key>Comment</key>
+ <string>Command line specified helper web CGI prefix to use.</string>
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string />
+ </map>
+ <key>CmdLineLoginURI</key>
+ <map>
+ <key>Comment</key>
+ <string>Command line specified login server and CGI prefix to use.</string>
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>LLSD</string>
+ <key>Value</key>
+ <array>
+ <string />
+ </array>
+ </map>
<key>ColorPaletteEntry01</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0</real>
- <real>0</real>
- <real>0</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color picker palette entry</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>0.0</real>
+ <real>0.0</real>
+ <real>0.0</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>ColorPaletteEntry02</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0.5</real>
- <real>0.5</real>
- <real>0.5</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color picker palette entry</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>0.5</real>
+ <real>0.5</real>
+ <real>0.5</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>ColorPaletteEntry03</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0.5</real>
- <real>0</real>
- <real>0</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color picker palette entry</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>0.5</real>
+ <real>0.0</real>
+ <real>0.0</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>ColorPaletteEntry04</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0.5</real>
- <real>0.5</real>
- <real>0</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color picker palette entry</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>0.5</real>
+ <real>0.5</real>
+ <real>0.0</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>ColorPaletteEntry05</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0</real>
- <real>0.5</real>
- <real>0</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color picker palette entry</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>0.0</real>
+ <real>0.5</real>
+ <real>0.0</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>ColorPaletteEntry06</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0</real>
- <real>0.5</real>
- <real>0.5</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color picker palette entry</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>0.0</real>
+ <real>0.5</real>
+ <real>0.5</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>ColorPaletteEntry07</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0</real>
- <real>0</real>
- <real>0.5</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color picker palette entry</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>0.0</real>
+ <real>0.0</real>
+ <real>0.5</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>ColorPaletteEntry08</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0.5</real>
- <real>0</real>
- <real>0.5</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color picker palette entry</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>0.5</real>
+ <real>0.0</real>
+ <real>0.5</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>ColorPaletteEntry09</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0.5</real>
- <real>0.5</real>
- <real>0</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color picker palette entry</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>0.5</real>
+ <real>0.5</real>
+ <real>0.0</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>ColorPaletteEntry10</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0</real>
- <real>0.25</real>
- <real>0.25</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color picker palette entry</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>0.0</real>
+ <real>0.25</real>
+ <real>0.25</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>ColorPaletteEntry11</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0</real>
- <real>0.5</real>
- <real>1</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color picker palette entry</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>0.0</real>
+ <real>0.5</real>
+ <real>1.0</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>ColorPaletteEntry12</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0</real>
- <real>0.25</real>
- <real>0.5</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color picker palette entry</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>0.0</real>
+ <real>0.25</real>
+ <real>0.5</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>ColorPaletteEntry13</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0.5</real>
- <real>0</real>
- <real>1</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color picker palette entry</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>0.5</real>
+ <real>0.0</real>
+ <real>1.0</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>ColorPaletteEntry14</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0.5</real>
- <real>0.25</real>
- <real>0</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color picker palette entry</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>0.5</real>
+ <real>0.25</real>
+ <real>0.0</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>ColorPaletteEntry15</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>1</real>
- <real>1</real>
- <real>1</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color picker palette entry</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>1.0</real>
+ <real>1.0</real>
+ <real>1.0</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>ColorPaletteEntry16</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>1</real>
- <real>1</real>
- <real>1</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color picker palette entry</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>1.0</real>
+ <real>1.0</real>
+ <real>1.0</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>ColorPaletteEntry17</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>1</real>
- <real>1</real>
- <real>1</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color picker palette entry</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>1.0</real>
+ <real>1.0</real>
+ <real>1.0</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>ColorPaletteEntry18</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0.75</real>
- <real>0.75</real>
- <real>0.75</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color picker palette entry</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>0.75</real>
+ <real>0.75</real>
+ <real>0.75</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>ColorPaletteEntry19</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>1</real>
- <real>0</real>
- <real>0</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color picker palette entry</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>1.0</real>
+ <real>0.0</real>
+ <real>0.0</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>ColorPaletteEntry20</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>1</real>
- <real>1</real>
- <real>0</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color picker palette entry</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>1.0</real>
+ <real>1.0</real>
+ <real>0.0</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>ColorPaletteEntry21</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0</real>
- <real>1</real>
- <real>0</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color picker palette entry</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>0.0</real>
+ <real>1.0</real>
+ <real>0.0</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>ColorPaletteEntry22</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0</real>
- <real>1</real>
- <real>1</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color picker palette entry</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>0.0</real>
+ <real>1.0</real>
+ <real>1.0</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>ColorPaletteEntry23</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0</real>
- <real>0</real>
- <real>1</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color picker palette entry</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>0.0</real>
+ <real>0.0</real>
+ <real>1.0</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>ColorPaletteEntry24</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>1</real>
- <real>0</real>
- <real>1</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color picker palette entry</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>1.0</real>
+ <real>0.0</real>
+ <real>1.0</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>ColorPaletteEntry25</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>1</real>
- <real>1</real>
- <real>0.5</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color picker palette entry</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>1.0</real>
+ <real>1.0</real>
+ <real>0.5</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>ColorPaletteEntry26</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0</real>
- <real>1</real>
- <real>0.5</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color picker palette entry</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>0.0</real>
+ <real>1.0</real>
+ <real>0.5</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>ColorPaletteEntry27</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0.5</real>
- <real>1</real>
- <real>1</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color picker palette entry</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>0.5</real>
+ <real>1.0</real>
+ <real>1.0</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>ColorPaletteEntry28</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0.5</real>
- <real>0.5</real>
- <real>1</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color picker palette entry</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>0.5</real>
+ <real>0.5</real>
+ <real>1.0</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>ColorPaletteEntry29</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>1</real>
- <real>0</real>
- <real>0.5</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color picker palette entry</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>1.0</real>
+ <real>0.0</real>
+ <real>0.5</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>ColorPaletteEntry30</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>1</real>
- <real>0.5</real>
- <real>0</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color picker palette entry</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>1.0</real>
+ <real>0.5</real>
+ <real>0.0</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>ColorPaletteEntry31</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>1</real>
- <real>1</real>
- <real>1</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color picker palette entry</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>1.0</real>
+ <real>1.0</real>
+ <real>1.0</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>ColorPaletteEntry32</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>1</real>
- <real>1</real>
- <real>1</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color picker palette entry</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>1.0</real>
+ <real>1.0</real>
+ <real>1.0</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>ColumnHeaderDropDownDelay</key>
- <map>
- <key>Comment</key>
- <string>Time in seconds of mouse click before column header shows sort options list</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.300000011920928955078125</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Time in seconds of mouse click before column header shows sort options list</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.300000011921</real>
+ </map>
<key>CompileOutputRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for script Recompile Everything output window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>400</integer>
- <integer>300</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for script Recompile Everything output window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>400</integer>
+ <integer>300</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>CompressSnapshotsToDisk</key>
- <map>
- <key>Comment</key>
- <string>Compress snapshots saved to disk (Using JPEG 2000)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Compress snapshots saved to disk (Using JPEG 2000)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ConnectAsGod</key>
- <map>
- <key>Comment</key>
- <string>Log in a god if you have god access.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Log in a god if you have god access.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ConnectionPort</key>
- <map>
- <key>Comment</key>
- <string>Custom connection port number</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>13000</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Custom connection port number</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>U32</string>
+ <key>Value</key>
+ <integer>13000</integer>
+ </map>
<key>ConnectionPortEnabled</key>
- <map>
- <key>Comment</key>
- <string>Use the custom connection port?</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Use the custom connection port?</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ConsoleBackgroundOpacity</key>
- <map>
- <key>Comment</key>
- <string>Opacity of chat console (0.0 = completely transparent, 1.0 = completely opaque)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.4000000059604644775390625</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Opacity of chat console (0.0 = completely transparent, 1.0 = completely opaque)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.40000000596</real>
+ </map>
<key>ConsoleBufferSize</key>
- <map>
- <key>Comment</key>
- <string>Size of chat console history (lines of chat)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>40</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Size of chat console history (lines of chat)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>40</integer>
+ </map>
<key>ConsoleMaxLines</key>
- <map>
- <key>Comment</key>
- <string>Max number of lines of chat text visible in console.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>40</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Max number of lines of chat text visible in console.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>40</integer>
+ </map>
<key>ContactsTornOff</key>
- <map>
- <key>Comment</key>
- <string>Show contacts window separately from Communicate window.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Show contacts window separately from Communicate window.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>CookiesEnabled</key>
- <map>
- <key>Comment</key>
- <string>Accept cookies from Web sites?</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>CrashLogBehavior</key>
- <map>
- <key>Comment</key>
- <string>Controls behavior when viewer (0 = ask before sending crash report, 1 = always send crash report, 2 = never send crash report)</string>
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Accept cookies from Web sites?</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>CreateToolCopyCenters</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>CreateToolCopyRotates</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>CreateToolCopySelection</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>CreateToolKeepSelected</key>
- <map>
- <key>Comment</key>
- <string>After using create tool, keep the create tool active</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>After using create tool, keep the create tool active</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
+ <key>Cursor3D</key>
+ <map>
+ <key>Comment</key>
+ <string>Tread Joystick values as absolute positions (not deltas).</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>CustomServer</key>
- <map>
- <key>Comment</key>
- <string>Specifies IP address or hostname of grid to which you connect</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string />
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Specifies IP address or hostname of grid to which you connect</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string />
+ </map>
<key>DebugBeaconLineWidth</key>
- <map>
- <key>Comment</key>
- <string>Size of lines for Debug Beacons</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Size of lines for Debug Beacons</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>DebugInventoryFilters</key>
- <map>
- <key>Comment</key>
- <string>Turn on debugging display for inventory filtering</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Turn on debugging display for inventory filtering</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>DebugPermissions</key>
- <map>
- <key>Comment</key>
- <string>Log permissions for selected inventory items</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Log permissions for selected inventory items</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>DebugShowColor</key>
- <map>
- <key>Comment</key>
- <string>Show color under cursor</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Show color under cursor</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>DebugShowRenderInfo</key>
- <map>
- <key>Comment</key>
- <string>Show depth buffer contents</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Show depth buffer contents</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>DebugShowTime</key>
- <map>
- <key>Comment</key>
- <string>Show depth buffer contents</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Show depth buffer contents</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>DebugViews</key>
- <map>
- <key>Comment</key>
- <string>Display debugging info for views.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Display debugging info for views.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>DebugWindowProc</key>
- <map>
- <key>Comment</key>
- <string>Log windows messages</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Log windows messages</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>DefaultObjectTexture</key>
- <map>
- <key>Comment</key>
- <string>Texture used as &apos;Default&apos; in texture picker. (UUID texture reference)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>89556747-24cb-43ed-920b-47caed15465f</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Texture used as 'Default' in texture picker. (UUID texture reference)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>89556747-24cb-43ed-920b-47caed15465f</string>
+ </map>
<key>DisableCameraConstraints</key>
- <map>
- <key>Comment</key>
- <string>Disable the normal bounds put on the camera by avatar position</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Disable the normal bounds put on the camera by avatar position</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>DisableRendering</key>
- <map>
- <key>Comment</key>
- <string>Disable GL rendering and GUI (load testing)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Disable GL rendering and GUI (load testing)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>DisableVerticalSync</key>
- <map>
- <key>Comment</key>
- <string>Update frames as fast as possible (FALSE = update frames between display scans)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Update frames as fast as possible (FALSE = update frames between display scans)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>DisplayAvatarAgentTarget</key>
- <map>
- <key>Comment</key>
- <string>Show avatar positioning locators (animation debug)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Show avatar positioning locators (animation debug)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>DisplayChat</key>
- <map>
- <key>Comment</key>
- <string>Display Latest Chat message on LCD</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Display Latest Chat message on LCD</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>DisplayDebug</key>
- <map>
- <key>Comment</key>
- <string>Display Network Information on LCD</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Display Network Information on LCD</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>DisplayDebugConsole</key>
- <map>
- <key>Comment</key>
- <string>Display Console Debug Information on LCD</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Display Console Debug Information on LCD</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>DisplayIM</key>
- <map>
- <key>Comment</key>
- <string>Display Latest IM message on LCD</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Display Latest IM message on LCD</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>DisplayLinden</key>
- <map>
- <key>Comment</key>
- <string>Display Account Information on LCD</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Display Account Information on LCD</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>DisplayRegion</key>
- <map>
- <key>Comment</key>
- <string>Display Location information on LCD</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Display Location information on LCD</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>DisplayTimecode</key>
- <map>
- <key>Comment</key>
- <string>Display timecode on screen</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Display timecode on screen</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>Disregard128DefaultDrawDistance</key>
- <map>
- <key>Comment</key>
- <string>Whether to use the auto default to 128 draw distance</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Whether to use the auto default to 128 draw distance</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
<key>Disregard96DefaultDrawDistance</key>
- <map>
- <key>Comment</key>
- <string>Whether to use the auto default to 96 draw distance</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Whether to use the auto default to 96 draw distance</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
<key>DoubleClickAutoPilot</key>
- <map>
- <key>Comment</key>
- <string>Enable double-click auto pilot</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enable double-click auto pilot</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>DragAndDropToolTipDelay</key>
- <map>
- <key>Comment</key>
- <string>Seconds before displaying tooltip when performing drag and drop operation</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.1000000014901161193847656</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Seconds before displaying tooltip when performing drag and drop operation</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.10000000149</real>
+ </map>
<key>DropShadowButton</key>
- <map>
- <key>Comment</key>
- <string>Drop shadow width for buttons (pixels)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>2</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Drop shadow width for buttons (pixels)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>2</integer>
+ </map>
<key>DropShadowFloater</key>
- <map>
- <key>Comment</key>
- <string>Drop shadow width for floaters (pixels)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>5</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Drop shadow width for floaters (pixels)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>5</integer>
+ </map>
<key>DropShadowSlider</key>
- <map>
- <key>Comment</key>
- <string>Drop shadow width for sliders (pixels)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>3</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Drop shadow width for sliders (pixels)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>3</integer>
+ </map>
<key>DropShadowTooltip</key>
- <map>
- <key>Comment</key>
- <string>Drop shadow width for tooltips (pixels)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>4</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Drop shadow width for tooltips (pixels)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>4</integer>
+ </map>
<key>DynamicCameraStrength</key>
- <map>
- <key>Comment</key>
- <string>Amount camera lags behind avatar motion (0 = none, 30 = avatar velocity)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>2</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Amount camera lags behind avatar motion (0 = none, 30 = avatar velocity)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>2.0</real>
+ </map>
<key>EditCameraMovement</key>
- <map>
- <key>Comment</key>
- <string>When entering build mode, camera moves up above avatar</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>When entering build mode, camera moves up above avatar</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>EditLinkedParts</key>
- <map>
- <key>Comment</key>
- <string>Select individual parts of linked objects</string>
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Select individual parts of linked objects</string>
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>EffectColor</key>
- <map>
- <key>Comment</key>
- <string>Particle effects color</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>1</real>
- <real>1</real>
- <real>1</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Particle effects color</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>1.0</real>
+ <real>1.0</real>
+ <real>1.0</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>EnablePushToTalk</key>
- <map>
- <key>Comment</key>
- <string>Must hold down a key or moouse button when talking into your microphone</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Must hold down a key or moouse button when talking into your microphone</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
+ <key>EnableRippleWater</key>
+ <map>
+ <key>Comment</key>
+ <string>Whether to use ripple water shader or not</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>EnableVoiceChat</key>
- <map>
- <key>Comment</key>
- <string>Enable talking to other residents with a microphone</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enable talking to other residents with a microphone</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>EnergyFromTop</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>20</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>20</integer>
+ </map>
<key>EnergyHeight</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>40</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>40</integer>
+ </map>
<key>EnergyWidth</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>175</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>175</integer>
+ </map>
+ <key>FPSLogFrequency</key>
+ <map>
+ <key>Comment</key>
+ <string>Seconds between display of FPS in log (0 for never)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>60.0</real>
+ </map>
<key>FilterItemsPerFrame</key>
- <map>
- <key>Comment</key>
- <string>Maximum number of inventory items to match against search filter every frame (lower to increase framerate while searching, higher to improve search speed)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>500</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Maximum number of inventory items to match against search filter every frame (lower to increase framerate while searching, higher to improve search speed)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>500</integer>
+ </map>
<key>FindLandArea</key>
- <map>
- <key>Comment</key>
- <string>Enables filtering of land search results by area</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enables filtering of land search results by area</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>FindLandPrice</key>
- <map>
- <key>Comment</key>
- <string>Enables filtering of land search results by price</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enables filtering of land search results by price</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>FindLandType</key>
- <map>
- <key>Comment</key>
- <string>Controls which type of land you are searching for in Find Land interface (&quot;All&quot;, &quot;Auction&quot;, &quot;For Sale&quot;)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>All</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Controls which type of land you are searching for in Find Land interface ("All", "Auction", "For Sale")</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>All</string>
+ </map>
<key>FindPeopleOnline</key>
- <map>
- <key>Comment</key>
- <string>Limits people search to only users who are logged on</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Limits people search to only users who are logged on</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>FindPlacesPictures</key>
- <map>
- <key>Comment</key>
- <string>Display only results of find places that have pictures</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Display only results of find places that have pictures</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>FirstLoginThisInstall</key>
- <map>
- <key>Comment</key>
- <string>Specifies that you have not successfully logged in since you installed the latest update</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Specifies that you have not successfully logged in since you installed the latest update</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>FirstName</key>
- <map>
- <key>Comment</key>
- <string>Login first name</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string />
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Login first name</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string />
+ </map>
<key>FirstPersonAvatarVisible</key>
- <map>
- <key>Comment</key>
- <string>Display avatar and attachments below neck while in mouselook</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Display avatar and attachments below neck while in mouselook</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>FirstPersonBtnState</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>FirstRunThisInstall</key>
- <map>
- <key>Comment</key>
- <string>Specifies that you have not run the viewer since you installed the latest update</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Specifies that you have not run the viewer since you installed the latest update</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>FixedWeather</key>
- <map>
- <key>Comment</key>
- <string>Weather effects do not change over time</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Weather effects do not change over time</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>FloaterAboutRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for About window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>440</integer>
- <integer>470</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for About window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>440</integer>
+ <integer>470</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>FloaterActiveSpeakersRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for active speakers window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>300</integer>
- <integer>250</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterActiveSpeakersSortColumn</key>
- <map>
- <key>Comment</key>
- <string>Column name to sort on</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>speaker_name</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for active speakers window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>300</integer>
+ <integer>250</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>FloaterActiveSpeakersSortAscending</key>
- <map>
- <key>Comment</key>
- <string>Whether to sort up or down</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Whether to sort up or down</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
+ <key>FloaterActiveSpeakersSortColumn</key>
+ <map>
+ <key>Comment</key>
+ <string>Column name to sort on</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>speaker_name</string>
+ </map>
+ <key>FloaterAdvancedSkyRect</key>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for Advanced Sky Editor</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>50</integer>
+ <integer>220</integer>
+ <integer>450</integer>
+ <integer>0</integer>
+ </array>
+ </map>
+ <key>FloaterAdvancedWaterRect</key>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for Advanced Water Editor</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>50</integer>
+ <integer>220</integer>
+ <integer>450</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>FloaterAudioVolumeRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for Audio Volume window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>440</integer>
- <integer>470</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for Audio Volume window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>440</integer>
+ <integer>470</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>FloaterBuildOptionsRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for build options window.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>0</integer>
- <integer>0</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for build options window.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>FloaterBumpRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for Bumps/Hits window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>180</integer>
- <integer>400</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for Bumps/Hits window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>180</integer>
+ <integer>400</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>FloaterBuyContentsRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for Buy Contents window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>250</integer>
- <integer>300</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for Buy Contents window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>250</integer>
+ <integer>300</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>FloaterBuyRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for buy window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>250</integer>
- <integer>300</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for buy window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>250</integer>
+ <integer>300</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>FloaterCameraRect3</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for camera control window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>64</integer>
- <integer>176</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for camera control window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>64</integer>
+ <integer>176</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>FloaterChatRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for chat history</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>172</integer>
- <integer>500</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for chat history</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>172</integer>
+ <integer>500</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>FloaterClothingRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for clothing window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>480</integer>
- <integer>320</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for clothing window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>480</integer>
+ <integer>320</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>FloaterContactsRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for chat history</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>390</integer>
- <integer>395</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for chat history</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>390</integer>
+ <integer>395</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>FloaterCustomizeAppearanceRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for avatar customization window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>540</integer>
- <integer>494</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for avatar customization window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>540</integer>
+ <integer>494</integer>
+ <integer>0</integer>
+ </array>
+ </map>
+ <key>FloaterDayCycleRect</key>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for Day Cycle Editor</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>50</integer>
+ <integer>450</integer>
+ <integer>300</integer>
+ <integer>0</integer>
+ </array>
+ </map>
+ <key>FloaterEnvRect</key>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for Environment Editor</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>50</integer>
+ <integer>150</integer>
+ <integer>650</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>FloaterFindRect2</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for Find window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>570</integer>
- <integer>780</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for Find window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>570</integer>
+ <integer>780</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>FloaterFriendsRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for friends window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>400</integer>
- <integer>250</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for friends window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>400</integer>
+ <integer>250</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>FloaterGestureRect2</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for gestures window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>465</integer>
- <integer>350</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterHtmlRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for HTML window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>100</integer>
- <integer>460</integer>
- <integer>370</integer>
- <integer>100</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for gestures window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>465</integer>
+ <integer>350</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>FloaterHUDRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for HUD Floater window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>282</integer>
- <integer>342</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for HUD Floater window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>282</integer>
+ <integer>342</integer>
+ <integer>0</integer>
+ </array>
+ </map>
+ <key>FloaterHtmlRect</key>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for HTML window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>100</integer>
+ <integer>460</integer>
+ <integer>370</integer>
+ <integer>100</integer>
+ </array>
+ </map>
<key>FloaterIMRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for IM window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>160</integer>
- <integer>500</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for IM window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>160</integer>
+ <integer>500</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>FloaterInspectRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for Object Inspect window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>400</integer>
- <integer>400</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for Object Inspect window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>400</integer>
+ <integer>400</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>FloaterInventoryRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for inventory window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>400</integer>
- <integer>300</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for inventory window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>400</integer>
+ <integer>300</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>FloaterJoystickRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for joystick controls window.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>0</integer>
- <integer>0</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for joystick controls window.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>FloaterLagMeter</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for lag meter</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>142</integer>
- <integer>350</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for lag meter</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>142</integer>
+ <integer>350</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>FloaterLandRect5</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for About Land window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>370</integer>
- <integer>460</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for About Land window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>370</integer>
+ <integer>460</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>FloaterLandmarkRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for landmark picker</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>290</integer>
- <integer>310</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for landmark picker</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>290</integer>
+ <integer>310</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>FloaterMediaRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for media browser window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>16</integer>
- <integer>650</integer>
- <integer>600</integer>
- <integer>128</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for media browser window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>16</integer>
+ <integer>650</integer>
+ <integer>600</integer>
+ <integer>128</integer>
+ </array>
+ </map>
<key>FloaterMiniMapRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for world map</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>225</integer>
- <integer>200</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for world map</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>225</integer>
+ <integer>200</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>FloaterMoveRect2</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for avatar control window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>58</integer>
- <integer>135</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for avatar control window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>58</integer>
+ <integer>135</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>FloaterMuteRect3</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for mute window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>300</integer>
- <integer>300</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for mute window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>300</integer>
+ <integer>300</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>FloaterOpenObjectRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for Open Object window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>350</integer>
- <integer>300</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for Open Object window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>350</integer>
+ <integer>300</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>FloaterPayRectB</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for pay window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>150</integer>
- <integer>400</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for pay window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>150</integer>
+ <integer>400</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>FloaterRegionInfo</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for region info window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>512</integer>
- <integer>480</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for region info window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>512</integer>
+ <integer>480</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>FloaterScriptDebugRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for Script Error/Debug window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>130</integer>
- <integer>450</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for Script Error/Debug window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>130</integer>
+ <integer>450</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>FloaterSnapshotRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for snapshot window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>200</integer>
- <integer>200</integer>
- <integer>400</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for snapshot window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>200</integer>
+ <integer>200</integer>
+ <integer>400</integer>
+ </array>
+ </map>
<key>FloaterViewBottom</key>
- <map>
- <key>Comment</key>
- <string>[DO NOT MODIFY] Controls layout of floating windows within SL window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>-1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>[DO NOT MODIFY] Controls layout of floating windows within SL window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>-1</integer>
+ </map>
<key>FloaterWorldMapRect2</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for world map window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>0</integer>
- <integer>0</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for world map window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>FlyBtnState</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>FlycamAbsolute</key>
- <map>
- <key>Comment</key>
- <string>Treat Flycam values as absolute positions (not deltas).</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>AutoLeveling</key>
- <map>
- <key>Comment</key>
- <string>Keep Flycam level.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>Cursor3D</key>
- <map>
- <key>Comment</key>
- <string>Tread Joystick values as absolute positions (not deltas).</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>ZoomDirect</key>
- <map>
- <key>Comment</key>
- <string>Map Joystick zoom axis directly to camera zoom.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>JoystickInitialized</key>
- <map>
- <key>Comment</key>
- <string>Whether or not a joystick has been detected and initiailized.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string></string>
- </map>
- <key>JoystickEnabled</key>
- <map>
- <key>Comment</key>
- <string>Enables Joystick Input.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>JoystickFlycamEnabled</key>
- <map>
- <key>Comment</key>
- <string>Enables the Joystick to control the flycam.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <string>1</string>
- </map>
- <key>JoystickAvatarEnabled</key>
- <map>
- <key>Comment</key>
- <string>Enables the Joystick to control Avatar movmement.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <string>1</string>
- </map>
- <key>JoystickBuildEnabled</key>
- <map>
- <key>Comment</key>
- <string>Enables the Joystick to move edited objects.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <string>1</string>
- </map>
- <key>JoystickAxis0</key>
- <map>
- <key>Comment</key>
- <string>Flycam hardware axis mapping for internal axis 0 ([0, 5]).</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>JoystickAxis1</key>
- <map>
- <key>Comment</key>
- <string>Flycam hardware axis mapping for internal axis 1 ([0, 5]).</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>JoystickAxis2</key>
- <map>
- <key>Comment</key>
- <string>Flycam hardware axis mapping for internal axis 2 ([0, 5]).</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>2</integer>
- </map>
- <key>JoystickAxis3</key>
- <map>
- <key>Comment</key>
- <string>Flycam hardware axis mapping for internal axis 3 ([0, 5]).</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>4</integer>
- </map>
- <key>JoystickAxis4</key>
- <map>
- <key>Comment</key>
- <string>Flycam hardware axis mapping for internal axis 4 ([0, 5]).</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>3</integer>
- </map>
- <key>JoystickAxis5</key>
- <map>
- <key>Comment</key>
- <string>Flycam hardware axis mapping for internal axis 5 ([0, 5]).</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>5</integer>
- </map>
- <key>JoystickAxis6</key>
- <map>
- <key>Comment</key>
- <string>Flycam hardware axis mapping for internal axis 6 ([0, 5]).</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>-1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Treat Flycam values as absolute positions (not deltas).</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>FlycamAxisDeadZone0</key>
- <map>
- <key>Comment</key>
- <string>Flycam axis 0 dead zone.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.1</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Flycam axis 0 dead zone.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.1</real>
+ </map>
<key>FlycamAxisDeadZone1</key>
- <map>
- <key>Comment</key>
- <string>Flycam axis 1 dead zone.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.1</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Flycam axis 1 dead zone.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.1</real>
+ </map>
<key>FlycamAxisDeadZone2</key>
- <map>
- <key>Comment</key>
- <string>Flycam axis 2 dead zone.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.1</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Flycam axis 2 dead zone.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.1</real>
+ </map>
<key>FlycamAxisDeadZone3</key>
- <map>
- <key>Comment</key>
- <string>Flycam axis 3 dead zone.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.1</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Flycam axis 3 dead zone.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.1</real>
+ </map>
<key>FlycamAxisDeadZone4</key>
- <map>
- <key>Comment</key>
- <string>Flycam axis 4 dead zone.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.1</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Flycam axis 4 dead zone.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.1</real>
+ </map>
<key>FlycamAxisDeadZone5</key>
- <map>
- <key>Comment</key>
- <string>Flycam axis 5 dead zone.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.1</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Flycam axis 5 dead zone.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.1</real>
+ </map>
<key>FlycamAxisDeadZone6</key>
- <map>
- <key>Comment</key>
- <string>Flycam axis 6 dead zone.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.1</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Flycam axis 6 dead zone.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.1</real>
+ </map>
<key>FlycamAxisScale0</key>
- <map>
- <key>Comment</key>
- <string>Flycam axis 0 scaler.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Flycam axis 0 scaler.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
<key>FlycamAxisScale1</key>
- <map>
- <key>Comment</key>
- <string>Flycam axis 1 scaler.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Flycam axis 1 scaler.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
<key>FlycamAxisScale2</key>
- <map>
- <key>Comment</key>
- <string>Flycam axis 2 scaler.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Flycam axis 2 scaler.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
<key>FlycamAxisScale3</key>
- <map>
- <key>Comment</key>
- <string>Flycam axis 3 scaler.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Flycam axis 3 scaler.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
<key>FlycamAxisScale4</key>
- <map>
- <key>Comment</key>
- <string>Flycam axis 4 scaler.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Flycam axis 4 scaler.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
<key>FlycamAxisScale5</key>
- <map>
- <key>Comment</key>
- <string>Flycam axis 5 scaler.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Flycam axis 5 scaler.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
<key>FlycamAxisScale6</key>
- <map>
- <key>Comment</key>
- <string>Flycam axis 6 scaler.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Flycam axis 6 scaler.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
<key>FlycamFeathering</key>
- <map>
- <key>Comment</key>
- <string>Flycam feathering (less is softer)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>16</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Flycam feathering (less is softer)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>16.0</real>
+ </map>
<key>FlycamZoomDirect</key>
- <map>
- <key>Comment</key>
- <string>Map flycam zoom axis directly to camera zoom.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Map flycam zoom axis directly to camera zoom.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>FlyingAtExit</key>
- <map>
- <key>Comment</key>
- <string>Was flying when last logged out, so fly when logging in</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Was flying when last logged out, so fly when logging in</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>FocusOffsetDefault</key>
- <map>
- <key>Comment</key>
- <string>Default focus point offset relative to avatar (x-axis is forward)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Vector3</string>
- <key>Value</key>
- <array>
- <real>1</real>
- <real>0</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Default focus point offset relative to avatar (x-axis is forward)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Vector3</string>
+ <key>Value</key>
+ <array>
+ <real>1.0</real>
+ <real>0.0</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>FocusPosOnLogout</key>
- <map>
- <key>Comment</key>
- <string>Camera focus point when last logged out (global coordinates)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Vector3D</string>
- <key>Value</key>
- <array>
- <real>0</real>
- <real>0</real>
- <real>0</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Camera focus point when last logged out (global coordinates)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Vector3D</string>
+ <key>Value</key>
+ <array>
+ <real>0.0</real>
+ <real>0.0</real>
+ <real>0.0</real>
+ </array>
+ </map>
<key>FolderAutoOpenDelay</key>
- <map>
- <key>Comment</key>
- <string>Seconds before automatically expanding the folder under the mouse when performing inventory drag and drop</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.75</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Seconds before automatically expanding the folder under the mouse when performing inventory drag and drop</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.75</real>
+ </map>
<key>FolderLoadingMessageWaitTime</key>
- <map>
- <key>Comment</key>
- <string>Seconds to wait before showing the LOADING... text in folder views</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.5</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Seconds to wait before showing the LOADING... text in folder views</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.5</real>
+ </map>
<key>FontMonospace</key>
- <map>
- <key>Comment</key>
- <string>Name of monospace font (Truetype file name)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>profontwindows.ttf</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Name of monospace font (Truetype file name)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>profontwindows.ttf</string>
+ </map>
<key>FontSansSerif</key>
- <map>
- <key>Comment</key>
- <string>Name of san-serif font (Truetype file name)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>MtBkLfRg.ttf</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Name of san-serif font (Truetype file name)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>MtBkLfRg.ttf</string>
+ </map>
<key>FontSansSerifBold</key>
- <map>
- <key>Comment</key>
- <string>Name of bold font (Truetype file name)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>MtBdLfRg.ttf</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Name of bold font (Truetype file name)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>MtBdLfRg.ttf</string>
+ </map>
<key>FontSansSerifFallback</key>
- <map>
- <key>Comment</key>
- <string>Name of san-serif font (Truetype file name)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string></string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Name of san-serif font (Truetype file name)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string />
+ </map>
<key>FontSansSerifFallbackScale</key>
- <map>
- <key>Comment</key>
- <string>Scale of fallback font relative to huge font (fraction of huge font size)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Scale of fallback font relative to huge font (fraction of huge font size)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
<key>FontScreenDPI</key>
- <map>
- <key>Comment</key>
- <string>Font resolution, higher is bigger (pixels per inch)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>96</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Font resolution, higher is bigger (pixels per inch)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>96.0</real>
+ </map>
<key>FontSizeHuge</key>
- <map>
- <key>Comment</key>
- <string>Size of huge font (points, or 1/72 of an inch)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>16</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Size of huge font (points, or 1/72 of an inch)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>16.0</real>
+ </map>
<key>FontSizeLarge</key>
- <map>
- <key>Comment</key>
- <string>Size of large font (points, or 1/72 of an inch)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>12</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Size of large font (points, or 1/72 of an inch)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>12.0</real>
+ </map>
<key>FontSizeMedium</key>
- <map>
- <key>Comment</key>
- <string>Size of medium font (points, or 1/72 of an inch)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>10</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Size of medium font (points, or 1/72 of an inch)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>10.0</real>
+ </map>
<key>FontSizeMonospace</key>
- <map>
- <key>Comment</key>
- <string>Size of monospaced font (points, or 1/72 of an inch)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>9</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Size of monospaced font (points, or 1/72 of an inch)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>9.0</real>
+ </map>
<key>FontSizeSmall</key>
- <map>
- <key>Comment</key>
- <string>Size of small font (points, or 1/72 of an inch)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>9</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Size of small font (points, or 1/72 of an inch)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>9.0</real>
+ </map>
<key>ForceShowGrid</key>
- <map>
- <key>Comment</key>
- <string>Always show grid dropdown on login screen</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Always show grid dropdown on login screen</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ForwardBtnRect</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>45</integer>
- <integer>54</integer>
- <integer>66</integer>
- <integer>29</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>45</integer>
+ <integer>54</integer>
+ <integer>66</integer>
+ <integer>29</integer>
+ </array>
+ </map>
<key>FreezeTime</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>FullScreen</key>
- <map>
- <key>Comment</key>
- <string>Run SL in fullscreen mode</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Run SL in fullscreen mode</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>FullScreenAspectRatio</key>
- <map>
- <key>Comment</key>
- <string>Aspect ratio of fullscreen display (width / height)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1.33329999446868896484375</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Aspect ratio of fullscreen display (width / height)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.33329999447</real>
+ </map>
<key>FullScreenAutoDetectAspectRatio</key>
- <map>
- <key>Comment</key>
- <string>Automatically detect proper aspect ratio for fullscreen display</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Automatically detect proper aspect ratio for fullscreen display</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>FullScreenHeight</key>
- <map>
- <key>Comment</key>
- <string>Fullscreen resolution in height</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>768</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Fullscreen resolution in height</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>768</integer>
+ </map>
<key>FullScreenWidth</key>
- <map>
- <key>Comment</key>
- <string>Fullscreen resolution in width</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>1024</integer>
- </map>
- <key>GridChoice</key>
- <map>
- <key>Comment</key>
- <string>The user&apos;s grid choice or ip address.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string />
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Fullscreen resolution in width</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>1024</integer>
+ </map>
<key>GridCrossSections</key>
- <map>
- <key>Comment</key>
- <string>Highlight cross sections of prims with grid manipulation plane.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Highlight cross sections of prims with grid manipulation plane.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>GridDrawSize</key>
- <map>
- <key>Comment</key>
- <string>Visible extent of 2D snap grid (meters)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>12</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Visible extent of 2D snap grid (meters)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>12.0</real>
+ </map>
<key>GridMode</key>
- <map>
- <key>Comment</key>
- <string>Snap grid reference frame (0 = world, 1 = local, 2 = reference object)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Snap grid reference frame (0 = world, 1 = local, 2 = reference object)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>GridOpacity</key>
- <map>
- <key>Comment</key>
- <string>Grid line opacity (0.0 = completely transparent, 1.0 = completely opaque)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.699999988079071044921875</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Grid line opacity (0.0 = completely transparent, 1.0 = completely opaque)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.699999988079</real>
+ </map>
<key>GridResolution</key>
- <map>
- <key>Comment</key>
- <string>Size of single grid step (meters)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.5</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Size of single grid step (meters)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.5</real>
+ </map>
<key>GridSubUnit</key>
- <map>
- <key>Comment</key>
- <string>Display fractional grid steps, relative to grid size</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Display fractional grid steps, relative to grid size</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>GridSubdivision</key>
- <map>
- <key>Comment</key>
- <string>Maximum number of times to divide single snap grid unit when GridSubUnit is true</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>32</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Maximum number of times to divide single snap grid unit when GridSubUnit is true</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>32</integer>
+ </map>
<key>GroupNotifyBoxHeight</key>
- <map>
- <key>Comment</key>
- <string>Height of group notice messages</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>260</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Height of group notice messages</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>260</integer>
+ </map>
<key>GroupNotifyBoxWidth</key>
- <map>
- <key>Comment</key>
- <string>Width of group notice messages</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>400</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Width of group notice messages</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>400</integer>
+ </map>
<key>HTMLLinkColor</key>
- <map>
- <key>Comment</key>
- <string>Color of hyperlinks</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0.60000002384185791015625</real>
- <real>0.60000002384185791015625</real>
- <real>1</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color of hyperlinks</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>0.600000023842</real>
+ <real>0.600000023842</real>
+ <real>1.0</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>HelpHomeURL</key>
- <map>
- <key>Comment</key>
- <string>URL of initial help page</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>help/index.html</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>URL of initial help page</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>help/index.html</string>
+ </map>
<key>HelpLastVisitedURL</key>
- <map>
- <key>Comment</key>
- <string>URL of last help page, will be shown next time help is accessed</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>help/index.html</string>
- </map>
- <key>HelperURI</key>
- <map>
- <key>Comment</key>
- <string>helper web CGI prefix to use</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string />
- </map>
+ <map>
+ <key>Comment</key>
+ <string>URL of last help page, will be shown next time help is accessed</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>help/index.html</string>
+ </map>
<key>HighResSnapshot</key>
- <map>
- <key>Comment</key>
- <string>Double resolution of snapshot from current window resolution</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Double resolution of snapshot from current window resolution</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>HtmlFindRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for HTML find window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>16</integer>
- <integer>650</integer>
- <integer>600</integer>
- <integer>128</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for HTML find window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>16</integer>
+ <integer>650</integer>
+ <integer>600</integer>
+ <integer>128</integer>
+ </array>
+ </map>
<key>HtmlHelpLastPage</key>
- <map>
- <key>Comment</key>
- <string>Last URL visited via help system</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string />
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Last URL visited via help system</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string />
+ </map>
<key>HtmlHelpRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for HTML help window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>16</integer>
- <integer>650</integer>
- <integer>600</integer>
- <integer>128</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for HTML help window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>16</integer>
+ <integer>650</integer>
+ <integer>600</integer>
+ <integer>128</integer>
+ </array>
+ </map>
<key>HtmlReleaseMessage</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for HTML Release Message Floater window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>46</integer>
- <integer>520</integer>
- <integer>400</integer>
- <integer>128</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for HTML Release Message Floater window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>46</integer>
+ <integer>520</integer>
+ <integer>400</integer>
+ <integer>128</integer>
+ </array>
+ </map>
+ <key>IMChatColor</key>
+ <map>
+ <key>Comment</key>
+ <string>Color of instant messages from other residents</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>1.0</real>
+ <real>1.0</real>
+ <real>1.0</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>IMInChatHistory</key>
- <map>
- <key>Comment</key>
- <string>Copy IM into chat history</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Copy IM into chat history</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>IMShowTimestamps</key>
- <map>
- <key>Comment</key>
- <string>Show timestamps in IM</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Show timestamps in IM</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>IgnorePixelDepth</key>
- <map>
- <key>Comment</key>
- <string>Ignore pixel depth settings.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Ignore pixel depth settings.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ImagePipelineUseHTTP</key>
- <map>
- <key>Comment</key>
- <string>If TRUE use HTTP GET to fetch textures from the server</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>If TRUE use HTTP GET to fetch textures from the server</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>InBandwidth</key>
- <map>
- <key>Comment</key>
- <string>Incoming bandwidth throttle (bps)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Incoming bandwidth throttle (bps)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.0</real>
+ </map>
<key>InventoryAutoOpenDelay</key>
- <map>
- <key>Comment</key>
- <string>Seconds before automatically opening inventory when mouse is over inventory button when performing inventory drag and drop</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Seconds before automatically opening inventory when mouse is over inventory button when performing inventory drag and drop</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
<key>InventorySortOrder</key>
- <map>
- <key>Comment</key>
- <string>Specifies sort key for inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>7</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Specifies sort key for inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>U32</string>
+ <key>Value</key>
+ <integer>7</integer>
+ </map>
<key>InvertMouse</key>
- <map>
- <key>Comment</key>
- <string>When in mouselook, moving mouse up looks down and vice verse (FALSE = moving up looks up)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>When in mouselook, moving mouse up looks down and vice verse (FALSE = moving up looks up)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
+ <key>JoystickAvatarEnabled</key>
+ <map>
+ <key>Comment</key>
+ <string>Enables the Joystick to control Avatar movmement.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <string>1</string>
+ </map>
+ <key>JoystickAxis0</key>
+ <map>
+ <key>Comment</key>
+ <string>Flycam hardware axis mapping for internal axis 0 ([0, 5]).</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
+ <key>JoystickAxis1</key>
+ <map>
+ <key>Comment</key>
+ <string>Flycam hardware axis mapping for internal axis 1 ([0, 5]).</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
+ <key>JoystickAxis2</key>
+ <map>
+ <key>Comment</key>
+ <string>Flycam hardware axis mapping for internal axis 2 ([0, 5]).</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>2</integer>
+ </map>
+ <key>JoystickAxis3</key>
+ <map>
+ <key>Comment</key>
+ <string>Flycam hardware axis mapping for internal axis 3 ([0, 5]).</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>4</integer>
+ </map>
+ <key>JoystickAxis4</key>
+ <map>
+ <key>Comment</key>
+ <string>Flycam hardware axis mapping for internal axis 4 ([0, 5]).</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>3</integer>
+ </map>
+ <key>JoystickAxis5</key>
+ <map>
+ <key>Comment</key>
+ <string>Flycam hardware axis mapping for internal axis 5 ([0, 5]).</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>5</integer>
+ </map>
+ <key>JoystickAxis6</key>
+ <map>
+ <key>Comment</key>
+ <string>Flycam hardware axis mapping for internal axis 6 ([0, 5]).</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>-1</integer>
+ </map>
+ <key>JoystickBuildEnabled</key>
+ <map>
+ <key>Comment</key>
+ <string>Enables the Joystick to move edited objects.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <string>1</string>
+ </map>
+ <key>JoystickEnabled</key>
+ <map>
+ <key>Comment</key>
+ <string>Enables Joystick Input.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
+ <key>JoystickFlycamEnabled</key>
+ <map>
+ <key>Comment</key>
+ <string>Enables the Joystick to control the flycam.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <string>1</string>
+ </map>
+ <key>JoystickInitialized</key>
+ <map>
+ <key>Comment</key>
+ <string>Whether or not a joystick has been detected and initiailized.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string />
+ </map>
<key>KeepAspectForSnapshot</key>
- <map>
- <key>Comment</key>
- <string>Use full window when taking snapshot, regardless of requested image size</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Use full window when taking snapshot, regardless of requested image size</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>LCDDestination</key>
- <map>
- <key>Comment</key>
- <string>Which LCD to use</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Which LCD to use</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>LSLHelpRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for LSL help window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>400</integer>
- <integer>400</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for LSL help window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>400</integer>
+ <integer>400</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>LSLHelpURL</key>
- <map>
- <key>Comment</key>
- <string>URL that points to LSL help files, with [LSL_STRING] corresponding to the referenced LSL function or keyword</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>https://wiki.secondlife.com/wiki/[LSL_STRING]</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>URL that points to LSL help files, with [LSL_STRING] corresponding to the referenced LSL function or keyword</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>https://wiki.secondlife.com/wiki/[LSL_STRING]</string>
+ </map>
<key>LagMeterShrunk</key>
- <map>
- <key>Comment</key>
- <string>Last large/small state for lag meter</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Last large/small state for lag meter</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>Language</key>
- <map>
- <key>Comment</key>
- <string>Language specifier (for XUI)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>default</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Language specifier (for XUI)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>default</string>
+ </map>
<key>LanguageIsPublic</key>
<map>
<key>Comment</key>
@@ -3820,269 +4184,269 @@
<integer>1</integer>
</map>
<key>LastFeatureVersion</key>
- <map>
- <key>Comment</key>
- <string>[DO NOT MODIFY] Version number for tracking hardware changes</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>[DO NOT MODIFY] Version number for tracking hardware changes</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>LastFindPanel</key>
- <map>
- <key>Comment</key>
- <string>Controls which find operation appears by default when clicking &quot;Find&quot; button </string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>find_all_panel</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Controls which find operation appears by default when clicking "Find" button </string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>find_all_panel</string>
+ </map>
<key>LastName</key>
- <map>
- <key>Comment</key>
- <string>Login last name</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string />
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Login last name</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string />
+ </map>
<key>LastPrefTab</key>
- <map>
- <key>Comment</key>
- <string>Last selected tab in preferences window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Last selected tab in preferences window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>LastRunVersion</key>
- <map>
- <key>Comment</key>
- <string>Version number of last instance of the viewer that you ran</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>0.0.0</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Version number of last instance of the viewer that you ran</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>0.0.0</string>
+ </map>
<key>LastSnapshotHeight</key>
- <map>
- <key>Comment</key>
- <string>The height of the last snapshot, in px</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>768</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>The height of the last snapshot, in px</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>768</integer>
+ </map>
<key>LastSnapshotType</key>
- <map>
- <key>Comment</key>
- <string>Select this as next type of snapshot to take (0 = postcard, 1 = texture, 2 = local image)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Select this as next type of snapshot to take (0 = postcard, 1 = texture, 2 = local image)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>LastSnapshotWidth</key>
- <map>
- <key>Comment</key>
- <string>The width of the last snapshot, in px</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>1024</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>The width of the last snapshot, in px</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>1024</integer>
+ </map>
<key>LeftClickShowMenu</key>
- <map>
- <key>Comment</key>
- <string>Left click opens pie menu (FALSE = left click touches or grabs object)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Left click opens pie menu (FALSE = left click touches or grabs object)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>LimitDragDistance</key>
- <map>
- <key>Comment</key>
- <string>Limit translation of object via translate tool</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Limit translation of object via translate tool</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>LimitSelectDistance</key>
- <map>
- <key>Comment</key>
- <string>Disallow selection of objects beyond max select distance</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Disallow selection of objects beyond max select distance</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>LipSyncAah</key>
- <map>
- <key>Comment</key>
- <string>Aah (jaw opening) babble loop</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>257998776531013446642343</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Aah (jaw opening) babble loop</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>257998776531013446642343</string>
+ </map>
<key>LipSyncAahPowerTransfer</key>
- <map>
- <key>Comment</key>
- <string>Transfer curve for Voice Interface power to aah lip sync amplitude</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>0000123456789</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Transfer curve for Voice Interface power to aah lip sync amplitude</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>0000123456789</string>
+ </map>
<key>LipSyncEnabled</key>
- <map>
- <key>Comment</key>
- <string>0 disable lip-sync, 1 enable babble loop</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>0 disable lip-sync, 1 enable babble loop</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>LipSyncOoh</key>
- <map>
- <key>Comment</key>
- <string>Ooh (mouth width) babble loop</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>1247898743223344444443200000</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Ooh (mouth width) babble loop</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>1247898743223344444443200000</string>
+ </map>
<key>LipSyncOohAahRate</key>
- <map>
- <key>Comment</key>
- <string>Rate to babble Ooh and Aah (/sec)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>24.0</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rate to babble Ooh and Aah (/sec)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>24.0</real>
+ </map>
<key>LipSyncOohPowerTransfer</key>
- <map>
- <key>Comment</key>
- <string>Transfer curve for Voice Interface power to ooh lip sync amplitude</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>0012345566778899</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Transfer curve for Voice Interface power to ooh lip sync amplitude</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>0012345566778899</string>
+ </map>
<key>LocalCacheVersion</key>
- <map>
- <key>Comment</key>
- <string>Version number of cache</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Version number of cache</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>LogMessages</key>
- <map>
- <key>Comment</key>
- <string>Log network traffic</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Log network traffic</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>LoginAsGod</key>
- <map>
- <key>Comment</key>
- <string>Attempt to login with god powers (Linden accounts only)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Attempt to login with god powers (Linden accounts only)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>LoginLastLocation</key>
- <map>
- <key>Comment</key>
- <string>Login at same location you last logged out</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Login at same location you last logged out</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>LoginPage</key>
- <map>
- <key>Comment</key>
- <string>Login authentication page.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string />
- </map>
- <key>LoginURI</key>
- <map>
- <key>Comment</key>
- <string>login server and CGI prefix to use</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string />
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Login authentication page.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string />
+ </map>
<key>LosslessJ2CUpload</key>
- <map>
- <key>Comment</key>
- <string>Use lossless compression for small image uploads</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Use lossless compression for small image uploads</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
+ <key>MainloopTimeoutDefault</key>
+ <map>
+ <key>Comment</key>
+ <string>Timeout duration for mainloop lock detection, in seconds.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>20.0</real>
+ </map>
<key>MainloopTimeoutDefault</key>
<map>
<key>Comment</key>
@@ -4095,6123 +4459,5760 @@
<real>10.0</real>
</map>
<key>MapOverlayIndex</key>
- <map>
- <key>Comment</key>
- <string>Currently selected world map type</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Currently selected world map type</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>MapScale</key>
- <map>
- <key>Comment</key>
- <string>World map zoom level (pixels per region)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>128</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>World map zoom level (pixels per region)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>128.0</real>
+ </map>
<key>MapShowClassifieds</key>
- <map>
- <key>Comment</key>
- <string>Show locations associated with classified ads on world map</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Show locations associated with classified ads on world map</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>MapShowEvents</key>
- <map>
- <key>Comment</key>
- <string>Show events on world map</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Show events on world map</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>MapShowInfohubs</key>
- <map>
- <key>Comment</key>
- <string>Show infohubs on the world map</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Show infohubs on the world map</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>MapShowLandForSale</key>
- <map>
- <key>Comment</key>
- <string>Show land for sale on world map</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Show land for sale on world map</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>MapShowPeople</key>
- <map>
- <key>Comment</key>
- <string>Show other users on world map</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Show other users on world map</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>MapShowTelehubs</key>
- <map>
- <key>Comment</key>
- <string>Show telehubs on world map</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Show telehubs on world map</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>Marker</key>
- <map>
- <key>Comment</key>
- <string>[NOT USED]</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string />
- </map>
+ <map>
+ <key>Comment</key>
+ <string>[NOT USED]</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string />
+ </map>
<key>MaxDragDistance</key>
- <map>
- <key>Comment</key>
- <string>Maximum allowed translation distance in a single operation of translate tool (meters from start point)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>48</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Maximum allowed translation distance in a single operation of translate tool (meters from start point)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>48.0</real>
+ </map>
<key>MaxSelectDistance</key>
- <map>
- <key>Comment</key>
- <string>Maximum allowed selection distance (meters from avatar)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>64</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Maximum allowed selection distance (meters from avatar)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>64.0</real>
+ </map>
<key>MeanCollisionBump</key>
- <map>
- <key>Comment</key>
- <string>You have experienced an abuse of being bumped by an object or avatar</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>You have experienced an abuse of being bumped by an object or avatar</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>MeanCollisionPhysical</key>
- <map>
- <key>Comment</key>
- <string>You have experienced an abuse from a physical object</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>You have experienced an abuse from a physical object</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>MeanCollisionPushObject</key>
- <map>
- <key>Comment</key>
- <string>You have experienced an abuse of being pushed by a scripted object</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>You have experienced an abuse of being pushed by a scripted object</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>MeanCollisionScripted</key>
- <map>
- <key>Comment</key>
- <string>You have experienced an abuse from a scripted object</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>You have experienced an abuse from a scripted object</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>MeanCollisionSelected</key>
+ <map>
+ <key>Comment</key>
+ <string>You have experienced an abuse of being pushed via a selected object</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
+ <key>MemoryLogFrequency</key>
<map>
<key>Comment</key>
- <string>You have experienced an abuse of being pushed via a selected object</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>MenuAccessKeyTime</key>
- <map>
- <key>Comment</key>
- <string>Time (seconds) in which the menu key must be tapped to move focus to the menu bar</string>
+ <string>Seconds between display of Memory in log (0 for never)</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
- <real>0.25</real>
+ <real>600.0</real>
</map>
+ <key>MenuAccessKeyTime</key>
+ <map>
+ <key>Comment</key>
+ <string>Time (seconds) in which the menu key must be tapped to move focus to the menu bar</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.25</real>
+ </map>
<key>MenuBarHeight</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>18</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>18</integer>
+ </map>
<key>MenuBarWidth</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>410</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>410</integer>
+ </map>
<key>MiniMapRotate</key>
- <map>
- <key>Comment</key>
- <string>Rotate miniature world map to avatar direction</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rotate miniature world map to avatar direction</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>MiniMapScale</key>
- <map>
- <key>Comment</key>
- <string>Miniature world map zoom levle (pixels per region)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>128</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Miniature world map zoom levle (pixels per region)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>128.0</real>
+ </map>
<key>MouseSensitivity</key>
- <map>
- <key>Comment</key>
- <string>Controls responsiveness of mouse when in mouselook mode (fraction or multiple of default mouse sensitivity)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>3</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Controls responsiveness of mouse when in mouselook mode (fraction or multiple of default mouse sensitivity)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>3.0</real>
+ </map>
<key>MouseSmooth</key>
- <map>
- <key>Comment</key>
- <string>Smooths out motion of mouse when in mouselook mode.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Smooths out motion of mouse when in mouselook mode.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>MouseSun</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>MouselookBtnState</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>MoveDownBtnRect</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>91</integer>
- <integer>29</integer>
- <integer>116</integer>
- <integer>4</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>91</integer>
+ <integer>29</integer>
+ <integer>116</integer>
+ <integer>4</integer>
+ </array>
+ </map>
<key>MoveUpBtnRect</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>91</integer>
- <integer>54</integer>
- <integer>116</integer>
- <integer>29</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>91</integer>
+ <integer>54</integer>
+ <integer>116</integer>
+ <integer>29</integer>
+ </array>
+ </map>
<key>MuteAmbient</key>
- <map>
- <key>Comment</key>
- <string>Ambient sound effects, such as wind noise, play at 0 volume</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Ambient sound effects, such as wind noise, play at 0 volume</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>MuteAudio</key>
- <map>
- <key>Comment</key>
- <string>All audio plays at 0 volume (streaming audio still takes up bandwidth, for example)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>All audio plays at 0 volume (streaming audio still takes up bandwidth, for example)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>MuteMedia</key>
- <map>
- <key>Comment</key>
- <string>Media plays at 0 volume (streaming audio still takes up bandwidth)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Media plays at 0 volume (streaming audio still takes up bandwidth)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>MuteMusic</key>
- <map>
- <key>Comment</key>
- <string>Music plays at 0 volume (streaming audio still takes up bandwidth)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Music plays at 0 volume (streaming audio still takes up bandwidth)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>MuteSounds</key>
- <map>
- <key>Comment</key>
- <string>Sound effects play at 0 volume</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Sound effects play at 0 volume</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>MuteUI</key>
- <map>
- <key>Comment</key>
- <string>UI sound effects play at 0 volume</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>UI sound effects play at 0 volume</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>MuteVoice</key>
- <map>
- <key>Comment</key>
- <string>Voice plays at 0 volume (streaming audio still takes up bandwidth)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Voice plays at 0 volume (streaming audio still takes up bandwidth)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>MuteWhenMinimized</key>
- <map>
- <key>Comment</key>
- <string>Mute audio when SL window is minimized</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Mute audio when SL window is minimized</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>NewCacheLocation</key>
- <map>
- <key>Comment</key>
- <string>Change the location of the local disk cache to this</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string />
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Change the location of the local disk cache to this</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string />
+ </map>
<key>NextLoginLocation</key>
- <map>
- <key>Comment</key>
- <string>Location to log into by default.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string />
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Location to log into by default.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string />
+ </map>
<key>NoAudio</key>
- <map>
- <key>Comment</key>
- <string>Disable audio playback.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Disable audio playback.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>NoHardwareProbe</key>
- <map>
- <key>Comment</key>
- <string>Disable hardware probe.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Disable hardware probe.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>NoInventoryLibrary</key>
- <map>
- <key>Comment</key>
- <string>Do not request inventory library.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Do not request inventory library.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>NoPreload</key>
- <map>
- <key>Comment</key>
- <string>Disable sound and image preload.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Disable sound and image preload.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>NoQuickTime</key>
- <map>
- <key>Comment</key>
- <string>Disable quicktime playback.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Disable quicktime playback.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>NoVerifySSLCert</key>
- <map>
- <key>Comment</key>
- <string>Do not verify SSL peers.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Do not verify SSL peers.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>NotecardEditorRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for notecard editor</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>400</integer>
- <integer>400</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for notecard editor</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>400</integer>
+ <integer>400</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>NotifyBoxHeight</key>
- <map>
- <key>Comment</key>
- <string>Height of notification messages</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>200</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Height of notification messages</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>200</integer>
+ </map>
<key>NotifyBoxWidth</key>
- <map>
- <key>Comment</key>
- <string>Width of notification messages</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>350</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Width of notification messages</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>350</integer>
+ </map>
<key>NotifyMoneyChange</key>
- <map>
- <key>Comment</key>
- <string>Pop up notifications for all L$ transactions</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Pop up notifications for all L$ transactions</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>NotifyTipDuration</key>
- <map>
- <key>Comment</key>
- <string>Length of time that notification tips stay on screen (seconds)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>4</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Length of time that notification tips stay on screen (seconds)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>4.0</real>
+ </map>
<key>NumSessions</key>
- <map>
- <key>Comment</key>
- <string>Number of successful logins to Second Life</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Number of successful logins to Second Life</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>NumpadControl</key>
- <map>
- <key>Comment</key>
- <string>How numpad keys control your avatar. 0 = Like the normal arrow keys, 1 = Numpad moves avatar when numlock is off, 2 = Numpad moves avatar regardless of numlock (use this if you have no numlock)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>How numpad keys control your avatar. 0 = Like the normal arrow keys, 1 = Numpad moves avatar when numlock is off, 2 = Numpad moves avatar regardless of numlock (use this if you have no numlock)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ObjectChatColor</key>
- <map>
- <key>Comment</key>
- <string>Color of chat messages from objects</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0.699999988079071044921875</real>
- <real>0.89999997615814208984375</real>
- <real>0.699999988079071044921875</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color of chat messages from objects</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>0.699999988079</real>
+ <real>0.899999976158</real>
+ <real>0.699999988079</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>OpenDebugStatAdvanced</key>
- <map>
- <key>Comment</key>
- <string>Expand advanced performance stats display</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Expand advanced performance stats display</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>OpenDebugStatBasic</key>
- <map>
- <key>Comment</key>
- <string>Expand basic performance stats display</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Expand basic performance stats display</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>OpenDebugStatNet</key>
- <map>
- <key>Comment</key>
- <string>Expand network stats display</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Expand network stats display</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>OpenDebugStatRender</key>
- <map>
- <key>Comment</key>
- <string>Expand render stats display</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Expand render stats display</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>OpenDebugStatSim</key>
- <map>
- <key>Comment</key>
- <string>Expand simulator performance stats display</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Expand simulator performance stats display</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>OutBandwidth</key>
- <map>
- <key>Comment</key>
- <string>Outgoing bandwidth throttle (bps)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Outgoing bandwidth throttle (bps)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.0</real>
+ </map>
<key>OverdrivenColor</key>
- <map>
- <key>Comment</key>
- <string>Color of various indicators when resident is speaking too loud.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>1</real>
- <real>0</real>
- <real>0</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color of various indicators when resident is speaking too loud.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>1.0</real>
+ <real>0.0</real>
+ <real>0.0</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>OverlayTitle</key>
- <map>
- <key>Comment</key>
- <string>Controls watermark text message displayed on screen when &quot;ShowOverlayTitle&quot; is enabled (one word, underscores become spaces)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>Set_via_OverlayTitle_in_settings.xml</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Controls watermark text message displayed on screen when "ShowOverlayTitle" is enabled (one word, underscores become spaces)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>Set_via_OverlayTitle_in_settings.xml</string>
+ </map>
<key>PTTCurrentlyEnabled</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>PacketDropPercentage</key>
- <map>
- <key>Comment</key>
- <string>Percentage of packets dropped by the client.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Percentage of packets dropped by the client.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.0</real>
+ </map>
+ <key>ParcelMediaAutoPlayEnable</key>
+ <map>
+ <key>Comment</key>
+ <string>Auto play parcel media when available</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>PerAccountSettingsFile</key>
- <map>
- <key>Comment</key>
- <string>Persisted client settings file name (per user).</string>
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string />
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Persisted client settings file name (per user).</string>
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string />
+ </map>
<key>PermissionsCautionEnabled</key>
- <map>
- <key>Comment</key>
- <string>When enabled, changes the handling of script permission requests to help avoid accidental granting of certain permissions, such as the debit permission</string>
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>When enabled, changes the handling of script permission requests to help avoid accidental granting of certain permissions, such as the debit permission</string>
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>PermissionsCautionNotifyBoxHeight</key>
- <map>
- <key>Comment</key>
- <string>Height of caution-style notification messages</string>
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>344</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Height of caution-style notification messages</string>
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>344</integer>
+ </map>
<key>PermissionsManagerRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for permissions manager window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>85</integer>
- <integer>300</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for permissions manager window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>85</integer>
+ <integer>300</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>PickerContextOpacity</key>
- <map>
- <key>Comment</key>
- <string>Controls overall opacity of context frustrum connecting color and texture pickers with their swatches</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.3499999940395355224609375</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Controls overall opacity of context frustrum connecting color and texture pickers with their swatches</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.34999999404</real>
+ </map>
<key>PieMenuLineWidth</key>
- <map>
- <key>Comment</key>
- <string>Width of lines in pie menu display (pixels)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>2.5</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Width of lines in pie menu display (pixels)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>2.5</real>
+ </map>
<key>PinTalkViewOpen</key>
- <map>
- <key>Comment</key>
- <string>Stay in IM after hitting return</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Stay in IM after hitting return</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>PingInterpolate</key>
- <map>
- <key>Comment</key>
- <string>Extrapolate object position along velocity vector based on ping delay</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Extrapolate object position along velocity vector based on ping delay</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>PitchFromMousePosition</key>
- <map>
- <key>Comment</key>
- <string>Vertical range over which avatar head tracks mouse position (degrees of head rotation from top of window to bottom)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>90</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Vertical range over which avatar head tracks mouse position (degrees of head rotation from top of window to bottom)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>90.0</real>
+ </map>
<key>PlayTypingAnim</key>
- <map>
- <key>Comment</key>
- <string>Your avatar plays the typing animation whenever you type in the chat bar</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Your avatar plays the typing animation whenever you type in the chat bar</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>PrecachingDelay</key>
- <map>
- <key>Comment</key>
- <string>Delay when logging in to load world before showing it (seconds)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>6</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Delay when logging in to load world before showing it (seconds)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>6.0</real>
+ </map>
<key>PreviewAnimRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for animation preview window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>85</integer>
- <integer>300</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for animation preview window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>85</integer>
+ <integer>300</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>PreviewClassifiedRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for URL preview window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>530</integer>
- <integer>420</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for URL preview window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>530</integer>
+ <integer>420</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>PreviewEventRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for Event preview window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>530</integer>
- <integer>420</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for Event preview window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>530</integer>
+ <integer>420</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>PreviewLandmarkRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for landmark preview window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>90</integer>
- <integer>300</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for landmark preview window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>90</integer>
+ <integer>300</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>PreviewObjectRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for object preview window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>85</integer>
- <integer>300</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for object preview window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>85</integer>
+ <integer>300</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>PreviewScriptRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for script preview window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>550</integer>
- <integer>500</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for script preview window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>550</integer>
+ <integer>500</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>PreviewSoundRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for sound preview window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>85</integer>
- <integer>300</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for sound preview window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>85</integer>
+ <integer>300</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>PreviewTextureRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for texture preview window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>400</integer>
- <integer>400</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for texture preview window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>400</integer>
+ <integer>400</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>PreviewURLRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for URL preview window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>90</integer>
- <integer>300</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for URL preview window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>90</integer>
+ <integer>300</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>PreviewWearableRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for wearable preview window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>85</integer>
- <integer>300</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for wearable preview window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>85</integer>
+ <integer>300</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>ProbeHardwareOnStartup</key>
- <map>
- <key>Comment</key>
- <string>Query current hardware configuration on application startup</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Query current hardware configuration on application startup</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>PropertiesRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for inventory item properties window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>320</integer>
- <integer>350</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for inventory item properties window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>320</integer>
+ <integer>350</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>PurgeCacheOnNextStartup</key>
- <map>
- <key>Comment</key>
- <string>Clear local file cache next time viewer is run</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Clear local file cache next time viewer is run</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>PurgeCacheOnStartup</key>
- <map>
- <key>Comment</key>
- <string>Clear local file cache every time viewer is run</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Clear local file cache every time viewer is run</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>PushToTalkButton</key>
- <map>
- <key>Comment</key>
- <string>Which button or keyboard key is used for push-to-talk</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>MiddleMouse</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Which button or keyboard key is used for push-to-talk</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>MiddleMouse</string>
+ </map>
<key>PushToTalkToggle</key>
- <map>
- <key>Comment</key>
- <string>Should the push-to-talk button behave as a toggle</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Should the push-to-talk button behave as a toggle</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>QAMode</key>
- <map>
- <key>Comment</key>
- <string>Enable Testing Features.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enable Testing Features.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>QuietSnapshotsToDisk</key>
- <map>
- <key>Comment</key>
- <string>Take snapshots to disk without playing animation or sound</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Take snapshots to disk without playing animation or sound</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>QuitAfterSeconds</key>
- <map>
- <key>Comment</key>
- <string>The duration allowed before quitting.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>The duration allowed before quitting.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.0</real>
+ </map>
<key>RadioLandBrushAction</key>
- <map>
- <key>Comment</key>
- <string>Last selected land modification operation (0 = flatten, 1 = raise, 2 = lower, 3 = smooth, 4 = roughen, 5 = revert)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Last selected land modification operation (0 = flatten, 1 = raise, 2 = lower, 3 = smooth, 4 = roughen, 5 = revert)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>RadioLandBrushSize</key>
- <map>
- <key>Comment</key>
- <string>Size of land modification brush (0 = small, 1 = medium, 2 = large)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Size of land modification brush (0 = small, 1 = medium, 2 = large)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>RecentItemsSortOrder</key>
- <map>
- <key>Comment</key>
- <string>Specifies sort key for recent inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Specifies sort key for recent inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>U32</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>RectangleSelectInclusive</key>
- <map>
- <key>Comment</key>
- <string>Select objects that have at least one vertex inside selection rectangle</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Select objects that have at least one vertex inside selection rectangle</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>RegionTextureSize</key>
- <map>
- <key>Comment</key>
- <string>Terrain texture dimensions (power of 2)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>256</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Terrain texture dimensions (power of 2)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>U32</string>
+ <key>Value</key>
+ <integer>256</integer>
+ </map>
<key>RememberPassword</key>
- <map>
- <key>Comment</key>
- <string>Keep password (in encrypted form) for next login</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Keep password (in encrypted form) for next login</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>RenderAnisotropic</key>
- <map>
- <key>Comment</key>
- <string>Render textures using anisotropic filtering</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Render textures using anisotropic filtering</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>RenderAppleUseMultGL</key>
- <map>
- <key>Comment</key>
- <string>Whether we want to use multi-threaded OpenGL on Apple hardware (requires restart of SL).</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Whether we want to use multi-threaded OpenGL on Apple hardware (requires restart of SL).</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>RenderAvatarCloth</key>
- <map>
- <key>Comment</key>
- <string>Controls if avatars use wavy cloth</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Controls if avatars use wavy cloth</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>RenderAvatarLODFactor</key>
- <map>
- <key>Comment</key>
- <string>Controls level of detail of avatars (multiplier for current screen area when calculated level of detail)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.5</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Controls level of detail of avatars (multiplier for current screen area when calculated level of detail)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.5</real>
+ </map>
<key>RenderAvatarMaxVisible</key>
- <map>
- <key>Comment</key>
- <string>Maximum number of avatars to display at any one time</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>35</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Maximum number of avatars to display at any one time</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>35</integer>
+ </map>
<key>RenderAvatarVP</key>
- <map>
- <key>Comment</key>
- <string>Use vertex programs to perform hardware skinning of avatar</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Use vertex programs to perform hardware skinning of avatar</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>RenderBumpmapMinDistanceSquared</key>
- <map>
- <key>Comment</key>
- <string>Maximum distance at which to render bumpmapped primitives (distance in meters, squared)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>100</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Maximum distance at which to render bumpmapped primitives (distance in meters, squared)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>100.0</real>
+ </map>
<key>RenderCubeMap</key>
- <map>
- <key>Comment</key>
- <string>Whether we can render the cube map or not</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Whether we can render the cube map or not</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>RenderCustomSettings</key>
- <map>
- <key>Comment</key>
- <string>Do you want to set the graphics settings yourself</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>RenderDebugGL</key>
- <map>
- <key>Comment</key>
- <string>Enable strict GL debugging.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>RenderDebugPipeline</key>
- <map>
- <key>Comment</key>
- <string>Enable strict pipeline debugging.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Do you want to set the graphics settings yourself</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
+ <key>RenderDebugGL</key>
+ <map>
+ <key>Comment</key>
+ <string>Enable strict GL debugging.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
+ <key>RenderDebugPipeline</key>
+ <map>
+ <key>Comment</key>
+ <string>Enable strict pipeline debugging.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>RenderDebugTextureBind</key>
- <map>
- <key>Comment</key>
- <string>Enable texture bind performance test.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enable texture bind performance test.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
+ <key>RenderDeferred</key>
+ <map>
+ <key>Comment</key>
+ <string>Use deferred rendering pipeline.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>RenderDynamicLOD</key>
- <map>
- <key>Comment</key>
- <string>Dynamically adjust level of detail.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Dynamically adjust level of detail.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>RenderDynamicReflections</key>
- <map>
- <key>Comment</key>
- <string>Generate a dynamic cube map for reflections (objects reflect their environment, experimental).</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Generate a dynamic cube map for reflections (objects reflect their environment, experimental).</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
+ <key>RenderFSAASamples</key>
+ <map>
+ <key>Comment</key>
+ <string>Number of samples to use for FSAA (0 = no AA).</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>U32</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>RenderFarClip</key>
- <map>
- <key>Comment</key>
- <string>Distance of far clip plane from camera (meters)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>256</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Distance of far clip plane from camera (meters)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>256.0</real>
+ </map>
+ <key>RenderFastAlpha</key>
+ <map>
+ <key>Comment</key>
+ <string>Use lossy alpha rendering optimization (opaque/nonexistent small alpha faces).</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>RenderFastUI</key>
- <map>
- <key>Comment</key>
- <string>[NOT USED]</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>[NOT USED]</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>RenderFlexTimeFactor</key>
- <map>
- <key>Comment</key>
- <string>Controls level of detail of flexible objects (multiplier for amount of time spent processing flex objects)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Controls level of detail of flexible objects (multiplier for amount of time spent processing flex objects)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
<key>RenderFogRatio</key>
- <map>
- <key>Comment</key>
- <string>Distance from camera where fog reaches maximum density (fraction or multiple of far clip distance)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>4.0</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Distance from camera where fog reaches maximum density (fraction or multiple of far clip distance)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>4.0</real>
+ </map>
<key>RenderGamma</key>
- <map>
- <key>Comment</key>
- <string>Sets gamma exponent for renderer</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Sets gamma exponent for renderer</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.0</real>
+ </map>
<key>RenderGammaFull</key>
- <map>
- <key>Comment</key>
- <string>Use fully controllable gamma correction, instead of faster, hard-coded gamma correction of 2.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <real>1</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Use fully controllable gamma correction, instead of faster, hard-coded gamma correction of 2.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
<key>RenderGlow</key>
- <map>
- <key>Comment</key>
- <string>Render bloom post effect.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Render bloom post effect.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>RenderGlowIterations</key>
- <map>
- <key>Comment</key>
- <string>Number of times to iterate the glow (higher = wider and smoother but slower)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>2</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Number of times to iterate the glow (higher = wider and smoother but slower)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>2</integer>
+ </map>
<key>RenderGlowLumWeights</key>
- <map>
- <key>Comment</key>
- <string>Weights for each color channel to be used in calculating luminance (should add up to 1.0)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Vector3</string>
- <key>Value</key>
- <array>
- <real>0.299</real>
- <real>0.587</real>
- <real>0.114</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Weights for each color channel to be used in calculating luminance (should add up to 1.0)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Vector3</string>
+ <key>Value</key>
+ <array>
+ <real>0.299</real>
+ <real>0.587</real>
+ <real>0.114</real>
+ </array>
+ </map>
<key>RenderGlowMaxExtractAlpha</key>
- <map>
- <key>Comment</key>
- <string>Max glow alpha value for brightness extraction to auto-glow.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.065</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Max glow alpha value for brightness extraction to auto-glow.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.065</real>
+ </map>
<key>RenderGlowMinLuminance</key>
- <map>
- <key>Comment</key>
- <string>Min luminance intensity necessary to consider an object bright enough to automatically glow. (Gets clamped to 0 - 1.0 range)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1.0</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Min luminance intensity necessary to consider an object bright enough to automatically glow. (Gets clamped to 0 - 1.0 range)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
<key>RenderGlowResolutionPow</key>
- <map>
- <key>Comment</key>
- <string>Glow map resolution power of two.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>9</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Glow map resolution power of two.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>9</integer>
+ </map>
<key>RenderGlowStrength</key>
- <map>
- <key>Comment</key>
- <string>Additive strength of glow.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.35</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Additive strength of glow.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.35</real>
+ </map>
<key>RenderGlowWarmthAmount</key>
- <map>
- <key>Comment</key>
- <string>Amount of warmth extraction to use (versus luminance extraction). 0 = lum, 1.0 = warmth</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Amount of warmth extraction to use (versus luminance extraction). 0 = lum, 1.0 = warmth</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.0</real>
+ </map>
<key>RenderGlowWarmthWeights</key>
- <map>
- <key>Comment</key>
- <string>Weight of each color channel used before finding the max warmth</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Vector3</string>
- <key>Value</key>
- <array>
- <real>1.0</real>
- <real>0.5</real>
- <real>0.7</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Weight of each color channel used before finding the max warmth</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Vector3</string>
+ <key>Value</key>
+ <array>
+ <real>1.0</real>
+ <real>0.5</real>
+ <real>0.7</real>
+ </array>
+ </map>
<key>RenderGlowWidth</key>
- <map>
- <key>Comment</key>
- <string>Glow sample size (higher = wider and softer but eventually more pixelated)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1.3</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Glow sample size (higher = wider and softer but eventually more pixelated)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.3</real>
+ </map>
<key>RenderHUDInSnapshot</key>
- <map>
- <key>Comment</key>
- <string>Display HUD attachments in snapshot</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Display HUD attachments in snapshot</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>RenderHiddenSelections</key>
- <map>
- <key>Comment</key>
- <string>Show selection lines on objects that are behind other objects</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Show selection lines on objects that are behind other objects</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>RenderHideGroupTitle</key>
- <map>
- <key>Comment</key>
- <string>Don&apos;t show my group title in my name label</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Don't show my group title in my name label</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>RenderHideGroupTitleAll</key>
- <map>
- <key>Comment</key>
- <string>Show group titles in name labels</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Show group titles in name labels</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>RenderInitError</key>
- <map>
- <key>Comment</key>
- <string>Error occured while initializing GL</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Error occured while initializing GL</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>RenderLightRadius</key>
- <map>
- <key>Comment</key>
- <string>Render the radius of selected lights</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Render the radius of selected lights</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>RenderLightingDetail</key>
- <map>
- <key>Comment</key>
- <string>Amount of detail for lighting objects/avatars/terrain (0=sun/moon only, 1=enable local lights)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Amount of detail for lighting objects/avatars/terrain (0=sun/moon only, 1=enable local lights)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>RenderMaxPartCount</key>
- <map>
- <key>Comment</key>
- <string>Maximum number of particles to display on screen</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>4096</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Maximum number of particles to display on screen</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>4096</integer>
+ </map>
<key>RenderMaxVBOSize</key>
- <map>
- <key>Comment</key>
- <string>Maximum size of a vertex buffer (in KB).</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>32</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Maximum size of a vertex buffer (in KB).</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>32</integer>
+ </map>
<key>RenderName</key>
- <map>
- <key>Comment</key>
- <string>Controls display of names above avatars (0 = never, 1 = fade, 2 = always)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>2</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Controls display of names above avatars (0 = never, 1 = fade, 2 = always)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>2</integer>
+ </map>
<key>RenderNameFadeDuration</key>
- <map>
- <key>Comment</key>
- <string>Time interval over which to fade avatar names (seconds)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Time interval over which to fade avatar names (seconds)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
<key>RenderNameHideSelf</key>
- <map>
- <key>Comment</key>
- <string>Don&apos;t display own name above avatar</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Don't display own name above avatar</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>RenderNameShowTime</key>
- <map>
- <key>Comment</key>
- <string>Fade avatar names after specified time (seconds)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>10</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Fade avatar names after specified time (seconds)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>10.0</real>
+ </map>
<key>RenderObjectBump</key>
- <map>
- <key>Comment</key>
- <string>Show bumpmapping on primitives</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Show bumpmapping on primitives</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>RenderQualityPerformance</key>
- <map>
- <key>Comment</key>
- <string>Which graphics settings you've chosen</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Which graphics settings you've chosen</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>U32</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>RenderReflectionDetail</key>
- <map>
- <key>Comment</key>
- <string>Detail of reflection render pass.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>2</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Detail of reflection render pass.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>2</integer>
+ </map>
<key>RenderReflectionRes</key>
- <map>
- <key>Comment</key>
- <string>Reflection map resolution.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>64</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Reflection map resolution.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>64</integer>
+ </map>
<key>RenderResolutionDivisor</key>
- <map>
- <key>Comment</key>
- <string>Divisor for rendering 3D scene at reduced resolution.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Divisor for rendering 3D scene at reduced resolution.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>U32</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>RenderShaderLODThreshold</key>
- <map>
- <key>Comment</key>
- <string>Fraction of draw distance defining the switch to a different shader LOD</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <integer>1.0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Fraction of draw distance defining the switch to a different shader LOD</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
+ <key>RenderShaderParticleThreshold</key>
+ <map>
+ <key>Comment</key>
+ <string>Fraction of draw distance to not use shader on particles</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.25</real>
+ </map>
<key>RenderSunDynamicRange</key>
- <map>
- <key>Comment</key>
- <string>Defines what percent brighter the sun is than local point lights (1.0 = 100% brighter. Value should not be less than 0. ).</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <integer>1.0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Defines what percent brighter the sun is than local point lights (1.0 = 100% brighter. Value should not be less than 0. ).</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
<key>RenderTerrainDetail</key>
- <map>
- <key>Comment</key>
- <string>Detail applied to terrain texturing (0 = none, 1 or 2 = full)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>2</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Detail applied to terrain texturing (0 = none, 1 or 2 = full)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>2</integer>
+ </map>
<key>RenderTerrainLODFactor</key>
- <map>
- <key>Comment</key>
- <string>Controls level of detail of terrain (multiplier for current screen area when calculated level of detail)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1.0</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Controls level of detail of terrain (multiplier for current screen area when calculated level of detail)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
<key>RenderTerrainScale</key>
- <map>
- <key>Comment</key>
- <string>Terrain detail texture scale</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>12</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Terrain detail texture scale</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>12.0</real>
+ </map>
+ <key>RenderTextureMemoryMultiple</key>
+ <map>
+ <key>Comment</key>
+ <string>Multiple of texture memory value to use (should fit: 0 &lt; value &lt;= 1.0)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
<key>RenderTreeLODFactor</key>
- <map>
- <key>Comment</key>
- <string>Controls level of detail of vegetation (multiplier for current screen area when calculated level of detail)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.5</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Controls level of detail of vegetation (multiplier for current screen area when calculated level of detail)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.5</real>
+ </map>
<key>RenderUIInSnapshot</key>
- <map>
- <key>Comment</key>
- <string>Display user interface in snapshot</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>RenderUseFarClip</key>
- <map>
- <key>Comment</key>
- <string>If false, frustum culling will ignore far clip plane.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Display user interface in snapshot</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
+ <key>RenderUnloadedAvatar</key>
+ <map>
+ <key>Comment</key>
+ <string>Show avatars which haven't finished loading</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>RenderUseFBO</key>
- <map>
- <key>Comment</key>
- <string>Whether we want to use GL_EXT_framebuffer_objects.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Whether we want to use GL_EXT_framebuffer_objects.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
+ <key>RenderUseFarClip</key>
+ <map>
+ <key>Comment</key>
+ <string>If false, frustum culling will ignore far clip plane.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>RenderUseImpostors</key>
- <map>
- <key>Comment</key>
- <string>Whether we want to use impostors for far away avatars.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Whether we want to use impostors for far away avatars.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>RenderUseShaderLOD</key>
- <map>
- <key>Comment</key>
- <string>Whether we want to have different shaders for LOD</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Whether we want to have different shaders for LOD</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>RenderUseShaderNearParticles</key>
- <map>
- <key>Comment</key>
- <string>Whether we want to use shaders on near particles</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>RenderShaderParticleThreshold</key>
- <map>
- <key>Comment</key>
- <string>Fraction of draw distance to not use shader on particles</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.25</real>
- </map>
- <key>RenderUnloadedAvatar</key>
- <map>
- <key>Comment</key>
- <string>Show avatars which haven't finished loading</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Whether we want to use shaders on near particles</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>RenderVBOEnable</key>
- <map>
- <key>Comment</key>
- <string>Use GL Vertex Buffer Objects</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Use GL Vertex Buffer Objects</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>RenderVolumeLODFactor</key>
- <map>
- <key>Comment</key>
- <string>Controls level of detail of primitives (multiplier for current screen area when calculated level of detail)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Controls level of detail of primitives (multiplier for current screen area when calculated level of detail)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
<key>RenderWater</key>
- <map>
- <key>Comment</key>
- <string>Display water</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Display water</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>RenderWaterMipNormal</key>
- <map>
- <key>Comment</key>
- <string>Use mip maps for water normal map.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>RenderWaterReflections</key>
- <map>
- <key>Comment</key>
- <string>Reflect the environment in the water.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Use mip maps for water normal map.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>RenderWaterRefResolution</key>
- <map>
- <key>Comment</key>
- <string>Water planar reflection resolution.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>512</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Water planar reflection resolution.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>512</integer>
+ </map>
+ <key>RenderWaterReflections</key>
+ <map>
+ <key>Comment</key>
+ <string>Reflect the environment in the water.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>RotateRight</key>
- <map>
- <key>Comment</key>
- <string>Make the agent rotate to its right.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Make the agent rotate to its right.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>RotationStep</key>
- <map>
- <key>Comment</key>
- <string>All rotations via rotation tool are constrained to multiples of this unit (degrees)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>All rotations via rotation tool are constrained to multiples of this unit (degrees)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
<key>RunBtnState</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>RunMultipleThreads</key>
- <map>
- <key>Comment</key>
- <string>If TRUE keep background threads active during render</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>If TRUE keep background threads active during render</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>SafeMode</key>
- <map>
- <key>Comment</key>
- <string>Reset preferences, run in safe mode.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Reset preferences, run in safe mode.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>SaveMinidump</key>
- <map>
- <key>Comment</key>
- <string>Save minidump for developer debugging on crash</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Save minidump for developer debugging on crash</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>ScaleShowAxes</key>
- <map>
- <key>Comment</key>
- <string>Show indicator of selected scale axis when scaling</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Show indicator of selected scale axis when scaling</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ScaleStretchTextures</key>
- <map>
- <key>Comment</key>
- <string>Stretch textures along with object when scaling</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Stretch textures along with object when scaling</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>ScaleUniform</key>
- <map>
- <key>Comment</key>
- <string>Scale selected objects evenly about center of selection</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Scale selected objects evenly about center of selection</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ScriptErrorColor</key>
- <map>
- <key>Comment</key>
- <string>Color of script error messages</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0.8235294117</real>
- <real>0.2745098039</real>
- <real>0.2745098039</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color of script error messages</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>0.8235294117</real>
+ <real>0.2745098039</real>
+ <real>0.2745098039</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>ScriptErrorsAsChat</key>
- <map>
- <key>Comment</key>
- <string>Display script errors and warning in chat history</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Display script errors and warning in chat history</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ScriptHelpFollowsCursor</key>
- <map>
- <key>Comment</key>
- <string>Scripting help window updates contents based on script editor contents under text cursor</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Scripting help window updates contents based on script editor contents under text cursor</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>SearchURLDefault</key>
- <map>
- <key>Comment</key>
- <string>URL to load for empty searches</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>http://secondlife.com/app/search/index.php?</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>URL to load for empty searches</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>http://secondlife.com/app/search/index.php?</string>
+ </map>
<key>SearchURLQuery</key>
- <map>
- <key>Comment</key>
- <string>URL to use for searches</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>http://secondlife.com/app/search/search_proxy.php?q=[QUERY]&amp;s=[COLLECTION]&amp;</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>URL to use for searches</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>http://secondlife.com/app/search/search_proxy.php?q=[QUERY]&amp;s=[COLLECTION]&amp;</string>
+ </map>
<key>SearchURLSuffix2</key>
- <map>
- <key>Comment</key>
- <string>Parameters added to end of search queries</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>lang=[LANG]&amp;m=[MATURE]&amp;t=[TEEN]&amp;region=[REGION]&amp;x=[X]&amp;y=[Y]&amp;z=[Z]&amp;session=[SESSION]</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Parameters added to end of search queries</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>lang=[LANG]&amp;m=[MATURE]&amp;t=[TEEN]&amp;region=[REGION]&amp;x=[X]&amp;y=[Y]&amp;z=[Z]&amp;session=[SESSION]</string>
+ </map>
<key>SelectMovableOnly</key>
- <map>
- <key>Comment</key>
- <string>Select only objects you can move</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Select only objects you can move</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>SelectOwnedOnly</key>
- <map>
- <key>Comment</key>
- <string>Select only objects you own</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Select only objects you own</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>SelectionHighlightAlpha</key>
- <map>
- <key>Comment</key>
- <string>Opacity of selection highlight (0.0 = completely transparent, 1.0 = completely opaque)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.4000000059604644775390625</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Opacity of selection highlight (0.0 = completely transparent, 1.0 = completely opaque)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.40000000596</real>
+ </map>
<key>SelectionHighlightAlphaTest</key>
- <map>
- <key>Comment</key>
- <string>Alpha value below which pixels are displayed on selection highlight line (0.0 = show all pixels, 1.0 = show now pixels)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.1</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Alpha value below which pixels are displayed on selection highlight line (0.0 = show all pixels, 1.0 = show now pixels)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.1</real>
+ </map>
<key>SelectionHighlightThickness</key>
- <map>
- <key>Comment</key>
- <string>Thickness of selection highlight line (fraction of view distance)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.009999999776482582092285156</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Thickness of selection highlight line (fraction of view distance)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.00999999977648</real>
+ </map>
<key>SelectionHighlightUAnim</key>
- <map>
- <key>Comment</key>
- <string>Rate at which texture animates along U direction in selection highlight line (fraction of texture per second)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rate at which texture animates along U direction in selection highlight line (fraction of texture per second)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.0</real>
+ </map>
<key>SelectionHighlightUScale</key>
- <map>
- <key>Comment</key>
- <string>Scale of texture display on selection highlight line (fraction of texture size)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.1</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Scale of texture display on selection highlight line (fraction of texture size)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.1</real>
+ </map>
<key>SelectionHighlightVAnim</key>
- <map>
- <key>Comment</key>
- <string>Rate at which texture animates along V direction in selection highlight line (fraction of texture per second)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.5</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rate at which texture animates along V direction in selection highlight line (fraction of texture per second)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.5</real>
+ </map>
<key>SelectionHighlightVScale</key>
- <map>
- <key>Comment</key>
- <string>Scale of texture display on selection highlight line (fraction of texture size)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Scale of texture display on selection highlight line (fraction of texture size)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
<key>ServerChoice</key>
- <map>
- <key>Comment</key>
- <string>[DO NOT MODIFY] Controls which grid you connect to</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ShowAllObjectHoverTip</key>
- <map>
- <key>Comment</key>
- <string>Show descriptive tooltip when mouse hovers over non-interactive and interactive objects.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>[DO NOT MODIFY] Controls which grid you connect to</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ShowActiveSpeakers</key>
- <map>
- <key>Comment</key>
- <string>Display active speakers list on login</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Display active speakers list on login</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
+ <key>ShowAllObjectHoverTip</key>
+ <map>
+ <key>Comment</key>
+ <string>Show descriptive tooltip when mouse hovers over non-interactive and interactive objects.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ShowAxes</key>
- <map>
- <key>Comment</key>
- <string>Render coordinate frame at your position</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Render coordinate frame at your position</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ShowCameraControls</key>
- <map>
- <key>Comment</key>
- <string>Display camera controls on login</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Display camera controls on login</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>ShowChatHistory</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ShowCommunicate</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ShowConsoleWindow</key>
- <map>
- <key>Comment</key>
- <string>Show log in separate OS window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Show log in separate OS window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ShowCrosshairs</key>
- <map>
- <key>Comment</key>
- <string>Display crosshairs when in mouselook mode</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Display crosshairs when in mouselook mode</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>ShowDebugConsole</key>
- <map>
- <key>Comment</key>
- <string>Show log in SL window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Show log in SL window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ShowDebugStats</key>
- <map>
- <key>Comment</key>
- <string>Show performance stats display</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Show performance stats display</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ShowDepthBuffer</key>
- <map>
- <key>Comment</key>
- <string>Show depth buffer contents</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Show depth buffer contents</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ShowDirectory</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ShowEmptyFoldersWhenSearching</key>
- <map>
- <key>Comment</key>
- <string>Shows folders that do not have any visible contents when applying a filter to inventory</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Shows folders that do not have any visible contents when applying a filter to inventory</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ShowHoverTips</key>
- <map>
- <key>Comment</key>
- <string>Show descriptive tooltip when mouse hovers over items in world</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Show descriptive tooltip when mouse hovers over items in world</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>ShowInventory</key>
- <map>
- <key>Comment</key>
- <string>Open inventory window on login</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Open inventory window on login</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ShowLandHoverTip</key>
- <map>
- <key>Comment</key>
- <string>Show descriptive tooltip when mouse hovers over land</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Show descriptive tooltip when mouse hovers over land</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ShowLeaders</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ShowMatureClassifieds</key>
- <map>
- <key>Comment</key>
- <string>Display results of find classifieds that are flagged as mature</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Display results of find classifieds that are flagged as mature</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ShowMatureEvents</key>
- <map>
- <key>Comment</key>
- <string>Display results of find events that are flagged as mature</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Display results of find events that are flagged as mature</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ShowMatureFindAll</key>
- <map>
- <key>Comment</key>
- <string>Display results of find all that are in mature sims</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Display results of find all that are in mature sims</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ShowMatureGroups</key>
- <map>
- <key>Comment</key>
- <string>Display results of find groups that are in flagged as mature</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Display results of find groups that are in flagged as mature</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>ShowMatureSims</key>
- <map>
- <key>Comment</key>
- <string>Display results of find places or find popular that are in mature sims</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Display results of find places or find popular that are in mature sims</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ShowMiniMap</key>
- <map>
- <key>Comment</key>
- <string>Display mini map on login</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Display mini map on login</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ShowMovementControls</key>
- <map>
- <key>Comment</key>
- <string>Display movement controls on login</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Display movement controls on login</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>ShowNearClip</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ShowNewInventory</key>
- <map>
- <key>Comment</key>
- <string>Automatically views new notecards/textures/landmarks</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Automatically views new notecards/textures/landmarks</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>ShowObjectUpdates</key>
- <map>
- <key>Comment</key>
- <string>Show when update messages are received for individual objects</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Show when update messages are received for individual objects</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ShowOverlayTitle</key>
- <map>
- <key>Comment</key>
- <string>Prints watermark text message on screen</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Prints watermark text message on screen</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ShowParcelOwners</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ShowPermissions</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ShowPropertyLines</key>
- <map>
- <key>Comment</key>
- <string>Show line overlay demarking property boundaries</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Show line overlay demarking property boundaries</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ShowSearchBar</key>
- <map>
- <key>Comment</key>
- <string>Show the Search Bar in the Status Overlay</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Show the Search Bar in the Status Overlay</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>ShowSelectionBeam</key>
- <map>
- <key>Comment</key>
- <string>Show selection particle beam when selecting or interacting with objects.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Show selection particle beam when selecting or interacting with objects.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>ShowStartLocation</key>
- <map>
- <key>Comment</key>
- <string>Display starting location menu on login screen</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Display starting location menu on login screen</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ShowTangentBasis</key>
- <map>
- <key>Comment</key>
- <string>Render normal and binormal (debugging bump mapping)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Render normal and binormal (debugging bump mapping)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ShowToolBar</key>
- <map>
- <key>Comment</key>
- <string>Show toolbar at bottom of screen</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Show toolbar at bottom of screen</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>ShowTools</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ShowVoiceChannelPopup</key>
- <map>
- <key>Comment</key>
- <string>Controls visibility of the current voice channel popup above the voice tab</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Controls visibility of the current voice channel popup above the voice tab</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ShowVolumeSettingsPopup</key>
- <map>
- <key>Comment</key>
- <string>Show individual volume slider for voice, sound effects, etc</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Show individual volume slider for voice, sound effects, etc</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ShowWorldMap</key>
- <map>
- <key>Comment</key>
- <string>Display world map on login</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Display world map on login</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ShowXUINames</key>
- <map>
- <key>Comment</key>
- <string>Display XUI Names as Tooltips</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Display XUI Names as Tooltips</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>SitBtnState</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>SkinFolder</key>
- <map>
- <key>Comment</key>
- <string>The skin folder to use.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string />
- </map>
+ <map>
+ <key>Comment</key>
+ <string>The skin folder to use.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string />
+ </map>
<key>SkyAmbientScale</key>
- <map>
- <key>Comment</key>
- <string>Controls strength of ambient, or non-directional light from the sun and moon (fraction or multiple of default ambient level)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.300000011920928955078125</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Controls strength of ambient, or non-directional light from the sun and moon (fraction or multiple of default ambient level)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.300000011921</real>
+ </map>
+ <key>SkyEditPresets</key>
+ <map>
+ <key>Comment</key>
+ <string>Whether to be able to edit the sky defaults or not</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>SkyNightColorShift</key>
- <map>
- <key>Comment</key>
- <string>Controls moonlight color (base color applied to moon as light source)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color3</string>
- <key>Value</key>
- <array>
- <real>0.699999988079071044921875</real>
- <real>0.699999988079071044921875</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Controls moonlight color (base color applied to moon as light source)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color3</string>
+ <key>Value</key>
+ <array>
+ <real>0.699999988079</real>
+ <real>0.699999988079</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>SkyOverrideSimSunPosition</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>SkySunDefaultPosition</key>
- <map>
- <key>Comment</key>
- <string>Default position of sun in sky (direction in world coordinates)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Vector3</string>
- <key>Value</key>
- <array>
- <real>1</real>
- <real>0</real>
- <real>0.1</real>
- </array>
- </map>
- <key>SkyUseClassicClouds</key>
- <map>
- <key>Comment</key>
- <string>Whether to use the old Second Life particle clouds or not</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Default position of sun in sky (direction in world coordinates)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Vector3</string>
+ <key>Value</key>
+ <array>
+ <real>1.0</real>
+ <real>0.0</real>
+ <real>0.1</real>
+ </array>
+ </map>
+ <key>SkyUseClassicClouds</key>
+ <map>
+ <key>Comment</key>
+ <string>Whether to use the old Second Life particle clouds or not</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>SlideLeftBtnRect</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>20</integer>
- <integer>54</integer>
- <integer>45</integer>
- <integer>29</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>20</integer>
+ <integer>54</integer>
+ <integer>45</integer>
+ <integer>29</integer>
+ </array>
+ </map>
<key>SlideRightBtnRect</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>66</integer>
- <integer>54</integer>
- <integer>91</integer>
- <integer>29</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>66</integer>
+ <integer>54</integer>
+ <integer>91</integer>
+ <integer>29</integer>
+ </array>
+ </map>
<key>SmallAvatarNames</key>
- <map>
- <key>Comment</key>
- <string>Display avatar name text in smaller font</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Display avatar name text in smaller font</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>SnapEnabled</key>
- <map>
- <key>Comment</key>
- <string>Enable snapping to grid</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enable snapping to grid</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>SnapMargin</key>
- <map>
- <key>Comment</key>
- <string>Controls maximum distance between windows before they auto-snap together (pixels)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>10</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Controls maximum distance between windows before they auto-snap together (pixels)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>10</integer>
+ </map>
<key>SnapToMouseCursor</key>
- <map>
- <key>Comment</key>
- <string>When snapping to grid, center object on nearest grid point to mouse cursor</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>When snapping to grid, center object on nearest grid point to mouse cursor</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>SnapshotLocalLastResolution</key>
- <map>
- <key>Comment</key>
- <string>Take next local snapshot at this resolution</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Take next local snapshot at this resolution</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>SnapshotPostcardLastResolution</key>
- <map>
- <key>Comment</key>
- <string>Take next postcard snapshot at this resolution</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Take next postcard snapshot at this resolution</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>SnapshotQuality</key>
- <map>
- <key>Comment</key>
- <string>Quality setting of postcard JPEGs (0 = worst, 100 = best)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>75</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Quality setting of postcard JPEGs (0 = worst, 100 = best)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>75</integer>
+ </map>
<key>SnapshotTextureLastResolution</key>
- <map>
- <key>Comment</key>
- <string>Take next texture snapshot at this resolution</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Take next texture snapshot at this resolution</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>SpeakingColor</key>
- <map>
- <key>Comment</key>
- <string>Color of various indicators when resident is speaking on a voice channel.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0</real>
- <real>1</real>
- <real>0</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color of various indicators when resident is speaking on a voice channel.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>0.0</real>
+ <real>1.0</real>
+ <real>0.0</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>SpeedTest</key>
- <map>
- <key>Comment</key>
- <string>Performance testing mode, no network</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Performance testing mode, no network</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>StatsAutoRun</key>
- <map>
- <key>Comment</key>
- <string>Play back autopilot</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Play back autopilot</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>StatsFile</key>
- <map>
- <key>Comment</key>
- <string>Filename for stats logging output</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>fs.txt</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Filename for stats logging output</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>fs.txt</string>
+ </map>
<key>StatsNumRuns</key>
- <map>
- <key>Comment</key>
- <string>Loop autopilot playback this number of times</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>-1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Loop autopilot playback this number of times</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>-1</integer>
+ </map>
<key>StatsPilotFile</key>
- <map>
- <key>Comment</key>
- <string>Filename for stats logging autopilot path</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>pilot.txt</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Filename for stats logging autopilot path</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>pilot.txt</string>
+ </map>
<key>StatsQuitAfterRuns</key>
- <map>
- <key>Comment</key>
- <string>Quit application after this number of autopilot playback runs</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Quit application after this number of autopilot playback runs</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>StatsSessionTrackFrameStats</key>
- <map>
- <key>Comment</key>
- <string>Track rendering and network statistics</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Track rendering and network statistics</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>StatsSummaryFile</key>
- <map>
- <key>Comment</key>
- <string>Filename for stats logging summary</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>fss.txt</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Filename for stats logging summary</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>fss.txt</string>
+ </map>
<key>StatusBarHeight</key>
- <map>
- <key>Comment</key>
- <string>Height of menu/status bar at top of screen (pixels)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>26</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Height of menu/status bar at top of screen (pixels)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>26</integer>
+ </map>
<key>StatusBarPad</key>
- <map>
- <key>Comment</key>
- <string>Spacing between popup buttons at bottom of screen (Stand up, Release Controls)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>10</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Spacing between popup buttons at bottom of screen (Stand up, Release Controls)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>10</integer>
+ </map>
<key>SystemChatColor</key>
- <map>
- <key>Comment</key>
- <string>Color of chat messages from SL System</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0.800000011920928955078125</real>
- <real>1</real>
- <real>1</real>
- <real>1</real>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color of chat messages from SL System</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>0.800000011921</real>
+ <real>1.0</real>
+ <real>1.0</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>SystemLanguage</key>
- <map>
- <key>Comment</key>
- <string>Language indicated by system settings (for XUI)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>en-us</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Language indicated by system settings (for XUI)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>en-us</string>
+ </map>
<key>TabToTextFieldsOnly</key>
- <map>
- <key>Comment</key>
- <string>TAB key takes you to next text entry field, instead of next widget</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>TAB key takes you to next text entry field, instead of next widget</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>TerrainColorHeightRange</key>
- <map>
- <key>Comment</key>
- <string>Altitude range over which a given terrain texture has effect (meters)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>60</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Altitude range over which a given terrain texture has effect (meters)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>60.0</real>
+ </map>
<key>TerrainColorStartHeight</key>
- <map>
- <key>Comment</key>
- <string>Starting altitude for terrain texturing (meters)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>20</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Starting altitude for terrain texturing (meters)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>20.0</real>
+ </map>
<key>TextureMemory</key>
- <map>
- <key>Comment</key>
- <string>Amount of memory to use for textures in MB (0 = autodetect)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Amount of memory to use for textures in MB (0 = autodetect)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>TexturePickerRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for texture picker</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>290</integer>
- <integer>350</integer>
- <integer>0</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for texture picker</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>290</integer>
+ <integer>350</integer>
+ <integer>0</integer>
+ </array>
+ </map>
<key>TexturePickerShowFolders</key>
- <map>
- <key>Comment</key>
- <string>Show folders with no texures in texture picker</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Show folders with no texures in texture picker</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>TexturePickerSortOrder</key>
- <map>
- <key>Comment</key>
- <string>Specifies sort key for textures in texture picker (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>2</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Specifies sort key for textures in texture picker (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>U32</string>
+ <key>Value</key>
+ <integer>2</integer>
+ </map>
<key>ThirdPersonBtnState</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>ThrottleBandwidthKBPS</key>
- <map>
- <key>Comment</key>
- <string>Maximum allowable downstream bandwidth (kilo bits per second)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>500</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Maximum allowable downstream bandwidth (kilo bits per second)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>500.0</real>
+ </map>
<key>ToolHelpRect</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>8</integer>
- <integer>178</integer>
- <integer>75</integer>
- <integer>162</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>8</integer>
+ <integer>178</integer>
+ <integer>75</integer>
+ <integer>162</integer>
+ </array>
+ </map>
<key>ToolTipDelay</key>
- <map>
- <key>Comment</key>
- <string>Seconds before displaying tooltip when mouse stops over UI element</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.699999988079071044921875</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Seconds before displaying tooltip when mouse stops over UI element</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.699999988079</real>
+ </map>
<key>ToolboxAutoMove</key>
- <map>
- <key>Comment</key>
- <string>[NOT USED]</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>[NOT USED]</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ToolboxRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for tools window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>100</integer>
- <integer>100</integer>
- <integer>100</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for tools window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>100</integer>
+ <integer>100</integer>
+ <integer>100</integer>
+ </array>
+ </map>
<key>ToolboxShowMore</key>
- <map>
- <key>Comment</key>
- <string>Whether to show additional build tool controls</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Whether to show additional build tool controls</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>TrackFocusObject</key>
- <map>
- <key>Comment</key>
- <string>Camera tracks last object zoomed on</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Camera tracks last object zoomed on</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>TurnLeftBtnRect</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>20</integer>
- <integer>29</integer>
- <integer>45</integer>
- <integer>4</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>20</integer>
+ <integer>29</integer>
+ <integer>45</integer>
+ <integer>4</integer>
+ </array>
+ </map>
<key>TurnRightBtnRect</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>66</integer>
- <integer>29</integer>
- <integer>91</integer>
- <integer>4</integer>
- </array>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>66</integer>
+ <integer>29</integer>
+ <integer>91</integer>
+ <integer>4</integer>
+ </array>
+ </map>
<key>TypeAheadTimeout</key>
- <map>
- <key>Comment</key>
- <string>Time delay before clearing type-ahead buffer in lists (seconds)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1.5</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Time delay before clearing type-ahead buffer in lists (seconds)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.5</real>
+ </map>
<key>UIAutoScale</key>
- <map>
- <key>Comment</key>
- <string>Keep UI scale consistent across different resolutions</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Keep UI scale consistent across different resolutions</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>UIFloaterTestBool</key>
- <map>
- <key>Comment</key>
- <string>Example saved setting for the test floater</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Example saved setting for the test floater</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>UIImgBtnCloseActiveUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
+ </map>
<key>UIImgBtnCloseInactiveUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>779e4fa3-9b13-f74a-fba9-3886fe9c86ba</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>779e4fa3-9b13-f74a-fba9-3886fe9c86ba</string>
+ </map>
<key>UIImgBtnClosePressedUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
+ </map>
<key>UIImgBtnForwardInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>54197a61-f5d1-4c29-95d2-c071d08849cb</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>54197a61-f5d1-4c29-95d2-c071d08849cb</string>
+ </map>
<key>UIImgBtnForwardOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>a0eb4021-1b20-4a53-892d-8faa9265a6f5</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>a0eb4021-1b20-4a53-892d-8faa9265a6f5</string>
+ </map>
<key>UIImgBtnJumpLeftInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>9cad3e6d-2d6d-107d-f8ab-5ba272b5bfe1</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>9cad3e6d-2d6d-107d-f8ab-5ba272b5bfe1</string>
+ </map>
<key>UIImgBtnJumpLeftOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>3c18c87e-5f50-14e2-e744-f44734aa365f</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>3c18c87e-5f50-14e2-e744-f44734aa365f</string>
+ </map>
<key>UIImgBtnJumpRightInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>7dabc040-ec13-2309-ddf7-4f161f6de2f4</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>7dabc040-ec13-2309-ddf7-4f161f6de2f4</string>
+ </map>
<key>UIImgBtnJumpRightOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>ff9a71eb-7414-4cf8-866e-a701deb7c3cf</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>ff9a71eb-7414-4cf8-866e-a701deb7c3cf</string>
+ </map>
<key>UIImgBtnLeftInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>95463c78-aaa6-464d-892d-3a805b6bb7bf</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>95463c78-aaa6-464d-892d-3a805b6bb7bf</string>
+ </map>
<key>UIImgBtnLeftOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>13a93910-6b44-45eb-ad3a-4d1324c59bac</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>13a93910-6b44-45eb-ad3a-4d1324c59bac</string>
+ </map>
<key>UIImgBtnMinimizeActiveUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>34c9398d-bb78-4643-9633-46a2fa3e9637</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>34c9398d-bb78-4643-9633-46a2fa3e9637</string>
+ </map>
<key>UIImgBtnMinimizeInactiveUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>6e72abba-1378-437f-bf7a-f0c15f3e99a3</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>6e72abba-1378-437f-bf7a-f0c15f3e99a3</string>
+ </map>
<key>UIImgBtnMinimizePressedUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>39801651-26cb-4926-af57-7af9352c273c</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>39801651-26cb-4926-af57-7af9352c273c</string>
+ </map>
<key>UIImgBtnMoveDownInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>b92a70b9-c841-4c94-b4b3-cee9eb460d48</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>b92a70b9-c841-4c94-b4b3-cee9eb460d48</string>
+ </map>
<key>UIImgBtnMoveDownOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>b5abc9fa-9e62-4e03-bc33-82c4c1b6b689</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>b5abc9fa-9e62-4e03-bc33-82c4c1b6b689</string>
+ </map>
<key>UIImgBtnMoveUpInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>49b4b357-e430-4b56-b9e0-05b8759c3c82</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>49b4b357-e430-4b56-b9e0-05b8759c3c82</string>
+ </map>
<key>UIImgBtnMoveUpOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>f887146d-829f-4e39-9211-cf872b78f97c</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>f887146d-829f-4e39-9211-cf872b78f97c</string>
+ </map>
<key>UIImgBtnPanDownInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
+ </map>
<key>UIImgBtnPanDownOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
+ </map>
<key>UIImgBtnPanLeftInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
+ </map>
<key>UIImgBtnPanLeftOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
+ </map>
<key>UIImgBtnPanRightInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
+ </map>
<key>UIImgBtnPanRightOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
+ </map>
<key>UIImgBtnPanUpInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
+ </map>
<key>UIImgBtnPanUpOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
+ </map>
<key>UIImgBtnRestoreActiveUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>111b39de-8928-4690-b7b2-e17d5c960277</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>111b39de-8928-4690-b7b2-e17d5c960277</string>
+ </map>
<key>UIImgBtnRestoreInactiveUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>0eafa471-70af-4882-b8c1-40a310929744</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>0eafa471-70af-4882-b8c1-40a310929744</string>
+ </map>
<key>UIImgBtnRestorePressedUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>90a0ed5c-2e7b-4845-9958-a64a1b30f312</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>90a0ed5c-2e7b-4845-9958-a64a1b30f312</string>
+ </map>
<key>UIImgBtnRightInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>5e616d0d-4335-476f-9977-560bccd009da</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>5e616d0d-4335-476f-9977-560bccd009da</string>
+ </map>
<key>UIImgBtnRightOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>5a44fd04-f52b-4c30-8b00-4a31e27614bd</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>5a44fd04-f52b-4c30-8b00-4a31e27614bd</string>
+ </map>
<key>UIImgBtnScrollDownInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>d2421bab-2eaf-4863-b8f6-5e4c52519247</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>d2421bab-2eaf-4863-b8f6-5e4c52519247</string>
+ </map>
<key>UIImgBtnScrollDownOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>b4ecdecf-5c8d-44e7-b882-17a77e88ed55</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>b4ecdecf-5c8d-44e7-b882-17a77e88ed55</string>
+ </map>
<key>UIImgBtnScrollLeftInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>ea137a32-6718-4d05-9c22-7d570d27b2cd</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>ea137a32-6718-4d05-9c22-7d570d27b2cd</string>
+ </map>
<key>UIImgBtnScrollLeftOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>43773e8d-49aa-48e0-80f3-a04715f4677a</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>43773e8d-49aa-48e0-80f3-a04715f4677a</string>
+ </map>
<key>UIImgBtnScrollRightInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>b749de64-e903-4c3c-ac0b-25fb6fa39cb5</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>b749de64-e903-4c3c-ac0b-25fb6fa39cb5</string>
+ </map>
<key>UIImgBtnScrollRightOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>3d700d19-e708-465d-87f2-46c8c0ee7938</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>3d700d19-e708-465d-87f2-46c8c0ee7938</string>
+ </map>
<key>UIImgBtnScrollUpInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>a93abdf3-27b5-4e22-a8fa-c48216cd2e3a</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>a93abdf3-27b5-4e22-a8fa-c48216cd2e3a</string>
+ </map>
<key>UIImgBtnScrollUpOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>dad084d7-9a46-452a-b0ff-4b9f1cefdde9</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>dad084d7-9a46-452a-b0ff-4b9f1cefdde9</string>
+ </map>
<key>UIImgBtnSlideLeftInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>724996f5-b956-46f6-9844-4fcfce1d5e83</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>724996f5-b956-46f6-9844-4fcfce1d5e83</string>
+ </map>
<key>UIImgBtnSlideLeftOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>82476321-0374-4c26-9567-521535ab4cd7</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>82476321-0374-4c26-9567-521535ab4cd7</string>
+ </map>
<key>UIImgBtnSlideRightInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>7eeb57d2-3f37-454d-a729-8b217b8be443</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>7eeb57d2-3f37-454d-a729-8b217b8be443</string>
+ </map>
<key>UIImgBtnSlideRightOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>1fbe4e60-0607-44d1-a50a-032eff56ae75</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>1fbe4e60-0607-44d1-a50a-032eff56ae75</string>
+ </map>
<key>UIImgBtnSpinDownInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>a985ac71-052f-48e6-9c33-d931c813ac92</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>a985ac71-052f-48e6-9c33-d931c813ac92</string>
+ </map>
<key>UIImgBtnSpinDownOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>b6d240dd-5602-426f-b606-bbb49a30726d</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>b6d240dd-5602-426f-b606-bbb49a30726d</string>
+ </map>
<key>UIImgBtnSpinUpInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>c8450082-96a0-4319-8090-d3ff900b4954</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>c8450082-96a0-4319-8090-d3ff900b4954</string>
+ </map>
<key>UIImgBtnSpinUpOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>56576e6e-6710-4e66-89f9-471b59122794</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>56576e6e-6710-4e66-89f9-471b59122794</string>
+ </map>
<key>UIImgBtnTabBottomInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>c001d8fd-a869-4b6f-86a1-fdcb106df9c7</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>c001d8fd-a869-4b6f-86a1-fdcb106df9c7</string>
+ </map>
<key>UIImgBtnTabBottomOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>bf0a8779-689b-48c3-bb9a-6af546366ef4</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>bf0a8779-689b-48c3-bb9a-6af546366ef4</string>
+ </map>
<key>UIImgBtnTabBottomPartialInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>eb0b0904-8c91-4f24-b500-1180b91140de</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>eb0b0904-8c91-4f24-b500-1180b91140de</string>
+ </map>
<key>UIImgBtnTabBottomPartialOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>8dca716c-b29c-403a-9886-91c028357d6e</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>8dca716c-b29c-403a-9886-91c028357d6e</string>
+ </map>
<key>UIImgBtnTabTopInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>16d032e8-817b-4368-8a4e-b7b947ae3889</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>16d032e8-817b-4368-8a4e-b7b947ae3889</string>
+ </map>
<key>UIImgBtnTabTopOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>1ed83f57-41cf-4052-a3b4-2e8bb78d8191</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>1ed83f57-41cf-4052-a3b4-2e8bb78d8191</string>
+ </map>
<key>UIImgBtnTabTopPartialInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>7c6c6c26-0e25-4438-89bd-30d8b8e9d704</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>7c6c6c26-0e25-4438-89bd-30d8b8e9d704</string>
+ </map>
<key>UIImgBtnTabTopPartialOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>932ad585-0e45-4a57-aa23-4cf81beeb7b0</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>932ad585-0e45-4a57-aa23-4cf81beeb7b0</string>
+ </map>
<key>UIImgBtnTearOffActiveUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>74e1a96f-4833-a24d-a1bb-1bce1468b0e7</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>74e1a96f-4833-a24d-a1bb-1bce1468b0e7</string>
+ </map>
<key>UIImgBtnTearOffInactiveUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>74e1a96f-4833-a24d-a1bb-1bce1468b0e7</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>74e1a96f-4833-a24d-a1bb-1bce1468b0e7</string>
+ </map>
<key>UIImgBtnTearOffPressedUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>d2524c13-4ba6-af7c-e305-8ac6cc18d86a</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>d2524c13-4ba6-af7c-e305-8ac6cc18d86a</string>
+ </map>
<key>UIImgCheckboxActiveSelectedUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>cf4a2ed7-1533-4686-9dde-df9a37ddca55</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>cf4a2ed7-1533-4686-9dde-df9a37ddca55</string>
+ </map>
<key>UIImgCheckboxActiveUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>05bb64ee-96fd-4243-b74e-f40a41bc53ba</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>05bb64ee-96fd-4243-b74e-f40a41bc53ba</string>
+ </map>
<key>UIImgCheckboxInactiveSelectedUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>c817c642-9abd-4236-9287-ae0513fe7d2b</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>c817c642-9abd-4236-9287-ae0513fe7d2b</string>
+ </map>
<key>UIImgCheckboxInactiveUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>7d94cb59-32a2-49bf-a516-9e5a2045f9d9</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>7d94cb59-32a2-49bf-a516-9e5a2045f9d9</string>
+ </map>
<key>UIImgCreateSelectedUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>0098b015-3daf-4cfe-a72f-915369ea97c2</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>0098b015-3daf-4cfe-a72f-915369ea97c2</string>
+ </map>
<key>UIImgCreateUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>7a0b1bdb-b5d9-4df5-bac2-ba230da93b5b</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>7a0b1bdb-b5d9-4df5-bac2-ba230da93b5b</string>
+ </map>
<key>UIImgCrosshairsUUID</key>
- <map>
- <key>Comment</key>
- <string>Image to use for crosshair display (UUID texture reference)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>6e1a3980-bf2d-4274-8970-91e60d85fb52</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Image to use for crosshair display (UUID texture reference)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>6e1a3980-bf2d-4274-8970-91e60d85fb52</string>
+ </map>
<key>UIImgDefaultEyesUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>6522e74d-1660-4e7f-b601-6f48c1659a77</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>6522e74d-1660-4e7f-b601-6f48c1659a77</string>
+ </map>
<key>UIImgDefaultGlovesUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
+ </map>
<key>UIImgDefaultHairUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>7ca39b4c-bd19-4699-aff7-f93fd03d3e7b</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>7ca39b4c-bd19-4699-aff7-f93fd03d3e7b</string>
+ </map>
<key>UIImgDefaultJacketUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
+ </map>
<key>UIImgDefaultPantsUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
+ </map>
<key>UIImgDefaultShirtUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
+ </map>
<key>UIImgDefaultShoesUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
+ </map>
<key>UIImgDefaultSkirtUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
+ </map>
<key>UIImgDefaultSocksUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
+ </map>
<key>UIImgDefaultUnderwearUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
+ </map>
<key>UIImgDirectionArrowUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>586383e8-4d9b-4fba-9196-2b5938e79c2c</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>586383e8-4d9b-4fba-9196-2b5938e79c2c</string>
+ </map>
<key>UIImgFaceSelectedUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>b4870163-6208-42a9-9801-93133bf9a6cd</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>b4870163-6208-42a9-9801-93133bf9a6cd</string>
+ </map>
<key>UIImgFaceUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>ce15fd63-b0b6-463c-a37d-ea6393208b3e</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>ce15fd63-b0b6-463c-a37d-ea6393208b3e</string>
+ </map>
<key>UIImgFocusSelectedUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>ab6a730e-ddfd-4982-9a32-c6de3de6d31d</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>ab6a730e-ddfd-4982-9a32-c6de3de6d31d</string>
+ </map>
<key>UIImgFocusUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>57bc39d1-288c-4519-aea6-6d1786a5c274</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>57bc39d1-288c-4519-aea6-6d1786a5c274</string>
+ </map>
<key>UIImgGrabSelectedUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>c1e21504-f136-451d-b8e9-929037812f1d</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>c1e21504-f136-451d-b8e9-929037812f1d</string>
+ </map>
<key>UIImgGrabUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>c63f124c-6340-4fbf-b59e-0869a44adb64</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>c63f124c-6340-4fbf-b59e-0869a44adb64</string>
+ </map>
<key>UIImgMoveSelectedUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>46f17c7b-8381-48c3-b628-6a406e060dd6</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>46f17c7b-8381-48c3-b628-6a406e060dd6</string>
+ </map>
<key>UIImgMoveUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>2fa5dc06-bcdd-4e09-a426-f9f262d4fa65</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>2fa5dc06-bcdd-4e09-a426-f9f262d4fa65</string>
+ </map>
<key>UIImgRadioActiveSelectedUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>52f09e07-5816-4052-953c-94c6c10479b7</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>52f09e07-5816-4052-953c-94c6c10479b7</string>
+ </map>
<key>UIImgRadioActiveUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>7a1ba9b8-1047-4d1e-9cfc-bc478c80b63f</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>7a1ba9b8-1047-4d1e-9cfc-bc478c80b63f</string>
+ </map>
<key>UIImgRadioInactiveSelectedUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>1975db39-aa29-4251-aea0-409ac09d414d</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>1975db39-aa29-4251-aea0-409ac09d414d</string>
+ </map>
<key>UIImgRadioInactiveUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>90688481-67ff-4af0-be69-4aa084bcad1e</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>90688481-67ff-4af0-be69-4aa084bcad1e</string>
+ </map>
<key>UIImgResizeBottomRightUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>e3690e25-9690-4f6c-a745-e7dcd885285a</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>e3690e25-9690-4f6c-a745-e7dcd885285a</string>
+ </map>
<key>UIImgRotateSelectedUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>cdfb7fde-0d13-418a-9d89-2bd91019fc95</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>cdfb7fde-0d13-418a-9d89-2bd91019fc95</string>
+ </map>
<key>UIImgRotateUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>c34b1eaa-aae3-4351-b082-e26c0b636779</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>c34b1eaa-aae3-4351-b082-e26c0b636779</string>
+ </map>
<key>UIImgScaleSelectedUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>55aa57ef-508a-47f7-8867-85d21c5a810d</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>55aa57ef-508a-47f7-8867-85d21c5a810d</string>
+ </map>
<key>UIImgScaleUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>88a90fef-b448-4883-9344-ecf378a60433</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>88a90fef-b448-4883-9344-ecf378a60433</string>
+ </map>
<key>UIImgWhiteUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
+ </map>
<key>UIScaleFactor</key>
- <map>
- <key>Comment</key>
- <string>Size of UI relative to default layout on 1024x768 screen</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Size of UI relative to default layout on 1024x768 screen</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.0</real>
+ </map>
<key>UISndAlert</key>
- <map>
- <key>Comment</key>
- <string>Sound file for alerts (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>ed124764-705d-d497-167a-182cd9fa2e6c</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Sound file for alerts (uuid for sound asset)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>ed124764-705d-d497-167a-182cd9fa2e6c</string>
+ </map>
<key>UISndBadKeystroke</key>
- <map>
- <key>Comment</key>
- <string>Sound file for invalid keystroke (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>2ca849ba-2885-4bc3-90ef-d4987a5b983a</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Sound file for invalid keystroke (uuid for sound asset)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>2ca849ba-2885-4bc3-90ef-d4987a5b983a</string>
+ </map>
<key>UISndClick</key>
- <map>
- <key>Comment</key>
- <string>Sound file for mouse click (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>4c8c3c77-de8d-bde2-b9b8-32635e0fd4a6</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Sound file for mouse click (uuid for sound asset)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>4c8c3c77-de8d-bde2-b9b8-32635e0fd4a6</string>
+ </map>
<key>UISndClickRelease</key>
- <map>
- <key>Comment</key>
- <string>Sound file for mouse button release (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>4c8c3c77-de8d-bde2-b9b8-32635e0fd4a6</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Sound file for mouse button release (uuid for sound asset)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>4c8c3c77-de8d-bde2-b9b8-32635e0fd4a6</string>
+ </map>
<key>UISndDebugSpamToggle</key>
- <map>
- <key>Comment</key>
- <string>Log UI sound effects as they are played</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Log UI sound effects as they are played</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>UISndHealthReductionF</key>
- <map>
- <key>Comment</key>
- <string>Sound file for female pain (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>219c5d93-6c09-31c5-fb3f-c5fe7495c115</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Sound file for female pain (uuid for sound asset)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>219c5d93-6c09-31c5-fb3f-c5fe7495c115</string>
+ </map>
<key>UISndHealthReductionM</key>
- <map>
- <key>Comment</key>
- <string>Sound file for male pain (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>e057c244-5768-1056-c37e-1537454eeb62</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Sound file for male pain (uuid for sound asset)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>e057c244-5768-1056-c37e-1537454eeb62</string>
+ </map>
<key>UISndHealthReductionThreshold</key>
- <map>
- <key>Comment</key>
- <string>Amount of health reduction required to trigger &quot;pain&quot; sound</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>10</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Amount of health reduction required to trigger "pain" sound</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>10.0</real>
+ </map>
<key>UISndInvalidOp</key>
- <map>
- <key>Comment</key>
- <string>Sound file for invalid operations (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>4174f859-0d3d-c517-c424-72923dc21f65</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Sound file for invalid operations (uuid for sound asset)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>4174f859-0d3d-c517-c424-72923dc21f65</string>
+ </map>
<key>UISndMoneyChangeDown</key>
- <map>
- <key>Comment</key>
- <string>Sound file for L$ balance increase (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>104974e3-dfda-428b-99ee-b0d4e748d3a3</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Sound file for L$ balance increase (uuid for sound asset)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>104974e3-dfda-428b-99ee-b0d4e748d3a3</string>
+ </map>
<key>UISndMoneyChangeThreshold</key>
- <map>
- <key>Comment</key>
- <string>Amount of change in L$ balance required to trigger &quot;money&quot; sound</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>50</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Amount of change in L$ balance required to trigger "money" sound</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>50.0</real>
+ </map>
<key>UISndMoneyChangeUp</key>
- <map>
- <key>Comment</key>
- <string>Sound file for L$ balance decrease(uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>77a018af-098e-c037-51a6-178f05877c6f</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Sound file for L$ balance decrease(uuid for sound asset)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>77a018af-098e-c037-51a6-178f05877c6f</string>
+ </map>
<key>UISndNewIncomingIMSession</key>
- <map>
- <key>Comment</key>
- <string>Sound file for new instant message session(uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>67cc2844-00f3-2b3c-b991-6418d01e1bb7</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Sound file for new instant message session(uuid for sound asset)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>67cc2844-00f3-2b3c-b991-6418d01e1bb7</string>
+ </map>
<key>UISndObjectCreate</key>
- <map>
- <key>Comment</key>
- <string>Sound file for object creation (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>f4a0660f-5446-dea2-80b7-6482a082803c</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Sound file for object creation (uuid for sound asset)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>f4a0660f-5446-dea2-80b7-6482a082803c</string>
+ </map>
<key>UISndObjectDelete</key>
- <map>
- <key>Comment</key>
- <string>Sound file for object deletion (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>0cb7b00a-4c10-6948-84de-a93c09af2ba9</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Sound file for object deletion (uuid for sound asset)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>0cb7b00a-4c10-6948-84de-a93c09af2ba9</string>
+ </map>
<key>UISndObjectRezIn</key>
- <map>
- <key>Comment</key>
- <string>Sound file for rezzing objects (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>3c8fc726-1fd6-862d-fa01-16c5b2568db6</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Sound file for rezzing objects (uuid for sound asset)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>3c8fc726-1fd6-862d-fa01-16c5b2568db6</string>
+ </map>
<key>UISndObjectRezOut</key>
- <map>
- <key>Comment</key>
- <string>Sound file for derezzing objects (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>00000000-0000-0000-0000-000000000000</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Sound file for derezzing objects (uuid for sound asset)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </map>
<key>UISndPieMenuAppear</key>
- <map>
- <key>Comment</key>
- <string>Sound file for opening pie menu (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>8eaed61f-92ff-6485-de83-4dcc938a478e</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Sound file for opening pie menu (uuid for sound asset)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>8eaed61f-92ff-6485-de83-4dcc938a478e</string>
+ </map>
<key>UISndPieMenuHide</key>
- <map>
- <key>Comment</key>
- <string>Sound file for closing pie menu (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>00000000-0000-0000-0000-000000000000</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Sound file for closing pie menu (uuid for sound asset)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </map>
<key>UISndPieMenuSliceHighlight0</key>
- <map>
- <key>Comment</key>
- <string>Sound file for selecting pie menu item 0 (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>d9f73cf8-17b4-6f7a-1565-7951226c305d</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Sound file for selecting pie menu item 0 (uuid for sound asset)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>d9f73cf8-17b4-6f7a-1565-7951226c305d</string>
+ </map>
<key>UISndPieMenuSliceHighlight1</key>
- <map>
- <key>Comment</key>
- <string>Sound file for selecting pie menu item 1 (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>f6ba9816-dcaf-f755-7b67-51b31b6233e5</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Sound file for selecting pie menu item 1 (uuid for sound asset)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>f6ba9816-dcaf-f755-7b67-51b31b6233e5</string>
+ </map>
<key>UISndPieMenuSliceHighlight2</key>
- <map>
- <key>Comment</key>
- <string>Sound file for selecting pie menu item 2 (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>7aff2265-d05b-8b72-63c7-dbf96dc2f21f</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Sound file for selecting pie menu item 2 (uuid for sound asset)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>7aff2265-d05b-8b72-63c7-dbf96dc2f21f</string>
+ </map>
<key>UISndPieMenuSliceHighlight3</key>
- <map>
- <key>Comment</key>
- <string>Sound file for selecting pie menu item 3 (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>09b2184e-8601-44e2-afbb-ce37434b8ba1</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Sound file for selecting pie menu item 3 (uuid for sound asset)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>09b2184e-8601-44e2-afbb-ce37434b8ba1</string>
+ </map>
<key>UISndPieMenuSliceHighlight4</key>
- <map>
- <key>Comment</key>
- <string>Sound file for selecting pie menu item 4 (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>bbe4c7fc-7044-b05e-7b89-36924a67593c</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Sound file for selecting pie menu item 4 (uuid for sound asset)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>bbe4c7fc-7044-b05e-7b89-36924a67593c</string>
+ </map>
<key>UISndPieMenuSliceHighlight5</key>
- <map>
- <key>Comment</key>
- <string>Sound file for selecting pie menu item 5 (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>d166039b-b4f5-c2ec-4911-c85c727b016c</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Sound file for selecting pie menu item 5 (uuid for sound asset)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>d166039b-b4f5-c2ec-4911-c85c727b016c</string>
+ </map>
<key>UISndPieMenuSliceHighlight6</key>
- <map>
- <key>Comment</key>
- <string>Sound file for selecting pie menu item 6 (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>242af82b-43c2-9a3b-e108-3b0c7e384981</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Sound file for selecting pie menu item 6 (uuid for sound asset)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>242af82b-43c2-9a3b-e108-3b0c7e384981</string>
+ </map>
<key>UISndPieMenuSliceHighlight7</key>
- <map>
- <key>Comment</key>
- <string>Sound file for selecting pie menu item 7 (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>c1f334fb-a5be-8fe7-22b3-29631c21cf0b</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Sound file for selecting pie menu item 7 (uuid for sound asset)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>c1f334fb-a5be-8fe7-22b3-29631c21cf0b</string>
+ </map>
<key>UISndSnapshot</key>
- <map>
- <key>Comment</key>
- <string>Sound file for taking a snapshot (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>3d09f582-3851-c0e0-f5ba-277ac5c73fb4</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Sound file for taking a snapshot (uuid for sound asset)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>3d09f582-3851-c0e0-f5ba-277ac5c73fb4</string>
+ </map>
<key>UISndStartIM</key>
- <map>
- <key>Comment</key>
- <string>Sound file for starting a new IM session (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>c825dfbc-9827-7e02-6507-3713d18916c1</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Sound file for starting a new IM session (uuid for sound asset)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>c825dfbc-9827-7e02-6507-3713d18916c1</string>
+ </map>
<key>UISndTeleportOut</key>
- <map>
- <key>Comment</key>
- <string>Sound file for teleporting (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>d7a9a565-a013-2a69-797d-5332baa1a947</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Sound file for teleporting (uuid for sound asset)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>d7a9a565-a013-2a69-797d-5332baa1a947</string>
+ </map>
<key>UISndTyping</key>
- <map>
- <key>Comment</key>
- <string>Sound file for starting to type a chat message (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>5e191c7b-8996-9ced-a177-b2ac32bfea06</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Sound file for starting to type a chat message (uuid for sound asset)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>5e191c7b-8996-9ced-a177-b2ac32bfea06</string>
+ </map>
<key>UISndWindowClose</key>
- <map>
- <key>Comment</key>
- <string>Sound file for closing a window (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>2c346eda-b60c-ab33-1119-b8941916a499</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Sound file for closing a window (uuid for sound asset)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>2c346eda-b60c-ab33-1119-b8941916a499</string>
+ </map>
<key>UISndWindowOpen</key>
- <map>
- <key>Comment</key>
- <string>Sound file for opening a window (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>c80260ba-41fd-8a46-768a-6bf236360e3a</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Sound file for opening a window (uuid for sound asset)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>c80260ba-41fd-8a46-768a-6bf236360e3a</string>
+ </map>
<key>UseAltKeyForMenus</key>
- <map>
- <key>Comment</key>
- <string>Access menus via keyboard by tapping Alt</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Access menus via keyboard by tapping Alt</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>UseChatBubbles</key>
- <map>
- <key>Comment</key>
- <string>Show chat above avatars head in chat bubbles</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Show chat above avatars head in chat bubbles</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>UseDebugLogin</key>
- <map>
- <key>Comment</key>
- <string>Provides extra control over which grid to connect to</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Provides extra control over which grid to connect to</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>UseDebugMenus</key>
- <map>
- <key>Comment</key>
- <string>Turns on &quot;Debug&quot; menu</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Turns on "Debug" menu</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>UseDefaultColorPicker</key>
- <map>
- <key>Comment</key>
- <string>Use color picker supplied by operating system</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Use color picker supplied by operating system</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>UseEnergy</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string />
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>UseExternalBrowser</key>
- <map>
- <key>Comment</key>
- <string>Use default browser when opening web pages instead of in-world browser.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Use default browser when opening web pages instead of in-world browser.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>UseFreezeFrame</key>
- <map>
- <key>Comment</key>
- <string>Freeze time when taking snapshots.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Freeze time when taking snapshots.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>UseOcclusion</key>
- <map>
- <key>Comment</key>
- <string>Enable object culling based on occlusion (coverage) by other objects</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enable object culling based on occlusion (coverage) by other objects</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
+ <key>UseStartScreen</key>
+ <map>
+ <key>Comment</key>
+ <string>Whether to load a start screen image or not.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>UseWebPagesOnPrims</key>
- <map>
- <key>Comment</key>
- <string>[NOT USED]</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>[NOT USED]</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>UserConnectionPort</key>
- <map>
- <key>Comment</key>
- <string>Port that this client transmits on.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Port that this client transmits on.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>U32</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>UserLogFile</key>
- <map>
- <key>Comment</key>
- <string>User specified log file name.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string />
- </map>
+ <map>
+ <key>Comment</key>
+ <string>User specified log file name.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string />
+ </map>
<key>UserLoginInfo</key>
- <map>
- <key>Comment</key>
- <string>Users loging data.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>LLSD</string>
- <key>Value</key>
- <map />
- </map>
- <key>UseStartScreen</key>
- <map>
- <key>Comment</key>
- <string>Whether to load a start screen image or not.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Users loging data.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>LLSD</string>
+ <key>Value</key>
+ <map>
+ </map>
+ </map>
<key>VFSOldSize</key>
- <map>
- <key>Comment</key>
- <string>[DO NOT MODIFY] Controls resizing of local file cache</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>[DO NOT MODIFY] Controls resizing of local file cache</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>U32</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>VFSSalt</key>
- <map>
- <key>Comment</key>
- <string>[DO NOT MODIFY] Controls local file caching behavior</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>[DO NOT MODIFY] Controls local file caching behavior</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>U32</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>VectorizeEnable</key>
- <map>
- <key>Comment</key>
- <string>Enable general vector operations and data alignment.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enable general vector operations and data alignment.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>VectorizePerfTest</key>
- <map>
- <key>Comment</key>
- <string>Test SSE/vectorization performance and choose fastest version.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Test SSE/vectorization performance and choose fastest version.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>VectorizeProcessor</key>
- <map>
- <key>Comment</key>
- <string>0=Compiler Default, 1=SSE, 2=SSE2, autodetected</string>
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>0=Compiler Default, 1=SSE, 2=SSE2, autodetected</string>
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>U32</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>VectorizeSkin</key>
- <map>
- <key>Comment</key>
- <string>Enable vector operations for avatar skinning.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enable vector operations for avatar skinning.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>VelocityInterpolate</key>
- <map>
- <key>Comment</key>
- <string>Extrapolate object motion from last packet based on received velocity</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Extrapolate object motion from last packet based on received velocity</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>VerboseLogs</key>
- <map>
- <key>Comment</key>
- <string>Display source file and line number for each log item for debugging purposes</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Display source file and line number for each log item for debugging purposes</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>VersionChannelName</key>
- <map>
- <key>Comment</key>
- <string>Versioning Channel Name.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>Second Life Release</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Versioning Channel Name.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>Second Life Release</string>
+ </map>
<key>VertexShaderEnable</key>
- <map>
- <key>Comment</key>
- <string>Enable/disable all GLSL shaders (debug)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enable/disable all GLSL shaders (debug)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>VivoxDebugLevel</key>
- <map>
- <key>Comment</key>
- <string>Logging level to use when launching the vivox daemon</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>-1</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Logging level to use when launching the vivox daemon</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>-1</string>
+ </map>
<key>VivoxDebugServerName</key>
- <map>
- <key>Comment</key>
- <string>Hostname of the vivox account server to use for voice when not connected to Agni.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>bhd.vivox.com</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Hostname of the vivox account server to use for voice when not connected to Agni.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>bhd.vivox.com</string>
+ </map>
<key>VoiceCallsFriendsOnly</key>
- <map>
- <key>Comment</key>
- <string>Only accept voice calls from residents on your friends list</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Only accept voice calls from residents on your friends list</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>VoiceEarLocation</key>
- <map>
- <key>Comment</key>
- <string>Location of the virtual ear for voice</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Location of the virtual ear for voice</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>VoiceHost</key>
- <map>
- <key>Comment</key>
- <string>Client SLVoice host to connect to</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>127.0.0.1</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Client SLVoice host to connect to</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>127.0.0.1</string>
+ </map>
<key>VoiceImageLevel0</key>
- <map>
- <key>Comment</key>
- <string>Texture UUID for voice image level 0</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>041ee5a0-cb6a-9ac5-6e49-41e9320507d5</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Texture UUID for voice image level 0</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>041ee5a0-cb6a-9ac5-6e49-41e9320507d5</string>
+ </map>
<key>VoiceImageLevel1</key>
- <map>
- <key>Comment</key>
- <string>Texture UUID for voice image level 1</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Texture UUID for voice image level 1</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
+ </map>
<key>VoiceImageLevel2</key>
- <map>
- <key>Comment</key>
- <string>Texture UUID for voice image level 2</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Texture UUID for voice image level 2</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
+ </map>
<key>VoiceImageLevel3</key>
- <map>
- <key>Comment</key>
- <string>Texture UUID for voice image level 3</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Texture UUID for voice image level 3</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
+ </map>
<key>VoiceImageLevel4</key>
- <map>
- <key>Comment</key>
- <string>Texture UUID for voice image level 4</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Texture UUID for voice image level 4</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
+ </map>
<key>VoiceImageLevel5</key>
- <map>
- <key>Comment</key>
- <string>Texture UUID for voice image level 5</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Texture UUID for voice image level 5</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
+ </map>
<key>VoiceImageLevel6</key>
- <map>
- <key>Comment</key>
- <string>Texture UUID for voice image level 6</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Texture UUID for voice image level 6</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
+ </map>
<key>VoiceInputAudioDevice</key>
- <map>
- <key>Comment</key>
- <string>Audio input device to use for voice</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>Default</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Audio input device to use for voice</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>Default</string>
+ </map>
<key>VoiceOutputAudioDevice</key>
- <map>
- <key>Comment</key>
- <string>Audio output device to use for voice</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>Default</string>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Audio output device to use for voice</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>Default</string>
+ </map>
<key>VoicePort</key>
- <map>
- <key>Comment</key>
- <string>Client SLVoice port to connect to</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>44124</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Client SLVoice port to connect to</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>U32</string>
+ <key>Value</key>
+ <integer>44124</integer>
+ </map>
+ <key>WLSkyDetail</key>
+ <map>
+ <key>Comment</key>
+ <string>Controls vertex detail on the WindLight sky. Lower numbers will give better performance and uglier skies.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>U32</string>
+ <key>Value</key>
+ <integer>64</integer>
+ </map>
<key>WarnAboutBadPCI</key>
- <map>
- <key>Comment</key>
- <string>Enables AboutBadPCI warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enables AboutBadPCI warning dialog</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>WarnAboutDirectX9</key>
- <map>
- <key>Comment</key>
- <string>Enables AboutDirectX9 warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enables AboutDirectX9 warning dialog</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>WarnAboutOldGraphicsDriver</key>
- <map>
- <key>Comment</key>
- <string>Enables AboutOldGraphicsDriver warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enables AboutOldGraphicsDriver warning dialog</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>WarnAboutPCIGraphics</key>
- <map>
- <key>Comment</key>
- <string>Enables AboutPCIGraphics warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enables AboutPCIGraphics warning dialog</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>WarnBrowserLaunch</key>
- <map>
- <key>Comment</key>
- <string>Enables BrowserLaunch warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enables BrowserLaunch warning dialog</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>WarnDeedObject</key>
- <map>
- <key>Comment</key>
- <string>Enables DeedObject warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enables DeedObject warning dialog</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>WarnFirstAppearance</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstAppearance warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>WarnFirstMedia</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstMedia warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enables FirstAppearance warning dialog</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>WarnFirstAttach</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstAttach warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enables FirstAttach warning dialog</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>WarnFirstBalanceDecrease</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstBalanceDecrease warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enables FirstBalanceDecrease warning dialog</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>WarnFirstBalanceIncrease</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstBalanceIncrease warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enables FirstBalanceIncrease warning dialog</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>WarnFirstBuild</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstBuild warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enables FirstBuild warning dialog</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>WarnFirstDebugMenus</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstDebugMenus warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enables FirstDebugMenus warning dialog</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>WarnFirstFlexible</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstFlexible warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enables FirstFlexible warning dialog</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>WarnFirstGoTo</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstGoTo warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enables FirstGoTo warning dialog</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>WarnFirstInventory</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstInventory warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enables FirstInventory warning dialog</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>WarnFirstLeftClickNoHit</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstLeftClickNoHit warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enables FirstLeftClickNoHit warning dialog</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>WarnFirstMap</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstMap warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enables FirstMap warning dialog</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>WarnFirstMedia</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstMedia warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enables FirstMedia warning dialog</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>WarnFirstOverrideKeys</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstOverrideKeys warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enables FirstOverrideKeys warning dialog</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>WarnFirstSandbox</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstSandbox warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enables FirstSandbox warning dialog</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>WarnFirstSculptedPrim</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstSculptedPrim warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enables FirstSculptedPrim warning dialog</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>WarnFirstSit</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstSit warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enables FirstSit warning dialog</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>WarnFirstStreamingMusic</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstStreamingMusic warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enables FirstStreamingMusic warning dialog</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>WarnFirstStreamingVideo</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstStreamingVideo warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enables FirstStreamingVideo warning dialog</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>WarnFirstTeleport</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstTeleport warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enables FirstTeleport warning dialog</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>WarnFirstVoice</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstVoice warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enables FirstVoice warning dialog</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>WarnNewClassified</key>
- <map>
- <key>Comment</key>
- <string>Enables NewClassified warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enables NewClassified warning dialog</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>WarnQuickTimeInstalled</key>
- <map>
- <key>Comment</key>
- <string>Enables QuickTimeInstalled warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enables QuickTimeInstalled warning dialog</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>WarnReturnToOwner</key>
- <map>
- <key>Comment</key>
- <string>Enables ReturnToOwner warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>WindLightUseAtmosShaders</key>
- <map>
- <key>Comment</key>
- <string>Whether to enable or disable WindLight atmospheric shaders.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Enables ReturnToOwner warning dialog</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
+ <key>WatchdogEnabled</key>
+ <map>
+ <key>Comment</key>
+ <string>Controls whether the thread watchdog timer is activated.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
+ <key>WaterEditPresets</key>
+ <map>
+ <key>Comment</key>
+ <string>Whether to be able to edit the water defaults or not</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
+ <key>WaterGLFogDensityScale</key>
+ <map>
+ <key>Comment</key>
+ <string>Maps shader water fog density to gl fog density</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.02</real>
+ </map>
+ <key>WaterGLFogDepthFloor</key>
+ <map>
+ <key>Comment</key>
+ <string>Controls how dark water gl fog can get</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.25</real>
+ </map>
+ <key>WaterGLFogDepthScale</key>
+ <map>
+ <key>Comment</key>
+ <string>Controls how quickly gl fog gets dark under water</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>50.0</real>
+ </map>
+ <key>WindLightUseAtmosShaders</key>
+ <map>
+ <key>Comment</key>
+ <string>Whether to enable or disable WindLight atmospheric shaders.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>WindowHeight</key>
- <map>
- <key>Comment</key>
- <string>SL viewer window height</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>700</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>SL viewer window height</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>700</integer>
+ </map>
<key>WindowMaximized</key>
- <map>
- <key>Comment</key>
- <string>SL viewer window maximized on login</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>SL viewer window maximized on login</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>WindowWidth</key>
- <map>
- <key>Comment</key>
- <string>SL viewer window width</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>1000</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>SL viewer window width</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>1000</integer>
+ </map>
<key>WindowX</key>
- <map>
- <key>Comment</key>
- <string>X coordinate of lower left corner of SL viewer window, relative to primary display (pixels)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>10</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>X coordinate of lower left corner of SL viewer window, relative to primary display (pixels)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>10</integer>
+ </map>
<key>WindowY</key>
- <map>
- <key>Comment</key>
- <string>Y coordinate of lower left corner of SL viewer window, relative to primary display (pixels)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>10</integer>
- </map>
- <key>WLSkyDetail</key>
- <map>
- <key>Comment</key>
- <string>Controls vertex detail on the WindLight sky. Lower numbers will give better performance and uglier skies.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>64</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Y coordinate of lower left corner of SL viewer window, relative to primary display (pixels)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>10</integer>
+ </map>
<key>XferThrottle</key>
- <map>
- <key>Comment</key>
- <string>Maximum allowable downstream bandwidth for asset transfers (bits per second)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>150000</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Maximum allowable downstream bandwidth for asset transfers (bits per second)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>150000.0</real>
+ </map>
<key>YawFromMousePosition</key>
- <map>
- <key>Comment</key>
- <string>Horizontal range over which avatar head tracks mouse position (degrees of head rotation from left of window to right)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>90</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Horizontal range over which avatar head tracks mouse position (degrees of head rotation from left of window to right)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>90.0</real>
+ </map>
<key>YieldTime</key>
- <map>
- <key>Comment</key>
- <string>Yield some time to the local host.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>-1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Yield some time to the local host.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>-1</integer>
+ </map>
+ <key>ZoomDirect</key>
+ <map>
+ <key>Comment</key>
+ <string>Map Joystick zoom axis directly to camera zoom.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ZoomTime</key>
- <map>
- <key>Comment</key>
- <string>Time of transition between different camera modes (seconds)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.4000000059604644775390625</real>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Time of transition between different camera modes (seconds)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.40000000596</real>
+ </map>
<key>llOwnerSayChatColor</key>
- <map>
- <key>Comment</key>
- <string>Color of chat messages from objects only visible to the owner</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0.9900000095367431640625</real>
- <real>0.9900000095367431640625</real>
- <real>0.689999997615814208984375</real>
- <real>1</real>
- </array>
- </map>
- <key>ParcelMediaAutoPlayEnable</key>
- <map>
- <key>Comment</key>
- <string>Auto play parcel media when available</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Color of chat messages from objects only visible to the owner</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Color4</string>
+ <key>Value</key>
+ <array>
+ <real>0.990000009537</real>
+ <real>0.990000009537</real>
+ <real>0.689999997616</real>
+ <real>1.0</real>
+ </array>
+ </map>
<key>particlesbeacon</key>
- <map>
- <key>Comment</key>
- <string>Beacon / Highlight particle generators</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Beacon / Highlight particle generators</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>physicalbeacon</key>
- <map>
- <key>Comment</key>
- <string>Beacon / Highlight physical objects</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Beacon / Highlight physical objects</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>renderbeacons</key>
- <map>
- <key>Comment</key>
- <string>Beacon / Highlight particle generators</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Beacon / Highlight particle generators</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>renderhighlights</key>
- <map>
- <key>Comment</key>
- <string>Beacon / Highlight scripted objects with touch function</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Beacon / Highlight scripted objects with touch function</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>scriptsbeacon</key>
- <map>
- <key>Comment</key>
- <string>Beacon / Highlight scripted objects</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Beacon / Highlight scripted objects</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>scripttouchbeacon</key>
- <map>
- <key>Comment</key>
- <string>Beacon / Highlight scripted objects with touch function</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
+ <map>
+ <key>Comment</key>
+ <string>Beacon / Highlight scripted objects with touch function</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>soundsbeacon</key>
- <map>
- <key>Comment</key>
- <string>Beacon / Highlight sound generators</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>SkyEditPresets</key>
- <map>
- <key>Comment</key>
- <string>Whether to be able to edit the sky defaults or not</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>WaterGLFogDepthFloor</key>
- <map>
- <key>Comment</key>
- <string>Controls how dark water gl fog can get</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.25</real>
- </map>
- <key>WaterGLFogDepthScale</key>
- <map>
- <key>Comment</key>
- <string>Controls how quickly gl fog gets dark under water</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>50.0</real>
- </map>
- <key>WaterGLFogDensityScale</key>
- <map>
- <key>Comment</key>
- <string>Maps shader water fog density to gl fog density</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.02</real>
- </map>
- <key>EnableRippleWater</key>
- <map>
- <key>Comment</key>
- <string>Whether to use ripple water shader or not</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>WaterEditPresets</key>
- <map>
- <key>Comment</key>
- <string>Whether to be able to edit the water defaults or not</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>FloaterEnvRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for Environment Editor</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>50</integer>
- <integer>150</integer>
- <integer>650</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterAdvancedSkyRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for Advanced Sky Editor</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>50</integer>
- <integer>220</integer>
- <integer>450</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterDayCycleRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for Day Cycle Editor</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>50</integer>
- <integer>450</integer>
- <integer>300</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterAdvancedWaterRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for Advanced Water Editor</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>50</integer>
- <integer>220</integer>
- <integer>450</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>RenderFastAlpha</key>
- <map>
- <key>Comment</key>
- <string>Use lossy alpha rendering optimization (opaque/nonexistent small alpha faces).</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>RenderDeferred</key>
- <map>
- <key>Comment</key>
- <string>Use deferred rendering pipeline.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>RenderFSAASamples</key>
- <map>
- <key>Comment</key>
- <string>Number of samples to use for FSAA (0 = no AA).</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>RenderTextureMemoryMultiple</key>
- <map>
- <key>Comment</key>
- <string>Multiple of texture memory value to use (should fit: 0 &lt; value &lt;= 1.0)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1.0</real>
- </map>
- <key>Disregard128DefaultDrawDistance</key>
- <map>
- <key>Comment</key>
- <string>Whether to use the auto default to 128 draw distance</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <real>1</real>
- </map>
- <key>Disregard96DefaultDrawDistance</key>
- <map>
- <key>Comment</key>
- <string>Whether to use the auto default to 96 draw distance</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <real>1</real>
- </map>
-
- <key>AvatarAxisDeadZone0</key>
- <map>
- <key>Comment</key>
- <string>Avatar axis 0 dead zone.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.1</real>
- </map>
- <key>AvatarAxisDeadZone1</key>
- <map>
- <key>Comment</key>
- <string>Avatar axis 1 dead zone.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.1</real>
- </map>
- <key>AvatarAxisDeadZone2</key>
- <map>
- <key>Comment</key>
- <string>Avatar axis 2 dead zone.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.1</real>
- </map>
- <key>AvatarAxisDeadZone3</key>
- <map>
- <key>Comment</key>
- <string>Avatar axis 3 dead zone.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.1</real>
- </map>
- <key>AvatarAxisDeadZone4</key>
- <map>
- <key>Comment</key>
- <string>Avatar axis 4 dead zone.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.1</real>
- </map>
- <key>AvatarAxisDeadZone5</key>
- <map>
- <key>Comment</key>
- <string>Avatar axis 5 dead zone.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.1</real>
- </map>
- <key>AvatarAxisScale0</key>
- <map>
- <key>Comment</key>
- <string>Avatar axis 0 scaler.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
- <key>AvatarAxisScale1</key>
- <map>
- <key>Comment</key>
- <string>Avatar axis 1 scaler.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
- <key>AvatarAxisScale2</key>
- <map>
- <key>Comment</key>
- <string>Avatar axis 2 scaler.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
- <key>AvatarAxisScale3</key>
- <map>
- <key>Comment</key>
- <string>Avatar axis 3 scaler.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
- <key>AvatarAxisScale4</key>
- <map>
- <key>Comment</key>
- <string>Avatar axis 4 scaler.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
- <key>AvatarAxisScale5</key>
- <map>
- <key>Comment</key>
- <string>Avatar axis 5 scaler.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
- <key>AvatarFeathering</key>
- <map>
- <key>Comment</key>
- <string>Avatar feathering (less is softer)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>16</real>
- </map>
-
- <key>BuildAxisDeadZone0</key>
- <map>
- <key>Comment</key>
- <string>Build axis 0 dead zone.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.1</real>
- </map>
- <key>BuildAxisDeadZone1</key>
- <map>
- <key>Comment</key>
- <string>Build axis 1 dead zone.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.1</real>
- </map>
- <key>BuildAxisDeadZone2</key>
- <map>
- <key>Comment</key>
- <string>Build axis 2 dead zone.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.1</real>
- </map>
- <key>BuildAxisDeadZone3</key>
- <map>
- <key>Comment</key>
- <string>Build axis 3 dead zone.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.1</real>
- </map>
- <key>BuildAxisDeadZone4</key>
- <map>
- <key>Comment</key>
- <string>Build axis 4 dead zone.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.1</real>
- </map>
- <key>BuildAxisDeadZone5</key>
- <map>
- <key>Comment</key>
- <string>Build axis 5 dead zone.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.1</real>
- </map>
- <key>BuildAxisScale0</key>
- <map>
- <key>Comment</key>
- <string>Build axis 0 scaler.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
- <key>BuildAxisScale1</key>
- <map>
- <key>Comment</key>
- <string>Build axis 1 scaler.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
- <key>BuildAxisScale2</key>
- <map>
- <key>Comment</key>
- <string>Build axis 2 scaler.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
- <key>BuildAxisScale3</key>
- <map>
- <key>Comment</key>
- <string>Build axis 3 scaler.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
- <key>BuildAxisScale4</key>
- <map>
- <key>Comment</key>
- <string>Build axis 4 scaler.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
- <key>BuildAxisScale5</key>
- <map>
- <key>Comment</key>
- <string>Build axis 5 scaler.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
- <key>BuildFeathering</key>
- <map>
- <key>Comment</key>
- <string>Build feathering (less is softer)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>16</real>
- </map>
-
+ <map>
+ <key>Comment</key>
+ <string>Beacon / Highlight sound generators</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
</map>
+ </map>
</llsd>
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index a6173f45df..2b5691ffe8 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -64,7 +64,7 @@
#include "llurldispatcher.h"
#include "llurlhistory.h"
#include "llfirstuse.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "llweb.h"
#include "llsecondlifeurls.h"
@@ -192,24 +192,6 @@
// viewer.cpp - these are only used in viewer, should be easily moved.
extern void disable_win_error_reporting();
-//#define APPLE_PREVIEW // Define this if you're doing a preview build on the Mac
-#if LL_RELEASE_FOR_DOWNLOAD
-// Default userserver for production builds is agni
-#ifndef APPLE_PREVIEW
-static EGridInfo GridDefaultChoice = GRID_INFO_AGNI;
-#else
-static EGridInfo GridDefaultChoice = GRID_INFO_ADITI;
-#endif
-#else
-// Default userserver for development builds is none
-static EGridInfo GridDefaultChoice = GRID_INFO_NONE;
-#endif
-
-#if LL_WINDOWS
-extern void create_console();
-#endif
-
-
#if LL_DARWIN
#include <Carbon/Carbon.h>
extern void init_apple_menu(const char* product);
@@ -287,6 +269,7 @@ BOOL gUseWireframe = FALSE;
LLVFS* gStaticVFS = NULL;
LLMemoryInfo gSysMemory;
+U64 gMemoryAllocated = 0; // updated in display_stats() in llviewerdisplay.cpp
LLString gLastVersionChannel;
@@ -303,6 +286,7 @@ BOOL gPeriodicSlowFrame = FALSE;
BOOL gCrashOnStartup = FALSE;
BOOL gLLErrorActivated = FALSE;
BOOL gLogoutInProgress = FALSE;
+
////////////////////////////////////////////////////////////
// Internal globals... that should be removed.
static LLString gArgs;
@@ -338,6 +322,48 @@ void idle_afk_check()
}
}
+//this function checks if the system can allocate (num_chunk)MB memory successfully.
+//if this check fails, the allocated memory is NOT freed.
+void idle_mem_check(S32 num_chunk)
+{
+ //this flag signals if memory allocation check is necessary
+ static BOOL check = TRUE ;
+
+ if(!check) //if memory check fails before, do not repeat it.
+ {
+ return ;
+ }
+ check = FALSE ; //before memory check for this frame, turn off check signal for the next frame.
+
+ S32 i = 0 ;
+ char**p = new char*[num_chunk] ;
+ if(!p)
+ {
+ return ;
+ }
+ for(i = 0 ; i < num_chunk ; i++)
+ {
+ //1MB per chunk
+ //if the allocation fails, the system should catch it.
+ p[i] = new char[1024 * 1024] ;
+
+ if(!p[i]) //in case that system try-catch is turned off
+ {
+ return ;
+ }
+ }
+
+ //release memory if the allocation check does not fail.
+ for(i = 0 ; i < num_chunk ; i++)
+ {
+ delete[] p[i] ;
+ }
+ delete[] p ;
+
+ //memory check for this frame succeeds, turn on next frame check.
+ check = TRUE ;
+}
+
// A callback set in LLAppViewer::init()
static void ui_audio_callback(const LLUUID& uuid)
{
@@ -369,6 +395,24 @@ void request_initial_instant_messages()
}
}
+// A settings system callback for CrashSubmitBehavior
+bool handleCrashSubmitBehaviorChanged(const LLSD& newvalue)
+{
+ S32 cb = newvalue.asInteger();
+ const S32 NEVER_SUBMIT_REPORT = 2;
+ if(cb == NEVER_SUBMIT_REPORT)
+ {
+// LLWatchdog::getInstance()->cleanup(); // SJB: cleaning up a running watchdog is unsafe
+ LLAppViewer::instance()->destroyMainloopTimeout();
+ }
+ else if(gSavedSettings.getBOOL("WatchdogEnabled") == TRUE)
+ {
+// LLWatchdog::getInstance()->init();
+// LLAppViewer::instance()->initMainloopTimeout("Mainloop Resume");
+ }
+ return true;
+}
+
// Use these strictly for things that are constructed at startup,
// or for things that are performance critical. JC
static void settings_to_globals()
@@ -464,72 +508,32 @@ static void settings_modify()
gSavedSettings.setBOOL("PTTCurrentlyEnabled", TRUE); //gSavedSettings.getBOOL("EnablePushToTalk"));
}
-void initGridChoice()
+void LLAppViewer::initGridChoice()
{
- LLString gridChoice = gSavedSettings.getString("GridChoice");
- if(!gridChoice.empty())
- // Used to show first chunk of each argument passed in the
- // window title.
- {
- // find the grid choice from the user setting.
- int gridIndex = GRID_INFO_NONE;
- for(;gridIndex < GRID_INFO_OTHER; ++gridIndex )
- {
- if(0 == LLString::compareInsensitive(gGridInfo[gridIndex].mLabel, gridChoice.c_str()))
- {
- gGridChoice = (EGridInfo)gridIndex;
-
- if(GRID_INFO_LOCAL == gGridChoice)
- {
- gGridName = LOOPBACK_ADDRESS_STRING;
- break;
- }
- else
- {
- gGridName = gGridInfo[gGridChoice].mName;
- break;
- }
- }
- }
-
- if(GRID_INFO_OTHER == gridIndex)
- {
- // *FIX:MEP Can and should we validate that this is an IP address?
- gGridChoice = (EGridInfo)gridIndex;
- gGridName = llformat("%s", gSavedSettings.getString("GridChoice").c_str());
-
- }
- }
-
-
-#if !LL_RELEASE_FOR_DOWNLOAD
- if (gGridChoice == GRID_INFO_NONE)
- {
- // Development version: load last server choice by default (overridden by cmd line args)
- S32 server = gSavedSettings.getS32("ServerChoice");
- if (server != 0)
- gGridChoice = (EGridInfo)llclamp(server, 0, (S32)GRID_INFO_COUNT - 1);
- if (server == GRID_INFO_OTHER)
+ // Load up the initial grid choice from:
+ // - hard coded defaults...
+ // - command line settings...
+ // - if dev build, persisted settings...
+
+ // Set the "grid choice", this is specified by command line.
+ std::string grid_choice = gSavedSettings.getString("CmdLineGridChoice");
+ LLViewerLogin::getInstance()->setGridChoice(grid_choice);
+
+ // Load last server choice by default
+ // ignored if the command line grid choice has been set
+ if(grid_choice.empty())
+ {
+ S32 server = gSavedSettings.getS32("ServerChoice");
+ server = llclamp(server, 0, (S32)GRID_INFO_COUNT - 1);
+ if(server == GRID_INFO_OTHER)
{
LLString custom_server = gSavedSettings.getString("CustomServer");
- if (custom_server.empty())
- {
- gGridName = "none";
- }
- else
- {
- gGridName = custom_server.c_str();
- }
+ LLViewerLogin::getInstance()->setGridChoice(custom_server);
+ }
+ else if(server != 0)
+ {
+ LLViewerLogin::getInstance()->setGridChoice((EGridInfo)server);
}
-
- gSavedSettings.setString("GridChoice", gGridInfo[gGridChoice].mLabel);
- }
-#endif
-
- if (gGridChoice == GRID_INFO_NONE)
- {
- gGridChoice = GridDefaultChoice;
- gSavedSettings.setString("GridChoice", gGridInfo[gGridChoice].mLabel);
}
}
@@ -577,7 +581,6 @@ LLTextureFetch* LLAppViewer::sTextureFetch = NULL;
LLAppViewer::LLAppViewer() :
mMarkerFile(NULL),
- mCrashBehavior(CRASH_BEHAVIOR_ASK),
mReportedCrash(false),
mNumSessions(0),
mPurgeCache(false),
@@ -586,7 +589,8 @@ LLAppViewer::LLAppViewer() :
mSavedFinalSnapshot(false),
mQuitRequested(false),
mLogoutRequestSent(false),
- mYieldTime(-1)
+ mYieldTime(-1),
+ mMainloopTimeout(NULL)
{
if(NULL != sInstance)
{
@@ -594,15 +598,11 @@ LLAppViewer::LLAppViewer() :
}
sInstance = this;
-
- // Initialize the mainloop timeout.
- mMainloopTimeout = new LLWatchdogTimeout();
}
LLAppViewer::~LLAppViewer()
{
- // Initialize the mainloop timeout.
- delete mMainloopTimeout;
+ destroyMainloopTimeout();
// If we got to this destructor somehow, the app didn't hang.
removeMarkerFile();
@@ -610,13 +610,6 @@ LLAppViewer::~LLAppViewer()
bool LLAppViewer::init()
{
- // *NOTE:Mani - LLCurl::initClass is not thread safe.
- // Called before threads are created.
- LLCurl::initClass();
-
- initThreads();
-
-
//
// Start of the application
//
@@ -629,7 +622,6 @@ bool LLAppViewer::init()
// that touches files should really go through the lldir API
gDirUtilp->initAppDirs("SecondLife");
-
initLogging();
//
@@ -638,6 +630,12 @@ bool LLAppViewer::init()
if (!initConfiguration())
return false;
+ // *NOTE:Mani - LLCurl::initClass is not thread safe.
+ // Called before threads are created.
+ LLCurl::initClass();
+
+ initThreads();
+
writeSystemInfo();
// Build a string representing the current version number.
@@ -888,10 +886,6 @@ bool LLAppViewer::init()
bool LLAppViewer::mainLoop()
{
- mMainloopTimeout = new LLWatchdogTimeout();
- // *FIX:Mani - Make this a setting, once new settings exist in this branch.
- mMainloopTimeout->setTimeout(5);
-
//-------------------------------------------
// Run main loop until time to quit
//-------------------------------------------
@@ -920,6 +914,8 @@ bool LLAppViewer::mainLoop()
{
LLFastTimer t(LLFastTimer::FTM_FRAME);
+ pingMainloopTimeout("Main:GatherInput");
+
{
LLFastTimer t2(LLFastTimer::FTM_MESSAGES);
#if LL_WINDOWS
@@ -940,8 +936,13 @@ bool LLAppViewer::mainLoop()
}
#endif
+ //at the beginning of every frame, check if the system can successfully allocate 10 * 1 MB memory.
+ idle_mem_check(10) ;
+
if (!LLApp::isExiting())
{
+ pingMainloopTimeout("Main:JoystickKeyboard");
+
// Scan keyboard for movement keys. Command keys and typing
// are handled by windows callbacks. Don't do this until we're
// done initializing. JC
@@ -956,6 +957,8 @@ bool LLAppViewer::mainLoop()
gKeyboard->scanKeyboard();
}
+ pingMainloopTimeout("Main:Messages");
+
// Update state based on messages, user input, object idle.
{
LLFastTimer t3(LLFastTimer::FTM_IDLE);
@@ -972,25 +975,34 @@ bool LLAppViewer::mainLoop()
if (gDoDisconnect && (LLStartUp::getStartupState() == STATE_STARTED))
{
+ pauseMainloopTimeout();
saveFinalSnapshot();
disconnectViewer();
+ resumeMainloopTimeout();
}
// Render scene.
if (!LLApp::isExiting())
{
+ pingMainloopTimeout("Main:Display");
display();
+ pingMainloopTimeout("Main:Snapshot");
LLFloaterSnapshot::update(); // take snapshots
#if LL_LCD_COMPILE
// update LCD Screen
+ pingMainloopTimeout("Main:LCD");
gLcdScreen->UpdateDisplay();
#endif
}
}
+ pingMainloopTimeout("Main:Sleep");
+
+ pauseMainloopTimeout();
+
// Sleep and run background threads
{
LLFastTimer t2(LLFastTimer::FTM_SLEEP);
@@ -1073,7 +1085,9 @@ bool LLAppViewer::mainLoop()
//LLVFSThread::sLocal->pause(); // Prevent the VFS thread from running while rendering.
//LLLFSThread::sLocal->pause(); // Prevent the LFS thread from running while rendering.
- mMainloopTimeout->ping();
+ resumeMainloopTimeout();
+
+ pingMainloopTimeout("Main:End");
}
}
@@ -1098,7 +1112,7 @@ bool LLAppViewer::mainLoop()
delete gServicePump;
- mMainloopTimeout->stop();
+ destroyMainloopTimeout();
llinfos << "Exiting main_loop" << llendflush;
@@ -1400,7 +1414,12 @@ bool LLAppViewer::initThreads()
static const bool enable_threads = true;
#endif
- LLWatchdog::getInstance()->init();
+ const S32 NEVER_SUBMIT_REPORT = 2;
+ if(TRUE == gSavedSettings.getBOOL("WatchdogEnabled")
+ && (gCrashSettings.getS32(CRASH_BEHAVIOR_SETTING) != NEVER_SUBMIT_REPORT))
+ {
+ LLWatchdog::getInstance()->init();
+ }
LLVFSThread::initClass(enable_threads && true);
LLLFSThread::initClass(enable_threads && true);
@@ -1556,6 +1575,19 @@ bool LLAppViewer::initConfiguration()
LLWindow::getFontListSans());
#endif
+ //*FIX:Mani - Set default to disabling watchdog mainloop
+ // timeout for mac and linux. There is no call stack info
+ // on these platform to help debug.
+#ifndef LL_RELEASE_FOR_DOWNLOAD
+ gSavedSettings.setBOOL("WatchdogEnabled", FALSE);
+#endif
+
+#ifndef LL_WINDOWS
+ gSavedSettings.setBOOL("WatchdogEnabled", FALSE);
+#endif
+
+ gCrashSettings.getControl(CRASH_BEHAVIOR_SETTING)->getSignal()->connect(boost::bind(&handleCrashSubmitBehaviorChanged, _1));
+
// These are warnings that appear on the first experience of that condition.
// They are already set in the settings_default.xml file, but still need to be added to LLFirstUse
// for disable/reset ability
@@ -1787,18 +1819,6 @@ bool LLAppViewer::initConfiguration()
}
}
- const LLControlVariable* loginuri = gSavedSettings.getControl("LoginURI");
- if(loginuri && LLString::null != loginuri->getValue().asString())
- {
- addLoginURI(loginuri->getValue().asString());
- }
-
- const LLControlVariable* helperuri = gSavedSettings.getControl("HelperURI");
- if(helperuri && LLString::null != helperuri->getValue().asString())
- {
- setHelperURI(helperuri->getValue().asString());
- }
-
const LLControlVariable* skinfolder = gSavedSettings.getControl("SkinFolder");
if(skinfolder && LLString::null != skinfolder->getValue().asString())
{
@@ -2180,10 +2200,6 @@ void LLAppViewer::cleanupSavedSettings()
{
gSavedSettings.setF32("RenderFarClip", gAgent.mDrawDistance);
}
-
- // *REMOVE: This is now done via LLAppViewer::setCrashBehavior()
- // Left vestigially in case I borked it.
- // gCrashSettings.setS32(CRASH_BEHAVIOR_SETTING, gCrashBehavior);
}
void LLAppViewer::removeCacheFiles(const char* file_mask)
@@ -2210,8 +2226,15 @@ void LLAppViewer::writeSystemInfo()
gDebugInfo["CPUInfo"]["CPUSSE"] = gSysCPU.hasSSE();
gDebugInfo["CPUInfo"]["CPUSSE2"] = gSysCPU.hasSSE2();
- gDebugInfo["RAMInfo"] = llformat("%u", gSysMemory.getPhysicalMemoryKB());
+ gDebugInfo["RAMInfo"]["Physical"] = (LLSD::Integer)(gSysMemory.getPhysicalMemoryKB());
+ gDebugInfo["RAMInfo"]["Allocated"] = (LLSD::Integer)(gMemoryAllocated>>10); // MB -> KB
gDebugInfo["OSInfo"] = getOSInfo().getOSStringSimple();
+
+ // *FIX:Mani - move this ddown in llappviewerwin32
+#ifdef LL_WINDOWS
+ DWORD thread_id = GetCurrentThreadId();
+ gDebugInfo["MainloopThreadID"] = (S32)thread_id;
+#endif
// Dump some debugging info
LL_INFOS("SystemInfo") << gSecondLife
@@ -2242,7 +2265,10 @@ void LLAppViewer::handleSyncViewerCrash()
void LLAppViewer::handleViewerCrash()
{
llinfos << "Handle viewer crash entry." << llendl;
-
+
+ // Make sure the watchdog gets turned off...
+// LLWatchdog::getInstance()->cleanup(); // SJB: This causes the Watchdog to hang for an extra 20-40s?!
+
LLAppViewer* pApp = LLAppViewer::instance();
if (pApp->beingDebugged())
{
@@ -2297,6 +2323,12 @@ void LLAppViewer::handleViewerCrash()
gDebugInfo["CurrentRegion"] = gAgent.getRegion()->getName();
}
+ if(LLAppViewer::instance()->mMainloopTimeout)
+ {
+ gDebugInfo["MainloopTimeoutState"] = LLAppViewer::instance()->mMainloopTimeout->getState();
+ }
+
+
//Write out the crash status file
//Use marker file style setup, as that's the simplest, especially since
//we're already in a crash situation
@@ -2360,12 +2392,6 @@ void LLAppViewer::handleViewerCrash()
return;
}
-void LLAppViewer::setCrashBehavior(S32 cb)
-{
- mCrashBehavior = cb;
- gCrashSettings.setS32(CRASH_BEHAVIOR_SETTING, mCrashBehavior);
-}
-
bool LLAppViewer::anotherInstanceRunning()
{
// We create a marker file when the program starts and remove the file when it finishes.
@@ -2822,61 +2848,6 @@ const LLString& LLAppViewer::getWindowTitle() const
return gWindowTitle;
}
-void LLAppViewer::resetURIs() const
-{
- // Clear URIs when picking a new server
- gLoginURIs.clear();
- gHelperURI.clear();
-}
-
-const std::vector<std::string>& LLAppViewer::getLoginURIs() const
-{
- if (gLoginURIs.empty())
- {
- // not specified on the command line, use value from table
- gLoginURIs.push_back(gGridInfo[gGridChoice].mLoginURI);
- }
- return gLoginURIs;
-}
-
-const std::string& LLAppViewer::getHelperURI() const
-{
- if (gHelperURI.empty())
- {
- // not specified on the command line, use value from table
- gHelperURI = gGridInfo[gGridChoice].mHelperURI;
- }
- return gHelperURI;
-}
-
-void LLAppViewer::addLoginURI(const std::string& uri)
-{
- // *NOTE:Mani - login uri trumps the --grid (gGridChoice) setting.
- // Update gGridChoice to reflect the loginURI setting.
- gLoginURIs.push_back(uri);
-
- const std::string& top_uri = getLoginURIs()[0];
- int i = 0;
- for(; i < GRID_INFO_COUNT; ++i)
- {
- if(top_uri == gGridInfo[i].mLoginURI)
- {
- gGridChoice = (EGridInfo)i;
- break;
- }
- }
-
- if(GRID_INFO_COUNT == i)
- {
- gGridChoice = GRID_INFO_OTHER;
- }
-}
-
-void LLAppViewer::setHelperURI(const std::string& uri)
-{
- gHelperURI = uri;
-}
-
// Callback from a dialog indicating user was logged out.
void finish_disconnect(S32 option, void* userdata)
{
@@ -3014,15 +2985,6 @@ void LLAppViewer::saveNameCache()
}
}
-bool LLAppViewer::isInProductionGrid()
-{
- // *NOTE:Mani This used to compare GRID_INFO_AGNI to gGridChoice,
- // but it seems that loginURI trumps that.
- const std::string& loginURI = getLoginURIs()[0];
- return (loginURI == gGridInfo[GRID_INFO_AGNI].mLoginURI);
-}
-
-
/*! @brief This class is an LLFrameTimer that can be created with
an elapsed time that starts counting up from the given value
rather than 0.0.
@@ -3531,6 +3493,8 @@ static F32 CheckMessagesMaxTime = CHECK_MESSAGES_DEFAULT_MAX_TIME;
void LLAppViewer::idleNetwork()
{
+ pingMainloopTimeout("idleNetwork");
+
gObjectList.mNumNewObjects = 0;
S32 total_decoded = 0;
@@ -3716,18 +3680,58 @@ void LLAppViewer::forceErrorSoftwareException()
throw;
}
-void LLAppViewer::startMainloopTimeout(F32 secs)
+void LLAppViewer::initMainloopTimeout(const std::string& state, F32 secs)
{
- if(secs < 0.0f)
+ if(!mMainloopTimeout)
{
- secs = gSavedSettings.getF32("MainloopTimeoutDefault");
+ mMainloopTimeout = new LLWatchdogTimeout();
+ resumeMainloopTimeout(state, secs);
+ }
+}
+
+void LLAppViewer::destroyMainloopTimeout()
+{
+ if(mMainloopTimeout)
+ {
+ delete mMainloopTimeout;
+ mMainloopTimeout = NULL;
+ }
+}
+
+void LLAppViewer::resumeMainloopTimeout(const std::string& state, F32 secs)
+{
+ if(mMainloopTimeout)
+ {
+ if(secs < 0.0f)
+ {
+ secs = gSavedSettings.getF32("MainloopTimeoutDefault");
+ }
+
+ mMainloopTimeout->setTimeout(secs);
+ mMainloopTimeout->start(state);
+ }
+}
+
+void LLAppViewer::pauseMainloopTimeout()
+{
+ if(mMainloopTimeout)
+ {
+ mMainloopTimeout->stop();
}
-
- mMainloopTimeout->setTimeout(secs);
- mMainloopTimeout->start();
}
-void LLAppViewer::stopMainloopTimeout()
+void LLAppViewer::pingMainloopTimeout(const std::string& state, F32 secs)
{
- mMainloopTimeout->stop();
+ if(mMainloopTimeout)
+ {
+ if(secs < 0.0f)
+ {
+ secs = gSavedSettings.getF32("MainloopTimeoutDefault");
+ }
+
+ mMainloopTimeout->setTimeout(secs);
+ mMainloopTimeout->ping(state);
+ }
}
+
+
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h
index de127e5cf8..8ef22deb27 100644
--- a/indra/newview/llappviewer.h
+++ b/indra/newview/llappviewer.h
@@ -77,8 +77,6 @@ public:
// Report true if under the control of a debugger. A null-op default.
virtual bool beingDebugged() { return false; }
- S32 getCrashBehavior() const { return mCrashBehavior; }
- void setCrashBehavior(S32 cb);
virtual void handleCrashReporting() = 0; // What to do with crash report?
virtual void handleSyncCrashTrace() = 0; // any low-level crash-prep that has to happen in the context of the crashing thread before the crash report is delivered.
static void handleViewerCrash(); // Hey! The viewer crashed. Do this, soon.
@@ -96,13 +94,6 @@ public:
const LLString& getSecondLifeTitle() const; // The Second Life title.
const LLString& getWindowTitle() const; // The window display name.
- // Helpers for URIs
- void addLoginURI(const std::string& uri);
- void setHelperURI(const std::string& uri);
- const std::vector<std::string>& getLoginURIs() const;
- const std::string& getHelperURI() const;
- void resetURIs() const;
-
void forceDisconnect(const LLString& msg); // Force disconnection, with a message to the user.
void badNetworkHandler(); // Cause a crash state due to bad network packet.
@@ -112,8 +103,6 @@ public:
void loadNameCache();
void saveNameCache();
- bool isInProductionGrid();
-
void removeMarkerFile(bool leave_logout_marker = false);
// LLAppViewer testing helpers.
@@ -138,10 +127,13 @@ public:
std::string getSettingsFileName(const std::string& file);
// For thread debugging.
- // llstartup needs to control this.
- // llworld, send_agent_pause() also controls this.
- void startMainloopTimeout(F32 secs = -1.0f);
- void stopMainloopTimeout();
+ // llstartup needs to control init.
+ // llworld, send_agent_pause() also controls pause/resume.
+ void initMainloopTimeout(const std::string& state, F32 secs = -1.0f);
+ void destroyMainloopTimeout();
+ void pauseMainloopTimeout();
+ void resumeMainloopTimeout(const std::string& state = "", F32 secs = -1.0f);
+ void pingMainloopTimeout(const std::string& state, F32 secs = -1.0f);
protected:
virtual bool initWindow(); // Initialize the viewer's window.
@@ -159,6 +151,7 @@ private:
bool initThreads(); // Initialize viewer threads, return false on failure.
bool initConfiguration(); // Initialize settings from the command line/config file.
+ void initGridChoice();
bool initCache(); // Initialize local client cache.
void purgeCache(); // Clear the local cache.
@@ -192,7 +185,6 @@ private:
LLOSInfo mSysOSInfo;
- S32 mCrashBehavior;
bool mReportedCrash;
// Thread objects.
@@ -293,6 +285,7 @@ extern BOOL gUseWireframe;
extern LLVFS *gStaticVFS;
extern LLMemoryInfo gSysMemory;
+extern U64 gMemoryAllocated;
extern LLString gLastVersionChannel;
diff --git a/indra/newview/llappviewerlinux.cpp b/indra/newview/llappviewerlinux.cpp
index cb44e2b1de..0a2cb43c80 100644
--- a/indra/newview/llappviewerlinux.cpp
+++ b/indra/newview/llappviewerlinux.cpp
@@ -333,13 +333,15 @@ void LLAppViewerLinux::handleSyncCrashTrace()
void LLAppViewerLinux::handleCrashReporting()
{
+ const S32 cb = gCrashSettings.getS32(CRASH_BEHAVIOR_SETTING);
+
// Always generate the report, have the logger do the asking, and
// don't wait for the logger before exiting (-> total cleanup).
- if (CRASH_BEHAVIOR_NEVER_SEND != LLAppViewer::instance()->getCrashBehavior())
+ if (CRASH_BEHAVIOR_NEVER_SEND != cb)
{
// launch the actual crash logger
const char* ask_dialog = "-dialog";
- if (CRASH_BEHAVIOR_ASK != LLAppViewer::instance()->getCrashBehavior())
+ if (CRASH_BEHAVIOR_ASK != cb)
ask_dialog = ""; // omit '-dialog' option
std::string cmd =gDirUtilp->getAppRODataDir();
cmd += gDirUtilp->getDirDelimiter();
@@ -348,7 +350,7 @@ void LLAppViewerLinux::handleCrashReporting()
{cmd.c_str(),
ask_dialog,
"-user",
- (char*)gGridName.c_str(),
+ (char*)LLViewerLogin::getInstance()->getGridLabel().c_str(),
"-name",
LLAppViewer::instance()->getSecondLifeTitle().c_str(),
NULL};
diff --git a/indra/newview/llappviewerwin32.cpp b/indra/newview/llappviewerwin32.cpp
index dee36fa3c3..e2663f05bd 100644
--- a/indra/newview/llappviewerwin32.cpp
+++ b/indra/newview/llappviewerwin32.cpp
@@ -71,7 +71,6 @@ extern "C" {
#endif
#endif
-
LONG WINAPI viewer_windows_exception_handler(struct _EXCEPTION_POINTERS *exception_infop)
{
// *NOTE:Mani - this code is stolen from LLApp, where its never actually used.
@@ -421,9 +420,10 @@ void LLAppViewerWin32::handleCrashReporting()
exe_path += "win_crash_logger.exe";
std::string arg_string = "-user ";
- arg_string += gGridName;
-
- switch(getCrashBehavior())
+ arg_string += LLViewerLogin::getInstance()->getGridLabel();
+
+ S32 cb = gCrashSettings.getS32(CRASH_BEHAVIOR_SETTING);
+ switch(cb)
{
case CRASH_BEHAVIOR_ASK:
default:
diff --git a/indra/newview/llbox.cpp b/indra/newview/llbox.cpp
index 1a3cf36ce6..95e16cf872 100644
--- a/indra/newview/llbox.cpp
+++ b/indra/newview/llbox.cpp
@@ -34,7 +34,7 @@
#include "llbox.h"
#include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "llglheaders.h"
LLBox gBox;
diff --git a/indra/newview/llcolorswatch.cpp b/indra/newview/llcolorswatch.cpp
index 8571046c6e..e4256b40f5 100644
--- a/indra/newview/llcolorswatch.cpp
+++ b/indra/newview/llcolorswatch.cpp
@@ -39,7 +39,7 @@
// Project includes
#include "llui.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "lluiconstants.h"
#include "llviewerwindow.h"
#include "llviewercontrol.h"
diff --git a/indra/newview/llcommandlineparser.cpp b/indra/newview/llcommandlineparser.cpp
index a6e002a04d..f06a8abfe0 100644
--- a/indra/newview/llcommandlineparser.cpp
+++ b/indra/newview/llcommandlineparser.cpp
@@ -291,12 +291,15 @@ bool LLCommandLineParser::parseAndStoreResults(po::command_line_parser& clp)
}
catch(LLCLPLastOption&)
{
- // Continue without parsing.
- std::string msg = "Found tokens past last option. Ignoring.";
- llwarns << msg << llendl;
- mErrorMsg = msg;
- // boost::po will have stored a mal-formed option.
+ // This exception means a token was read after an option
+ // that must be the last option was reached (see url and slurl options)
+
+ // boost::po will have stored a malformed option.
// All such options will be removed below.
+ // The last option read, the last_option option, and its value
+ // are put into the error message.
+ std::string last_option;
+ std::string last_value;
for(po::variables_map::iterator i = gVariableMap.begin(); i != gVariableMap.end();)
{
po::variables_map::iterator tempI = i++;
@@ -304,7 +307,27 @@ bool LLCommandLineParser::parseAndStoreResults(po::command_line_parser& clp)
{
gVariableMap.erase(tempI);
}
+ else
+ {
+ last_option = tempI->first;
+ LLCommandLineParser::token_vector_t* tv =
+ boost::any_cast<LLCommandLineParser::token_vector_t>(&(tempI->second.value()));
+ if(!tv->empty())
+ {
+ last_value = (*tv)[tv->size()-1];
+ }
+ }
}
+
+ // Continue without parsing.
+ std::ostringstream msg;
+ msg << "Caught Error: Found options after last option: "
+ << last_option << " "
+ << last_value;
+
+ llwarns << msg.str() << llendl;
+ mErrorMsg = msg.str();
+ return false;
}
return true;
}
diff --git a/indra/newview/llcurrencyuimanager.cpp b/indra/newview/llcurrencyuimanager.cpp
index bbcb7e64d4..c32bf7c268 100644
--- a/indra/newview/llcurrencyuimanager.cpp
+++ b/indra/newview/llcurrencyuimanager.cpp
@@ -44,7 +44,7 @@
#include "lllineeditor.h"
#include "llviewchildren.h"
#include "llxmlrpctransaction.h"
-#include "llappviewer.h"
+#include "llviewernetwork.h"
const F64 CURRENCY_ESTIMATE_FREQUENCY = 2.0;
@@ -239,7 +239,7 @@ void LLCurrencyUIManager::Impl::startTransaction(TransactionType type,
static std::string transactionURI;
if (transactionURI.empty())
{
- transactionURI = LLAppViewer::instance()->getHelperURI() + "currency.php";
+ transactionURI = LLViewerLogin::getInstance()->getHelperURI() + "currency.php";
}
delete mTransaction;
@@ -527,3 +527,4 @@ std::string LLCurrencyUIManager::errorURI()
}
+
diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp
index b0dd0a99ac..a03adfa338 100644
--- a/indra/newview/lldrawable.cpp
+++ b/indra/newview/lldrawable.cpp
@@ -122,6 +122,7 @@ void LLDrawable::destroy()
sNumZombieDrawables--;
}
+ LLFace::sDeleteLock = mFaces.size() ;
std::for_each(mFaces.begin(), mFaces.end(), DeletePointer());
mFaces.clear();
@@ -184,6 +185,7 @@ void LLDrawable::cleanupReferences()
{
LLFastTimer t(LLFastTimer::FTM_PIPELINE);
+ LLFace::sDeleteLock = mFaces.size() ;
std::for_each(mFaces.begin(), mFaces.end(), DeletePointer());
mFaces.clear();
@@ -277,6 +279,7 @@ void LLDrawable::setNumFaces(const S32 newFaces, LLFacePool *poolp, LLViewerImag
}
else if (newFaces < (S32)mFaces.size())
{
+ LLFace::sDeleteLock = (S32)mFaces.size() - newFaces ;
std::for_each(mFaces.begin() + newFaces, mFaces.end(), DeletePointer());
mFaces.erase(mFaces.begin() + newFaces, mFaces.end());
}
@@ -288,6 +291,8 @@ void LLDrawable::setNumFaces(const S32 newFaces, LLFacePool *poolp, LLViewerImag
addFace(poolp, texturep);
}
}
+
+ llassert_always(mFaces.size() == newFaces);
}
void LLDrawable::setNumFacesFast(const S32 newFaces, LLFacePool *poolp, LLViewerImage *texturep)
@@ -298,6 +303,7 @@ void LLDrawable::setNumFacesFast(const S32 newFaces, LLFacePool *poolp, LLViewer
}
else if (newFaces < (S32)mFaces.size())
{
+ LLFace::sDeleteLock = (S32)mFaces.size() - newFaces ;
std::for_each(mFaces.begin() + newFaces, mFaces.end(), DeletePointer());
mFaces.erase(mFaces.begin() + newFaces, mFaces.end());
}
@@ -309,6 +315,8 @@ void LLDrawable::setNumFacesFast(const S32 newFaces, LLFacePool *poolp, LLViewer
addFace(poolp, texturep);
}
}
+
+ llassert_always(mFaces.size() == newFaces) ;
}
void LLDrawable::mergeFaces(LLDrawable* src)
@@ -329,8 +337,13 @@ void LLDrawable::deleteFaces(S32 offset, S32 count)
{
face_list_t::iterator face_begin = mFaces.begin() + offset;
face_list_t::iterator face_end = face_begin + count;
+
+ S32 end = (S32)mFaces.size() ;
+ LLFace::sDeleteLock = count ;
std::for_each(face_begin, face_end, DeletePointer());
mFaces.erase(face_begin, face_end);
+
+ llassert_always(mFaces.size() == end - count) ;
}
void LLDrawable::update()
diff --git a/indra/newview/lldrawpool.cpp b/indra/newview/lldrawpool.cpp
index 6cd2152a28..b7966f2b20 100644
--- a/indra/newview/lldrawpool.cpp
+++ b/indra/newview/lldrawpool.cpp
@@ -32,7 +32,7 @@
#include "llviewerprecompiledheaders.h"
#include "lldrawpool.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "llfasttimer.h"
#include "llviewercontrol.h"
diff --git a/indra/newview/lldrawpoolalpha.cpp b/indra/newview/lldrawpoolalpha.cpp
index 09901984c4..5cc4e37c97 100644
--- a/indra/newview/lldrawpoolalpha.cpp
+++ b/indra/newview/lldrawpoolalpha.cpp
@@ -37,6 +37,7 @@
#include "llviewercontrol.h"
#include "llcriticaldamp.h"
#include "llfasttimer.h"
+#include "llrender.h"
#include "llcubemap.h"
#include "llsky.h"
@@ -93,7 +94,7 @@ void LLDrawPoolAlpha::beginRenderPass(S32 pass)
{
// Start out with no shaders.
current_shader = target_shader = NULL;
- glUseProgramObjectARB(0);
+ LLGLSLShader::bindNoShader();
}
gPipeline.enableLightsDynamic();
}
@@ -105,7 +106,7 @@ void LLDrawPoolAlpha::endRenderPass( S32 pass )
if(gPipeline.canUseWindLightShaders())
{
- glUseProgramObjectARB(0);
+ LLGLSLShader::bindNoShader();
}
}
@@ -123,7 +124,7 @@ void LLDrawPoolAlpha::render(S32 pass)
{
if(gPipeline.canUseWindLightShaders())
{
- glUseProgramObjectARB(0);
+ LLGLSLShader::bindNoShader();
}
gPipeline.enableLightsFullbright(LLColor4(1,1,1,1));
glColor4f(1,0,0,1);
@@ -207,18 +208,17 @@ void LLDrawPoolAlpha::renderGroupAlpha(LLSpatialGroup* group, U32 type, U32 mask
{
return;
}
- // *TODO - Uhhh, we should always be doing some type of alpha rejection. These should probably both be 0.01f
- glAlphaFunc(GL_GREATER, 0.f);
+ gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
}
else
{
if (LLPipeline::sImpostorRender)
{
- glAlphaFunc(GL_GREATER, 0.5f);
+ gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
}
else
{
- glAlphaFunc(GL_GREATER, 0.01f);
+ gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
}
}
@@ -230,7 +230,8 @@ void LLDrawPoolAlpha::renderGroupAlpha(LLSpatialGroup* group, U32 type, U32 mask
if (texture && params.mTexture.notNull())
{
- glActiveTextureARB(GL_TEXTURE0_ARB);
+ llassert_always(gGL.getTexUnit(0)) ;
+ gGL.getTexUnit(0)->activate();
params.mTexture->bind();
params.mTexture->addTextureStats(params.mVSize);
if (params.mTextureMatrix)
@@ -283,7 +284,7 @@ void LLDrawPoolAlpha::renderGroupAlpha(LLSpatialGroup* group, U32 type, U32 mask
}
else if (!use_shaders && current_shader != NULL)
{
- glUseProgramObjectARB(0);
+ LLGLSLShader::bindNoShader();
current_shader = NULL;
}
diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp
index 95e3bc2205..f1d88aa54a 100644
--- a/indra/newview/lldrawpoolavatar.cpp
+++ b/indra/newview/lldrawpoolavatar.cpp
@@ -32,7 +32,7 @@
#include "llviewerprecompiledheaders.h"
#include "lldrawpoolavatar.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "llvoavatar.h"
#include "m3math.h"
@@ -299,7 +299,7 @@ void LLDrawPoolAvatar::beginSkinned()
}
sVertexProgram->enableTexture(LLShaderMgr::BUMP_MAP);
- glActiveTextureARB(GL_TEXTURE0_ARB);
+ gGL.getTexUnit(0)->activate();
}
else
{
@@ -319,7 +319,7 @@ void LLDrawPoolAvatar::endSkinned()
{
sRenderingSkinned = FALSE;
sVertexProgram->disableTexture(LLShaderMgr::BUMP_MAP);
- glActiveTextureARB(GL_TEXTURE0_ARB);
+ gGL.getTexUnit(0)->activate();
disable_vertex_weighting(sVertexProgram->mAttribute[LLShaderMgr::AVATAR_WEIGHT]);
if (sShaderLevel >= SHADER_LEVEL_BUMP)
{
@@ -343,7 +343,7 @@ void LLDrawPoolAvatar::endSkinned()
}
}
- glActiveTextureARB(GL_TEXTURE0_ARB);
+ gGL.getTexUnit(0)->activate();
}
@@ -395,7 +395,7 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
return;
}
- if (!avatarp->isFullyLoaded())
+ if (!single_avatar && !avatarp->isFullyLoaded())
{
/* // debug code to draw a cube in place of avatar
@@ -599,22 +599,12 @@ void LLDrawPoolAvatar::renderForSelect()
BOOL impostor = avatarp->isImpostor();
if (impostor)
{
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PRIMARY_COLOR);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB, GL_PRIMARY_COLOR_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_ARB, GL_SRC_ALPHA);
+ gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_VERT_COLOR);
+ gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA);
avatarp->renderImpostor(color);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
return;
}
@@ -623,8 +613,8 @@ void LLDrawPoolAvatar::renderForSelect()
{
gAvatarMatrixParam = sVertexProgram->mUniform[LLShaderMgr::AVATAR_MATRIX];
}
- glAlphaFunc(GL_GEQUAL, 0.2f);
- gGL.blendFunc(GL_ONE, GL_ZERO);
+ gGL.setAlphaRejectSettings(LLRender::CF_GREATER_EQUAL, 0.2f);
+ gGL.setSceneBlendType(LLRender::BT_REPLACE);
glColor4ubv(color.mV);
@@ -645,11 +635,11 @@ void LLDrawPoolAvatar::renderForSelect()
disable_vertex_weighting(sVertexProgram->mAttribute[LLShaderMgr::AVATAR_WEIGHT]);
}
- glAlphaFunc(GL_GREATER, 0.01f);
- gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
+ gGL.setSceneBlendType(LLRender::BT_ALPHA);
// restore texture mode
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
}
//-----------------------------------------------------------------------------
diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp
index 3f52021711..1dfaf6569e 100644
--- a/indra/newview/lldrawpoolbump.cpp
+++ b/indra/newview/lldrawpoolbump.cpp
@@ -41,7 +41,7 @@
#include "m4math.h"
#include "v4math.h"
#include "llglheaders.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "llagent.h"
#include "llcubemap.h"
@@ -371,17 +371,8 @@ void LLDrawPoolBump::beginShiny(bool invisible)
cube_map->setMatrix(0);
cube_map->bind();
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
-
- //use RGB from texture
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
-
- // use alpha from color
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PRIMARY_COLOR);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
+ gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_COLOR);
+ gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_VERT_ALPHA);
}
}
}
@@ -443,15 +434,17 @@ void LLDrawPoolBump::endShiny(bool invisible)
}
shader->unbind();
- glActiveTextureARB(GL_TEXTURE0_ARB);
+ gGL.getTexUnit(0)->activate();
glEnable(GL_TEXTURE_2D);
}
-
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ if (cube_channel >= 0)
+ {
+ gGL.getTexUnit(cube_channel)->setTextureBlendType(LLTexUnit::TB_MULT);
+ }
}
LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
diffuse_channel = -1;
cube_channel = 0;
@@ -540,16 +533,16 @@ void LLDrawPoolBump::endFullbrightShiny()
{
shader->disableTexture(LLShaderMgr::DIFFUSE_MAP);
}
- glActiveTextureARB(GL_TEXTURE0_ARB);
+ gGL.getTexUnit(0)->activate();
glEnable(GL_TEXTURE_2D);
shader->unbind();
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
}
LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
diffuse_channel = -1;
cube_channel = 0;
@@ -614,6 +607,10 @@ BOOL LLDrawPoolBump::bindBumpMap(LLDrawInfo& params)
if( tex )
{
bump = gBumpImageList.getBrightnessDarknessImage( tex, bump_code );
+ //------------------------------------------
+ //error check to make sure bump is valid
+ llassert_always(!bump || bump->getNumRefs() == 1) ;
+ //------------------------------------------
}
break;
@@ -628,6 +625,11 @@ BOOL LLDrawPoolBump::bindBumpMap(LLDrawInfo& params)
if (bump)
{
+ //------------------------------------------
+ //error check to make sure bump is valid
+ llassert_always(bump->getNumRefs() > 0 && bump->getNumRefs() < 100000) ;
+ //------------------------------------------
+
bump->bind(1);
bump->bind(0);
return TRUE;
@@ -650,37 +652,18 @@ void LLDrawPoolBump::beginBump()
// TEXTURE UNIT 0
// Output.rgb = texture at texture coord 0
- glActiveTextureARB(GL_TEXTURE0_ARB);
+ gGL.getTexUnit(0)->activate();
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_ALPHA);
-
- // Don't care about alpha output
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
+ gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
+ gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
// TEXTURE UNIT 1
- glActiveTextureARB(GL_TEXTURE1_ARB);
-
+ gGL.getTexUnit(1)->activate();
+
glEnable(GL_TEXTURE_2D); // Texture unit 1
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_ADD_SIGNED_ARB);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_ONE_MINUS_SRC_ALPHA);
-
- // Don't care about alpha output
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
+ gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_ADD_SIGNED, LLTexUnit::TBS_PREV_COLOR, LLTexUnit::TBS_ONE_MINUS_TEX_ALPHA);
+ gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
// src = tex0 + (1 - tex1) - 0.5
// = (bump0/2 + 0.5) + (1 - (bump1/2 + 0.5)) - 0.5
@@ -692,9 +675,8 @@ void LLDrawPoolBump::beginBump()
// = 2 * ((1 + bump0 - bump1) / 2) * dst [0 - 2 * dst]
// = (1 + bump0 - bump1) * dst.rgb
// = dst.rgb + dst.rgb * (bump0 - bump1)
- gGL.blendFunc(GL_DST_COLOR, GL_SRC_COLOR);
-// gGL.blendFunc(GL_ONE, GL_ZERO); // temp
- glActiveTextureARB(GL_TEXTURE0_ARB);
+ gGL.setSceneBlendType(LLRender::BT_MULT_X2);
+ gGL.getTexUnit(0)->activate();
stop_glerror();
LLViewerImage::unbindTexture(1, GL_TEXTURE_2D);
@@ -728,15 +710,15 @@ void LLDrawPoolBump::endBump()
}
// Disable texture unit 1
- glActiveTextureARB(GL_TEXTURE1_ARB);
+ gGL.getTexUnit(1)->activate();
glDisable(GL_TEXTURE_2D); // Texture unit 1
- glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ gGL.getTexUnit(1)->setTextureBlendType(LLTexUnit::TB_MULT);
// Disable texture unit 0
- glActiveTextureARB(GL_TEXTURE0_ARB);
- glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ gGL.getTexUnit(0)->activate();
+ gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
- gGL.blendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
+ gGL.setSceneBlendType(LLRender::BT_ALPHA);
}
////////////////////////////////////////////////////////////////
@@ -890,9 +872,15 @@ LLImageGL* LLBumpImageList::getBrightnessDarknessImage(LLViewerImage* src_image,
{
LLPointer<LLImageRaw> raw = new LLImageRaw(1,1,1);
raw->clear(0x77, 0x77, 0x77, 0xFF);
+
+ //------------------------------
bump = new LLImageGL( raw, TRUE);
- bump->setExplicitFormat(GL_ALPHA8, GL_ALPHA);
+ //immediately assign bump to a global smart pointer in case some local smart pointer
+ //accidently releases it.
(*entries_list)[src_image->getID()] = bump;
+ //------------------------------
+
+ bump->setExplicitFormat(GL_ALPHA8, GL_ALPHA);
// Note: this may create an LLImageGL immediately
src_image->setLoadedCallback( callback_func, 0, TRUE, new LLUUID(src_image->getID()) );
@@ -1047,10 +1035,15 @@ void LLBumpImageList::onSourceLoaded( BOOL success, LLViewerImage *src_vi, LLIma
}
}
+ //---------------------------------------------------
LLImageGL* bump = new LLImageGL( TRUE);
- bump->setExplicitFormat(GL_ALPHA8, GL_ALPHA);
- bump->createGLTexture(0, dst_image);
+ //immediately assign bump to a global smart pointer in case some local smart pointer
+ //accidently releases it.
iter->second = bump; // derefs (and deletes) old image
+ //---------------------------------------------------
+
+ bump->setExplicitFormat(GL_ALPHA8, GL_ALPHA);
+ bump->createGLTexture(0, dst_image);
}
else
{
@@ -1101,16 +1094,16 @@ void LLDrawPoolBump::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture)
{
if (mShiny)
{
- glActiveTextureARB(GL_TEXTURE0_ARB);
+ gGL.getTexUnit(0)->activate();
glMatrixMode(GL_TEXTURE);
}
else
{
- glActiveTextureARB(GL_TEXTURE1_ARB);
+ gGL.getTexUnit(1)->activate();
glMatrixMode(GL_TEXTURE);
glLoadMatrixf((GLfloat*) params.mTextureMatrix->mMatrix);
gPipeline.mTextureMatrixOps++;
- glActiveTextureARB(GL_TEXTURE0_ARB);
+ gGL.getTexUnit(0)->activate();
}
glLoadMatrixf((GLfloat*) params.mTextureMatrix->mMatrix);
@@ -1153,13 +1146,13 @@ void LLDrawPoolBump::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture)
{
if (mShiny)
{
- glActiveTextureARB(GL_TEXTURE0_ARB);
+ gGL.getTexUnit(0)->activate();
}
else
{
- glActiveTextureARB(GL_TEXTURE1_ARB);
+ gGL.getTexUnit(1)->activate();
glLoadIdentity();
- glActiveTextureARB(GL_TEXTURE0_ARB);
+ gGL.getTexUnit(0)->activate();
}
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
@@ -1172,9 +1165,9 @@ void LLDrawPoolInvisible::render(S32 pass)
U32 invisi_mask = LLVertexBuffer::MAP_VERTEX;
glStencilMask(0);
- glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
+ gGL.setColorMask(false, false);
pushBatches(LLRenderPass::PASS_INVISIBLE, invisi_mask, FALSE);
- glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
+ gGL.setColorMask(true, false);
glStencilMask(0xFFFFFFFF);
if (gPipeline.hasRenderBatches(LLRenderPass::PASS_INVISI_SHINY))
diff --git a/indra/newview/lldrawpoolsimple.cpp b/indra/newview/lldrawpoolsimple.cpp
index a2a82eada5..b534886047 100644
--- a/indra/newview/lldrawpoolsimple.cpp
+++ b/indra/newview/lldrawpoolsimple.cpp
@@ -41,7 +41,7 @@
#include "pipeline.h"
#include "llspatialpartition.h"
#include "llglslshader.h"
-#include "llglimmediate.h"
+#include "llrender.h"
static LLGLSLShader* simple_shader = NULL;
@@ -52,7 +52,7 @@ void LLDrawPoolGlow::render(S32 pass)
LLFastTimer t(LLFastTimer::FTM_RENDER_GLOW);
LLGLEnable blend(GL_BLEND);
LLGLDisable test(GL_ALPHA_TEST);
- gGL.blendFunc(GL_ONE, GL_ONE);
+ gGL.setSceneBlendType(LLRender::BT_ADD);
U32 shader_level = LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_OBJECT);
@@ -66,11 +66,11 @@ void LLDrawPoolGlow::render(S32 pass)
}
LLGLDepthTest depth(GL_TRUE, GL_FALSE);
- glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE);
+ gGL.setColorMask(false, true);
renderTexture(LLRenderPass::PASS_GLOW, getVertexDataMask());
- glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
- gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ gGL.setColorMask(true, false);
+ gGL.setSceneBlendType(LLRender::BT_ALPHA);
if (shader_level > 0 && fullbright_shader)
{
@@ -120,7 +120,7 @@ void LLDrawPoolSimple::beginRenderPass(S32 pass)
// don't use shaders!
if (gGLManager.mHasShaderObjects)
{
- glUseProgramObjectARB(0);
+ LLGLSLShader::bindNoShader();
}
}
}
@@ -140,7 +140,7 @@ void LLDrawPoolSimple::render(S32 pass)
{
LLGLDisable blend(GL_BLEND);
LLGLState alpha_test(GL_ALPHA_TEST, gPipeline.canUseWindLightShadersOnObjects());
- glAlphaFunc(GL_GREATER, 0.5f);
+ gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
{ //render simple
LLFastTimer t(LLFastTimer::FTM_RENDER_SIMPLE);
@@ -152,7 +152,7 @@ void LLDrawPoolSimple::render(S32 pass)
LLFastTimer t(LLFastTimer::FTM_RENDER_GRASS);
LLGLEnable test(GL_ALPHA_TEST);
LLGLEnable blend(GL_BLEND);
- gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ gGL.setSceneBlendType(LLRender::BT_ALPHA);
//render grass
LLRenderPass::renderTexture(LLRenderPass::PASS_GRASS, getVertexDataMask());
}
@@ -172,6 +172,6 @@ void LLDrawPoolSimple::render(S32 pass)
renderTexture(LLRenderPass::PASS_FULLBRIGHT, fullbright_mask);
}
- glAlphaFunc(GL_GREATER, 0.01f);
+ gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
}
diff --git a/indra/newview/lldrawpoolsky.cpp b/indra/newview/lldrawpoolsky.cpp
index 828c9b0848..585af6c47f 100644
--- a/indra/newview/lldrawpoolsky.cpp
+++ b/indra/newview/lldrawpoolsky.cpp
@@ -90,7 +90,7 @@ void LLDrawPoolSky::render(S32 pass)
{
// Ironically, we must support shader objects to be
// able to use this call.
- glUseProgramObjectARB(0);
+ LLGLSLShader::bindNoShader();
}
mShader = NULL;
}
diff --git a/indra/newview/lldrawpoolterrain.cpp b/indra/newview/lldrawpoolterrain.cpp
index c60ddbc517..854067a32d 100644
--- a/indra/newview/lldrawpoolterrain.cpp
+++ b/indra/newview/lldrawpoolterrain.cpp
@@ -52,7 +52,7 @@
#include "llworld.h"
#include "pipeline.h"
#include "llglslshader.h"
-#include "llglimmediate.h"
+#include "llrender.h"
const F32 DETAIL_SCALE = 1.f/16.f;
int DebugDetailMap = 0;
@@ -69,14 +69,16 @@ LLDrawPoolTerrain::LLDrawPoolTerrain(LLViewerImage *texturep) :
sDetailScale = 1.f/gSavedSettings.getF32("RenderTerrainScale");
sDetailMode = gSavedSettings.getS32("RenderTerrainDetail");
mAlphaRampImagep = gImageList.getImageFromFile("alpha_gradient.tga",
- TRUE, TRUE, GL_ALPHA8, GL_ALPHA,
- LLUUID("e97cf410-8e61-7005-ec06-629eba4cd1fb"));
+ TRUE, TRUE, GL_ALPHA8, GL_ALPHA,
+ LLUUID("e97cf410-8e61-7005-ec06-629eba4cd1fb"));
+
mAlphaRampImagep->bind(0);
mAlphaRampImagep->setClamp(TRUE, TRUE);
m2DAlphaRampImagep = gImageList.getImageFromFile("alpha_gradient_2d.j2c",
TRUE, TRUE, GL_ALPHA8, GL_ALPHA,
LLUUID("38b86f85-2575-52a9-a531-23108d8da837"));
+
m2DAlphaRampImagep->bind(0);
m2DAlphaRampImagep->setClamp(TRUE, TRUE);
@@ -239,7 +241,7 @@ void LLDrawPoolTerrain::renderFullShader()
//
S32 detail0 = sShader->enableTexture(LLShaderMgr::TERRAIN_DETAIL0);
LLViewerImage::bindTexture(detail_texture0p,detail0);
- glActiveTextureARB(GL_TEXTURE0_ARB);
+ gGL.getTexUnit(0)->activate();
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
@@ -259,7 +261,7 @@ void LLDrawPoolTerrain::renderFullShader()
LLViewerImage::bindTexture(detail_texture1p,detail1);
/// ALPHA TEXTURE COORDS 0:
- glActiveTextureARB(GL_TEXTURE1_ARB);
+ gGL.getTexUnit(1)->activate();
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
@@ -271,7 +273,7 @@ void LLDrawPoolTerrain::renderFullShader()
glEnable(GL_TEXTURE_2D);
/// ALPHA TEXTURE COORDS 1:
- glActiveTextureARB(GL_TEXTURE2_ARB);
+ gGL.getTexUnit(2)->activate();
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glTranslatef(-2.f, 0.f, 0.f);
@@ -284,7 +286,7 @@ void LLDrawPoolTerrain::renderFullShader()
LLViewerImage::bindTexture(detail_texture3p,detail3);
/// ALPHA TEXTURE COORDS 2:
- glActiveTextureARB(GL_TEXTURE3_ARB);
+ gGL.getTexUnit(3)->activate();
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glTranslatef(-1.f, 0.f, 0.f);
@@ -307,7 +309,7 @@ void LLDrawPoolTerrain::renderFullShader()
sShader->disableTexture(LLShaderMgr::TERRAIN_DETAIL3);
LLImageGL::unbindTexture(alpha_ramp, GL_TEXTURE_2D);
- glActiveTextureARB(GL_TEXTURE4_ARB);
+ gGL.getTexUnit(4)->activate();
glDisable(GL_TEXTURE_2D); // Texture unit 4
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
@@ -316,7 +318,7 @@ void LLDrawPoolTerrain::renderFullShader()
glMatrixMode(GL_MODELVIEW);
LLImageGL::unbindTexture(detail3, GL_TEXTURE_2D);
- glActiveTextureARB(GL_TEXTURE3_ARB);
+ gGL.getTexUnit(3)->activate();
glDisable(GL_TEXTURE_2D);
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
@@ -325,7 +327,7 @@ void LLDrawPoolTerrain::renderFullShader()
glMatrixMode(GL_MODELVIEW);
LLImageGL::unbindTexture(detail2, GL_TEXTURE_2D);
- glActiveTextureARB(GL_TEXTURE2_ARB);
+ gGL.getTexUnit(2)->activate();
glDisable(GL_TEXTURE_2D);
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
@@ -334,7 +336,7 @@ void LLDrawPoolTerrain::renderFullShader()
glMatrixMode(GL_MODELVIEW);
LLImageGL::unbindTexture(detail1, GL_TEXTURE_2D);
- glActiveTextureARB(GL_TEXTURE1_ARB);
+ gGL.getTexUnit(1)->activate();
glDisable(GL_TEXTURE_2D);
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
@@ -346,7 +348,7 @@ void LLDrawPoolTerrain::renderFullShader()
// Restore Texture Unit 0 defaults
LLImageGL::unbindTexture(detail0, GL_TEXTURE_2D);
- glActiveTextureARB(GL_TEXTURE0_ARB);
+ gGL.getTexUnit(0)->activate();
glEnable(GL_TEXTURE_2D);
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
@@ -377,7 +379,7 @@ void LLDrawPoolTerrain::renderFull4TU()
tp0.setVec(sDetailScale, 0.0f, 0.0f, offset_x);
tp1.setVec(0.0f, sDetailScale, 0.0f, offset_y);
- gGL.blendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA);
+ gGL.blendFunc(LLRender::BF_ONE_MINUS_SOURCE_ALPHA, LLRender::BF_SOURCE_ALPHA);
//----------------------------------------------------------------------------
// Pass 1/1
@@ -385,7 +387,7 @@ void LLDrawPoolTerrain::renderFull4TU()
//
// Stage 0: detail texture 0
//
- glActiveTextureARB(GL_TEXTURE0_ARB);
+ gGL.getTexUnit(0)->activate();
LLViewerImage::bindTexture(detail_texture0p,0);
glClientActiveTextureARB(GL_TEXTURE0_ARB);
@@ -397,36 +399,27 @@ void LLDrawPoolTerrain::renderFull4TU()
glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
+ gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_COLOR);
//
// Stage 1: Generate alpha ramp for detail0/detail1 transition
//
+
LLViewerImage::bindTexture(m2DAlphaRampImagep,1);
- glActiveTextureARB(GL_TEXTURE1_ARB);
+ gGL.getTexUnit(1)->activate();
glEnable(GL_TEXTURE_2D); // Texture unit 1
glClientActiveTextureARB(GL_TEXTURE1_ARB);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
// Care about alpha only
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
+ gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
+ gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
//
// Stage 2: Interpolate detail1 with existing based on ramp
//
LLViewerImage::bindTexture(detail_texture1p,2);
- glActiveTextureARB(GL_TEXTURE2_ARB);
+ gGL.getTexUnit(2)->activate();
glEnable(GL_TEXTURE_2D); // Texture unit 2
glClientActiveTextureARB(GL_TEXTURE2_ARB);
@@ -438,34 +431,20 @@ void LLDrawPoolTerrain::renderFull4TU()
glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_INTERPOLATE);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_ARB, GL_PREVIOUS_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB, GL_SRC_ALPHA);
+ gGL.getTexUnit(2)->setTextureColorBlend(LLTexUnit::TBO_LERP_PREV_ALPHA, LLTexUnit::TBS_PREV_COLOR, LLTexUnit::TBS_TEX_COLOR);
//
// Stage 3: Modulate with primary (vertex) color for lighting
//
LLViewerImage::bindTexture(detail_texture1p,3); // bind any texture
- glActiveTextureARB(GL_TEXTURE3_ARB);
+ gGL.getTexUnit(3)->activate();
glEnable(GL_TEXTURE_2D); // Texture unit 3
glClientActiveTextureARB(GL_TEXTURE3_ARB);
// Set alpha texture and do lighting modulation
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PRIMARY_COLOR_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
+ gGL.getTexUnit(3)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_PREV_COLOR, LLTexUnit::TBS_VERT_COLOR);
- glActiveTextureARB(GL_TEXTURE0_ARB);
+ gGL.getTexUnit(0)->activate();
glClientActiveTextureARB(GL_TEXTURE0_ARB);
// GL_BLEND disabled by default
@@ -476,7 +455,7 @@ void LLDrawPoolTerrain::renderFull4TU()
// Stage 0: Write detail3 into base
//
- glActiveTextureARB(GL_TEXTURE0_ARB);
+ gGL.getTexUnit(0)->activate();
LLViewerImage::bindTexture(detail_texture3p,0);
glClientActiveTextureARB(GL_TEXTURE0_ARB);
@@ -488,18 +467,13 @@ void LLDrawPoolTerrain::renderFull4TU()
glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
-
+ gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_COLOR);
//
// Stage 1: Generate alpha ramp for detail2/detail3 transition
//
LLViewerImage::bindTexture(m2DAlphaRampImagep,1);
- glActiveTextureARB(GL_TEXTURE1_ARB);
+ gGL.getTexUnit(1)->activate();
glEnable(GL_TEXTURE_2D); // Texture unit 1
glClientActiveTextureARB(GL_TEXTURE1_ARB);
@@ -511,25 +485,20 @@ void LLDrawPoolTerrain::renderFull4TU()
glTranslatef(-2.f, 0.f, 0.f);
// Care about alpha only
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
+ gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
+ gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
//
// Stage 2: Interpolate detail2 with existing based on ramp
//
LLViewerImage::bindTexture(detail_texture2p,2);
- glActiveTextureARB(GL_TEXTURE2_ARB);
+ gGL.getTexUnit(2)->activate();
glEnable(GL_TEXTURE_2D); // Texture unit 2
- glClientActiveTextureARB(GL_TEXTURE2_ARB);
+ glClientActiveTextureARB(GL_TEXTURE2_ARB);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
+
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
@@ -537,26 +506,16 @@ void LLDrawPoolTerrain::renderFull4TU()
glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_INTERPOLATE);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_ARB, GL_PREVIOUS_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB, GL_ONE_MINUS_SRC_ALPHA);
-
+ gGL.getTexUnit(2)->setTextureColorBlend(LLTexUnit::TBO_LERP_PREV_ALPHA, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_PREV_COLOR);
//
// Stage 3: Generate alpha ramp for detail1/detail2 transition
//
LLViewerImage::bindTexture(m2DAlphaRampImagep,3);
- glActiveTextureARB(GL_TEXTURE3_ARB);
-
+ gGL.getTexUnit(3)->activate();
glEnable(GL_TEXTURE_2D); // Texture unit 3
- glClientActiveTextureARB(GL_TEXTURE3_ARB);
+ glClientActiveTextureARB(GL_TEXTURE3_ARB);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
// Set the texture matrix
@@ -565,18 +524,10 @@ void LLDrawPoolTerrain::renderFull4TU()
glTranslatef(-1.f, 0.f, 0.f);
// Set alpha texture and do lighting modulation
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PRIMARY_COLOR_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
-
- glActiveTextureARB(GL_TEXTURE0_ARB);
+ gGL.getTexUnit(3)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_PREV_COLOR, LLTexUnit::TBS_VERT_COLOR);
+ gGL.getTexUnit(3)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
+
+ gGL.getTexUnit(0)->activate();
glClientActiveTextureARB(GL_TEXTURE0_ARB);
{
LLGLEnable blend(GL_BLEND);
@@ -586,19 +537,21 @@ void LLDrawPoolTerrain::renderFull4TU()
LLVertexBuffer::unbind();
// Disable multitexture
LLImageGL::unbindTexture(3, GL_TEXTURE_2D);
- glActiveTextureARB(GL_TEXTURE3_ARB);
+ gGL.getTexUnit(3)->activate();
glClientActiveTextureARB(GL_TEXTURE3_ARB);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisable(GL_TEXTURE_2D); // Texture unit 3
+
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
LLImageGL::unbindTexture(2, GL_TEXTURE_2D);
- glActiveTextureARB(GL_TEXTURE2_ARB);
+ gGL.getTexUnit(2)->activate();
glClientActiveTextureARB(GL_TEXTURE2_ARB);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisable(GL_TEXTURE_2D); // Texture unit 2
+
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
glMatrixMode(GL_TEXTURE);
@@ -606,33 +559,34 @@ void LLDrawPoolTerrain::renderFull4TU()
glMatrixMode(GL_MODELVIEW);
LLImageGL::unbindTexture(1, GL_TEXTURE_2D);
- glActiveTextureARB(GL_TEXTURE1_ARB);
- glClientActiveTextureARB(GL_TEXTURE1_ARB);
- glDisableClientState(GL_TEXTURE_COORD_ARRAY);
+ gGL.getTexUnit(1)->activate();
+ glClientActiveTextureARB(GL_TEXTURE1_ARB);
+ glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisable(GL_TEXTURE_2D); // Texture unit 1
+
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
// Restore blend state
- gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ gGL.setSceneBlendType(LLRender::BT_ALPHA);
//----------------------------------------------------------------------------
// Restore Texture Unit 0 defaults
- glActiveTextureARB(GL_TEXTURE0_ARB);
+ gGL.getTexUnit(0)->activate();
LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
glClientActiveTextureARB(GL_TEXTURE0_ARB);
- glActiveTextureARB(GL_TEXTURE0_ARB);
+ gGL.getTexUnit(0)->activate();
+ glDisableClientState(GL_NORMAL_ARRAY);
+
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
- // Restore non Texture Unit specific defaults
- glDisableClientState(GL_NORMAL_ARRAY);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
}
void LLDrawPoolTerrain::renderFull2TU()
@@ -654,7 +608,7 @@ void LLDrawPoolTerrain::renderFull2TU()
tp0.setVec(sDetailScale, 0.0f, 0.0f, offset_x);
tp1.setVec(0.0f, sDetailScale, 0.0f, offset_y);
- gGL.blendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA);
+ gGL.blendFunc(LLRender::BF_ONE_MINUS_SOURCE_ALPHA, LLRender::BF_SOURCE_ALPHA);
//----------------------------------------------------------------------------
// Pass 1/4
@@ -671,13 +625,7 @@ void LLDrawPoolTerrain::renderFull2TU()
glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PRIMARY_COLOR_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
+ gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_VERT_COLOR);
drawLoop();
@@ -693,22 +641,17 @@ void LLDrawPoolTerrain::renderFull2TU()
glDisable(GL_TEXTURE_GEN_T);
// Care about alpha only
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
+ gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
+ gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
//
// Stage 1: Write detail1
//
LLViewerImage::bindTexture(detail_texture1p,1); // Texture unit 1
- glActiveTextureARB(GL_TEXTURE1_ARB);
+ gGL.getTexUnit(1)->activate();
glEnable(GL_TEXTURE_2D); // Texture unit 1
+
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
@@ -716,18 +659,10 @@ void LLDrawPoolTerrain::renderFull2TU()
glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PRIMARY_COLOR_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
+ gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_VERT_COLOR);
+ gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_ALPHA);
- glActiveTextureARB(GL_TEXTURE0_ARB);
+ gGL.getTexUnit(0)->activate();
{
LLGLEnable blend(GL_BLEND);
drawLoop();
@@ -739,26 +674,21 @@ void LLDrawPoolTerrain::renderFull2TU()
// Stage 0: Generate alpha ramp for detail1/detail2 transition
//
LLViewerImage::bindTexture(m2DAlphaRampImagep,0);
+
// Set the texture matrix
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glTranslatef(-1.f, 0.f, 0.f);
// Care about alpha only
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
+ gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
+ gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
//
// Stage 1: Write detail2
//
-
LLViewerImage::bindTexture(detail_texture2p,1);
+ gGL.getTexUnit(1)->activate();
glEnable(GL_TEXTURE_2D); // Texture unit 1
glEnable(GL_TEXTURE_GEN_S);
@@ -768,16 +698,8 @@ void LLDrawPoolTerrain::renderFull2TU()
glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PRIMARY_COLOR_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
+ gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_VERT_COLOR);
+ gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_ALPHA);
{
LLGLEnable blend(GL_BLEND);
@@ -790,27 +712,22 @@ void LLDrawPoolTerrain::renderFull2TU()
//
// Stage 0: Generate alpha ramp for detail2/detail3 transition
//
- LLViewerImage::bindTexture(m2DAlphaRampImagep,0);
+ gGL.getTexUnit(0)->activate();
+ LLViewerImage::bindTexture(m2DAlphaRampImagep,0);
// Set the texture matrix
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glTranslatef(-2.f, 0.f, 0.f);
// Care about alpha only
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
+ gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
+ gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
// Stage 1: Write detail3
-
LLViewerImage::bindTexture(detail_texture3p,1);
- glActiveTextureARB(GL_TEXTURE1_ARB);
+ gGL.getTexUnit(1)->activate();
glEnable(GL_TEXTURE_2D); // Texture unit 1
+
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
@@ -818,30 +735,24 @@ void LLDrawPoolTerrain::renderFull2TU()
glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PRIMARY_COLOR_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
+ gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_VERT_COLOR);
+ gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_ALPHA);
- glActiveTextureARB(GL_TEXTURE0_ARB);
+ gGL.getTexUnit(0)->activate();
{
LLGLEnable blend(GL_BLEND);
drawLoop();
}
// Restore blend state
- gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ gGL.setSceneBlendType(LLRender::BT_ALPHA);
// Disable multitexture
+
LLImageGL::unbindTexture(1, GL_TEXTURE_2D);
- glActiveTextureARB(GL_TEXTURE1_ARB);
+ gGL.getTexUnit(1)->activate();
glDisable(GL_TEXTURE_2D); // Texture unit 1
+
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
glMatrixMode(GL_TEXTURE);
@@ -851,18 +762,16 @@ void LLDrawPoolTerrain::renderFull2TU()
//----------------------------------------------------------------------------
// Restore Texture Unit 0 defaults
- glActiveTextureARB(GL_TEXTURE0_ARB);
+ gGL.getTexUnit(0)->activate();
LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
- glActiveTextureARB(GL_TEXTURE0_ARB);
+ gGL.getTexUnit(0)->activate();
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
-
- // Restore non Texture Unit specific defaults
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
}
@@ -877,7 +786,7 @@ void LLDrawPoolTerrain::renderSimple()
mTexturep->addTextureStats(1024.f*1024.f);
mTexturep->bind(0);
- glActiveTextureARB(GL_TEXTURE0_ARB);
+ gGL.getTexUnit(0)->activate();
glEnable(GL_TEXTURE_2D); // Texture unit 2
LLVector3 origin_agent = mDrawFace[0]->getDrawable()->getVObj()->getRegion()->getOriginAgent();
@@ -892,13 +801,7 @@ void LLDrawPoolTerrain::renderSimple()
glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PRIMARY_COLOR_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
+ gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_VERT_COLOR);
drawLoop();
@@ -906,15 +809,13 @@ void LLDrawPoolTerrain::renderSimple()
// Restore Texture Unit 0 defaults
LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
- glActiveTextureARB(GL_TEXTURE0_ARB);
+ gGL.getTexUnit(0)->activate();
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
-
- // Restore non Texture Unit specific defaults
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
}
//============================================================================
diff --git a/indra/newview/lldrawpooltree.cpp b/indra/newview/lldrawpooltree.cpp
index eabc0f1268..1ebd0772a8 100644
--- a/indra/newview/lldrawpooltree.cpp
+++ b/indra/newview/lldrawpooltree.cpp
@@ -41,7 +41,7 @@
#include "pipeline.h"
#include "llviewercamera.h"
#include "llglslshader.h"
-#include "llglimmediate.h"
+#include "llrender.h"
S32 LLDrawPoolTree::sDiffTex = 0;
static LLGLSLShader* shader = NULL;
@@ -67,7 +67,7 @@ void LLDrawPoolTree::prerender()
void LLDrawPoolTree::beginRenderPass(S32 pass)
{
LLFastTimer t(LLFastTimer::FTM_RENDER_TREES);
- glAlphaFunc(GL_GREATER, 0.5f);
+ gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
if (LLPipeline::sUnderWaterRender)
{
@@ -106,7 +106,7 @@ void LLDrawPoolTree::render(S32 pass)
void LLDrawPoolTree::endRenderPass(S32 pass)
{
LLFastTimer t(LLFastTimer::FTM_RENDER_TREES);
- glAlphaFunc(GL_GREATER, 0.01f);
+ gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
if (gPipeline.canUseWindLightShadersOnObjects())
{
@@ -125,28 +125,18 @@ void LLDrawPoolTree::renderForSelect()
LLGLSObjectSelectAlpha gls_alpha;
- gGL.blendFunc(GL_ONE, GL_ZERO);
- glAlphaFunc(GL_GREATER, 0.5f);
+ gGL.setSceneBlendType(LLRender::BT_REPLACE);
+ gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB, GL_PRIMARY_COLOR_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_ARB, GL_SRC_ALPHA);
+ gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
+ gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA);
renderTree(TRUE);
- glAlphaFunc(GL_GREATER, 0.01f);
- gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
+ gGL.setSceneBlendType(LLRender::BT_ALPHA);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
}
void LLDrawPoolTree::renderTree(BOOL selecting)
diff --git a/indra/newview/lldrawpoolwater.cpp b/indra/newview/lldrawpoolwater.cpp
index 9ffa552895..e76423c8eb 100644
--- a/indra/newview/lldrawpoolwater.cpp
+++ b/indra/newview/lldrawpoolwater.cpp
@@ -37,6 +37,7 @@
#include "lldir.h"
#include "llerror.h"
#include "m3math.h"
+#include "llrender.h"
#include "llagent.h" // for gAgent for getRegion for getWaterHeight
#include "llcubemap.h"
@@ -166,7 +167,7 @@ void LLDrawPoolWater::render(S32 pass)
// Set up second pass first
mWaterImagep->addTextureStats(1024.f*1024.f);
mWaterImagep->bind(1);
- glActiveTextureARB(GL_TEXTURE1_ARB);
+ gGL.getTexUnit(1)->activate();
glEnable(GL_TEXTURE_2D); // Texture unit 1
@@ -198,18 +199,10 @@ void LLDrawPoolWater::render(S32 pass)
glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0);
glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
+ gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_PREV_COLOR);
+ gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_ALPHA);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
-
- glActiveTextureARB(GL_TEXTURE0_ARB);
+ gGL.getTexUnit(0)->activate();
glClearStencil(1);
glClear(GL_STENCIL_BUFFER_BIT);
@@ -230,14 +223,14 @@ void LLDrawPoolWater::render(S32 pass)
}
// Now, disable texture coord generation on texture state 1
- glActiveTextureARB(GL_TEXTURE1_ARB);
+ gGL.getTexUnit(1)->activate();
glDisable(GL_TEXTURE_2D); // Texture unit 1
glDisable(GL_TEXTURE_GEN_S); //texture unit 1
glDisable(GL_TEXTURE_GEN_T); //texture unit 1
LLImageGL::unbindTexture(1, GL_TEXTURE_2D);
// Disable texture coordinate and color arrays
- glActiveTextureARB(GL_TEXTURE0_ARB);
+ gGL.getTexUnit(0)->activate();
LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
stop_glerror();
@@ -258,7 +251,7 @@ void LLDrawPoolWater::render(S32 pass)
glMatrixMode(GL_MODELVIEW);
LLOverrideFaceColor overrid(this, 1.f, 1.f, 1.f, 0.5f*up_dot);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
for (std::vector<LLFace*>::iterator iter = mDrawFace.begin();
iter != mDrawFace.end(); iter++)
@@ -276,7 +269,7 @@ void LLDrawPoolWater::render(S32 pass)
}
}
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
if (gSky.mVOSkyp->getCubeMap())
{
@@ -298,7 +291,7 @@ void LLDrawPoolWater::render(S32 pass)
renderReflection(refl_face);
}
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
}
void LLDrawPoolWater::renderReflection(LLFace* face)
@@ -331,7 +324,7 @@ void LLDrawPoolWater::renderReflection(LLFace* face)
void LLDrawPoolWater::shade()
{
- glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE);
+ gGL.setColorMask(true, true);
LLVOSky *voskyp = gSky.mVOSkyp;
@@ -396,9 +389,9 @@ void LLDrawPoolWater::shade()
if (reftex > -1)
{
- glActiveTextureARB(GL_TEXTURE0_ARB+reftex);
+ gGL.getTexUnit(reftex)->activate();
gPipeline.mWaterRef.bindTexture();
- glActiveTextureARB(GL_TEXTURE0_ARB);
+ gGL.getTexUnit(0)->activate();
}
//bind normal map
@@ -414,14 +407,8 @@ void LLDrawPoolWater::shade()
mWaterNormp->addTextureStats(1024.f*1024.f);
mWaterNormp->bind(bumpTex);
- if (!gSavedSettings.getBOOL("RenderWaterMipNormal"))
- {
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- }
- else
- {
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
- }
+ mWaterNormp->setMipFilterNearest (mWaterNormp->getMipFilterNearest(),
+ !gSavedSettings.getBOOL("RenderWaterMipNormal"));
S32 screentex = shader->enableTexture(LLShaderMgr::WATER_SCREENTEX);
stop_glerror();
@@ -548,9 +535,9 @@ void LLDrawPoolWater::shade()
shader->disableTexture(LLShaderMgr::WATER_SCREENDEPTH);
shader->unbind();
- glActiveTextureARB(GL_TEXTURE0_ARB);
+ gGL.getTexUnit(0)->activate();
glEnable(GL_TEXTURE_2D);
- glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_FALSE);
+ gGL.setColorMask(true, false);
}
diff --git a/indra/newview/lldrawpoolwlsky.cpp b/indra/newview/lldrawpoolwlsky.cpp
index e2d0c6088a..09a87f2402 100644
--- a/indra/newview/lldrawpoolwlsky.cpp
+++ b/indra/newview/lldrawpoolwlsky.cpp
@@ -44,7 +44,7 @@
#include "llagent.h"
#include "llviewerregion.h"
#include "llface.h"
-#include "llglimmediate.h"
+#include "llrender.h"
LLPointer<LLImageGL> LLDrawPoolWLSky::sCloudNoiseTexture = NULL;
@@ -153,7 +153,7 @@ void LLDrawPoolWLSky::renderStars(void) const
{
LLGLSPipelineSkyBox gls_sky;
LLGLEnable blend(GL_BLEND);
- gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ gGL.setSceneBlendType(LLRender::BT_ALPHA);
// *NOTE: have to have bound the cloud noise texture already since register
// combiners blending below requires something to be bound
@@ -176,16 +176,8 @@ void LLDrawPoolWLSky::renderStars(void) const
// gl_FragColor.rgb = gl_Color.rgb;
// gl_FragColor.a = gl_Color.a * star_alpha.a;
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB, GL_CONSTANT);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_ARB, GL_SRC_ALPHA);
- glTexEnvf(GL_TEXTURE_ENV, GL_ALPHA_SCALE, 2.0f);
+ gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
+ gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT_X2, LLTexUnit::TBS_PREV_ALPHA, LLTexUnit::TBS_CONST_ALPHA);
glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, star_alpha.mV);
gSky.mVOWLSkyp->drawStars();
@@ -193,8 +185,7 @@ void LLDrawPoolWLSky::renderStars(void) const
glPointSize(1.f);
// and disable the combiner states
- glTexEnvf(GL_TEXTURE_ENV, GL_ALPHA_SCALE, 1.0f);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
}
void LLDrawPoolWLSky::renderSkyClouds(F32 camHeightLocal) const
@@ -208,7 +199,7 @@ void LLDrawPoolWLSky::renderSkyClouds(F32 camHeightLocal) const
LLGLEnable blend(GL_BLEND);
LLGLSBlendFunc blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glAlphaFunc(GL_GREATER, 0.01f);
+ gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
sCloudNoiseTexture->bind();
shader->bind();
diff --git a/indra/newview/lldynamictexture.cpp b/indra/newview/lldynamictexture.cpp
index 7b88349ef4..039ed2862f 100644
--- a/indra/newview/lldynamictexture.cpp
+++ b/indra/newview/lldynamictexture.cpp
@@ -40,9 +40,7 @@
#include "llviewerimage.h"
#include "llvertexbuffer.h"
#include "llviewerdisplay.h"
-#include "llglimmediate.h"
-
-void render_ui_and_swap_if_needed();
+#include "llrender.h"
// static
LLDynamicTexture::instance_list_t LLDynamicTexture::sInstances[ LLDynamicTexture::ORDER_COUNT ];
@@ -219,9 +217,8 @@ BOOL LLDynamicTexture::updateAllInstances()
LLDynamicTexture *dynamicTexture = *iter;
if (dynamicTexture->needsRender())
{
- render_ui_and_swap_if_needed();
glClear(GL_DEPTH_BUFFER_BIT);
- gDisplaySwapBuffers = FALSE;
+ gDepthDirty = TRUE;
gGL.color4f(1,1,1,1);
diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp
index 723477a833..8474762d9b 100644
--- a/indra/newview/llface.cpp
+++ b/indra/newview/llface.cpp
@@ -42,7 +42,7 @@
#include "lldrawpoolbump.h"
#include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "lllightconstants.h"
#include "llsky.h"
#include "llviewercamera.h"
@@ -57,6 +57,7 @@
extern BOOL gPickFaces;
BOOL LLFace::sSafeRenderSelect = TRUE; // FALSE
+S32 LLFace::sDeleteLock = 0 ;
#define DOTVEC(a,b) (a.mV[0]*b.mV[0] + a.mV[1]*b.mV[1] + a.mV[2]*b.mV[2])
@@ -177,6 +178,9 @@ void LLFace::init(LLDrawable* drawablep, LLViewerObject* objp)
void LLFace::destroy()
{
+ llassert_always(sDeleteLock >= 1);
+ --sDeleteLock;
+
mDrawablep = NULL;
mVObjp = NULL;
@@ -468,6 +472,7 @@ void LLFace::renderSelectedUV(const S32 offset, const S32 count)
if (pass == 0)
{
LLViewerImage::bindTexture(red_blue_imagep);
+ red_blue_imagep->setMipFilterNearest (TRUE, TRUE);
}
else // pass == 1
{
@@ -476,9 +481,8 @@ void LLFace::renderSelectedUV(const S32 offset, const S32 count)
glMatrixMode(GL_TEXTURE);
glPushMatrix();
glScalef(256.f, 256.f, 1.f);
+ green_imagep->setMipFilterNearest (TRUE, TRUE);
}
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
if (!isState(GLOBAL))
diff --git a/indra/newview/llface.h b/indra/newview/llface.h
index 070283ecd2..34c81c3fdd 100644
--- a/indra/newview/llface.h
+++ b/indra/newview/llface.h
@@ -34,6 +34,7 @@
#include "llstrider.h"
+#include "llrender.h"
#include "v2math.h"
#include "v3math.h"
#include "v4math.h"
@@ -295,6 +296,9 @@ public:
lhs->getTexture() < rhs->getTexture();
}
};
+
+public://paranoia check only
+ static S32 sDeleteLock ;
};
#endif // LL_LLFACE_H
diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp
index 8133c20bf7..ad89d8220f 100644
--- a/indra/newview/llfasttimerview.cpp
+++ b/indra/newview/llfasttimerview.cpp
@@ -37,7 +37,7 @@
#include "llrect.h"
#include "llerror.h"
#include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "llmath.h"
#include "llfontgl.h"
diff --git a/indra/newview/llfirstuse.cpp b/indra/newview/llfirstuse.cpp
index c07319e224..3cd1158ec0 100644
--- a/indra/newview/llfirstuse.cpp
+++ b/indra/newview/llfirstuse.cpp
@@ -37,6 +37,7 @@
#include "indra_constants.h"
// viewer includes
+#include "llagent.h" // for gAgent.inPrelude()
#include "llnotify.h"
#include "llviewercontrol.h"
#include "llui.h"
@@ -107,12 +108,14 @@ void LLFirstUse::useBalanceDecrease(S32 delta)
// static
void LLFirstUse::useSit()
{
- if (gSavedSettings.getWarning("FirstSit"))
- {
- gSavedSettings.setWarning("FirstSit", FALSE);
-
- LLNotifyBox::showXml("FirstSit");
- }
+ // Our orientation island uses sitting to teach vehicle driving
+ // so just never show this message. JC
+ //if (gSavedSettings.getWarning("FirstSit"))
+ //{
+ // gSavedSettings.setWarning("FirstSit", FALSE);
+
+ // LLNotifyBox::showXml("FirstSit");
+ //}
}
// static
@@ -168,11 +171,16 @@ void LLFirstUse::useTeleport()
// static
void LLFirstUse::useOverrideKeys()
{
- if (gSavedSettings.getWarning("FirstOverrideKeys"))
+ // Our orientation island uses key overrides to teach vehicle driving
+ // so don't show this message until you get off OI. JC
+ if (!gAgent.inPrelude())
{
- gSavedSettings.setWarning("FirstOverrideKeys", FALSE);
+ if (gSavedSettings.getWarning("FirstOverrideKeys"))
+ {
+ gSavedSettings.setWarning("FirstOverrideKeys", FALSE);
- LLNotifyBox::showXml("FirstOverrideKeys");
+ LLNotifyBox::showXml("FirstOverrideKeys");
+ }
}
}
diff --git a/indra/newview/llflexibleobject.cpp b/indra/newview/llflexibleobject.cpp
index 248e680c1b..b59648f433 100644
--- a/indra/newview/llflexibleobject.cpp
+++ b/indra/newview/llflexibleobject.cpp
@@ -305,7 +305,7 @@ BOOL LLVolumeImplFlexible::doIdleUpdate(LLAgent &agent, LLWorld &world, const F6
new_res = mRenderRes;
}
- if (!mInitialized)
+ if (!mInitialized || (mSimulateRes != new_res))
{
mSimulateRes = new_res;
setAttributesOfAllSections();
diff --git a/indra/newview/llfloateranimpreview.cpp b/indra/newview/llfloateranimpreview.cpp
index d9411b58d8..1e0ebb7248 100644
--- a/indra/newview/llfloateranimpreview.cpp
+++ b/indra/newview/llfloateranimpreview.cpp
@@ -46,7 +46,7 @@
#include "llcombobox.h"
#include "lldrawable.h"
#include "lldrawpoolavatar.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "llface.h"
#include "llkeyframemotion.h"
#include "lllineeditor.h"
@@ -1037,7 +1037,7 @@ LLPreviewAnimation::LLPreviewAnimation(S32 width, S32 height) : LLDynamicTexture
mDummyAvatar = (LLVOAvatar*)gObjectList.createObjectViewer(LL_PCODE_LEGACY_AVATAR, gAgent.getRegion());
mDummyAvatar->createDrawable(&gPipeline);
mDummyAvatar->mIsDummy = TRUE;
- mDummyAvatar->mSpecialRenderMode = 1;
+ mDummyAvatar->mSpecialRenderMode = 2;
mDummyAvatar->setPositionAgent(LLVector3::zero);
mDummyAvatar->slamPosition();
mDummyAvatar->updateJointLODs();
@@ -1135,6 +1135,7 @@ BOOL LLPreviewAnimation::render()
if (avatarp->mDrawable.notNull())
{
LLDrawPoolAvatar *avatarPoolp = (LLDrawPoolAvatar *)avatarp->mDrawable->getFace(0)->getPool();
+ avatarp->dirtyMesh();
avatarPoolp->renderAvatars(avatarp); // renders only one avatar
}
diff --git a/indra/newview/llfloaterauction.cpp b/indra/newview/llfloaterauction.cpp
index 33925fa305..41bc0db6a6 100644
--- a/indra/newview/llfloaterauction.cpp
+++ b/indra/newview/llfloaterauction.cpp
@@ -53,7 +53,7 @@
#include "llviewerdisplay.h"
#include "llviewercontrol.h"
#include "llui.h"
-#include "llglimmediate.h"
+#include "llrender.h"
///----------------------------------------------------------------------------
/// Local function declarations, constants, enums, and typedefs
diff --git a/indra/newview/llfloaterbuycurrency.cpp b/indra/newview/llfloaterbuycurrency.cpp
index 9741fbb7c7..1ab42efef3 100644
--- a/indra/newview/llfloaterbuycurrency.cpp
+++ b/indra/newview/llfloaterbuycurrency.cpp
@@ -375,7 +375,7 @@ void LLFloaterBuyCurrency::buyCurrency(const std::string& name, S32 price)
{
LLStringBase<char>::format_map_t args;
args["[NAME]"] = name.c_str();
- args["[PRICE]"] = price;
+ args["[PRICE]"] = llformat("%d", price);
gViewerWindow->alertXml("NotEnoughCurrency", args);
return;
}
diff --git a/indra/newview/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp
index 4d8f85159f..936aad6606 100644
--- a/indra/newview/llfloaterbuyland.cpp
+++ b/indra/newview/llfloaterbuyland.cpp
@@ -62,7 +62,7 @@
#include "llwindow.h"
#include "llworld.h"
#include "llxmlrpctransaction.h"
-#include "llappviewer.h"
+#include "llviewernetwork.h"
#include "roles_constants.h"
// NOTE: This is duplicated in lldatamoney.cpp ...
@@ -841,7 +841,7 @@ void LLFloaterBuyLandUI::startTransaction(TransactionType type,
static std::string transaction_uri;
if (transaction_uri.empty())
{
- transaction_uri = LLAppViewer::instance()->getHelperURI() + "landtool.php";
+ transaction_uri = LLViewerLogin::getInstance()->getHelperURI() + "landtool.php";
}
const char* method;
@@ -1363,3 +1363,4 @@ void LLFloaterBuyLandUI::onClickErrorWeb(void* data)
}
+
diff --git a/indra/newview/llfloaterchat.cpp b/indra/newview/llfloaterchat.cpp
index 3aaa14ab73..fd428990f8 100644
--- a/indra/newview/llfloaterchat.cpp
+++ b/indra/newview/llfloaterchat.cpp
@@ -207,7 +207,8 @@ void add_timestamped_line(LLViewerTextEditor* edit, const LLChat &chat, const LL
{
line = line.substr(chat.mFromName.length());
const LLStyleSP &sourceStyle = LLStyleMap::instance().lookup(chat.mFromID);
- edit->appendStyledText(chat.mFromName, false, false, &sourceStyle);
+ edit->appendStyledText(chat.mFromName, false, prepend_newline, &sourceStyle);
+ prepend_newline = false;
}
edit->appendColoredText(line, false, prepend_newline, color);
}
diff --git a/indra/newview/llfloatercolorpicker.cpp b/indra/newview/llfloatercolorpicker.cpp
index 5f6bf1cd28..ec659b5146 100644
--- a/indra/newview/llfloatercolorpicker.cpp
+++ b/indra/newview/llfloatercolorpicker.cpp
@@ -39,7 +39,7 @@
#include "llfontgl.h"
#include "llsys.h"
#include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "v3dmath.h"
#include "lldir.h"
#include "llui.h"
diff --git a/indra/newview/llfloaterimagepreview.cpp b/indra/newview/llfloaterimagepreview.cpp
index 790af61264..830b38faf8 100644
--- a/indra/newview/llfloaterimagepreview.cpp
+++ b/indra/newview/llfloaterimagepreview.cpp
@@ -43,7 +43,7 @@
#include "llcombobox.h"
#include "lldrawable.h"
#include "lldrawpoolavatar.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "llface.h"
#include "lltextbox.h"
#include "lltoolmgr.h"
diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index 9ff5739255..925ba0156d 100644
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -1147,7 +1147,7 @@ BOOL LLPanelRegionTextureInfo::validateTextureSizes()
{
LLString::format_map_t args;
- args["[TEXTURE_NUM]"] = i+1;
+ args["[TEXTURE_NUM]"] = llformat("%d",i+1);
args["[TEXTURE_SIZE_X]"] = llformat("%d",width);
args["[TEXTURE_SIZE_Y]"] = llformat("%d",height);
gViewerWindow->alertXml("InvalidTerrainSize", args);
diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp
index 25b8abefc7..369ac4f3ee 100644
--- a/indra/newview/llfloaterreporter.cpp
+++ b/indra/newview/llfloaterreporter.cpp
@@ -81,7 +81,7 @@
#include "llselectmgr.h"
#include "llviewerbuild.h"
#include "lluictrlfactory.h"
-#include "llappviewer.h"
+#include "llviewernetwork.h"
#include "llassetuploadresponders.h"
@@ -656,7 +656,7 @@ LLSD LLFloaterReporter::gatherReport()
mCopyrightWarningSeen = FALSE;
std::ostringstream summary;
- if (!LLAppViewer::instance()->isInProductionGrid())
+ if (!LLViewerLogin::getInstance()->isInProductionGrid())
{
summary << "Preview ";
}
@@ -898,7 +898,7 @@ void LLFloaterReporter::takeScreenshot()
mResourceDatap->mAssetInfo.mType);
// store in the image list so it doesn't try to fetch from the server
- LLViewerImage* image_in_list = new LLViewerImage(mResourceDatap->mAssetInfo.mUuid, TRUE);
+ LLPointer<LLViewerImage> image_in_list = new LLViewerImage(mResourceDatap->mAssetInfo.mUuid, TRUE);
image_in_list->createGLTexture(0, raw);
gImageList.addImage(image_in_list);
diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp
index b2301808a1..7dd4f293c4 100644
--- a/indra/newview/llfloatersnapshot.cpp
+++ b/indra/newview/llfloatersnapshot.cpp
@@ -36,7 +36,7 @@
#include "llfontgl.h"
#include "llsys.h"
#include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "v3dmath.h"
#include "llmath.h"
#include "lldir.h"
diff --git a/indra/newview/llfloatertos.cpp b/indra/newview/llfloatertos.cpp
index 6b51687c68..af3321c814 100644
--- a/indra/newview/llfloatertos.cpp
+++ b/indra/newview/llfloatertos.cpp
@@ -215,7 +215,7 @@ LLFloaterTOS::~LLFloaterTOS()
LLWebBrowserCtrl* web_browser = getChild<LLWebBrowserCtrl>("tos_html");
if ( web_browser )
{
- web_browser->addObserver( this );
+ web_browser->remObserver( this );
};
// tell the responder we're not here anymore
diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp
index 848d01d5ac..401cc9fc6c 100644
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -871,6 +871,8 @@ void LLFloaterWorldMap::buildLandmarkIDLists()
{
list->selectItemRange(1, -1);
list->operateOnSelection(LLCtrlListInterface::OP_DELETE);
+
+ llassert_always(list->getItemCount() == 1) ;
}
mLandmarkItemIDList.reset();
diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index c26a8dfc55..a514d9b997 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -40,7 +40,7 @@
#include "llfocusmgr.h"
#include "llfontgl.h"
#include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "llinventory.h"
#include "llcallbacklist.h"
@@ -349,10 +349,10 @@ void LLFolderViewItem::arrangeFromRoot()
// UI. If open is TRUE, then folders are opened up along the way to
// the selection.
void LLFolderViewItem::setSelectionFromRoot(LLFolderViewItem* selection,
- BOOL open, /* Flawfinder: ignore */
+ BOOL openitem,
BOOL take_keyboard_focus)
{
- getRoot()->setSelection(selection, open, take_keyboard_focus); /* Flawfinder: ignore */
+ getRoot()->setSelection(selection, openitem, take_keyboard_focus);
}
// helper function to change the selection from the root.
@@ -368,7 +368,7 @@ void LLFolderViewItem::extendSelectionFromRoot(LLFolderViewItem* selection)
getRoot()->extendSelection(selection, NULL, selected_items);
}
-EInventorySortGroup LLFolderViewItem::getSortGroup()
+EInventorySortGroup LLFolderViewItem::getSortGroup() const
{
return SG_ITEM;
}
@@ -442,7 +442,7 @@ void LLFolderViewItem::dirtyFilter()
// means 'deselect' for a leaf item. Do this optimization after
// multiple selection is implemented to make sure it all plays nice
// together.
-BOOL LLFolderViewItem::setSelection(LLFolderViewItem* selection, BOOL open, BOOL take_keyboard_focus)
+BOOL LLFolderViewItem::setSelection(LLFolderViewItem* selection, BOOL openitem, BOOL take_keyboard_focus)
{
if( selection == this )
{
@@ -548,7 +548,7 @@ void LLFolderViewItem::buildContextMenu(LLMenuGL& menu, U32 flags)
}
}
-void LLFolderViewItem::open( void ) /* Flawfinder: ignore */
+void LLFolderViewItem::openItem( void )
{
if( mListener )
{
@@ -989,9 +989,6 @@ LLFolderViewFolder::LLFolderViewFolder( const LLString& name, LLUIImagePtr icon,
mMostFilteredDescendantGeneration(-1)
{
mType = "(folder)";
-
- //mItems.setInsertBefore( &sort_item_name );
- //mFolders.setInsertBefore( &folder_insert_before );
}
// Destroys the object
@@ -1000,10 +997,6 @@ LLFolderViewFolder::~LLFolderViewFolder( void )
// The LLView base class takes care of object destruction. make sure that we
// don't have mouse or keyboard focus
gFocusMgr.releaseFocusIfNeeded( this ); // calls onCommit()
-
- //mItems.reset();
- //mItems.removeAllNodes();
- //mFolders.removeAllNodes();
}
// addToFolder() returns TRUE if it succeeds. FALSE otherwise
@@ -1048,9 +1041,7 @@ S32 LLFolderViewFolder::arrange( S32* width, S32* height, S32 filter_generation)
// Add sizes of children
S32 parent_item_height = getRect().getHeight();
- folders_t::iterator fit = mFolders.begin();
- folders_t::iterator fend = mFolders.end();
- for(; fit < fend; ++fit)
+ for(folders_t::iterator fit = mFolders.begin(); fit != mFolders.end(); ++fit)
{
LLFolderViewFolder* folderp = (*fit);
if (getRoot()->getDebugFilters())
@@ -1076,9 +1067,8 @@ S32 LLFolderViewFolder::arrange( S32* width, S32* height, S32 filter_generation)
folderp->setOrigin( 0, child_top - folderp->getRect().getHeight() );
}
}
- items_t::iterator iit = mItems.begin();
- items_t::iterator iend = mItems.end();
- for(;iit < iend; ++iit)
+ for(items_t::iterator iit = mItems.begin();
+ iit != mItems.end(); ++iit)
{
LLFolderViewItem* itemp = (*iit);
if (getRoot()->getDebugFilters())
@@ -1354,7 +1344,7 @@ BOOL LLFolderViewFolder::hasFilteredDescendants()
// Passes selection information on to children and record selection
// information if necessary.
-BOOL LLFolderViewFolder::setSelection(LLFolderViewItem* selection, BOOL open, /* Flawfinder: ignore */
+BOOL LLFolderViewFolder::setSelection(LLFolderViewItem* selection, BOOL openitem,
BOOL take_keyboard_focus)
{
BOOL rv = FALSE;
@@ -1378,7 +1368,7 @@ BOOL LLFolderViewFolder::setSelection(LLFolderViewItem* selection, BOOL open, /
iter != mFolders.end();)
{
folders_t::iterator fit = iter++;
- if((*fit)->setSelection(selection, open, take_keyboard_focus)) /* Flawfinder: ignore */
+ if((*fit)->setSelection(selection, openitem, take_keyboard_focus))
{
rv = TRUE;
child_selected = TRUE;
@@ -1389,14 +1379,14 @@ BOOL LLFolderViewFolder::setSelection(LLFolderViewItem* selection, BOOL open, /
iter != mItems.end();)
{
items_t::iterator iit = iter++;
- if((*iit)->setSelection(selection, open, take_keyboard_focus)) /* Flawfinder: ignore */
+ if((*iit)->setSelection(selection, openitem, take_keyboard_focus))
{
rv = TRUE;
child_selected = TRUE;
mNumDescendantsSelected++;
}
}
- if(open && child_selected) /* Flawfinder: ignore */
+ if(openitem && child_selected)
{
setOpenArrangeRecursively(TRUE);
}
@@ -1636,11 +1626,9 @@ void LLFolderViewFolder::destroyView()
while (!mFolders.empty())
{
LLFolderViewFolder *folderp = mFolders.back();
- folderp->destroyView();
+ folderp->destroyView(); // removes entry from mFolders
}
- mFolders.clear();
-
deleteAllChildren();
if (mParentFolder)
@@ -1711,11 +1699,11 @@ void LLFolderViewFolder::extractItem( LLFolderViewItem* item )
// This is only called for renaming an object because it won't work for date
void LLFolderViewFolder::resort(LLFolderViewItem* item)
{
- std::sort(mItems.begin(), mItems.end(), mSortFunction);
- std::sort(mFolders.begin(), mFolders.end(), mSortFunction);
+ mItems.sort(mSortFunction);
+ mFolders.sort(mSortFunction);
}
-bool LLFolderViewFolder::isTrash()
+bool LLFolderViewFolder::isTrash() const
{
if (mAmTrash == LLFolderViewFolder::UNKNOWN)
{
@@ -1740,8 +1728,8 @@ void LLFolderViewFolder::sortBy(U32 order)
(*fit)->sortBy(order);
}
- std::sort(mFolders.begin(), mFolders.end(), mSortFunction);
- std::sort(mItems.begin(), mItems.end(), mSortFunction);
+ mFolders.sort(mSortFunction);
+ mItems.sort(mSortFunction);
if (order & LLInventoryFilter::SO_DATE)
{
@@ -1776,12 +1764,12 @@ void LLFolderViewFolder::setItemSortOrder(U32 ordering)
(*fit)->setItemSortOrder(ordering);
}
- std::sort(mFolders.begin(), mFolders.end(), mSortFunction);
- std::sort(mItems.begin(), mItems.end(), mSortFunction);
+ mFolders.sort(mSortFunction);
+ mItems.sort(mSortFunction);
}
}
-EInventorySortGroup LLFolderViewFolder::getSortGroup()
+EInventorySortGroup LLFolderViewFolder::getSortGroup() const
{
if (isTrash())
{
@@ -1928,16 +1916,16 @@ void LLFolderViewFolder::toggleOpen()
}
// Force a folder open or closed
-void LLFolderViewFolder::setOpen(BOOL open) /* Flawfinder: ignore */
+void LLFolderViewFolder::setOpen(BOOL openitem)
{
- setOpenArrangeRecursively(open); /* Flawfinder: ignore */
+ setOpenArrangeRecursively(openitem);
}
-void LLFolderViewFolder::setOpenArrangeRecursively(BOOL open, ERecurseType recurse) /* Flawfinder: ignore */
+void LLFolderViewFolder::setOpenArrangeRecursively(BOOL openitem, ERecurseType recurse)
{
BOOL was_open = mIsOpen;
- mIsOpen = open; /* Flawfinder: ignore */
- if(!was_open && open) /* Flawfinder: ignore */
+ mIsOpen = openitem;
+ if(!was_open && openitem)
{
if(mListener)
{
@@ -1951,12 +1939,12 @@ void LLFolderViewFolder::setOpenArrangeRecursively(BOOL open, ERecurseType recur
iter != mFolders.end();)
{
folders_t::iterator fit = iter++;
- (*fit)->setOpenArrangeRecursively(open, RECURSE_DOWN); /* Flawfinder: ignore */
+ (*fit)->setOpenArrangeRecursively(openitem, RECURSE_DOWN); /* Flawfinder: ignore */
}
}
if (mParentFolder && (recurse == RECURSE_UP || recurse == RECURSE_UP_DOWN))
{
- mParentFolder->setOpenArrangeRecursively(open, RECURSE_UP); /* Flawfinder: ignore */
+ mParentFolder->setOpenArrangeRecursively(openitem, RECURSE_UP);
}
if (was_open != mIsOpen)
@@ -1989,7 +1977,7 @@ BOOL LLFolderViewFolder::handleDragAndDropFromChild(MASK mask,
return TRUE;
}
-void LLFolderViewFolder::open( void ) /* Flawfinder: ignore */
+void LLFolderViewFolder::openItem( void )
{
toggleOpen();
}
@@ -2687,10 +2675,10 @@ void LLFolderView::openFolder(const LLString& foldername)
}
}
-void LLFolderView::setOpenArrangeRecursively(BOOL open, ERecurseType recurse) /* Flawfinder: ignore */
+void LLFolderView::setOpenArrangeRecursively(BOOL openitem, ERecurseType recurse)
{
// call base class to do proper recursion
- LLFolderViewFolder::setOpenArrangeRecursively(open, recurse); /* Flawfinder: ignore */
+ LLFolderViewFolder::setOpenArrangeRecursively(openitem, recurse);
// make sure root folder is always open
mIsOpen = TRUE;
}
@@ -2866,7 +2854,7 @@ LLFolderViewItem* LLFolderView::getCurSelectedItem( void )
// Record the selected item and pass it down the hierachy.
-BOOL LLFolderView::setSelection(LLFolderViewItem* selection, BOOL open, /* Flawfinder: ignore */
+BOOL LLFolderView::setSelection(LLFolderViewItem* selection, BOOL openitem,
BOOL take_keyboard_focus)
{
if( selection == this )
@@ -2888,8 +2876,8 @@ BOOL LLFolderView::setSelection(LLFolderViewItem* selection, BOOL open, /* Flaw
addToSelectionList(selection);
}
- BOOL rv = LLFolderViewFolder::setSelection(selection, open, take_keyboard_focus);
- if(open && selection)
+ BOOL rv = LLFolderViewFolder::setSelection(selection, openitem, take_keyboard_focus);
+ if(openitem && selection)
{
selection->getParentFolder()->requestArrange();
}
@@ -3349,7 +3337,7 @@ void LLFolderView::openSelectedItems( void )
{
if (mSelectedItems.size() == 1)
{
- mSelectedItems.front()->open(); /* Flawfinder: ignore */
+ mSelectedItems.front()->openItem();
}
else
{
@@ -3371,7 +3359,7 @@ void LLFolderView::openSelectedItems( void )
LLFloater::setFloaterHost(multi_propertiesp);
else
LLFloater::setFloaterHost(multi_previewp);
- (*item_it)->open();
+ (*item_it)->openItem();
}
LLFloater::setFloaterHost(NULL);
@@ -4358,7 +4346,7 @@ bool LLInventorySort::updateSort(U32 order)
return false;
}
-bool LLInventorySort::operator()(LLFolderViewItem* a, LLFolderViewItem* b)
+bool LLInventorySort::operator()(const LLFolderViewItem* const& a, const LLFolderViewItem* const& b)
{
// We sort by name if we aren't sorting by date
// OR if these are folders and we are sorting folders by name.
diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h
index 8a04cc9b9c..c6b1e52157 100644
--- a/indra/newview/llfolderview.h
+++ b/indra/newview/llfolderview.h
@@ -295,7 +295,7 @@ public:
bool updateSort(U32 order);
U32 getSort() { return mSortOrder; }
- bool operator()(LLFolderViewItem* a, LLFolderViewItem* b);
+ bool operator()(const LLFolderViewItem* const& a, const LLFolderViewItem* const& b);
private:
U32 mSortOrder;
bool mByDate;
@@ -361,7 +361,7 @@ protected:
// the specified selected item appropriately for display and use
// in the UI. If open is TRUE, then folders are opened up along
// the way to the selection.
- void setSelectionFromRoot(LLFolderViewItem* selection, BOOL open, /* Flawfinder: ignore */
+ void setSelectionFromRoot(LLFolderViewItem* selection, BOOL openitem,
BOOL take_keyboard_focus = TRUE);
// helper function to change the selection from the root.
@@ -390,7 +390,7 @@ public:
enum { ARRANGE = TRUE, DO_NOT_ARRANGE = FALSE };
virtual BOOL addToFolder(LLFolderViewFolder* folder, LLFolderView* root);
- virtual EInventorySortGroup getSortGroup();
+ virtual EInventorySortGroup getSortGroup() const;
// Finds width and height of this object and it's children. Also
// makes sure that this view and it's children are the right size.
@@ -409,7 +409,7 @@ public:
// ignore. Returns TRUE if this object was affected. If open is
// TRUE, then folders are opened up along the way to the
// selection.
- virtual BOOL setSelection(LLFolderViewItem* selection, BOOL open, /* Flawfinder: ignore */
+ virtual BOOL setSelection(LLFolderViewItem* selection, BOOL openitem,
BOOL take_keyboard_focus);
// This method is used to toggle the selection of an item. If
@@ -479,7 +479,7 @@ public:
void rename(const LLString& new_name);
// open
- virtual void open( void ); /* Flawfinder: ignore */
+ virtual void openItem( void );
virtual void preview(void);
// Show children (unfortunate that this is called "open")
@@ -544,8 +544,8 @@ public:
} ETrash;
protected:
- typedef std::vector<LLFolderViewItem*> items_t;
- typedef std::vector<LLFolderViewFolder*> folders_t;
+ typedef std::list<LLFolderViewItem*> items_t;
+ typedef std::list<LLFolderViewFolder*> folders_t;
items_t mItems;
folders_t mFolders;
LLInventorySort mSortFunction;
@@ -556,7 +556,7 @@ protected:
F32 mTargetHeight;
F32 mAutoOpenCountdown;
time_t mSubtreeCreationDate;
- ETrash mAmTrash;
+ mutable ETrash mAmTrash;
S32 mLastArrangeGeneration;
S32 mLastCalculatedWidth;
S32 mCompletedFilterGeneration;
@@ -590,7 +590,7 @@ public:
BOOL needsArrange();
// Returns the sort group (system, trash, folder) for this folder.
- virtual EInventorySortGroup getSortGroup();
+ virtual EInventorySortGroup getSortGroup() const;
virtual void setCompletedFilterGeneration(S32 generation, BOOL recurse_up);
virtual S32 getCompletedFilterGeneration() { return mCompletedFilterGeneration; }
@@ -606,8 +606,8 @@ public:
// Passes selection information on to children and record
// selection information if necessary. Returns TRUE if this object
// (or a child) was affected.
- virtual BOOL setSelection(LLFolderViewItem* selection, BOOL open, /* Flawfinder: ignore */
- BOOL take_keyboard_focus);
+ virtual BOOL setSelection(LLFolderViewItem* selection, BOOL openitem,
+ BOOL take_keyboard_focus);
// This method is used to change the selection of an item. If
// selection is 'this', then note selection as true. Returns TRUE
@@ -660,7 +660,7 @@ public:
virtual void toggleOpen();
// Force a folder open or closed
- virtual void setOpen(BOOL open = TRUE); /* Flawfinder: ignore */
+ virtual void setOpen(BOOL openitem = TRUE);
// Called when a child is refreshed.
// don't rearrange child folder contents unless explicitly requested
@@ -670,7 +670,7 @@ public:
// method was written because the list iterators destroy the state
// of other iterations, thus, we can't arrange while iterating
// through the children (such as when setting which is selected.
- virtual void setOpenArrangeRecursively(BOOL open, ERecurseType recurse = RECURSE_NO); /* Flawfinder: ignore */
+ virtual void setOpenArrangeRecursively(BOOL openitem, ERecurseType recurse = RECURSE_NO);
// Get the current state of the folder.
virtual BOOL isOpen() { return mIsOpen; }
@@ -686,7 +686,7 @@ public:
void applyFunctorRecursively(LLFolderViewFunctor& functor);
virtual void applyListenerFunctorRecursively(LLFolderViewListenerFunctor& functor);
- virtual void open( void ); /* Flawfinder: ignore */
+ virtual void openItem( void );
virtual BOOL addItem(LLFolderViewItem* item);
virtual BOOL addFolder( LLFolderViewFolder* folder);
@@ -703,7 +703,7 @@ public:
virtual void draw();
time_t getCreationDate() const;
- bool isTrash();
+ bool isTrash() const;
};
@@ -752,7 +752,7 @@ public:
void openFolder(const LLString& foldername);
virtual void toggleOpen() {};
- virtual void setOpenArrangeRecursively(BOOL open, ERecurseType recurse); /* Flawfinder: ignore */
+ virtual void setOpenArrangeRecursively(BOOL openitem, ERecurseType recurse);
virtual BOOL addFolder( LLFolderViewFolder* folder);
// Finds width and height of this object and it's children. Also
@@ -769,7 +769,7 @@ public:
virtual LLFolderViewItem* getCurSelectedItem( void );
// Record the selected item and pass it down the hierachy.
- virtual BOOL setSelection(LLFolderViewItem* selection, BOOL open, /* Flawfinder: ignore */
+ virtual BOOL setSelection(LLFolderViewItem* selection, BOOL openitem,
BOOL take_keyboard_focus);
// This method is used to toggle the selection of an item. Walks
diff --git a/indra/newview/llglsandbox.cpp b/indra/newview/llglsandbox.cpp
index 21b98d6038..f4ef00d310 100644
--- a/indra/newview/llglsandbox.cpp
+++ b/indra/newview/llglsandbox.cpp
@@ -39,7 +39,7 @@
#include "llviewercontrol.h"
#include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "llglheaders.h"
#include "llparcel.h"
#include "llui.h"
diff --git a/indra/newview/llhudeffectlookat.cpp b/indra/newview/llhudeffectlookat.cpp
index f48a404a61..432096e781 100644
--- a/indra/newview/llhudeffectlookat.cpp
+++ b/indra/newview/llhudeffectlookat.cpp
@@ -33,7 +33,7 @@
#include "llhudeffectlookat.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "message.h"
#include "llagent.h"
diff --git a/indra/newview/llhudeffectpointat.cpp b/indra/newview/llhudeffectpointat.cpp
index 72fe1b2e08..93344db622 100644
--- a/indra/newview/llhudeffectpointat.cpp
+++ b/indra/newview/llhudeffectpointat.cpp
@@ -34,7 +34,7 @@
#include "llhudeffectpointat.h"
#include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "llagent.h"
#include "lldrawable.h"
diff --git a/indra/newview/llhudicon.cpp b/indra/newview/llhudicon.cpp
index cbb9fb8619..4cfd556ead 100644
--- a/indra/newview/llhudicon.cpp
+++ b/indra/newview/llhudicon.cpp
@@ -34,7 +34,7 @@
#include "llhudicon.h"
#include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "llviewerobject.h"
#include "lldrawable.h"
diff --git a/indra/newview/llhudtext.cpp b/indra/newview/llhudtext.cpp
index 2529010857..df03f8d45e 100644
--- a/indra/newview/llhudtext.cpp
+++ b/indra/newview/llhudtext.cpp
@@ -33,7 +33,7 @@
#include "llhudtext.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "llagent.h"
#include "llviewercontrol.h"
@@ -308,7 +308,6 @@ void LLHUDText::renderText(BOOL for_select)
}
LLUI::popMatrix();
-
LLImageGL::unbindTexture(0);
LLGLDepthTest gls_depth(mZCompare ? GL_TRUE : GL_FALSE, GL_FALSE);
@@ -375,7 +374,7 @@ void LLHUDText::renderText(BOOL for_select)
// Render label
{
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
for(std::vector<LLHUDTextSegment>::iterator segment_iter = mLabelSegments.begin();
segment_iter != mLabelSegments.end(); ++segment_iter )
diff --git a/indra/newview/llimpanel.cpp b/indra/newview/llimpanel.cpp
index e58db2988f..ebcbc20270 100644
--- a/indra/newview/llimpanel.cpp
+++ b/indra/newview/llimpanel.cpp
@@ -1488,14 +1488,15 @@ void LLFloaterIMPanel::addHistoryLine(const std::string &utf8msg, const LLColor4
// Don't hotlink any messages from the system (e.g. "Second Life:"), so just add those in plain text.
if (!strcmp(name,SYSTEM_FROM))
{
- mHistoryEditor->appendColoredText(name,false,false,color);
+ mHistoryEditor->appendColoredText(name,false,prepend_newline,color);
}
else
{
// Convert the name to a hotlink and add to message.
const LLStyleSP &source_style = LLStyleMap::instance().lookup(source);
- mHistoryEditor->appendStyledText(name, false, false, &source_style);
+ mHistoryEditor->appendStyledText(name,false,prepend_newline,&source_style);
}
+ prepend_newline = false;
}
mHistoryEditor->appendColoredText(utf8msg, false, prepend_newline, color);
diff --git a/indra/newview/lljoystickbutton.cpp b/indra/newview/lljoystickbutton.cpp
index e9d5bfddd2..8a685d5479 100644
--- a/indra/newview/lljoystickbutton.cpp
+++ b/indra/newview/lljoystickbutton.cpp
@@ -36,7 +36,7 @@
// Library includes
#include "llcoord.h"
#include "indra_constants.h"
-#include "llglimmediate.h"
+#include "llrender.h"
// Project includes
#include "llui.h"
diff --git a/indra/newview/llmanip.cpp b/indra/newview/llmanip.cpp
index c6c417d8f2..b6980d0382 100644
--- a/indra/newview/llmanip.cpp
+++ b/indra/newview/llmanip.cpp
@@ -36,7 +36,7 @@
#include "llmath.h"
#include "v3math.h"
#include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "llprimitive.h"
#include "llview.h"
#include "llviewerimagelist.h"
diff --git a/indra/newview/llmaniprotate.cpp b/indra/newview/llmaniprotate.cpp
index 8bb5b18e8f..77e6112e95 100644
--- a/indra/newview/llmaniprotate.cpp
+++ b/indra/newview/llmaniprotate.cpp
@@ -36,7 +36,7 @@
// library includes
#include "llmath.h"
#include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "v4color.h"
#include "llprimitive.h"
#include "llview.h"
diff --git a/indra/newview/llmanipscale.cpp b/indra/newview/llmanipscale.cpp
index d857ca7510..3a3a22081a 100644
--- a/indra/newview/llmanipscale.cpp
+++ b/indra/newview/llmanipscale.cpp
@@ -38,7 +38,7 @@
#include "v3math.h"
#include "llquaternion.h"
#include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "v4color.h"
#include "llprimitive.h"
diff --git a/indra/newview/llmaniptranslate.cpp b/indra/newview/llmaniptranslate.cpp
index 1659cc71ce..e179e01030 100644
--- a/indra/newview/llmaniptranslate.cpp
+++ b/indra/newview/llmaniptranslate.cpp
@@ -38,7 +38,7 @@
#include "llmaniptranslate.h"
#include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "llagent.h"
#include "llbbox.h"
@@ -1535,10 +1535,10 @@ void LLManipTranslate::renderSnapGuides()
LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE, GL_GREATER);
glBindTexture(GL_TEXTURE_2D, sGridTex);
gGL.flush();
- gGL.blendFunc(GL_ZERO, GL_ONE_MINUS_SRC_ALPHA);
+ gGL.blendFunc(LLRender::BF_ZERO, LLRender::BF_ONE_MINUS_SOURCE_ALPHA);
renderGrid(u,v,tiles,0.9f, 0.9f, 0.9f,a*0.15f);
gGL.flush();
- gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ gGL.setSceneBlendType(LLRender::BT_ALPHA);
}
{
@@ -1649,7 +1649,7 @@ void LLManipTranslate::highlightIntersection(LLVector3 normal,
LLGLEnable stencil(GL_STENCIL_TEST);
LLGLDepthTest depth (GL_TRUE, GL_FALSE, GL_ALWAYS);
glStencilFunc(GL_ALWAYS, 0, stencil_mask);
- glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
+ gGL.setColorMask(false, false);
LLImageGL::unbindTexture(0);
glColor4f(1,1,1,1);
@@ -1700,7 +1700,7 @@ void LLManipTranslate::highlightIntersection(LLVector3 normal,
LLPipeline::toggleRenderType(LLPipeline::RENDER_TYPE_CLOUDS);
}
- glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
+ gGL.setColorMask(true, false);
}
gGL.color4f(1,1,1,1);
diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp
index 6e10bfef58..ee184e74b4 100644
--- a/indra/newview/llnetmap.cpp
+++ b/indra/newview/llnetmap.cpp
@@ -38,7 +38,7 @@
#include "llui.h"
#include "llmath.h" // clampf()
#include "llfocusmgr.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "llagent.h"
#include "llcallingcard.h"
@@ -299,7 +299,7 @@ void LLNetMap::draw()
gGL.end();
// Draw water
- glAlphaFunc(GL_GREATER, ABOVE_WATERLINE_ALPHA / 255.f );
+ gGL.setAlphaRejectSettings(LLRender::CF_GREATER, ABOVE_WATERLINE_ALPHA / 255.f);
{
if (regionp->getLand().getWaterTexture())
{
@@ -316,7 +316,7 @@ void LLNetMap::draw()
gGL.end();
}
}
- glAlphaFunc(GL_GREATER,0.01f);
+ gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
}
diff --git a/indra/newview/lloverlaybar.cpp b/indra/newview/lloverlaybar.cpp
index 993125ce0a..23ba7163c2 100644
--- a/indra/newview/lloverlaybar.cpp
+++ b/indra/newview/lloverlaybar.cpp
@@ -37,7 +37,7 @@
#include "lloverlaybar.h"
#include "audioengine.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "llagent.h"
#include "llbutton.h"
#include "llchatbar.h"
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index a94fcf7bc2..a3526dff21 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -133,83 +133,77 @@ void LLLoginHandler::parse(const LLSD& queryMap)
mFirstName = queryMap["first_name"].asString();
mLastName = queryMap["last_name"].asString();
+ EGridInfo grid_choice = GRID_INFO_NONE;
if (queryMap["grid"].asString() == "aditi")
{
- gGridChoice = GRID_INFO_ADITI;
+ grid_choice = GRID_INFO_ADITI;
}
else if (queryMap["grid"].asString() == "agni")
{
- gGridChoice = GRID_INFO_AGNI;
+ grid_choice = GRID_INFO_AGNI;
}
else if (queryMap["grid"].asString() == "siva")
{
- gGridChoice = GRID_INFO_SIVA;
+ grid_choice = GRID_INFO_SIVA;
}
else if (queryMap["grid"].asString() == "durga")
{
- gGridChoice = GRID_INFO_DURGA;
+ grid_choice = GRID_INFO_DURGA;
}
else if (queryMap["grid"].asString() == "shakti")
{
- gGridChoice = GRID_INFO_SHAKTI;
+ grid_choice = GRID_INFO_SHAKTI;
}
else if (queryMap["grid"].asString() == "soma")
{
- gGridChoice = GRID_INFO_SOMA;
+ grid_choice = GRID_INFO_SOMA;
}
else if (queryMap["grid"].asString() == "ganga")
{
- gGridChoice = GRID_INFO_GANGA;
+ grid_choice = GRID_INFO_GANGA;
}
else if (queryMap["grid"].asString() == "vaak")
{
- gGridChoice = GRID_INFO_VAAK;
+ grid_choice = GRID_INFO_VAAK;
}
else if (queryMap["grid"].asString() == "uma")
{
- gGridChoice = GRID_INFO_UMA;
+ grid_choice = GRID_INFO_UMA;
}
else if (queryMap["grid"].asString() == "mohini")
{
- gGridChoice = GRID_INFO_MOHINI;
+ grid_choice = GRID_INFO_MOHINI;
}
else if (queryMap["grid"].asString() == "yami")
{
- gGridChoice = GRID_INFO_YAMI;
+ grid_choice = GRID_INFO_YAMI;
}
else if (queryMap["grid"].asString() == "nandi")
{
- gGridChoice = GRID_INFO_NANDI;
+ grid_choice = GRID_INFO_NANDI;
}
else if (queryMap["grid"].asString() == "mitra")
{
- gGridChoice = GRID_INFO_MITRA;
+ grid_choice = GRID_INFO_MITRA;
}
else if (queryMap["grid"].asString() == "radha")
{
- gGridChoice = GRID_INFO_RADHA;
+ grid_choice = GRID_INFO_RADHA;
}
else if (queryMap["grid"].asString() == "ravi")
{
- gGridChoice = GRID_INFO_RAVI;
+ grid_choice = GRID_INFO_RAVI;
}
else if (queryMap["grid"].asString() == "aruna")
{
- gGridChoice = GRID_INFO_ARUNA;
+ grid_choice = GRID_INFO_ARUNA;
}
-#if !LL_RELEASE_FOR_DOWNLOAD
- if (gGridChoice > GRID_INFO_NONE && gGridChoice < GRID_INFO_LOCAL)
+
+ if(grid_choice != GRID_INFO_NONE)
{
- gSavedSettings.setS32("ServerChoice", gGridChoice);
+ LLViewerLogin::getInstance()->setGridChoice(grid_choice);
}
-#endif
-
- if (LLAppViewer::instance()->getLoginURIs().size() == 0)
- {
- gGridName = gGridInfo[gGridChoice].mName; /* Flawfinder: ignore */
- LLAppViewer::instance()->resetURIs();
- }
-
+
LLString startLocation = queryMap["location"].asString();
if (startLocation == "specify")
@@ -296,7 +290,15 @@ class LLIamHereLogin : public LLHTTPClient::Responder
{
mParent = parentIn;
};
-
+
+ // We don't actually expect LLSD back, so need to override completedRaw
+ virtual void completedRaw(U32 status, const std::string& reason,
+ const LLChannelDescriptors& channels,
+ const LLIOPipe::buffer_ptr_t& buffer)
+ {
+ completed(status, reason, LLSD()); // will call result() or error()
+ }
+
virtual void result( const LLSD& content )
{
if ( mParent )
@@ -794,7 +796,7 @@ BOOL LLPanelLogin::getServer(LLString &server, S32 &domain_name)
if ((S32)GRID_INFO_OTHER == domain_name)
{
- server = gGridName;
+ server = LLViewerLogin::getInstance()->getGridLabel();
}
}
else
@@ -942,24 +944,16 @@ void LLPanelLogin::loadLoginPage()
LLString grid;
S32 grid_index;
getServer( grid, grid_index );
- if( grid_index != (S32)GRID_INFO_OTHER )
- {
- grid = gGridInfo[grid_index].mLabel;
- }
- if(gGridChoice != (EGridInfo)grid_index)
+ gViewerWindow->setMenuBackgroundColor(false, !LLViewerLogin::getInstance()->isInProductionGrid());
+ gLoginMenuBarView->setBackgroundColor(gMenuBarView->getBackgroundColor());
+
+ if (!grid.empty())
{
- LLAppViewer::instance()->resetURIs();
- gGridChoice = (EGridInfo)grid_index;
- gSavedSettings.setString("GridChoice", gGridInfo[gGridChoice].mLabel);
- gViewerWindow->setMenuBackgroundColor(false,
- !LLAppViewer::instance()->isInProductionGrid());
- gLoginMenuBarView->setBackgroundColor(gMenuBarView->getBackgroundColor());
+ char* curl_grid = curl_escape(grid.c_str(), 0);
+ oStr << "&grid=" << curl_grid;
+ curl_free(curl_grid);
}
-
- char* curl_grid = curl_escape(grid.c_str(), 0);
- oStr << "&grid=" << curl_grid;
- curl_free(curl_grid);
#if USE_VIEWER_AUTH
LLURLSimString::sInstance.parse();
@@ -1087,15 +1081,6 @@ void LLPanelLogin::onClickConnect(void *)
if (!first.empty() && !last.empty())
{
// has both first and last name typed
-
- // store off custom server entry, if currently selected
- LLComboBox* combo = sInstance->getChild<LLComboBox>("server_combo");
- S32 selected_server = combo->getValue();
- if (selected_server == GRID_INFO_NONE)
- {
- LLString custom_server = combo->getValue().asString();
- gSavedSettings.setString("CustomServer", custom_server);
- }
sInstance->mCallback(0, sInstance->mCallbackData);
}
else
@@ -1180,6 +1165,26 @@ void LLPanelLogin::onPassKey(LLLineEditor* caller, void* user_data)
// static
void LLPanelLogin::onSelectServer(LLUICtrl*, void*)
{
+ // The user twiddled with the grid choice ui.
+ // apply the selection to the grid setting.
+ LLString grid;
+ S32 grid_index;
+ getServer( grid, grid_index );
+
+ // This new seelction will override preset uris
+ // from the command line.
+ LLViewerLogin* vl = LLViewerLogin::getInstance();
+ vl->resetURIs();
+ if(grid_index != GRID_INFO_OTHER)
+ {
+ vl->setGridChoice((EGridInfo)grid_index);
+ grid = vl->getGridLabel();
+ }
+ else
+ {
+ vl->setGridChoice(grid);
+ }
+
// grid changed so show new splash screen (possibly)
loadLoginPage();
}
diff --git a/indra/newview/llprogressview.cpp b/indra/newview/llprogressview.cpp
index d27b587a09..e5b063e6d7 100644
--- a/indra/newview/llprogressview.cpp
+++ b/indra/newview/llprogressview.cpp
@@ -36,7 +36,7 @@
#include "indra_constants.h"
#include "llmath.h"
#include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "llui.h"
#include "llfontgl.h"
#include "llimagegl.h"
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index 103f350b0a..a889388e85 100644
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -39,7 +39,7 @@
#include "lldbstrings.h"
#include "lleconomy.h"
#include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "llpermissions.h"
#include "llpermissionsflags.h"
#include "llundo.h"
@@ -1038,19 +1038,21 @@ void LLSelectMgr::getGrid(LLVector3& origin, LLQuaternion &rotation, LLVector3 &
if (mGridMode == GRID_MODE_LOCAL && mSelectedObjects->getObjectCount())
{
- LLViewerObject* root = getSelectedParentObject(mSelectedObjects->getFirstObject());
+ //LLViewerObject* root = getSelectedParentObject(mSelectedObjects->getFirstObject());
LLBBox bbox = mSavedSelectionBBox;
mGridOrigin = mSavedSelectionBBox.getCenterAgent();
mGridScale = mSavedSelectionBBox.getExtentLocal() * 0.5f;
- if(mSelectedObjects->getObjectCount() < 2 || !root || root->mDrawable.isNull())
+ // DEV-12570 Just taking the saved selection box rotation prevents
+ // wild rotations of linked sets while in local grid mode
+ //if(mSelectedObjects->getObjectCount() < 2 || !root || root->mDrawable.isNull())
{
mGridRotation = mSavedSelectionBBox.getRotation();
}
- else //set to the root object
+ /*else //set to the root object
{
mGridRotation = root->getRenderRotation();
- }
+ }*/
}
else if (mGridMode == GRID_MODE_REF_OBJECT && first_grid_object && first_grid_object->mDrawable.notNull())
{
@@ -4806,7 +4808,7 @@ void LLSelectMgr::updateSilhouettes()
objectp->clearChanged(LLXform::MOVED | LLXform::SILHOUETTE);
}
- //glAlphaFunc(GL_GREATER, 0.01f);
+ //gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
}
void LLSelectMgr::renderSilhouettes(BOOL for_hud)
@@ -4818,7 +4820,7 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)
LLViewerImage::bindTexture(mSilhouetteImagep);
LLGLSPipelineSelection gls_select;
- glAlphaFunc(GL_GREATER, 0.0f);
+ gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.f);
LLGLEnable blend(GL_BLEND);
LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
@@ -4846,11 +4848,21 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)
if (mSelectedObjects->getNumNodes())
{
LLUUID inspect_item_id = LLFloaterInspect::getSelectedUUID();
+
for (S32 pass = 0; pass < 2; pass++)
{
+ LLObjectSelection::iterator end_ = mSelectedObjects->end();
+ S32 num_nodes = mSelectedObjects->getNumNodes() ;
+ LLObjectSelection::iterator prev_iter = mSelectedObjects->end();
for (LLObjectSelection::iterator iter = mSelectedObjects->begin();
iter != mSelectedObjects->end(); iter++)
{
+ llassert_always(end_ == mSelectedObjects->end()) ;//mSelectedObjects should not grow
+ llassert_always(prev_iter != iter) ; //iter should move
+ llassert_always(num_nodes > 0) ; //iter should not circle inside mSelectedObjects.
+ num_nodes-- ;
+ prev_iter = iter ;
+
LLSelectNode* node = *iter;
LLViewerObject* objectp = node->getObject();
if (!objectp)
@@ -4924,7 +4936,7 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)
}
mSilhouetteImagep->unbindTexture(0, GL_TEXTURE_2D);
- glAlphaFunc(GL_GREATER, 0.01f);
+ gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
}
void LLSelectMgr::generateSilhouette(LLSelectNode* nodep, const LLVector3& view_point)
@@ -5289,7 +5301,7 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color)
if (LLSelectMgr::sRenderHiddenSelections) // && gFloaterTools && gFloaterTools->getVisible())
{
gGL.flush();
- gGL.blendFunc(GL_SRC_COLOR, GL_ONE);
+ gGL.blendFunc(LLRender::BF_SOURCE_COLOR, LLRender::BF_ONE);
LLGLEnable fog(GL_FOG);
glFogi(GL_FOG_MODE, GL_LINEAR);
float d = (LLViewerCamera::getInstance()->getPointOfInterest()-LLViewerCamera::getInstance()->getOrigin()).magVec();
@@ -5299,7 +5311,7 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color)
glFogfv(GL_FOG_COLOR, fogCol.mV);
LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE, GL_GEQUAL);
- glAlphaFunc(GL_GREATER, 0.01f);
+ gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
gGL.begin(LLVertexBuffer::LINES);
{
S32 i = 0;
@@ -5320,7 +5332,7 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color)
}
gGL.flush();
- gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ gGL.setSceneBlendType(LLRender::BT_ALPHA);
gGL.begin(LLVertexBuffer::TRIANGLES);
{
S32 i = 0;
diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp
index ff53dfea2f..b6ef833709 100644
--- a/indra/newview/llspatialpartition.cpp
+++ b/indra/newview/llspatialpartition.cpp
@@ -43,7 +43,7 @@
#include "llviewerregion.h"
#include "llcamera.h"
#include "pipeline.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "lloctree.h"
const F32 SG_OCCLUSION_FUDGE = 1.01f;
@@ -60,6 +60,7 @@ const F32 SG_OCCLUSION_FUDGE = 1.01f;
static U32 sZombieGroups = 0;
U32 LLSpatialGroup::sNodeCount = 0;
+BOOL LLSpatialGroup::sNoDelete = FALSE;
static F32 sLastMaxTexPriority = 1.f;
static F32 sCurMaxTexPriority = 1.f;
@@ -295,6 +296,11 @@ S32 LLSphereAABB(const LLVector3& center, const LLVector3& size, const LLVector3
LLSpatialGroup::~LLSpatialGroup()
{
+ if (sNoDelete)
+ {
+ llerrs << "Illegal deletion of LLSpatialGroup!" << llendl;
+ }
+
if (isState(DEAD))
{
sZombieGroups--;
@@ -2006,7 +2012,7 @@ void renderOctree(LLSpatialGroup* group)
//render solid object bounding box, color
//coded by buffer usage and activity
LLGLDepthTest depth(GL_TRUE, GL_FALSE);
- gGL.blendFunc(GL_SRC_ALPHA, GL_ONE);
+ gGL.setSceneBlendType(LLRender::BT_ADD_WITH_ALPHA);
LLVector4 col;
if (group->mBuilt > 0.f)
{
@@ -2094,7 +2100,7 @@ void renderOctree(LLSpatialGroup* group)
drawBox(group->mObjectBounds[0], group->mObjectBounds[1]*1.01f+LLVector3(0.001f, 0.001f, 0.001f));
glDepthMask(GL_TRUE);
- gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ gGL.setSceneBlendType(LLRender::BT_ALPHA);
if (group->mBuilt <= 0.f)
{
@@ -2122,7 +2128,7 @@ void renderOctree(LLSpatialGroup* group)
void renderVisibility(LLSpatialGroup* group, LLCamera* camera)
{
LLGLEnable blend(GL_BLEND);
- gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ gGL.setSceneBlendType(LLRender::BT_ALPHA);
LLGLEnable cull(GL_CULL_FACE);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
@@ -2498,7 +2504,7 @@ void LLSpatialPartition::renderDebug()
LLGLDisable cullface(GL_CULL_FACE);
LLGLEnable blend(GL_BLEND);
- gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ gGL.setSceneBlendType(LLRender::BT_ALPHA);
LLImageGL::unbindTexture(0);
gPipeline.disableLights();
@@ -2619,7 +2625,10 @@ LLDrawInfo::LLDrawInfo(U16 start, U16 end, U32 count, U32 offset,
LLDrawInfo::~LLDrawInfo()
{
-
+ if (LLSpatialGroup::sNoDelete)
+ {
+ llerrs << "LLDrawInfo deleted illegally!" << llendl;
+ }
}
LLVertexBuffer* LLGeometryManager::createVertexBuffer(U32 type_mask, U32 usage)
@@ -2813,7 +2822,16 @@ void LLCullResult::pushDrawInfo(U32 type, LLDrawInfo* draw_info)
}
-
+void LLCullResult::assertDrawMapsEmpty()
+{
+ for (U32 i = 0; i < LLRenderPass::NUM_RENDER_TYPES; i++)
+ {
+ if (mRenderMapSize[i] != 0)
+ {
+ llerrs << "Stale LLDrawInfo's in LLCullResult!" << llendl;
+ }
+ }
+}
diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h
index 7e1175a000..6ea22c2f66 100644
--- a/indra/newview/llspatialpartition.h
+++ b/indra/newview/llspatialpartition.h
@@ -127,6 +127,7 @@ class LLSpatialGroup : public LLOctreeListener<LLDrawable>
friend class LLSpatialPartition;
public:
static U32 sNodeCount;
+ static BOOL sNoDelete; //deletion of spatial groups and draw info not allowed if TRUE
typedef std::vector<LLPointer<LLSpatialGroup> > sg_vector_t;
typedef std::set<LLPointer<LLSpatialGroup> > sg_set_t;
@@ -421,7 +422,7 @@ public:
void pushDrawable(LLDrawable* drawable);
void pushBridge(LLSpatialBridge* bridge);
void pushDrawInfo(U32 type, LLDrawInfo* draw_info);
-
+
U32 getVisibleGroupsSize() { return mVisibleGroupsSize; }
U32 getAlphaGroupsSize() { return mAlphaGroupsSize; }
U32 getDrawableGroupsSize() { return mDrawableGroupsSize; }
@@ -429,6 +430,8 @@ public:
U32 getVisibleBridgeSize() { return mVisibleBridgeSize; }
U32 getRenderMapSize(U32 type) { return mRenderMapSize[type]; }
+ void assertDrawMapsEmpty();
+
private:
U32 mVisibleGroupsSize;
U32 mAlphaGroupsSize;
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 724b61481b..7480d4dd73 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -820,22 +820,28 @@ BOOL idle_startup()
LLString server_label;
S32 domain_name_index;
BOOL user_picked_server = LLPanelLogin::getServer( server_label, domain_name_index );
- gGridChoice = (EGridInfo) domain_name_index;
- gSavedSettings.setS32("ServerChoice", gGridChoice);
- if (gGridChoice == GRID_INFO_OTHER)
+ if((EGridInfo)domain_name_index == GRID_INFO_OTHER)
{
- gGridName = server_label;/* Flawfinder: ignore */
+ // Since the grid chosen was an 'other', set the choice by string.
+ LLViewerLogin::getInstance()->setGridChoice(server_label);
+ }
+ else
+ {
+ // Set the choice according to index.
+ LLViewerLogin::getInstance()->setGridChoice((EGridInfo)domain_name_index);
}
if ( user_picked_server )
- { // User picked a grid from the popup, so clear the stored urls and they will be re-generated from gGridChoice
+ { // User picked a grid from the popup, so clear the
+ // stored uris and they will be re-generated from the GridChoice
sAuthUris.clear();
- LLAppViewer::instance()->resetURIs();
+ LLViewerLogin::getInstance()->resetURIs();
}
LLString location;
LLPanelLogin::getLocation( location );
LLURLSimString::setString( location );
+
// END TODO
LLPanelLogin::close();
}
@@ -915,7 +921,7 @@ BOOL idle_startup()
if(STATE_LOGIN_AUTH_INIT == LLStartUp::getStartupState())
{
//#define LL_MINIMIAL_REQUESTED_OPTIONS
- gDebugInfo["GridName"] = gGridInfo[gGridChoice].mLabel;
+ gDebugInfo["GridName"] = LLViewerLogin::getInstance()->getGridLabel();
// *Note: this is where gUserAuth used to be created.
requested_options.clear();
@@ -949,7 +955,8 @@ BOOL idle_startup()
gSavedSettings.setBOOL("UseDebugMenus", TRUE);
requested_options.push_back("god-connect");
}
- const std::vector<std::string>& uris = LLAppViewer::instance()->getLoginURIs();
+ std::vector<std::string> uris;
+ LLViewerLogin::getInstance()->getLoginURIs(uris);
std::vector<std::string>::const_iterator iter, end;
for (iter = uris.begin(), end = uris.end(); iter != end; ++iter)
{
@@ -1222,7 +1229,7 @@ BOOL idle_startup()
sAuthUriNum++;
std::ostringstream s;
LLString::format_map_t args;
- args["[NUMBER]"] = sAuthUriNum + 1;
+ args["[NUMBER]"] = llformat("%d", sAuthUriNum + 1);
auth_desc = LLTrans::getString("LoginAttempt", args).c_str();
LLStartUp::setStartupState( STATE_LOGIN_AUTHENTICATE );
return do_normal_idle;
@@ -1276,7 +1283,6 @@ BOOL idle_startup()
save_password_to_disk(NULL);
}
gSavedSettings.setBOOL("RememberPassword", remember_password);
- gSavedSettings.setBOOL("LoginLastLocation", gSavedSettings.getBOOL("LoginLastLocation"));
text = LLUserAuth::getInstance()->getResponse("agent_access");
if(text && (text[0] == 'M'))
@@ -2331,7 +2337,7 @@ BOOL idle_startup()
gDebugView->mFastTimerView->setVisible(TRUE);
#endif
- LLAppViewer::instance()->startMainloopTimeout();
+ LLAppViewer::instance()->initMainloopTimeout("Mainloop Init");
return do_normal_idle;
}
@@ -2362,33 +2368,13 @@ void login_show()
LL_DEBUGS("AppInit") << "Setting Servers" << LL_ENDL;
- if( GRID_INFO_OTHER == gGridChoice )
- {
- LLPanelLogin::addServer( gGridName.c_str(), GRID_INFO_OTHER );
- }
- else
+ LLPanelLogin::addServer(LLViewerLogin::getInstance()->getGridLabel().c_str(), LLViewerLogin::getInstance()->getGridChoice());
+
+ LLViewerLogin* vl = LLViewerLogin::getInstance();
+ for(int grid_index = GRID_INFO_ADITI; grid_index < GRID_INFO_OTHER; ++grid_index)
{
- LLPanelLogin::addServer( gGridInfo[gGridChoice].mLabel, gGridChoice );
+ LLPanelLogin::addServer(vl->getKnownGridLabel((EGridInfo)grid_index).c_str(), grid_index);
}
-
- // Arg! We hate loops!
- LLPanelLogin::addServer( gGridInfo[GRID_INFO_ADITI].mLabel, GRID_INFO_ADITI );
- LLPanelLogin::addServer( gGridInfo[GRID_INFO_AGNI].mLabel, GRID_INFO_AGNI );
- LLPanelLogin::addServer( gGridInfo[GRID_INFO_ARUNA].mLabel, GRID_INFO_ARUNA );
- LLPanelLogin::addServer( gGridInfo[GRID_INFO_DURGA].mLabel, GRID_INFO_DURGA );
- LLPanelLogin::addServer( gGridInfo[GRID_INFO_GANGA].mLabel, GRID_INFO_GANGA );
- LLPanelLogin::addServer( gGridInfo[GRID_INFO_MITRA].mLabel, GRID_INFO_MITRA );
- LLPanelLogin::addServer( gGridInfo[GRID_INFO_MOHINI].mLabel, GRID_INFO_MOHINI );
- LLPanelLogin::addServer( gGridInfo[GRID_INFO_NANDI].mLabel, GRID_INFO_NANDI );
- LLPanelLogin::addServer( gGridInfo[GRID_INFO_RADHA].mLabel, GRID_INFO_RADHA );
- LLPanelLogin::addServer( gGridInfo[GRID_INFO_RAVI].mLabel, GRID_INFO_RAVI );
- LLPanelLogin::addServer( gGridInfo[GRID_INFO_SIVA].mLabel, GRID_INFO_SIVA );
- LLPanelLogin::addServer( gGridInfo[GRID_INFO_SHAKTI].mLabel, GRID_INFO_SHAKTI );
- LLPanelLogin::addServer( gGridInfo[GRID_INFO_SOMA].mLabel, GRID_INFO_SOMA );
- LLPanelLogin::addServer( gGridInfo[GRID_INFO_UMA].mLabel, GRID_INFO_UMA );
- LLPanelLogin::addServer( gGridInfo[GRID_INFO_VAAK].mLabel, GRID_INFO_VAAK );
- LLPanelLogin::addServer( gGridInfo[GRID_INFO_YAMI].mLabel, GRID_INFO_YAMI );
- LLPanelLogin::addServer( gGridInfo[GRID_INFO_LOCAL].mLabel, GRID_INFO_LOCAL );
}
// Callback for when login screen is closed. Option 0 = connect, option 1 = quit.
@@ -2705,7 +2691,7 @@ void update_dialog_callback(S32 option, void *userdata)
#endif
// *TODO change userserver to be grid on both viewer and sim, since
// userserver no longer exists.
- query_map["userserver"] = gGridName;
+ query_map["userserver"] = LLViewerLogin::getInstance()->getGridLabel();
query_map["channel"] = gSavedSettings.getString("VersionChannelName");
// *TODO constantize this guy
LLURI update_url = LLURI::buildHTTP("secondlife.com", 80, "update.php", query_map);
@@ -2798,9 +2784,6 @@ void update_dialog_callback(S32 option, void *userdata)
LL_DEBUGS("AppInit") << "Calling updater: " << update_exe_path << LL_ENDL;
- // *REMOVE:Mani The following call is handled through ~LLAppViewer.
- // remove_marker_file(); // In case updater fails
-
// Run the auto-updater.
system(update_exe_path.c_str()); /* Flawfinder: ignore */
@@ -2808,10 +2791,6 @@ void update_dialog_callback(S32 option, void *userdata)
OSMessageBox("Automatic updating is not yet implemented for Linux.\n"
"Please download the latest version from www.secondlife.com.",
NULL, OSMB_OK);
-
- // *REMOVE:Mani The following call is handled through ~LLAppViewer.
- // remove_marker_file();
-
#endif
LLAppViewer::instance()->forceQuit();
}
diff --git a/indra/newview/llstartup.h b/indra/newview/llstartup.h
index 351d4b1a21..6c832492c0 100644
--- a/indra/newview/llstartup.h
+++ b/indra/newview/llstartup.h
@@ -15,7 +15,7 @@
* online at http://secondlife.com/developers/opensource/gplv2
*
* There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
+ * it is applied to this Source Code. View the full textof the exception
* in the file doc/FLOSS-exception.txt in this software distribution, or
* online at http://secondlife.com/developers/opensource/flossexception
*
diff --git a/indra/newview/llsurfacepatch.cpp b/indra/newview/llsurfacepatch.cpp
index 2877fc66e3..6f952ea57d 100644
--- a/indra/newview/llsurfacepatch.cpp
+++ b/indra/newview/llsurfacepatch.cpp
@@ -207,10 +207,11 @@ LLVector2 LLSurfacePatch::getTexCoords(const U32 x, const U32 y) const
void LLSurfacePatch::eval(const U32 x, const U32 y, const U32 stride, LLVector3 *vertex, LLVector3 *normal,
LLVector2 *tex0, LLVector2 *tex1)
{
- if (!mSurfacep || !mSurfacep->getRegion())
+ if (!mSurfacep || !mSurfacep->getRegion() || !mSurfacep->getGridsPerEdge())
{
return; // failsafe
}
+ llassert_always(vertex && normal && tex0 && tex1);
U32 surface_stride = mSurfacep->getGridsPerEdge();
U32 point_offset = x + y*surface_stride;
diff --git a/indra/newview/lltexlayer.cpp b/indra/newview/lltexlayer.cpp
index 7a2d232de6..6286289d6b 100644
--- a/indra/newview/lltexlayer.cpp
+++ b/indra/newview/lltexlayer.cpp
@@ -52,7 +52,7 @@
#include "llxmltree.h"
#include "pipeline.h"
#include "v4coloru.h"
-#include "llglimmediate.h"
+#include "llrender.h"
//#include "../tools/imdebug/imdebug.h"
@@ -239,6 +239,9 @@ BOOL LLTexLayerSetBuffer::render()
{
U8* baked_bump_data = NULL;
+ // Default color mask for tex layer render
+ gGL.setColorMask(true, true);
+
// do we need to upload, and do we have sufficient data to create an uploadable composite?
// When do we upload the texture if gAgent.mNumPendingQueries is non-zero?
BOOL upload_now = (gAgent.mNumPendingQueries == 0 && mNeedsUpload && mTexLayerSet->isLocalTextureDataFinal());
@@ -292,8 +295,8 @@ BOOL LLTexLayerSetBuffer::render()
}
// reset GL state
- glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE );
- gGL.blendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
+ gGL.setColorMask(true, true);
+ gGL.setSceneBlendType(LLRender::BT_ALPHA);
// we have valid texture data now
mInitialized = TRUE;
@@ -756,6 +759,7 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height )
LLGLSUIDefault gls_ui;
LLGLDepthTest gls_depth(GL_FALSE, GL_FALSE);
+ gGL.setColorMask(true, true);
// composite color layers
for( layer_list_t::iterator iter = mLayerList.begin(); iter != mLayerList.end(); iter++ )
@@ -774,8 +778,8 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height )
{
LLGLSNoAlphaTest gls_no_alpha_test;
gGL.flush();
- glColorMask( GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE );
- gGL.blendFunc( GL_ONE, GL_ZERO );
+ gGL.setColorMask(false, true);
+ gGL.setSceneBlendType(LLRender::BT_REPLACE);
{
LLImageGL* image_gl = gTexStaticImageList.getImageGL( getInfo()->mStaticAlphaFileName, TRUE );
@@ -793,8 +797,8 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height )
LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
gGL.flush();
- glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE );
- gGL.blendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
+ gGL.setColorMask(true, true);
+ gGL.setSceneBlendType(LLRender::BT_ALPHA);
}
else
if( getInfo()->mClearAlpha )
@@ -803,12 +807,12 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height )
LLGLSNoTextureNoAlphaTest gls_no_alpha;
gGL.color4f( 0.f, 0.f, 0.f, 1.f );
gGL.flush();
- glColorMask( GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE );
+ gGL.setColorMask(false, true);
gl_rect_2d_simple( width, height );
gGL.flush();
- glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE );
+ gGL.setColorMask(true, true);
}
stop_glerror();
@@ -836,11 +840,11 @@ BOOL LLTexLayerSet::renderBump( S32 x, S32 y, S32 width, S32 height )
// Set the alpha channel to one (clean up after previous blending)
LLGLSNoTextureNoAlphaTest gls_no_texture_no_alpha;
gGL.color4f( 0.f, 0.f, 0.f, 1.f );
- glColorMask( GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE );
+ gGL.setColorMask(false, true);
gl_rect_2d_simple( width, height );
- glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE );
+ gGL.setColorMask(true, true);
stop_glerror();
return success;
@@ -1330,7 +1334,7 @@ BOOL LLTexLayer::render( S32 x, S32 y, S32 width, S32 height )
renderAlphaMasks( x, y, width, height, &net_color );
alpha_mask_specified = TRUE;
gGL.flush();
- gGL.blendFunc( GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA );
+ gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_ONE_MINUS_DEST_ALPHA);
}
gGL.color4fv( net_color.mV);
@@ -1338,7 +1342,7 @@ BOOL LLTexLayer::render( S32 x, S32 y, S32 width, S32 height )
if( getInfo()->mWriteAllChannels )
{
gGL.flush();
- gGL.blendFunc( GL_ONE, GL_ZERO );
+ gGL.setSceneBlendType(LLRender::BT_REPLACE);
}
if( (getInfo()->mLocalTexture != -1) && !getInfo()->mUseLocalTextureAlphaOnly )
@@ -1401,7 +1405,7 @@ BOOL LLTexLayer::render( S32 x, S32 y, S32 width, S32 height )
{
// Restore standard blend func value
gGL.flush();
- gGL.blendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
+ gGL.setSceneBlendType(LLRender::BT_ALPHA);
stop_glerror();
}
@@ -1506,7 +1510,7 @@ BOOL LLTexLayer::renderAlphaMasks( S32 x, S32 y, S32 width, S32 height, LLColor4
llassert( !mParamAlphaList.empty() );
- glColorMask( GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE );
+ gGL.setColorMask(false, true);
alpha_list_t::iterator iter = mParamAlphaList.begin();
LLTexLayerParamAlpha* first_param = *iter;
@@ -1518,7 +1522,7 @@ BOOL LLTexLayer::renderAlphaMasks( S32 x, S32 y, S32 width, S32 height, LLColor4
// Clear the alpha
gGL.flush();
- gGL.blendFunc( GL_ONE, GL_ZERO );
+ gGL.setSceneBlendType(LLRender::BT_REPLACE);
gGL.color4f( 0.f, 0.f, 0.f, 0.f );
gl_rect_2d_simple( width, height );
@@ -1536,7 +1540,7 @@ BOOL LLTexLayer::renderAlphaMasks( S32 x, S32 y, S32 width, S32 height, LLColor4
// Approximates a min() function
gGL.flush();
- gGL.blendFunc( GL_DST_ALPHA, GL_ZERO );
+ gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_ZERO);
// Accumulate the alpha component of the texture
if( getInfo()->mLocalTexture != -1 )
@@ -1601,7 +1605,7 @@ BOOL LLTexLayer::renderAlphaMasks( S32 x, S32 y, S32 width, S32 height, LLColor4
LLGLSUIDefault gls_ui;
- glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE );
+ gGL.setColorMask(true, true);
if (!mMorphMasksValid && !mMaskedMorphs.empty())
{
@@ -1963,11 +1967,11 @@ BOOL LLTexLayerParamAlpha::render( S32 x, S32 y, S32 width, S32 height )
gGL.flush();
if( getInfo()->mMultiplyBlend )
{
- gGL.blendFunc( GL_DST_ALPHA, GL_ZERO ); // Multiplication: approximates a min() function
+ gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_ZERO); // Multiplication: approximates a min() function
}
else
{
- gGL.blendFunc( GL_ONE, GL_ONE ); // Addition: approximates a max() function
+ gGL.setSceneBlendType(LLRender::BT_ADD); // Addition: approximates a max() function
}
if( !getInfo()->mStaticImageFileName.empty() && !mStaticImageInvalid)
diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp
index 86ef9e95cf..10801cfd4f 100644
--- a/indra/newview/lltexturecache.cpp
+++ b/indra/newview/lltexturecache.cpp
@@ -39,6 +39,9 @@
#include "lllfsthread.h"
#include "llviewercontrol.h"
+// Included to allow LLTextureCache::purgeTextures() to pause watchdog timeout
+#include "llappviewer.h"
+
#define USE_LFS_READ 0
#define USE_LFS_WRITE 0
@@ -1153,6 +1156,9 @@ void LLTextureCache::purgeTextures(bool validate)
return;
}
+ // *FIX:Mani - watchdog off.
+ LLAppViewer::instance()->pauseMainloopTimeout();
+
LLMutexLock lock(&mHeaderMutex);
S32 filesize = ll_apr_file_size(mTexturesDirEntriesFileName, NULL);
@@ -1273,6 +1279,9 @@ void LLTextureCache::purgeTextures(bool validate)
llassert(mTexturesSizeTotal == total_size);
delete[] entries;
+
+ // *FIX:Mani - watchdog back on.
+ LLAppViewer::instance()->resumeMainloopTimeout();
LL_INFOS("TextureCache") << "TEXTURE CACHE:"
<< " PURGED: " << purge_count
diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp
index 22c0e08612..b89e93b9a4 100644
--- a/indra/newview/lltexturectrl.cpp
+++ b/indra/newview/lltexturectrl.cpp
@@ -34,7 +34,7 @@
#include "lltexturectrl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "llagent.h"
#include "llviewerimagelist.h"
#include "llcheckboxctrl.h"
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index bcb2185687..c5ae50c050 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -1341,13 +1341,13 @@ bool LLTextureFetch::createRequest(const LLString& filename, const LLUUID& id, c
}
S32 desired_size;
- if ((desired_discard == 0) && worker && worker->mFileSize)
+ if (desired_discard == 0)
{
// if we want the entire image, and we know its size, then get it all
// (calcDataSizeJ2C() below makes assumptions about how the image
// was compressed - this code ensures that when we request the entire image,
// we really do get it.)
- desired_size = worker->mFileSize;
+ desired_size = MAX_IMAGE_DATA_SIZE;
}
else if (w*h*c > 0)
{
@@ -1358,17 +1358,11 @@ bool LLTextureFetch::createRequest(const LLString& filename, const LLUUID& id, c
}
else
{
- if (desired_discard == 0)
- {
- // If we want all of the image, request the maximum possible data
- desired_size = MAX_IMAGE_DATA_SIZE;
- }
- else
- {
- desired_size = FIRST_PACKET_SIZE;
- desired_discard = MAX_DISCARD_LEVEL;
- }
+ desired_size = FIRST_PACKET_SIZE;
+ desired_discard = MAX_DISCARD_LEVEL;
}
+
+
if (worker)
{
if (worker->wasAborted())
diff --git a/indra/newview/lltextureview.cpp b/indra/newview/lltextureview.cpp
index 7f571a1205..a9005ef71b 100644
--- a/indra/newview/lltextureview.cpp
+++ b/indra/newview/lltextureview.cpp
@@ -40,7 +40,7 @@
#include "lllfsthread.h"
#include "llui.h"
#include "llimageworker.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "llhoverview.h"
#include "llselectmgr.h"
diff --git a/indra/newview/lltoolbrush.cpp b/indra/newview/lltoolbrush.cpp
index 0224e1c925..32b27fb876 100644
--- a/indra/newview/lltoolbrush.cpp
+++ b/indra/newview/lltoolbrush.cpp
@@ -35,7 +35,7 @@
#include "lltoolselectland.h"
#include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "message.h"
@@ -94,7 +94,6 @@ LLToolBrushLand::LLToolBrushLand()
mMouseX( 0 ),
mMouseY(0),
mGotHover(FALSE),
- mLastShowParcelOwners(FALSE),
mBrushSelected(FALSE)
{
mBrushIndex = gSavedSettings.getS32("RadioLandBrushSize");
@@ -104,7 +103,8 @@ void LLToolBrushLand::modifyLandAtPointGlobal(const LLVector3d &pos_global,
MASK mask)
{
S32 radioAction = gSavedSettings.getS32("RadioLandBrushAction");
-
+
+ mLastAffectedRegions.clear();
determineAffectedRegions(mLastAffectedRegions, pos_global);
for(region_list_t::iterator iter = mLastAffectedRegions.begin();
iter != mLastAffectedRegions.end(); ++iter)
@@ -418,8 +418,6 @@ void LLToolBrushLand::handleSelect()
gFloaterTools->setStatusText("modifyland");
// if (!mBrushSelected)
{
- mLastShowParcelOwners = gSavedSettings.getBOOL("ShowParcelOwners");
- gSavedSettings.setBOOL("ShowParcelOwners", mLastShowParcelOwners);
mBrushSelected = TRUE;
}
}
@@ -431,8 +429,6 @@ void LLToolBrushLand::handleDeselect()
{
gEditMenuHandler = NULL;
}
- mLastShowParcelOwners = gSavedSettings.getBOOL("ShowParcelOwners");
- gSavedSettings.setBOOL("ShowParcelOwners", mLastShowParcelOwners);
LLViewerParcelMgr::getInstance()->setSelectionVisible(TRUE);
mBrushSelected = FALSE;
}
diff --git a/indra/newview/lltoolbrush.h b/indra/newview/lltoolbrush.h
index 70e34725af..3940f3ac89 100644
--- a/indra/newview/lltoolbrush.h
+++ b/indra/newview/lltoolbrush.h
@@ -97,7 +97,6 @@ protected:
S32 mMouseY;
S32 mBrushIndex;
BOOL mGotHover;
- BOOL mLastShowParcelOwners;
BOOL mBrushSelected;
// Order doesn't matter and we do check for existance of regions, so use a set
region_list_t mLastAffectedRegions;
diff --git a/indra/newview/lltoolmorph.cpp b/indra/newview/lltoolmorph.cpp
index ad11f5ad43..d8d271bfda 100644
--- a/indra/newview/lltoolmorph.cpp
+++ b/indra/newview/lltoolmorph.cpp
@@ -33,7 +33,7 @@
// File includes
#include "lltoolmorph.h"
-#include "llglimmediate.h"
+#include "llrender.h"
// Library includes
#include "audioengine.h"
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index 315136ed36..310b677bff 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -309,6 +309,7 @@ BOOL LLToolPie::pickAndShowMenu(S32 x, S32 y, MASK mask, BOOL always_show)
}
else if (mHitObjectID == gAgent.getID() )
{
+ llassert_always(gPieSelf) ;
gPieSelf->show(x, y, mPieMouseButtonDown);
}
else if (object)
diff --git a/indra/newview/lltoolselectland.cpp b/indra/newview/lltoolselectland.cpp
index 28e4227db4..38e9811b73 100644
--- a/indra/newview/lltoolselectland.cpp
+++ b/indra/newview/lltoolselectland.cpp
@@ -61,8 +61,7 @@ LLToolSelectLand::LLToolSelectLand( )
mDragEndY(0),
mMouseOutsideSlop(FALSE),
mWestSouthBottom(),
- mEastNorthTop(),
- mLastShowParcelOwners(FALSE)
+ mEastNorthTop()
{ }
LLToolSelectLand::~LLToolSelectLand()
@@ -216,17 +215,12 @@ void LLToolSelectLand::render()
void LLToolSelectLand::handleSelect()
{
gFloaterTools->setStatusText("selectland");
- mLastShowParcelOwners = gSavedSettings.getBOOL("ShowParcelOwners");
- gSavedSettings.setBOOL("ShowParcelOwners", mLastShowParcelOwners);
}
void LLToolSelectLand::handleDeselect()
{
mSelection = NULL;
- mLastShowParcelOwners = gSavedSettings.getBOOL("ShowParcelOwners");
- //LLViewerParcelMgr::getInstance()->deselectLand();
- gSavedSettings.setBOOL("ShowParcelOwners", mLastShowParcelOwners);
}
diff --git a/indra/newview/lltoolselectland.h b/indra/newview/lltoolselectland.h
index 37d656289b..bca0e13384 100644
--- a/indra/newview/lltoolselectland.h
+++ b/indra/newview/lltoolselectland.h
@@ -74,7 +74,6 @@ protected:
LLVector3d mWestSouthBottom; // global coords, from drag
LLVector3d mEastNorthTop; // global coords, from drag
- BOOL mLastShowParcelOwners; // store last Show Parcel Owners setting
LLSafeHandle<LLParcelSelection> mSelection; // hold on to a parcel selection
};
diff --git a/indra/newview/lltoolselectrect.cpp b/indra/newview/lltoolselectrect.cpp
index 5f54d1f3ba..67d9e2da65 100644
--- a/indra/newview/lltoolselectrect.cpp
+++ b/indra/newview/lltoolselectrect.cpp
@@ -36,7 +36,7 @@
// Library includes
#include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "lldarray.h"
// Viewer includes
diff --git a/indra/newview/lltracker.cpp b/indra/newview/lltracker.cpp
index 5647b6be5a..d1b87281f0 100644
--- a/indra/newview/lltracker.cpp
+++ b/indra/newview/lltracker.cpp
@@ -36,7 +36,7 @@
#include "lldarray.h"
#include "llfontgl.h"
#include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "llinventory.h"
#include "llmemory.h"
#include "llstring.h"
diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
index 9ba25902af..cbba73b692 100644
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -69,7 +69,7 @@
#include "llappviewer.h"
#include "llvosurfacepatch.h"
#include "llvowlsky.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#ifdef TOGGLE_HACKED_GODLIKE_VIEWER
BOOL gHackGodmode = FALSE;
@@ -433,7 +433,7 @@ bool handleVoiceClientPrefsChanged(const LLSD& newvalue)
gVoiceClient->setCaptureDevice(inputDevice);
std::string outputDevice = gSavedSettings.getString("VoiceOutputAudioDevice");
gVoiceClient->setRenderDevice(outputDevice);
- gVoiceClient->setLipSyncEnabled(gSavedSettings.getU32("LipSyncEnabled"));
+ gVoiceClient->setLipSyncEnabled(gSavedSettings.getBOOL("LipSyncEnabled"));
}
return true;
}
diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
index a24f4b36de..c75bcdc9e8 100644
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -34,7 +34,7 @@
#include "llviewerdisplay.h"
#include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "llglheaders.h"
#include "llagent.h"
#include "llviewercontrol.h"
@@ -81,8 +81,6 @@
#include "llpostprocess.h"
extern LLPointer<LLImageGL> gStartImageGL;
-extern BOOL gDisplaySwapBuffers;
-
LLPointer<LLImageGL> gDisconnectedImagep = NULL;
@@ -96,14 +94,18 @@ const F32 RESTORE_GL_TIME = 5.f; // Wait this long while reloading textures bef
BOOL gForceRenderLandFence = FALSE;
BOOL gDisplaySwapBuffers = FALSE;
+BOOL gDepthDirty = FALSE;
BOOL gResizeScreenTexture = FALSE;
BOOL gSnapshot = FALSE;
+U32 gRecentFrameCount = 0; // number of 'recent' frames
+LLFrameTimer gRecentFPSTime;
+LLFrameTimer gRecentMemoryTime;
+
// Rendering stuff
void pre_show_depth_buffer();
void post_show_depth_buffer();
void render_ui_and_swap();
-void render_ui_and_swap_if_needed();
void render_hud_attachments();
void render_ui_3d();
void render_ui_2d();
@@ -142,7 +144,7 @@ void display_startup()
gPipeline.disableLights();
gViewerWindow->setup2DRender();
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
gGL.color4f(1,1,1,1);
gViewerWindow->draw();
@@ -181,6 +183,26 @@ void display_update_camera()
LLWorld::getInstance()->setLandFarClip(final_far);
}
+// Write some stats to llinfos
+void display_stats()
+{
+ F32 fps_log_freq = gSavedSettings.getF32("FPSLogFrequency");
+ if (fps_log_freq > 0.f && gRecentFPSTime.getElapsedTimeF32() >= fps_log_freq)
+ {
+ F32 fps = gRecentFrameCount / fps_log_freq;
+ llinfos << llformat("FPS: %.02f", fps) << llendl;
+ gRecentFrameCount = 0;
+ gRecentFPSTime.reset();
+ }
+ F32 mem_log_freq = gSavedSettings.getF32("MemoryLogFrequency");
+ if (mem_log_freq > 0.f && gRecentMemoryTime.getElapsedTimeF32() >= mem_log_freq)
+ {
+ gMemoryAllocated = getCurrentRSS();
+ U32 memory = (U32)(gMemoryAllocated / (1024*1024));
+ llinfos << llformat("MEMORY: %d MB", memory) << llendl;
+ gRecentMemoryTime.reset();
+ }
+}
// Paint the display!
void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
@@ -222,9 +244,11 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
gViewerWindow->checkSettings();
+ LLAppViewer::instance()->pingMainloopTimeout("Display:Pick");
gViewerWindow->performPick();
+ LLAppViewer::instance()->pingMainloopTimeout("Display:CheckStates");
LLGLState::checkStates();
LLGLState::checkTextureChannels();
@@ -256,6 +280,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
//
if (LLStartUp::getStartupState() < STATE_STARTED)
{
+ LLAppViewer::instance()->pingMainloopTimeout("Display:Startup");
display_startup();
return;
}
@@ -267,6 +292,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
// Update GL Texture statistics (used for discard logic?)
//
+ LLAppViewer::instance()->pingMainloopTimeout("Display:TextureStats");
gFrameStats.start(LLFrameStats::UPDATE_TEX_STATS);
stop_glerror();
@@ -277,6 +303,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
gPipeline.mBackfaceCull = TRUE;
gFrameCount++;
+ gRecentFrameCount++;
if (gFocusMgr.getAppHasFocus())
{
gForegroundFrameCount++;
@@ -289,6 +316,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
if (gTeleportDisplay)
{
+ LLAppViewer::instance()->pingMainloopTimeout("Display:Teleport");
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;
@@ -367,6 +395,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
}
else if(LLAppViewer::instance()->logoutRequestSent())
{
+ LLAppViewer::instance()->pingMainloopTimeout("Display:Logout");
F32 percent_done = gLogoutTimer.getElapsedTimeF32() * 100.f / gLogoutMaxTime;
if (percent_done > 100.f)
{
@@ -383,6 +412,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
else
if (gRestoreGL)
{
+ LLAppViewer::instance()->pingMainloopTimeout("Display:RestoreGL");
F32 percent_done = gRestoreGLTimer.getElapsedTimeF32() * 100.f / RESTORE_GL_TIME;
if( percent_done > 100.f )
{
@@ -412,6 +442,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
//
//
+ LLAppViewer::instance()->pingMainloopTimeout("Display:Camera");
LLViewerCamera::getInstance()->setZoomParameters(zoom_factor, subfield);
LLViewerCamera::getInstance()->setNear(MIN_NEAR_PLANE);
@@ -423,9 +454,8 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
if (gDisconnected)
{
- render_ui_and_swap_if_needed();
- gDisplaySwapBuffers = TRUE;
-
+ LLAppViewer::instance()->pingMainloopTimeout("Display:Disconnected");
+ render_ui_and_swap();
render_disconnected_background();
}
@@ -434,6 +464,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
// Set rendering options
//
//
+ LLAppViewer::instance()->pingMainloopTimeout("Display:RenderSetup");
stop_glerror();
if (gSavedSettings.getBOOL("ShowDepthBuffer"))
{
@@ -462,10 +493,11 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
// do render-to-texture stuff here
if (gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_DYNAMIC_TEXTURES))
{
+ LLAppViewer::instance()->pingMainloopTimeout("Display:DynamicTextures");
LLFastTimer t(LLFastTimer::FTM_UPDATE_TEXTURES);
if (LLDynamicTexture::updateAllInstances())
{
- glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE);
+ gGL.setColorMask(true, true);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
}
@@ -474,6 +506,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
if (!gDisconnected)
{
+ LLAppViewer::instance()->pingMainloopTimeout("Display:Update");
if (gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_HUD))
{ //don't draw hud objects in this frame
gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_HUD);
@@ -511,9 +544,12 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
}
}
+ LLAppViewer::instance()->pingMainloopTimeout("Display:Cull");
+
//Increment drawable frame counter
LLDrawable::incrementVisible();
+ LLSpatialGroup::sNoDelete = TRUE;
LLPipeline::sUseOcclusion =
(!gUseWireframe
&& LLFeatureManager::getInstance()->isFeatureAvailable("UseOcclusion")
@@ -524,10 +560,11 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
LLVOAvatar::sMaxVisible = gSavedSettings.getS32("RenderAvatarMaxVisible");
S32 occlusion = LLPipeline::sUseOcclusion;
- if (!gDisplaySwapBuffers)
+ if (gDepthDirty)
{ //depth buffer is invalid, don't overwrite occlusion state
LLPipeline::sUseOcclusion = llmin(occlusion, 1);
}
+ gDepthDirty = FALSE;
static LLCullResult result;
gPipeline.updateCull(*LLViewerCamera::getInstance(), result, water_clip);
@@ -537,6 +574,8 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
gPipeline.canUseVertexShaders() &&
LLPipeline::sRenderGlow;
+ LLAppViewer::instance()->pingMainloopTimeout("Display:Swap");
+
// now do the swap buffer (just before rendering to framebuffer)
{ //swap and flush state from previous frame
{
@@ -550,14 +589,11 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
gPipeline.resizeScreenTexture();
}
- glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE);
+ gGL.setColorMask(true, true);
glClearColor(0,0,0,0);
if (!for_snapshot)
{
- render_ui_and_swap_if_needed();
- gDisplaySwapBuffers = TRUE;
-
glh::matrix4f proj = glh_get_current_projection();
glh::matrix4f mod = glh_get_current_modelview();
glViewport(0,0,512,512);
@@ -576,6 +612,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
if (!for_snapshot)
{
+ LLAppViewer::instance()->pingMainloopTimeout("Display:Imagery");
gPipeline.processImagery(*LLViewerCamera::getInstance());
gPipeline.generateWaterReflection(*LLViewerCamera::getInstance());
}
@@ -587,6 +624,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
// Can put objects onto the retextured list.
//
// Doing this here gives hardware occlusion queries extra time to complete
+ LLAppViewer::instance()->pingMainloopTimeout("Display:UpdateImages");
gFrameStats.start(LLFrameStats::IMAGE_UPDATE);
{
@@ -610,6 +648,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
// In the case of alpha objects, z-sorts them first.
// Also creates special lists for outlines and selected face rendering.
//
+ LLAppViewer::instance()->pingMainloopTimeout("Display:StateSort");
{
gFrameStats.start(LLFrameStats::STATE_SORT);
gPipeline.stateSort(*LLViewerCamera::getInstance(), result);
@@ -631,6 +670,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
LLPipeline::sUseOcclusion = occlusion;
{
+ LLAppViewer::instance()->pingMainloopTimeout("Display:Sky");
LLFastTimer t(LLFastTimer::FTM_UPDATE_SKY);
gSky.updateSky();
}
@@ -642,6 +682,8 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
}
+ LLAppViewer::instance()->pingMainloopTimeout("Display:Render");
+
//// render frontmost floater opaque for occlusion culling purposes
//LLFloater* frontmost_floaterp = gFloaterView->getFrontmost();
//// assumes frontmost floater with focus is opaque
@@ -681,20 +723,20 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
if (to_texture)
{
- glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+ gGL.setColorMask(true, true);
gPipeline.mScreen.bindTarget();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
- glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
+ gGL.setColorMask(true, false);
}
if (!(LLAppViewer::instance()->logoutRequestSent() && LLAppViewer::instance()->hasSavedFinalSnapshot())
&& !gRestoreGL)
{
- glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
+ gGL.setColorMask(true, false);
LLPipeline::sUnderWaterRender = LLViewerCamera::getInstance()->cameraUnderWater() ? TRUE : FALSE;
gPipeline.renderGeom(*LLViewerCamera::getInstance(), TRUE);
LLPipeline::sUnderWaterRender = FALSE;
- glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+ gGL.setColorMask(true, true);
//store this frame's modelview matrix for use
//when rendering next frame's occlusion queries
@@ -715,11 +757,19 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
/// Using render to texture would be faster/better, but I don't have a
/// grasp of their full display stack just yet.
// gPostProcess->apply(gViewerWindow->getWindowDisplayWidth(), gViewerWindow->getWindowDisplayHeight());
+
+ if (!for_snapshot)
+ {
+ render_ui_and_swap();
+ }
+
+ LLSpatialGroup::sNoDelete = FALSE;
}
gFrameStats.start(LLFrameStats::RENDER_UI);
if (gHandleKeysAsync)
{
+ LLAppViewer::instance()->pingMainloopTimeout("Display:Keystrokes");
process_keystrokes_async();
stop_glerror();
}
@@ -732,6 +782,10 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
send_agent_resume();
LLPipeline::sRenderFrameTest = FALSE;
}
+
+ display_stats();
+
+ LLAppViewer::instance()->pingMainloopTimeout("Display:Done");
}
void render_hud_attachments()
@@ -926,19 +980,13 @@ void render_ui_and_swap()
glh_set_current_modelview(saved_view);
glPopMatrix();
-}
-void render_ui_and_swap_if_needed()
-{
if (gDisplaySwapBuffers)
{
- render_ui_and_swap();
-
- {
- LLFastTimer t(LLFastTimer::FTM_SWAP);
- gViewerWindow->mWindow->swapBuffers();
- }
+ LLFastTimer t(LLFastTimer::FTM_SWAP);
+ gViewerWindow->mWindow->swapBuffers();
}
+ gDisplaySwapBuffers = TRUE;
}
void renderCoordinateAxes()
@@ -1073,7 +1121,7 @@ void render_ui_2d()
}
stop_glerror();
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
// render outline for HUD
if (gAgent.getAvatarObject() && gAgent.getAvatarObject()->mHUDCurZoom < 0.98f)
@@ -1100,7 +1148,6 @@ void render_ui_2d()
LLFontGL::sCurOrigin.set(0, 0);
}
-
void render_disconnected_background()
{
gGL.color4f(1,1,1,1);
diff --git a/indra/newview/llviewerdisplay.h b/indra/newview/llviewerdisplay.h
index 2190021fe4..b97f75b233 100644
--- a/indra/newview/llviewerdisplay.h
+++ b/indra/newview/llviewerdisplay.h
@@ -40,6 +40,7 @@ void display_cleanup();
void display(BOOL rebuild = TRUE, F32 zoom_factor = 1.f, int subfield = 0, BOOL for_snapshot = FALSE);
extern BOOL gDisplaySwapBuffers;
+extern BOOL gDepthDirty;
extern BOOL gTeleportDisplay;
extern LLFrameTimer gTeleportDisplayTimer;
extern BOOL gForceRenderLandFence;
diff --git a/indra/newview/llviewerjoint.cpp b/indra/newview/llviewerjoint.cpp
index 9bf392249e..176bf9273a 100644
--- a/indra/newview/llviewerjoint.cpp
+++ b/indra/newview/llviewerjoint.cpp
@@ -37,7 +37,7 @@
#include "llviewerjoint.h"
#include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "llmath.h"
#include "llglheaders.h"
#include "llrendersphere.h"
@@ -272,12 +272,12 @@ U32 LLViewerJoint::render( F32 pixelArea, BOOL first_pass )
triangle_count += drawShape( pixelArea, first_pass);
}
// second pass writes to z buffer only
- glColorMask(FALSE, FALSE, FALSE, FALSE);
+ gGL.setColorMask(false, false);
{
triangle_count += drawShape( pixelArea, FALSE );
}
// third past respects z buffer and writes color
- glColorMask(TRUE, TRUE, TRUE, FALSE);
+ gGL.setColorMask(true, false);
{
LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
triangle_count += drawShape( pixelArea, FALSE );
diff --git a/indra/newview/llviewerjointattachment.cpp b/indra/newview/llviewerjointattachment.cpp
index 9e5c207f7d..ce61c3a2cd 100644
--- a/indra/newview/llviewerjointattachment.cpp
+++ b/indra/newview/llviewerjointattachment.cpp
@@ -38,7 +38,7 @@
#include "llviewercontrol.h"
#include "lldrawable.h"
#include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "llvoavatar.h"
#include "llvolume.h"
#include "pipeline.h"
diff --git a/indra/newview/llviewerjointmesh.cpp b/indra/newview/llviewerjointmesh.cpp
index 19035e8fc8..d6032118c9 100644
--- a/indra/newview/llviewerjointmesh.cpp
+++ b/indra/newview/llviewerjointmesh.cpp
@@ -36,6 +36,7 @@
#include "imageids.h"
#include "llfasttimer.h"
+#include "llrender.h"
#include "llagent.h"
#include "llapr.h"
@@ -545,17 +546,7 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass)
else
{
glColor4f(0.7f, 0.6f, 0.3f, 1.f);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_INTERPOLATE_ARB);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_ARB, GL_TEXTURE);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB, GL_ONE_MINUS_SRC_ALPHA);
+ gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_LERP_TEX_ALPHA, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_PREV_COLOR);
}
}
else if( mLayerSet )
@@ -573,12 +564,10 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass)
else
if ( mTexture.notNull() )
{
- mTexture->bind();
- if (!mTexture->getClampS()) {
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- }
- if (!mTexture->getClampT()) {
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ if (!mTexture->getClampS() || !mTexture->getClampT())
+ {
+ mTexture->bind();
+ mTexture->overrideClamp (TRUE, TRUE);
}
}
else
@@ -590,15 +579,8 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass)
{
if (isTransparent())
{
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE); // GL_TEXTURE_ENV_COLOR is set in renderPass1
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
+ gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
+ gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_CONST_ALPHA);
}
else
{
@@ -639,16 +621,13 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass)
if (mTestImageName)
{
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
}
- if (mTexture.notNull()) {
- if (!mTexture->getClampS()) {
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
- }
- if (!mTexture->getClampT()) {
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
- }
+ if (mTexture.notNull())
+ {
+ mTexture->bind();
+ mTexture->restoreClamp();
}
return triangle_count;
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 060b69db74..645499d943 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -700,7 +700,7 @@ void init_menus()
gPopupMenuView->setBackgroundColor( color );
// If we are not in production, use a different color to make it apparent.
- if (LLAppViewer::instance()->isInProductionGrid())
+ if (LLViewerLogin::getInstance()->isInProductionGrid())
{
color = gColors.getColor( "MenuBarBgColor" );
}
@@ -722,7 +722,7 @@ void init_menus()
gViewerWindow->getRootView()->addChild(gMenuHolder);
gViewerWindow->setMenuBackgroundColor(false,
- LLAppViewer::instance()->isInProductionGrid());
+ LLViewerLogin::getInstance()->isInProductionGrid());
// *TODO:Get the cost info from the server
const LLString upload_cost("10");
@@ -969,7 +969,7 @@ void init_client_menu(LLMenuGL* menu)
#ifdef TOGGLE_HACKED_GODLIKE_VIEWER
- if (!LLAppViewer::instance()->isInProductionGrid())
+ if (!LLViewerLogin::getInstance()->isInProductionGrid())
{
menu->append(new LLMenuItemCheckGL("Hacked Godmode",
&handle_toggle_hacked_godmode,
@@ -1191,7 +1191,7 @@ void init_debug_ui_menu(LLMenuGL* menu)
menu->append(new LLMenuItemCallGL( "Dump Focus Holder", &handle_dump_focus, NULL, NULL, 'F', MASK_ALT | MASK_CONTROL));
menu->append(new LLMenuItemCallGL( "Print Selected Object Info", &print_object_info, NULL, NULL, 'P', MASK_CONTROL|MASK_SHIFT ));
menu->append(new LLMenuItemCallGL( "Print Agent Info", &print_agent_nvpairs, NULL, NULL, 'P', MASK_SHIFT ));
- menu->append(new LLMenuItemCallGL( "Texture Memory Stats", &output_statistics, NULL, NULL, 'M', MASK_SHIFT | MASK_ALT | MASK_CONTROL));
+ menu->append(new LLMenuItemCallGL( "Memory Stats", &output_statistics, NULL, NULL, 'M', MASK_SHIFT | MASK_ALT | MASK_CONTROL));
menu->append(new LLMenuItemCheckGL("Double-Click Auto-Pilot",
menu_toggle_control, NULL, menu_check_control,
(void*)"DoubleClickAutoPilot"));
@@ -1498,6 +1498,7 @@ void init_debug_avatar_menu(LLMenuGL* menu)
menu->appendMenu(sub_menu);
+ menu->append(new LLMenuItemCheckGL("Enable Lip Sync (Beta)", menu_toggle_control, NULL, menu_check_control, (void*)"LipSyncEnabled"));
menu->append(new LLMenuItemToggleGL("Tap-Tap-Hold To Run", &gAllowTapTapHoldRun));
menu->append(new LLMenuItemCallGL("Force Params to Default", &LLAgent::clearVisualParams, NULL));
menu->append(new LLMenuItemCallGL("Reload Vertex Shader", &reload_vertex_shader, NULL));
@@ -2762,7 +2763,7 @@ void set_god_level(U8 god_level)
if(gViewerWindow)
{
gViewerWindow->setMenuBackgroundColor(god_level > GOD_NOT,
- LLAppViewer::instance()->isInProductionGrid());
+ LLViewerLogin::getInstance()->isInProductionGrid());
}
LLString::format_map_t args;
@@ -4099,7 +4100,7 @@ BOOL enable_take()
return TRUE;
#else
# ifdef TOGGLE_HACKED_GODLIKE_VIEWER
- if (!LLAppViewer::instance()->isInProductionGrid()
+ if (!LLViewerLogin::getInstance()->isInProductionGrid()
&& gAgent.isGodlike())
{
return TRUE;
@@ -4656,7 +4657,7 @@ class LLObjectEnableDelete : public view_listener_t
TRUE;
#else
# ifdef TOGGLE_HACKED_GODLIKE_VIEWER
- (!LLAppViewer::instance()->isInProductionGrid()
+ (!LLViewerLogin::getInstance()->isInProductionGrid()
&& gAgent.isGodlike()) ||
# endif
LLSelectMgr::getInstance()->canDoDelete();
@@ -6514,7 +6515,7 @@ class LLToolsEnableTakeCopy : public view_listener_t
all_valid = true;
#ifndef HACKED_GODLIKE_VIEWER
# ifdef TOGGLE_HACKED_GODLIKE_VIEWER
- if (LLAppViewer::instance()->isInProductionGrid()
+ if (LLViewerLogin::getInstance()->isInProductionGrid()
|| !gAgent.isGodlike())
# endif
{
@@ -6618,7 +6619,7 @@ BOOL enable_save_into_inventory(void*)
return TRUE;
#else
# ifdef TOGGLE_HACKED_GODLIKE_VIEWER
- if (!LLAppViewer::instance()->isInProductionGrid()
+ if (!LLViewerLogin::getInstance()->isInProductionGrid()
&& gAgent.isGodlike())
{
return TRUE;
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 477f6c35c1..4c8e75016c 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -5194,10 +5194,12 @@ void process_script_teleport_request(LLMessageSystem* msg, void**)
msg->getVector3("Data", "SimPosition", pos);
msg->getVector3("Data", "LookAt", look_at);
- // gFloaterWorldMap->trackURL(sim_name, (S32)pos.mV[VX], (S32)pos.mV[VY], (S32)pos.mV[VZ]);
- // LLFloaterWorldMap::show(NULL, TRUE);
+ gFloaterWorldMap->trackURL(sim_name, (S32)pos.mV[VX], (S32)pos.mV[VY], (S32)pos.mV[VZ]);
+ LLFloaterWorldMap::show(NULL, TRUE);
- LLURLDispatcher::dispatch(LLURLDispatcher::buildSLURL(sim_name, (S32)pos.mV[VX], (S32)pos.mV[VY], (S32)pos.mV[VZ]), FALSE);
+ // remove above two lines and replace with below line
+ // to re-enable parcel browser for llMapDestination()
+ // LLURLDispatcher::dispatch(LLURLDispatcher::buildSLURL(sim_name, (S32)pos.mV[VX], (S32)pos.mV[VY], (S32)pos.mV[VZ]), FALSE);
}
diff --git a/indra/newview/llviewernetwork.cpp b/indra/newview/llviewernetwork.cpp
index b0ebc64b7a..fed98d5daa 100644
--- a/indra/newview/llviewernetwork.cpp
+++ b/indra/newview/llviewernetwork.cpp
@@ -33,8 +33,17 @@
#include "llviewerprecompiledheaders.h"
#include "llviewernetwork.h"
+#include "llviewercontrol.h"
-LLGridData gGridInfo[GRID_INFO_COUNT] =
+struct LLGridData
+{
+ const char* mLabel;
+ const char* mName;
+ const char* mLoginURI;
+ const char* mHelperURI;
+};
+
+static LLGridData gGridInfo[GRID_INFO_COUNT] =
{
{ "None", "", "", ""},
{ "Aditi",
@@ -111,8 +120,192 @@ LLGridData gGridInfo[GRID_INFO_COUNT] =
"" }
};
-// Use this to figure out which domain name and login URI to use.
+#if LL_RELEASE_FOR_DOWNLOAD
+ // Default userserver for production builds is agni
+ const EGridInfo DEFAULT_GRID_CHOICE = GRID_INFO_AGNI;
+#else
+ // Default userserver for development builds is none
+ const EGridInfo DEFAULT_GRID_CHOICE = GRID_INFO_NONE;
+#endif
-EGridInfo gGridChoice = GRID_INFO_NONE;
-LLString gGridName; /* Flawfinder: ignore */
unsigned char gMACAddress[MAC_ADDRESS_BYTES]; /* Flawfinder: ignore */
+
+LLViewerLogin::LLViewerLogin() :
+ mGridChoice(DEFAULT_GRID_CHOICE)
+{
+}
+
+void LLViewerLogin::setGridChoice(EGridInfo grid)
+{
+ if(grid < 0 || grid >= GRID_INFO_COUNT)
+ {
+ llerrs << "Invalid grid index specified." << llendl;
+ }
+
+ if(mGridChoice != grid)
+ {
+ mGridChoice = grid;
+ if(GRID_INFO_LOCAL == mGridChoice)
+ {
+ mGridName = LOOPBACK_ADDRESS_STRING;
+ }
+ else if(GRID_INFO_OTHER == mGridChoice)
+ {
+ // *FIX:Mani - could this possibly be valid?
+ mGridName = "other";
+ }
+ else
+ {
+ mGridName = gGridInfo[mGridChoice].mLabel;
+ }
+
+ gSavedSettings.setS32("ServerChoice", mGridChoice);
+ gSavedSettings.setString("CustomServer", "");
+ }
+}
+
+void LLViewerLogin::setGridChoice(const std::string& grid_name)
+{
+ // Set the grid choice based on a string.
+ // The string can be:
+ // - a grid label from the gGridInfo table
+ // - an ip address
+ if(!grid_name.empty())
+ {
+ // find the grid choice from the user setting.
+ int grid_index = GRID_INFO_NONE;
+ for(;grid_index < GRID_INFO_OTHER; ++grid_index)
+ {
+ if(0 == LLString::compareInsensitive(gGridInfo[grid_index].mLabel, grid_name.c_str()))
+ {
+ // Founding a matching label in the list...
+ setGridChoice((EGridInfo)grid_index);
+ break;
+ }
+ }
+
+ if(GRID_INFO_OTHER == grid_index)
+ {
+ // *FIX:MEP Can and should we validate that this is an IP address?
+ mGridChoice = GRID_INFO_OTHER;
+ mGridName = grid_name;
+ gSavedSettings.setS32("ServerChoice", mGridChoice);
+ gSavedSettings.setString("CustomServer", mGridName);
+ }
+ }
+}
+
+void LLViewerLogin::resetURIs()
+{
+ // Clear URIs when picking a new server
+ gSavedSettings.setValue("CmdLineLoginURI", LLSD::emptyArray());
+ gSavedSettings.setString("CmdLineHelperURI", "");
+}
+
+EGridInfo LLViewerLogin::getGridChoice() const
+{
+ return mGridChoice;
+}
+
+std::string LLViewerLogin::getGridLabel() const
+{
+ if(mGridChoice == GRID_INFO_NONE)
+ {
+ return "None";
+ }
+ else if(mGridChoice < GRID_INFO_OTHER)
+ {
+ return gGridInfo[mGridChoice].mLabel;
+ }
+
+ return mGridName;
+}
+
+std::string LLViewerLogin::getKnownGridLabel(EGridInfo grid_index) const
+{
+ if(grid_index > GRID_INFO_NONE && grid_index < GRID_INFO_OTHER)
+ {
+ return gGridInfo[grid_index].mLabel;
+ }
+ return gGridInfo[GRID_INFO_NONE].mLabel;
+}
+
+void LLViewerLogin::getLoginURIs(std::vector<std::string>& uris) const
+{
+ // return the login uri set on the command line.
+ LLControlVariable* c = gSavedSettings.getControl("CmdLineLoginURI");
+ if(c)
+ {
+ LLSD v = c->getValue();
+ if(v.isArray())
+ {
+ for(LLSD::array_const_iterator itr = v.beginArray();
+ itr != v.endArray(); ++itr)
+ {
+ std::string uri = itr->asString();
+ if(!uri.empty())
+ {
+ uris.push_back(uri);
+ }
+ }
+ }
+ else
+ {
+ std::string uri = v.asString();
+ if(!uri.empty())
+ {
+ uris.push_back(uri);
+ }
+ }
+ }
+
+ // If there was no command line uri...
+ if(uris.empty())
+ {
+ // If its a known grid choice, get the uri from the table,
+ // else try the grid name.
+ if(mGridChoice > GRID_INFO_NONE && mGridChoice < GRID_INFO_OTHER)
+ {
+ uris.push_back(gGridInfo[mGridChoice].mLoginURI);
+ }
+ else
+ {
+ uris.push_back(mGridName);
+ }
+ }
+}
+
+std::string LLViewerLogin::getHelperURI() const
+{
+ std::string helper_uri = gSavedSettings.getString("CmdLineHelperURI");
+ if (helper_uri.empty())
+ {
+ // grab URI from selected grid
+ if(mGridChoice > GRID_INFO_NONE && mGridChoice < GRID_INFO_OTHER)
+ {
+ helper_uri = gGridInfo[mGridChoice].mHelperURI;
+ }
+
+ if (helper_uri.empty())
+ {
+ // what do we do with unnamed/miscellaneous grids?
+ // for now, operations that rely on the helper URI (currency/land purchasing) will fail
+ }
+ }
+ return helper_uri;
+}
+
+bool LLViewerLogin::isInProductionGrid()
+{
+ // *NOTE:Mani This used to compare GRID_INFO_AGNI to gGridChoice,
+ // but it seems that loginURI trumps that.
+ std::vector<std::string> uris;
+ getLoginURIs(uris);
+ LLString::toLower(uris[0]);
+ if((uris[0].find("agni") != std::string::npos))
+ {
+ return true;
+ }
+
+ return false;
+}
diff --git a/indra/newview/llviewernetwork.h b/indra/newview/llviewernetwork.h
index 4e6c874921..05bb703bbb 100644
--- a/indra/newview/llviewernetwork.h
+++ b/indra/newview/llviewernetwork.h
@@ -59,18 +59,44 @@ enum EGridInfo
GRID_INFO_COUNT
};
-
-struct LLGridData
+/**
+ * @brief A class to manage the viewer's login state.
+ *
+ **/
+class LLViewerLogin : public LLSingleton<LLViewerLogin>
{
- const char* mLabel;
- const char* mName;
- const char* mLoginURI;
- const char* mHelperURI;
-};
+public:
+ LLViewerLogin();
+
+ void setGridChoice(EGridInfo grid);
+ void setGridChoice(const std::string& grid_name);
+ void resetURIs();
+
+ /**
+ * @brief Get the enumeration of the grid choice.
+ * Should only return values > 0 && < GRID_INFO_COUNT
+ **/
+ EGridInfo getGridChoice() const;
-extern EGridInfo gGridChoice;
-extern LLGridData gGridInfo[];
-extern LLString gGridName; /* Flawfinder: ignore */
+ /**
+ * @brief Get a readable label for the grid choice.
+ * Returns the readable name for the grid choice.
+ * If the grid is 'other', returns something
+ * the string used to specifiy the grid.
+ **/
+ std::string getGridLabel() const;
+
+ std::string getKnownGridLabel(EGridInfo grid_index) const;
+
+ void getLoginURIs(std::vector<std::string>& uris) const;
+ std::string getHelperURI() const;
+
+ bool isInProductionGrid();
+
+private:
+ EGridInfo mGridChoice;
+ std::string mGridName;
+};
const S32 MAC_ADDRESS_BYTES = 6;
extern unsigned char gMACAddress[MAC_ADDRESS_BYTES]; /* Flawfinder: ignore */
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index af662d92aa..3a501a9045 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -94,7 +94,7 @@
#include "llworld.h"
#include "llui.h"
#include "pipeline.h"
-#include "llappviewer.h"
+#include "llviewernetwork.h"
#include "llvowlsky.h"
//#define DEBUG_UPDATE_TYPE
@@ -292,7 +292,7 @@ void LLViewerObject::markDead()
LLViewerObject *childp;
while (mChildList.size() > 0)
{
- childp = mChildList[0];
+ childp = mChildList.back();
if (childp->getPCode() != LL_PCODE_LEGACY_AVATAR)
{
//llinfos << "Marking child " << childp->getLocalID() << " as dead." << llendl;
@@ -307,7 +307,7 @@ void LLViewerObject::markDead()
((LLVOAvatar*)childp)->getOffObject();
childp->setParent(NULL); // LLViewerObject::markDead 2
}
- mChildList.erase(mChildList.begin());
+ mChildList.pop_back();
}
if (mDrawable.notNull())
@@ -4217,13 +4217,15 @@ void LLViewerObject::updateDrawable(BOOL force_damped)
{
BOOL damped_motion =
!isChanged(SHIFTED) && // not shifted between regions this frame and...
- (force_damped || // ...forced into damped motion by application logic or...
- (!isSelected() && // ...not selected and...
- (mDrawable->isRoot() || // ... is root or ...
- !((LLViewerObject*)getParent())->isSelected()) && // ... parent is not selected and ...
+ ( force_damped || // ...forced into damped motion by application logic or...
+ ( !isSelected() && // ...not selected and...
+ ( mDrawable->isRoot() || // ... is root or ...
+ (getParent() && !((LLViewerObject*)getParent())->isSelected())// ... parent is not selected and ...
+ ) &&
getPCode() == LL_PCODE_VOLUME && // ...is a volume object and...
getVelocity().isExactlyZero() && // ...is not moving physically and...
- mDrawable->getGeneration() != -1) // ...was not created this frame.
+ mDrawable->getGeneration() != -1 // ...was not created this frame.
+ )
);
gPipeline.markMoved(mDrawable, damped_motion);
}
@@ -4570,7 +4572,7 @@ BOOL LLViewerObject::permYouOwner() const
return TRUE;
#else
# ifdef TOGGLE_HACKED_GODLIKE_VIEWER
- if (!LLAppViewer::instance()->isInProductionGrid()
+ if (!LLViewerLogin::getInstance()->isInProductionGrid()
&& (gAgent.getGodLevel() >= GOD_MAINTENANCE))
{
return TRUE;
@@ -4607,7 +4609,7 @@ BOOL LLViewerObject::permOwnerModify() const
return TRUE;
#else
# ifdef TOGGLE_HACKED_GODLIKE_VIEWER
- if (!LLAppViewer::instance()->isInProductionGrid()
+ if (!LLViewerLogin::getInstance()->isInProductionGrid()
&& (gAgent.getGodLevel() >= GOD_MAINTENANCE))
{
return TRUE;
@@ -4631,7 +4633,7 @@ BOOL LLViewerObject::permModify() const
return TRUE;
#else
# ifdef TOGGLE_HACKED_GODLIKE_VIEWER
- if (!LLAppViewer::instance()->isInProductionGrid()
+ if (!LLViewerLogin::getInstance()->isInProductionGrid()
&& (gAgent.getGodLevel() >= GOD_MAINTENANCE))
{
return TRUE;
@@ -4655,7 +4657,7 @@ BOOL LLViewerObject::permCopy() const
return TRUE;
#else
# ifdef TOGGLE_HACKED_GODLIKE_VIEWER
- if (!LLAppViewer::instance()->isInProductionGrid()
+ if (!LLViewerLogin::getInstance()->isInProductionGrid()
&& (gAgent.getGodLevel() >= GOD_MAINTENANCE))
{
return TRUE;
@@ -4679,7 +4681,7 @@ BOOL LLViewerObject::permMove() const
return TRUE;
#else
# ifdef TOGGLE_HACKED_GODLIKE_VIEWER
- if (!LLAppViewer::instance()->isInProductionGrid()
+ if (!LLViewerLogin::getInstance()->isInProductionGrid()
&& (gAgent.getGodLevel() >= GOD_MAINTENANCE))
{
return TRUE;
@@ -4703,7 +4705,7 @@ BOOL LLViewerObject::permTransfer() const
return TRUE;
#else
# ifdef TOGGLE_HACKED_GODLIKE_VIEWER
- if (!LLAppViewer::instance()->isInProductionGrid()
+ if (!LLViewerLogin::getInstance()->isInProductionGrid()
&& (gAgent.getGodLevel() >= GOD_MAINTENANCE))
{
return TRUE;
diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp
index 7a6f87e019..2345b4ea06 100644
--- a/indra/newview/llviewerobjectlist.cpp
+++ b/indra/newview/llviewerobjectlist.cpp
@@ -36,7 +36,7 @@
#include "message.h"
#include "timing.h"
#include "llfasttimer.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "llviewercontrol.h"
#include "llface.h"
@@ -685,6 +685,7 @@ void LLViewerObjectList::update(LLAgent &agent, LLWorld &world)
idle_iter != idle_list.end(); idle_iter++)
{
objectp = *idle_iter;
+ llassert_always(objectp) ;
if (!objectp->idleUpdate(agent, world, frame_time))
{
// If Idle Update returns false, kill object!
diff --git a/indra/newview/llviewerparcelmedia.cpp b/indra/newview/llviewerparcelmedia.cpp
index 0259d4896c..ba6a6005bf 100644
--- a/indra/newview/llviewerparcelmedia.cpp
+++ b/indra/newview/llviewerparcelmedia.cpp
@@ -100,15 +100,17 @@ void LLViewerParcelMedia::update(LLParcel* parcel)
// we have a player
if (parcel)
{
- // we're in a parcel
- bool new_parcel = false;
- S32 parcelid = parcel->getLocalID();
-
if(!gAgent.getRegion())
{
- llerrs << "gAgent's region is NULL." << llendl ;
+ sMediaRegionID = LLUUID() ;
+ stop() ;
+ return ;
}
+ // we're in a parcel
+ bool new_parcel = false;
+ S32 parcelid = parcel->getLocalID();
+
LLUUID regionid = gAgent.getRegion()->getRegionID();
if (parcelid != sMediaParcelLocalID || regionid != sMediaRegionID)
{
diff --git a/indra/newview/llviewerparceloverlay.cpp b/indra/newview/llviewerparceloverlay.cpp
index 342d8c7222..2b056a2583 100644
--- a/indra/newview/llviewerparceloverlay.cpp
+++ b/indra/newview/llviewerparceloverlay.cpp
@@ -36,7 +36,7 @@
// indra includes
#include "llparcel.h"
#include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "v4color.h"
#include "v2math.h"
@@ -71,7 +71,7 @@ LLViewerParcelOverlay::LLViewerParcelOverlay(LLViewerRegion* region, F32 region_
mTexture = new LLImageGL(FALSE);
mImageRaw = new LLImageRaw(mParcelGridsPerEdge, mParcelGridsPerEdge, OVERLAY_IMG_COMPONENTS);
mTexture->createGLTexture(0, mImageRaw);
- glActiveTextureARB(GL_TEXTURE0_ARB);
+ gGL.getTexUnit(0)->activate();
mTexture->bind(0);
mTexture->setClamp(TRUE, TRUE);
mTexture->setMipFilterNearest(TRUE);
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index f5ea73f1fc..b847f4d04c 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -76,7 +76,74 @@ extern BOOL gNoRender;
const F32 WATER_TEXTURE_SCALE = 8.f; // Number of times to repeat the water texture across a region
const S16 MAX_MAP_DIST = 10;
+class BaseCapabilitiesComplete : public LLHTTPClient::Responder
+{
+ LOG_CLASS(BaseCapabilitiesComplete);
+public:
+ BaseCapabilitiesComplete(LLViewerRegion* region)
+ : mRegion(region)
+ { }
+ virtual ~BaseCapabilitiesComplete()
+ {
+ if(mRegion)
+ {
+ mRegion->setHttpResponderPtrNULL() ;
+ }
+ }
+ void setRegion(LLViewerRegion* region)
+ {
+ mRegion = region ;
+ }
+
+ void error(U32 statusNum, const std::string& reason)
+ {
+ LL_WARNS2("AppInit", "Capabilities") << statusNum << ": " << reason << LL_ENDL;
+
+ if (STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState())
+ {
+ LLStartUp::setStartupState( STATE_SEED_CAP_GRANTED );
+ }
+ }
+
+ void result(const LLSD& content)
+ {
+ if(!mRegion || this != mRegion->getHttpResponderPtr())//region is removed or responder is not created.
+ {
+ return ;
+ }
+
+ LLSD::map_const_iterator iter;
+ for(iter = content.beginMap(); iter != content.endMap(); ++iter)
+ {
+ mRegion->setCapability(iter->first, iter->second);
+ LL_DEBUGS2("AppInit", "Capabilities") << "got capability for "
+ << iter->first << LL_ENDL;
+
+ /* HACK we're waiting for the ServerReleaseNotes */
+ if ((iter->first == "ServerReleaseNotes") && (LLFloaterReleaseMsg::sDisplayMessage))
+ {
+ LLFloaterReleaseMsg::show();
+ LLFloaterReleaseMsg::sDisplayMessage = false;
+ }
+ }
+
+ if (STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState())
+ {
+ LLStartUp::setStartupState( STATE_SEED_CAP_GRANTED );
+ }
+ }
+
+ static boost::intrusive_ptr<BaseCapabilitiesComplete> build(
+ LLViewerRegion* region)
+ {
+ return boost::intrusive_ptr<BaseCapabilitiesComplete>(
+ new BaseCapabilitiesComplete(region));
+ }
+
+private:
+ LLViewerRegion* mRegion;
+};
LLViewerRegion::LLViewerRegion(const U64 &handle,
@@ -103,7 +170,6 @@ LLViewerRegion::LLViewerRegion(const U64 &handle,
mEventPoll(NULL)
{
mWidth = region_width_meters;
-
mOriginGlobal = from_region_handle(handle);
updateRenderMatrix();
@@ -170,10 +236,13 @@ void LLViewerRegion::initStats()
mAlive = FALSE; // can become false if circuit disconnects
}
-
-
LLViewerRegion::~LLViewerRegion()
{
+ if(mHttpResponderPtr)
+ {
+ (static_cast<BaseCapabilitiesComplete*>(mHttpResponderPtr.get()))->setRegion(NULL) ;
+ }
+
gVLManager.cleanupData(this);
// Can't do this on destruction, because the neighbor pointers might be invalid.
// This should be reference counted...
@@ -1303,87 +1372,6 @@ void LLViewerRegion::unpackRegionHandshake()
msg->sendReliable(host);
}
-
-
-class BaseCapabilitiesComplete : public LLHTTPClient::Responder
-{
- LOG_CLASS(BaseCapabilitiesComplete);
-public:
- BaseCapabilitiesComplete(LLViewerRegion* region, LLSD requestedCaps)
- : mRegion(region),
- mRequestedCaps(requestedCaps)
- { }
-
- void error(U32 statusNum, const std::string& reason)
- {
- LL_WARNS2("AppInit", "Capabilities") << statusNum << ": " << reason << LL_ENDL;
-
- if (STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState())
- {
- LLStartUp::setStartupState( STATE_SEED_CAP_GRANTED );
- }
- }
-
- void result(const LLSD& content)
- {
- LLSD::map_const_iterator iter;
-
- for(iter = content.beginMap(); iter != content.endMap(); ++iter)
- {
- if (iter->second.asString().empty())
- {
- llwarns << "BaseCapabilitiesComplete::result EMPTY capability "
- << iter->first << llendl;
- continue;
- }
-
- mRegion->setCapability(iter->first, iter->second);
- LL_DEBUGS2("AppInit", "Capabilities") << "got capability for "
- << iter->first << LL_ENDL;
-
- /* HACK we're waiting for the ServerReleaseNotes */
- if ((iter->first == "ServerReleaseNotes") && (LLFloaterReleaseMsg::sDisplayMessage))
- {
- LLFloaterReleaseMsg::show();
- LLFloaterReleaseMsg::sDisplayMessage = false;
- }
- }
-
- LLSD::array_const_iterator fail;
- for (fail = mRequestedCaps.beginArray();
- fail != mRequestedCaps.endArray();
- ++fail)
- {
- std::string cap = fail->asString();
-
- if (mRegion->getCapability(cap).empty() &&
- !LLViewerRegion::isSpecialCapabilityName(cap))
- {
- llwarns << "BaseCapabilitiesComplete::result FAILED to get "
- << "capability " << cap << llendl;
- }
- }
-
- if (STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState())
- {
- LLStartUp::setStartupState( STATE_SEED_CAP_GRANTED );
- }
- }
-
- static boost::intrusive_ptr<BaseCapabilitiesComplete> build(
- LLViewerRegion* region,
- LLSD requestedCaps)
- {
- return boost::intrusive_ptr<BaseCapabilitiesComplete>(
- new BaseCapabilitiesComplete(region, requestedCaps));
- }
-
-private:
- LLViewerRegion* mRegion;
- LLSD mRequestedCaps;
-};
-
-
void LLViewerRegion::setSeedCapability(const std::string& url)
{
if (getCapability("Seed") == url)
@@ -1435,8 +1423,8 @@ void LLViewerRegion::setSeedCapability(const std::string& url)
llinfos << "posting to seed " << url << llendl;
- LLHTTPClient::post(url, capabilityNames,
- BaseCapabilitiesComplete::build(this, capabilityNames));
+ mHttpResponderPtr = BaseCapabilitiesComplete::build(this) ;
+ LLHTTPClient::post(url, capabilityNames, mHttpResponderPtr);
}
void LLViewerRegion::setCapability(const std::string& name, const std::string& url)
diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h
index dedeb43523..d6e5e8320f 100644
--- a/indra/newview/llviewerregion.h
+++ b/indra/newview/llviewerregion.h
@@ -208,6 +208,9 @@ public:
U32 getPacketsLost() const;
+ void setHttpResponderPtrNULL() {mHttpResponderPtr = NULL ;}
+ const LLHTTPClient::ResponderPtr getHttpResponderPtr() const {return mHttpResponderPtr ;}
+
// Get/set named capability URLs for this region.
void setSeedCapability(const std::string& url);
void setCapability(const std::string& name, const std::string& url);
@@ -374,6 +377,8 @@ protected:
private:
//spatial partitions for objects in this region
std::vector<LLSpatialPartition*> mObjectPartition;
+
+ LLHTTPClient::ResponderPtr mHttpResponderPtr ;
};
inline BOOL LLViewerRegion::getAllowDamage() const
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 8f675e66e7..8f79253cf3 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -43,7 +43,7 @@
#include "llviewquery.h"
#include "llxmltree.h"
//#include "llviewercamera.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "llvoiceclient.h" // for push-to-talk button handling
@@ -182,6 +182,7 @@
#include "llviewerdisplay.h"
#include "llspatialpartition.h"
#include "llviewerjoystick.h"
+#include "llviewernetwork.h"
#if LL_WINDOWS
#include "llwindebug.h"
@@ -191,12 +192,12 @@
//
// Globals
//
-void render_ui_and_swap_if_needed();
void render_ui_and_swap();
LLBottomPanel* gBottomPanel = NULL;
extern BOOL gDebugClicks;
extern BOOL gDisplaySwapBuffers;
+extern BOOL gDepthDirty;
extern BOOL gResizeScreenTexture;
extern S32 gJamesInt;
@@ -1638,7 +1639,7 @@ LLViewerWindow::LLViewerWindow(
void LLViewerWindow::initGLDefaults()
{
- gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ gGL.setSceneBlendType(LLRender::BT_ALPHA);
glColorMaterial( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE );
F32 ambient[4] = {0.f,0.f,0.f,0.f };
@@ -1656,7 +1657,7 @@ void LLViewerWindow::initGLDefaults()
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
glCullFace(GL_BACK);
@@ -2198,7 +2199,7 @@ void LLViewerWindow::setNormalControlsVisible( BOOL visible )
// ...and set the menu color appropriately.
setMenuBackgroundColor(gAgent.getGodLevel() > GOD_NOT,
- LLAppViewer::instance()->isInProductionGrid());
+ LLViewerLogin::getInstance()->isInProductionGrid());
}
if ( gStatusBar )
@@ -2213,15 +2214,15 @@ void LLViewerWindow::setMenuBackgroundColor(bool god_mode, bool dev_grid)
LLString::format_map_t args;
LLColor4 new_bg_color;
- if(god_mode && LLAppViewer::instance()->isInProductionGrid())
+ if(god_mode && LLViewerLogin::getInstance()->isInProductionGrid())
{
new_bg_color = gColors.getColor( "MenuBarGodBgColor" );
}
- else if(god_mode && !LLAppViewer::instance()->isInProductionGrid())
+ else if(god_mode && !LLViewerLogin::getInstance()->isInProductionGrid())
{
new_bg_color = gColors.getColor( "MenuNonProductionGodBgColor" );
}
- else if(!god_mode && !LLAppViewer::instance()->isInProductionGrid())
+ else if(!god_mode && !LLViewerLogin::getInstance()->isInProductionGrid())
{
new_bg_color = gColors.getColor( "MenuNonProductionBgColor" );
}
@@ -3386,9 +3387,8 @@ void LLViewerWindow::hitObjectOrLandGlobalAsync(S32 x, S32 y_from_bot, MASK mask
return;
}
- render_ui_and_swap_if_needed();
glClear(GL_DEPTH_BUFFER_BIT);
- gDisplaySwapBuffers = FALSE;
+ gDepthDirty = TRUE;
S32 scaled_x = llround((F32)x * mDisplayScale.mV[VX]);
S32 scaled_y = llround((F32)y_from_bot * mDisplayScale.mV[VY]);
@@ -3538,7 +3538,7 @@ void LLViewerWindow::hitUIElementAsync(S32 x, S32 y_from_bot, MASK mask, void (*
const LLVector2& display_scale = getDisplayScale();
glScalef(display_scale.mV[VX], display_scale.mV[VY], 1.f);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
// make viewport big enough to handle antialiased frame buffers
glViewport(x - (PICK_HALF_WIDTH + 2), y_from_bot - (PICK_HALF_WIDTH + 2), PICK_DIAMETER + 4, PICK_DIAMETER + 4);
@@ -4281,7 +4281,8 @@ BOOL LLViewerWindow::thumbnailSnapshot(LLImageRaw *raw, S32 preview_width, S32 p
LLRect window_rect = mWindowRect;
mWindowRect.set(0, h, w, 0);
- gDisplaySwapBuffers = FALSE;
+ gDisplaySwapBuffers = FALSE;
+ gDepthDirty = TRUE;
glClearColor(0.f, 0.f, 0.f, 0.f);
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
setup3DRender();
@@ -4349,6 +4350,7 @@ BOOL LLViewerWindow::thumbnailSnapshot(LLImageRaw *raw, S32 preview_width, S32 p
setup3DRender();
setupViewport();
gDisplaySwapBuffers = FALSE;
+ gDepthDirty = TRUE;
// POST SNAPSHOT
if (!gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI))
@@ -4388,7 +4390,6 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
}
// PRE SNAPSHOT
- render_ui_and_swap_if_needed();
gDisplaySwapBuffers = FALSE;
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
@@ -4419,6 +4420,7 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
LLRect window_rect = mWindowRect;
BOOL use_fbo = FALSE;
+ LLRenderTarget target;
F32 scale_factor = 1.0f ;
if(!keep_window_aspect) //image cropping
{
@@ -4427,37 +4429,39 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
snapshot_height = (S32)(ratio * image_height) ;
scale_factor = llmax(1.0f, 1.0f / ratio) ;
}
-
- LLRenderTarget target;
- if (gGLManager.mHasFramebufferObject &&
- (image_width > window_width ||
- image_height > window_height) &&
- !show_ui &&
- keep_window_aspect)
- {
- GLint max_size = 0;
- glGetIntegerv(GL_MAX_RENDERBUFFER_SIZE_EXT, &max_size);
-
- if (image_width <= max_size && image_height <= max_size)
- {
- use_fbo = TRUE;
-
- snapshot_width = image_width;
- snapshot_height = image_height;
- target.allocate(snapshot_width, snapshot_height, GL_RGBA, TRUE, GL_TEXTURE_RECTANGLE_ARB, TRUE);
- window_width = snapshot_width;
- window_height = snapshot_height;
- scale_factor = 1.f;
- mWindowRect.set(0, 0, snapshot_width, snapshot_height);
- target.bindTarget();
- }
- else //tiling
+ else //the scene(window) proportion needs to be maintained.
+ {
+ if(image_width > window_width || image_height > window_height) //need to enlarge the scene
{
- F32 ratio = llmin( (F32)window_width / image_width , (F32)window_height / image_height) ;
- snapshot_width = (S32)(ratio * image_width) ;
- snapshot_height = (S32)(ratio * image_height) ;
- scale_factor = llmax(1.0f, 1.0f / ratio) ;
+ if (gGLManager.mHasFramebufferObject && !show_ui)
+ {
+ GLint max_size = 0;
+ glGetIntegerv(GL_MAX_RENDERBUFFER_SIZE_EXT, &max_size);
+
+ if (image_width <= max_size && image_height <= max_size) //re-project the scene
+ {
+ use_fbo = TRUE;
+
+ snapshot_width = image_width;
+ snapshot_height = image_height;
+ target.allocate(snapshot_width, snapshot_height, GL_RGBA, TRUE, GL_TEXTURE_RECTANGLE_ARB, TRUE);
+ window_width = snapshot_width;
+ window_height = snapshot_height;
+ scale_factor = 1.f;
+ mWindowRect.set(0, 0, snapshot_width, snapshot_height);
+ target.bindTarget();
+ }
+ }
+
+ if(!use_fbo) //no re-projection, so tiling the scene
+ {
+ F32 ratio = llmin( (F32)window_width / image_width , (F32)window_height / image_height) ;
+ snapshot_width = (S32)(ratio * image_width) ;
+ snapshot_height = (S32)(ratio * image_height) ;
+ scale_factor = llmax(1.0f, 1.0f / ratio) ;
+ }
}
+ //else: keep the current scene scale, re-scale it if necessary after reading out.
}
S32 buffer_x_offset = llfloor(((window_width - snapshot_width) * scale_factor) / 2.f);
@@ -4502,6 +4506,7 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
for (int subimage_x = 0; subimage_x < scale_factor; ++subimage_x)
{
gDisplaySwapBuffers = FALSE;
+ gDepthDirty = TRUE;
if (type == SNAPSHOT_TYPE_OBJECT_ID)
{
glClearColor(0.f, 0.f, 0.f, 0.f);
@@ -4585,6 +4590,7 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
}
gDisplaySwapBuffers = FALSE;
+ gDepthDirty = TRUE;
// POST SNAPSHOT
if (!gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI))
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 91c70bd315..2e001a50c7 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -37,7 +37,7 @@
#include "llvoavatar.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "audioengine.h"
#include "imageids.h"
#include "indra_constants.h"
@@ -2750,7 +2750,7 @@ void LLVOAvatar::idleUpdateAppearanceAnimation()
void LLVOAvatar::idleUpdateLipSync(bool voice_enabled)
{
// Use the Lipsync_Ooh and Lipsync_Aah morphs for lip sync
- if ( voice_enabled && (gVoiceClient->lipSyncEnabled() > 0) && gVoiceClient->getIsSpeaking( mID ) )
+ if ( voice_enabled && (gVoiceClient->lipSyncEnabled()) && gVoiceClient->getIsSpeaking( mID ) )
{
F32 ooh_morph_amount = 0.0f;
F32 aah_morph_amount = 0.0f;
@@ -4158,23 +4158,23 @@ U32 LLVOAvatar::renderTransparent()
BOOL first_pass = FALSE;
if( isWearingWearableType( WT_SKIRT ) )
{
- glAlphaFunc(GL_GREATER,0.25f);
+ gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.25f);
num_indices += mSkirtLOD.render(mAdjustedPixelArea, FALSE);
first_pass = FALSE;
- glAlphaFunc(GL_GREATER,0.01f);
+ gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
}
if (!mIsSelf || gAgent.needsRenderHead())
{
if (LLPipeline::sImpostorRender)
{
- glAlphaFunc(GL_GREATER, 0.5f);
+ gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
}
num_indices += mEyeLashLOD.render(mAdjustedPixelArea, first_pass);
num_indices += mHairLOD.render(mAdjustedPixelArea, FALSE);
if (LLPipeline::sImpostorRender)
{
- glAlphaFunc(GL_GREATER, 0.01f);
+ gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
}
}
@@ -4267,7 +4267,7 @@ U32 LLVOAvatar::renderImpostor(LLColor4U color)
up *= mImpostorDim.mV[1];
LLGLEnable test(GL_ALPHA_TEST);
- glAlphaFunc(GL_GREATER, 0.f);
+ gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.f);
gGL.color4f(1,1,1,1);
gGL.color4ubv(color.mV);
diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp
index 4d4808cdff..b3b82d9c79 100644
--- a/indra/newview/llvoiceclient.cpp
+++ b/indra/newview/llvoiceclient.cpp
@@ -850,7 +850,7 @@ LLVoiceClient::LLVoiceClient()
setCaptureDevice(captureDevice);
std::string renderDevice = gSavedSettings.getString("VoiceOutputAudioDevice");
setRenderDevice(renderDevice);
- mLipSyncEnabled = gSavedSettings.getU32("LipSyncEnabled");
+ mLipSyncEnabled = gSavedSettings.getBOOL("LipSyncEnabled");
mTuningMode = false;
mTuningEnergy = 0.0f;
@@ -1033,13 +1033,7 @@ void LLVoiceClient::userAuthorized(const std::string& firstName, const std::stri
LL_INFOS("Voice") << "name \"" << mAccountDisplayName << "\" , ID " << agentID << LL_ENDL;
- std::string gridname = gGridName;
- LLString::toLower(gridname);
- if((gGridChoice == GRID_INFO_AGNI) ||
- ((gGridChoice == GRID_INFO_OTHER) && (gridname.find("agni") != std::string::npos)))
- {
- sConnectingToAgni = true;
- }
+ sConnectingToAgni = LLViewerLogin::getInstance()->isInProductionGrid();
// MBW -- XXX -- Enable this when the bhd.vivox.com server gets a real ssl cert.
if(sConnectingToAgni)
@@ -3632,12 +3626,12 @@ bool LLVoiceClient::voiceEnabled()
return gSavedSettings.getBOOL("EnableVoiceChat") && !gSavedSettings.getBOOL("CmdLineDisableVoice");
}
-void LLVoiceClient::setLipSyncEnabled(U32 enabled)
+void LLVoiceClient::setLipSyncEnabled(BOOL enabled)
{
mLipSyncEnabled = enabled;
}
-U32 LLVoiceClient::lipSyncEnabled()
+BOOL LLVoiceClient::lipSyncEnabled()
{
if ( mVoiceEnabled && stateDisabled != getState() )
@@ -3646,7 +3640,7 @@ U32 LLVoiceClient::lipSyncEnabled()
}
else
{
- return 0;
+ return FALSE;
}
}
diff --git a/indra/newview/llvoiceclient.h b/indra/newview/llvoiceclient.h
index 3ac5f0cdbf..8c3637830d 100644
--- a/indra/newview/llvoiceclient.h
+++ b/indra/newview/llvoiceclient.h
@@ -210,8 +210,8 @@ class LLVoiceClient: public LLSingleton<LLVoiceClient>
void setMicGain(F32 volume);
void setUserVolume(const LLUUID& id, F32 volume); // set's volume for specified agent, from 0-1 (where .5 is nominal)
void setVivoxDebugServerName(std::string &serverName);
- void setLipSyncEnabled(U32 enabled);
- U32 lipSyncEnabled();
+ void setLipSyncEnabled(BOOL enabled);
+ BOOL lipSyncEnabled();
// PTT key triggering
void keyDown(KEY key, MASK mask);
@@ -518,7 +518,7 @@ class LLVoiceClient: public LLSingleton<LLVoiceClient>
LLTimer mUpdateTimer;
- U32 mLipSyncEnabled;
+ BOOL mLipSyncEnabled;
typedef std::set<LLVoiceClientParticipantObserver*> observer_set_t;
observer_set_t mObservers;
diff --git a/indra/newview/llvoicevisualizer.cpp b/indra/newview/llvoicevisualizer.cpp
index a0286d3e4b..40e405a313 100644
--- a/indra/newview/llvoicevisualizer.cpp
+++ b/indra/newview/llvoicevisualizer.cpp
@@ -45,7 +45,7 @@
#include "llviewerimage.h"
#include "llviewerimagelist.h"
#include "llvoiceclient.h"
-#include "llglimmediate.h"
+#include "llrender.h"
//brent's wave image
//29de489d-0491-fb00-7dab-f9e686d31e83
@@ -94,7 +94,7 @@ static bool handleVoiceVisualizerPrefsChanged(const LLSD& newvalue)
// Initialize the statics
//------------------------------------------------------------------
bool LLVoiceVisualizer::sPrefsInitialized = false;
-U32 LLVoiceVisualizer::sLipSyncEnabled = 0;
+BOOL LLVoiceVisualizer::sLipSyncEnabled = FALSE;
F32* LLVoiceVisualizer::sOoh = NULL;
F32* LLVoiceVisualizer::sAah = NULL;
U32 LLVoiceVisualizer::sOohs = 0;
@@ -225,7 +225,7 @@ void LLVoiceVisualizer::setSpeakingAmplitude( F32 a )
//---------------------------------------------------
void LLVoiceVisualizer::setPreferences( )
{
- sLipSyncEnabled = gSavedSettings.getU32("LipSyncEnabled");
+ sLipSyncEnabled = gSavedSettings.getBOOL("LipSyncEnabled");
sOohAahRate = gSavedSettings.getF32("LipSyncOohAahRate");
std::string oohString = gSavedSettings.getString("LipSyncOoh");
@@ -290,7 +290,7 @@ void LLVoiceVisualizer::lipStringToF32s ( std::string& in_string, F32*& out_F32s
//--------------------------------------------------------------------------
void LLVoiceVisualizer::lipSyncOohAah( F32& ooh, F32& aah )
{
- if( ( sLipSyncEnabled == 1 ) && mCurrentlySpeaking )
+ if( ( sLipSyncEnabled == TRUE ) && mCurrentlySpeaking )
{
U32 transfer_index = (U32) (sOohPowerTransfersf * mSpeakingAmplitude);
if (transfer_index < 0)
diff --git a/indra/newview/llvoicevisualizer.h b/indra/newview/llvoicevisualizer.h
index bb2ce55d4a..72612d68c6 100644
--- a/indra/newview/llvoicevisualizer.h
+++ b/indra/newview/llvoicevisualizer.h
@@ -141,7 +141,7 @@ class LLVoiceVisualizer : public LLHUDEffect
// private static members
//---------------------------------------------------
- static U32 sLipSyncEnabled; // 0 disabled, 1 babble loop
+ static BOOL sLipSyncEnabled; // 0 disabled, 1 babble loop
static bool sPrefsInitialized; // the first instance will initialize the static members
static F32* sOoh; // the babble loop of amplitudes for the ooh morph
static F32* sAah; // the babble loop of amplitudes for the ooh morph
diff --git a/indra/newview/llvosurfacepatch.cpp b/indra/newview/llvosurfacepatch.cpp
index 8915ae799d..968cc69d3a 100644
--- a/indra/newview/llvosurfacepatch.cpp
+++ b/indra/newview/llvosurfacepatch.cpp
@@ -960,12 +960,12 @@ void LLTerrainPartition::getGeometry(LLSpatialGroup* group)
LLStrider<LLColor4U> colors;
LLStrider<U16> indices;
- buffer->getVertexStrider(vertices);
- buffer->getNormalStrider(normals);
- buffer->getTexCoordStrider(texcoords);
- buffer->getTexCoord2Strider(texcoords2);
- buffer->getColorStrider(colors);
- buffer->getIndexStrider(indices);
+ llassert_always(buffer->getVertexStrider(vertices));
+ llassert_always(buffer->getNormalStrider(normals));
+ llassert_always(buffer->getTexCoordStrider(texcoords));
+ llassert_always(buffer->getTexCoord2Strider(texcoords2));
+ llassert_always(buffer->getColorStrider(colors));
+ llassert_always(buffer->getIndexStrider(indices));
U32 indices_index = 0;
U32 index_offset = 0;
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index a440ae2957..0117737225 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -1841,7 +1841,7 @@ F32 LLVOVolume::getBinRadius()
}
else
{
- radius = 32.f;
+ radius = llmax(mDrawable->getRadius(), 32.f);
}
}
else
diff --git a/indra/newview/llwatchdog.cpp b/indra/newview/llwatchdog.cpp
index ff34fd27be..27a0155b14 100644
--- a/indra/newview/llwatchdog.cpp
+++ b/indra/newview/llwatchdog.cpp
@@ -33,6 +33,8 @@
#include "llviewerprecompiledheaders.h"
#include "llwatchdog.h"
+const U32 WATCHDOG_SLEEP_TIME_USEC = 1000000;
+
// This class runs the watchdog timing thread.
class LLWatchdogTimerThread : public LLThread
{
@@ -74,6 +76,7 @@ LLWatchdogEntry::LLWatchdogEntry()
LLWatchdogEntry::~LLWatchdogEntry()
{
+ stop();
}
void LLWatchdogEntry::start()
@@ -87,8 +90,11 @@ void LLWatchdogEntry::stop()
}
// LLWatchdogTimeout
+const std::string UNINIT_STRING = "uninitialized";
+
LLWatchdogTimeout::LLWatchdogTimeout() :
- mTimeout(0.0f)
+ mTimeout(0.0f),
+ mPingState(UNINIT_STRING)
{
}
@@ -101,35 +107,46 @@ bool LLWatchdogTimeout::isAlive() const
return (mTimer.getStarted() && !mTimer.hasExpired());
}
+void LLWatchdogTimeout::reset()
+{
+ mTimer.setTimerExpirySec(mTimeout);
+}
+
void LLWatchdogTimeout::setTimeout(F32 d)
{
mTimeout = d;
}
-void LLWatchdogTimeout::start()
+void LLWatchdogTimeout::start(const std::string& state)
{
// Order of operation is very impmortant here.
// After LLWatchdogEntry::start() is called
// LLWatchdogTimeout::isAlive() will be called asynchronously.
mTimer.start();
- mTimer.setTimerExpirySec(mTimeout);
+ ping(state);
LLWatchdogEntry::start();
}
+
void LLWatchdogTimeout::stop()
{
LLWatchdogEntry::stop();
mTimer.stop();
}
-void LLWatchdogTimeout::ping()
+void LLWatchdogTimeout::ping(const std::string& state)
{
- mTimer.setTimerExpirySec(mTimeout);
+ if(!state.empty())
+ {
+ mPingState = state;
+ }
+ reset();
}
-// LlWatchdog
+// LLWatchdog
LLWatchdog::LLWatchdog() :
mSuspectsAccessMutex(NULL),
- mTimer(NULL)
+ mTimer(NULL),
+ mLastClockCount(0)
{
}
@@ -139,55 +156,112 @@ LLWatchdog::~LLWatchdog()
void LLWatchdog::add(LLWatchdogEntry* e)
{
- mSuspectsAccessMutex->lock();
+ lockThread();
mSuspects.insert(e);
- mSuspectsAccessMutex->unlock();
+ unlockThread();
}
void LLWatchdog::remove(LLWatchdogEntry* e)
{
- mSuspectsAccessMutex->lock();
+ lockThread();
mSuspects.erase(e);
- mSuspectsAccessMutex->unlock();
+ unlockThread();
}
void LLWatchdog::init()
{
- mSuspectsAccessMutex = new LLMutex(NULL);
- mTimer = new LLWatchdogTimerThread();
- mTimer->setSleepTime(1000);
- mTimer->start();
+ if(!mSuspectsAccessMutex && !mTimer)
+ {
+ mSuspectsAccessMutex = new LLMutex(NULL);
+ mTimer = new LLWatchdogTimerThread();
+ mTimer->setSleepTime(WATCHDOG_SLEEP_TIME_USEC / 1000);
+ mLastClockCount = LLTimer::getTotalTime();
+
+ // mTimer->start() kicks off the thread, any code after
+ // start needs to use the mSuspectsAccessMutex
+ mTimer->start();
+ }
}
void LLWatchdog::cleanup()
{
- mTimer->stop();
- delete mTimer;
- delete mSuspectsAccessMutex;
+ if(mTimer)
+ {
+ mTimer->stop();
+ delete mTimer;
+ mTimer = NULL;
+ }
+
+ if(mSuspectsAccessMutex)
+ {
+ delete mSuspectsAccessMutex;
+ mSuspectsAccessMutex = NULL;
+ }
+
+ mLastClockCount = 0;
}
void LLWatchdog::run()
{
- mSuspectsAccessMutex->lock();
+ lockThread();
+
+ // Check the time since the last call to run...
+ // If the time elapsed is two times greater than the regualr sleep time
+ // reset the active timeouts.
+ const U32 TIME_ELAPSED_MULTIPLIER = 2;
+ U64 current_time = LLTimer::getTotalTime();
+ U64 current_run_delta = current_time - mLastClockCount;
+ mLastClockCount = current_time;
- SuspectsRegistry::iterator result =
- std::find_if(mSuspects.begin(),
+ if(current_run_delta > (WATCHDOG_SLEEP_TIME_USEC * TIME_ELAPSED_MULTIPLIER))
+ {
+ llinfos << "Watchdog thread delayed: resetting entries." << llendl;
+ std::for_each(mSuspects.begin(),
mSuspects.end(),
- std::not1(std::mem_fun(&LLWatchdogEntry::isAlive))
+ std::mem_fun(&LLWatchdogEntry::reset)
);
-
- if(result != mSuspects.end())
+ }
+ else
{
- // error!!!
- mTimer->stop();
+ SuspectsRegistry::iterator result =
+ std::find_if(mSuspects.begin(),
+ mSuspects.end(),
+ std::not1(std::mem_fun(&LLWatchdogEntry::isAlive))
+ );
+
+ if(result != mSuspects.end())
+ {
+ // error!!!
+ if(mTimer)
+ {
+ mTimer->stop();
+ }
- llinfos << "Watchdog detected error:" << llendl;
+ llinfos << "Watchdog detected error:" << llendl;
#ifdef LL_WINDOWS
- RaiseException(0,0,0,0);
+ RaiseException(0,0,0,0);
#else
- raise(SIGQUIT);
+ raise(SIGQUIT);
#endif
+ }
+ }
+
+
+ unlockThread();
+}
+
+void LLWatchdog::lockThread()
+{
+ if(mSuspectsAccessMutex != NULL)
+ {
+ mSuspectsAccessMutex->lock();
}
+}
- mSuspectsAccessMutex->unlock();
+void LLWatchdog::unlockThread()
+{
+ if(mSuspectsAccessMutex != NULL)
+ {
+ mSuspectsAccessMutex->unlock();
+ }
}
diff --git a/indra/newview/llwatchdog.h b/indra/newview/llwatchdog.h
index 0d897ca4c9..0bcf11c3a3 100644
--- a/indra/newview/llwatchdog.h
+++ b/indra/newview/llwatchdog.h
@@ -48,6 +48,7 @@ public:
// This may mean that resources used by
// isAlive and other method may need synchronization.
virtual bool isAlive() const = 0;
+ virtual void reset() = 0;
virtual void start();
virtual void stop();
};
@@ -59,15 +60,18 @@ public:
virtual ~LLWatchdogTimeout();
/* virtual */ bool isAlive() const;
- /* virtual */ void start();
+ /* virtual */ void reset();
+ /* virtual */ void start(const std::string& state);
/* virtual */ void stop();
void setTimeout(F32 d);
- void ping();
+ void ping(const std::string& state);
+ const std::string& getState() {return mPingState; }
private:
LLTimer mTimer;
F32 mTimeout;
+ std::string mPingState;
};
class LLWatchdogTimerThread; // Defined in the cpp
@@ -86,10 +90,14 @@ public:
void cleanup();
private:
+ void lockThread();
+ void unlockThread();
+
typedef std::set<LLWatchdogEntry*> SuspectsRegistry;
SuspectsRegistry mSuspects;
LLMutex* mSuspectsAccessMutex;
LLWatchdogTimerThread* mTimer;
+ U64 mLastClockCount;
};
#endif // LL_LLTHREADWATCHDOG_H
diff --git a/indra/newview/llwaterparammanager.cpp b/indra/newview/llwaterparammanager.cpp
index a6fbe71d67..2853860802 100644
--- a/indra/newview/llwaterparammanager.cpp
+++ b/indra/newview/llwaterparammanager.cpp
@@ -407,7 +407,7 @@ F32 LLWaterParamManager::getFogDensity(void)
F32 fogDensity = mCurParams.getFloat("waterFogDensity", err);
// modify if we're underwater
- const F32 water_height = gAgent.getRegion()->getWaterHeight();
+ const F32 water_height = gAgent.getRegion() ? gAgent.getRegion()->getWaterHeight() : 0.f;
F32 camera_height = gAgent.getCameraPositionAgent().mV[2];
if(camera_height <= water_height)
{
diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp
index af554e5160..f084088478 100644
--- a/indra/newview/llwearable.cpp
+++ b/indra/newview/llwearable.cpp
@@ -846,7 +846,7 @@ struct LLWearableSaveData
void LLWearable::saveNewAsset()
{
// llinfos << "LLWearable::saveNewAsset() type: " << getTypeName() << llendl;
- //dump();
+ //llinfos << *this << llendl;
char new_asset_id_string[UUID_STR_LENGTH]; /* Flawfinder: ignore */
mAssetID.toString(new_asset_id_string);
@@ -949,31 +949,32 @@ BOOL LLWearable::isMatchedToInventoryItem( LLViewerInventoryItem* item )
( mSaleInfo == item->getSaleInfo() );
}
-void LLWearable::dump()
+std::ostream& operator<<(std::ostream &s, const LLWearable &w)
{
- llinfos << "wearable " << LLWearable::typeToTypeName( mType ) << llendl;
- llinfos << " Name: " << mName << llendl;
- llinfos << " Desc: " << mDescription << llendl;
- //mPermissions
- //mSaleInfo
+ s << "wearable " << LLWearable::typeToTypeName( w.mType ) << "\n";
+ s << " Name: " << w.mName << "\n";
+ s << " Desc: " << w.mDescription << "\n";
+ //w.mPermissions
+ //w.mSaleInfo
- llinfos << " Params:" << llendl;
- for (param_map_t::iterator iter = mVisualParamMap.begin();
- iter != mVisualParamMap.end(); ++iter)
+ s << " Params:" << "\n";
+ for (LLWearable::param_map_t::const_iterator iter = w.mVisualParamMap.begin();
+ iter != w.mVisualParamMap.end(); ++iter)
{
S32 param_id = iter->first;
F32 param_weight = iter->second;
- llinfos << " " << param_id << " " << param_weight << llendl;
+ s << " " << param_id << " " << param_weight << "\n";
}
- llinfos << " Textures:" << llendl;
- for (te_map_t::iterator iter = mTEMap.begin();
- iter != mTEMap.end(); ++iter)
+ s << " Textures:" << "\n";
+ for (LLWearable::te_map_t::const_iterator iter = w.mTEMap.begin();
+ iter != w.mTEMap.end(); ++iter)
{
S32 te = iter->first;
- LLUUID& image_id = iter->second;
- llinfos << " " << te << " " << image_id << llendl;
+ const LLUUID& image_id = iter->second;
+ s << " " << te << " " << image_id << "\n";
}
+ return s;
}
diff --git a/indra/newview/llwearable.h b/indra/newview/llwearable.h
index fb66663fc2..059444d941 100644
--- a/indra/newview/llwearable.h
+++ b/indra/newview/llwearable.h
@@ -118,7 +118,7 @@ public:
static void setCurrentDefinitionVersion( S32 version ) { LLWearable::sCurrentDefinitionVersion = version; }
- void dump();
+ friend std::ostream& operator<<(std::ostream &s, const LLWearable &w);
private:
static S32 sCurrentDefinitionVersion; // Depends on the current state of the avatar_lad.xml.
diff --git a/indra/newview/llwearablelist.cpp b/indra/newview/llwearablelist.cpp
index 3ec5737acf..7fca271d3d 100644
--- a/indra/newview/llwearablelist.cpp
+++ b/indra/newview/llwearablelist.cpp
@@ -57,13 +57,15 @@ struct LLWearableArrivedData
mAssetType( asset_type ),
mCallback( asset_arrived_callback ),
mUserdata( userdata ),
- mName( wearable_name )
+ mName( wearable_name ),
+ mRetries(0)
{}
LLAssetType::EType mAssetType;
void (*mCallback)(LLWearable*, void* userdata);
void* mUserdata;
LLString mName;
+ S32 mRetries;
};
@@ -99,12 +101,12 @@ void LLWearableList::getAsset( const LLAssetID& assetID, const LLString& wearabl
// static
void LLWearableList::processGetAssetReply( const char* filename, const LLAssetID& uuid, void* userdata, S32 status, LLExtStat ext_status )
{
- BOOL success = FALSE;
LLWearableArrivedData* data = (LLWearableArrivedData*) userdata;
-
+ LLWearable* wearable = NULL; // NULL indicates failure
+
if( !filename )
{
- llinfos << "Bad Wearable Asset: missing file." << llendl;
+ LL_WARNS("Wearable") << "Bad Wearable Asset: missing file." << LL_ENDL;
}
else
if( status >= 0 )
@@ -113,38 +115,16 @@ void LLWearableList::processGetAssetReply( const char* filename, const LLAssetID
LLFILE* fp = LLFile::fopen(filename, "rb"); /*Flawfinder: ignore*/
if( !fp )
{
- llinfos << "Bad Wearable Asset: unable to open file: '" << filename << "'" << llendl;
+ LL_WARNS("Wearable") << "Bad Wearable Asset: unable to open file: '" << filename << "'" << LL_ENDL;
}
else
{
- LLWearable *wearable = new LLWearable(uuid);
- if( wearable->importFile( fp ) )
- {
-// llinfos << "processGetAssetReply()" << llendl;
-// wearable->dump();
-
- gWearableList.mList[ uuid ] = wearable;
- if( data->mCallback )
- {
- data->mCallback( wearable, data->mUserdata );
- }
- success = TRUE;
- }
- else
+ wearable = new LLWearable(uuid);
+ bool res = wearable->importFile( fp );
+ if (!res)
{
- LLString::format_map_t args;
- // *TODO:translate
- args["[TYPE]"] = LLAssetType::lookupHumanReadable(data->mAssetType);
- if (data->mName.empty())
- {
- LLNotifyBox::showXml("FailedToLoadWearableUnnamed", args);
- }
- else
- {
- args["[DESC]"] = data->mName;
- LLNotifyBox::showXml("FailedToLoadWearable", args);
- }
delete wearable;
+ wearable = NULL;
}
fclose( fp );
@@ -162,44 +142,64 @@ void LLWearableList::processGetAssetReply( const char* filename, const LLAssetID
}
LLViewerStats::getInstance()->incStat( LLViewerStats::ST_DOWNLOAD_FAILED );
- llwarns << "Wearable download failed: " << LLAssetStorage::getErrorString( status ) << " " << uuid << llendl;
+ LL_WARNS("Wearable") << "Wearable download failed: " << LLAssetStorage::getErrorString( status ) << " " << uuid << LL_ENDL;
switch( status )
{
case LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE:
{
- LLString::format_map_t args;
- // *TODO:translate
- args["[TYPE]"] = LLAssetType::lookupHumanReadable(data->mAssetType);
- if (data->mName.empty())
+ // Fail
+ break;
+ }
+ default:
+ {
+ static const S32 MAX_RETRIES = 3;
+ if (data->mRetries < MAX_RETRIES)
{
- LLNotifyBox::showXml("FailedToFindWearableUnnamed", args);
+ // Try again
+ data->mRetries++;
+ gAssetStorage->getAssetData(uuid,
+ data->mAssetType,
+ LLWearableList::processGetAssetReply,
+ userdata); // re-use instead of deleting.
+ return;
}
else
{
- args["[DESC]"] = data->mName;
- LLNotifyBox::showXml("FailedToFindWearable", args);
+ // Fail
+ break;
}
-
- // Asset does not exist in the database.
- // Can't load asset, so return NULL
- if( data->mCallback )
- {
- data->mCallback( NULL, data->mUserdata );
- }
- break;
- }
- default:
- {
- // Try again
- gAssetStorage->getAssetData(uuid,
- data->mAssetType,
- LLWearableList::processGetAssetReply,
- userdata); // re-use instead of deleting.
- return;
}
}
}
+ if (wearable) // success
+ {
+ gWearableList.mList[ uuid ] = wearable;
+ LL_DEBUGS("Wearable") << "processGetAssetReply()" << LL_ENDL;
+ LL_DEBUGS("Wearable") << wearable << LL_ENDL;
+ }
+ else
+ {
+ LLString::format_map_t args;
+ // *TODO:translate
+ args["[TYPE]"] = LLAssetType::lookupHumanReadable(data->mAssetType);
+ if (data->mName.empty())
+ {
+ LLNotifyBox::showXml("FailedToFindWearableUnnamed", args);
+ }
+ else
+ {
+ args["[DESC]"] = data->mName;
+ LLNotifyBox::showXml("FailedToFindWearable", args);
+ }
+ }
+ // Always call callback; wearable will be NULL if we failed
+ {
+ if( data->mCallback )
+ {
+ data->mCallback( wearable, data->mUserdata );
+ }
+ }
delete data;
}
diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp
index 3068f2cbb1..7a2acbb094 100644
--- a/indra/newview/llworld.cpp
+++ b/indra/newview/llworld.cpp
@@ -1113,7 +1113,7 @@ void send_agent_pause()
{
// *NOTE:Mani Pausing the mainloop timeout. Otherwise a long modal event may cause
// the thread monitor to timeout.
- LLAppViewer::instance()->stopMainloopTimeout();
+ LLAppViewer::instance()->pauseMainloopTimeout();
// Note: used to check for LLWorld initialization before it became a singleton.
// Rather than just remove this check I'm changing it to assure that the message
@@ -1171,7 +1171,7 @@ void send_agent_resume()
// Reset the FPS counter to avoid an invalid fps
LLViewerStats::getInstance()->mFPSStat.start();
- LLAppViewer::instance()->startMainloopTimeout();
+ LLAppViewer::instance()->resumeMainloopTimeout();
}
diff --git a/indra/newview/llworldmap.cpp b/indra/newview/llworldmap.cpp
index 16b277f6a6..1dd08604cd 100644
--- a/indra/newview/llworldmap.cpp
+++ b/indra/newview/llworldmap.cpp
@@ -161,6 +161,11 @@ void LLWorldMap::reset()
mNeighborMapWidth = 0;
mNeighborMapHeight = 0;
+
+ for (S32 i=0; i<MAP_SIM_IMAGE_TYPES; i++)
+ {
+ mMapLayers[i].clear();
+ }
}
void LLWorldMap::eraseItems()
diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp
index 1db9e5db30..04a09490ea 100644
--- a/indra/newview/llworldmapview.cpp
+++ b/indra/newview/llworldmapview.cpp
@@ -38,7 +38,7 @@
#include "llmath.h" // clampf()
#include "llregionhandle.h"
#include "lleventflags.h"
-#include "llglimmediate.h"
+#include "llrender.h"
#include "llagent.h"
#include "llcallingcard.h"
@@ -307,17 +307,17 @@ void LLWorldMapView::draw()
// Clear the background alpha to 0
gGL.flush();
- glColorMask(FALSE, FALSE, FALSE, TRUE);
- glAlphaFunc(GL_GEQUAL, 0.00f);
- gGL.blendFunc(GL_ONE, GL_ZERO);
+ gGL.setColorMask(false, true);
+ gGL.setAlphaRejectSettings(LLRender::CF_GREATER_EQUAL, 0.f);
+ gGL.setSceneBlendType(LLRender::BT_REPLACE);
gGL.color4f(0.0f, 0.0f, 0.0f, 0.0f);
gl_rect_2d(0, height, width, 0);
}
gGL.flush();
- glAlphaFunc(GL_GEQUAL, 0.01f);
- glColorMask(TRUE, TRUE, TRUE, TRUE);
- gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
+ gGL.setColorMask(true, true);
+ gGL.setSceneBlendType(LLRender::BT_ALPHA);
F32 layer_alpha = 1.f;
@@ -382,7 +382,7 @@ void LLWorldMapView::draw()
// Draw map image into RGB
//gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
gGL.flush();
- glColorMask(TRUE, TRUE, TRUE, FALSE);
+ gGL.setColorMask(true, false);
gGL.color4f(1.f, 1.f, 1.f, layer_alpha);
gGL.begin(LLVertexBuffer::QUADS);
@@ -398,7 +398,7 @@ void LLWorldMapView::draw()
// draw an alpha of 1 where the sims are visible
gGL.flush();
- glColorMask(FALSE, FALSE, FALSE, TRUE);
+ gGL.setColorMask(false, true);
gGL.color4f(1.f, 1.f, 1.f, 1.f);
gGL.begin(LLVertexBuffer::QUADS);
@@ -414,8 +414,8 @@ void LLWorldMapView::draw()
}
gGL.flush();
- glAlphaFunc(GL_GEQUAL, 0.01f);
- glColorMask(TRUE, TRUE, TRUE, TRUE);
+ gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
+ gGL.setColorMask(true, true);
#if 1
F32 sim_alpha = 1.f;
@@ -538,7 +538,7 @@ void LLWorldMapView::draw()
LLGLSUIDefault gls_ui;
LLViewerImage::bindTexture(simimage);
- gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ gGL.setSceneBlendType(LLRender::BT_ALPHA);
F32 alpha = sim_alpha * info->mAlpha;
gGL.color4f(1.f, 1.0f, 1.0f, alpha);
@@ -573,8 +573,8 @@ void LLWorldMapView::draw()
{
// draw an alpha of 1 where the sims are visible (except NULL sims)
gGL.flush();
- gGL.blendFunc(GL_ONE, GL_ZERO);
- glColorMask(FALSE, FALSE, FALSE, TRUE);
+ gGL.setSceneBlendType(LLRender::BT_REPLACE);
+ gGL.setColorMask(false, true);
gGL.color4f(1.f, 1.f, 1.f, 1.f);
LLGLSNoTexture gls_no_texture;
@@ -586,14 +586,14 @@ void LLWorldMapView::draw()
gGL.end();
gGL.flush();
- glColorMask(TRUE, TRUE, TRUE, TRUE);
+ gGL.setColorMask(true, true);
}
}
if (info->mAccess == SIM_ACCESS_DOWN)
{
// Draw a transparent red square over down sims
- gGL.blendFunc(GL_DST_ALPHA, GL_SRC_ALPHA);
+ gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_SOURCE_ALPHA);
gGL.color4f(0.2f, 0.0f, 0.0f, 0.4f);
LLGLSNoTexture gls_no_texture;
@@ -610,7 +610,7 @@ void LLWorldMapView::draw()
&& info->mAccess > SIM_ACCESS_PG
&& gAgent.isTeen())
{
- gGL.blendFunc(GL_DST_ALPHA, GL_ZERO);
+ gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_ZERO);
LLGLSNoTexture gls_no_texture;
gGL.color3f(1.f, 0.f, 0.f);
@@ -686,14 +686,14 @@ void LLWorldMapView::draw()
LLGLSUIDefault gls_ui;
{
LLGLSNoTexture gls_no_texture;
- glAlphaFunc(GL_GEQUAL, 0.0f);
- gGL.blendFunc(GL_ONE_MINUS_DST_ALPHA, GL_DST_ALPHA);
+ gGL.setAlphaRejectSettings(LLRender::CF_GREATER_EQUAL, 0.f);
+ gGL.blendFunc(LLRender::BF_ONE_MINUS_DEST_ALPHA, LLRender::BF_DEST_ALPHA);
gGL.color4fv( mBackgroundColor.mV );
gl_rect_2d(0, height, width, 0);
}
- glAlphaFunc(GL_GEQUAL, 0.01f);
- gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
+ gGL.setSceneBlendType(LLRender::BT_ALPHA);
// Infohubs
if (gSavedSettings.getBOOL("MapShowInfohubs")) //(gMapScale >= sThresholdB)
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 18b99d8b74..643c1ec055 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -50,7 +50,7 @@
#include "v3color.h"
#include "llui.h"
#include "llglheaders.h"
-#include "llglimmediate.h"
+#include "llrender.h"
// newview includes
#include "llagent.h"
@@ -108,8 +108,6 @@
//#define DEBUG_INDICES
#endif
-void render_ui_and_swap_if_needed();
-
const F32 BACKLIGHT_DAY_MAGNITUDE_AVATAR = 0.2f;
const F32 BACKLIGHT_NIGHT_MAGNITUDE_AVATAR = 0.1f;
const F32 BACKLIGHT_DAY_MAGNITUDE_OBJECT = 0.1f;
@@ -506,11 +504,7 @@ void LLPipeline::createGLBuffers()
res = 128;
mCubeBuffer = new LLCubeMap();
mCubeBuffer->initGL();
- glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, mCubeBuffer->getGLName());
- glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ mCubeBuffer->setReflection();
for (U32 i = 0; i < 6; i++)
{
@@ -1180,7 +1174,7 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl
LLGLDisable test(GL_ALPHA_TEST);
LLViewerImage::unbindTexture(0, GL_TEXTURE_2D);
- glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
+ gGL.setColorMask(false, false);
LLGLDepthTest depth(GL_TRUE, GL_FALSE);
for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->getRegionList().begin();
@@ -1238,7 +1232,7 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl
sCull->pushDrawable(gSky.mVOGroundp->mDrawable);
}
- glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
+ gGL.setColorMask(true, false);
glPopMatrix();
if (to_texture)
@@ -1315,11 +1309,11 @@ void LLPipeline::doOcclusion(LLCamera& camera)
LLVertexBuffer::unbind();
if (hasRenderDebugMask(LLPipeline::RENDER_DEBUG_OCCLUSION))
{
- glColorMask(GL_TRUE, GL_FALSE, GL_FALSE, GL_FALSE);
+ gGL.setColorMask(true, false, false, false);
}
else
{
- glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
+ gGL.setColorMask(false, false);
}
LLGLDisable blend(GL_BLEND);
LLGLDisable test(GL_ALPHA_TEST);
@@ -1336,7 +1330,7 @@ void LLPipeline::doOcclusion(LLCamera& camera)
}
}
- glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
+ gGL.setColorMask(true, false);
glFlush();
}
@@ -1550,10 +1544,8 @@ void LLPipeline::shiftObjects(const LLVector3 &offset)
assertInitialized();
- //do a swap to indicate an invalid previous frame camera
- render_ui_and_swap_if_needed();
glClear(GL_DEPTH_BUFFER_BIT);
- gDisplaySwapBuffers = FALSE;
+ gDepthDirty = FALSE;
for (LLDrawable::drawable_vector_t::iterator iter = mShiftList.begin();
iter != mShiftList.end(); iter++)
@@ -1978,7 +1970,10 @@ void LLPipeline::postSort(LLCamera& camera)
}
}
- //build render map
+ //rebuild groups
+ sCull->assertDrawMapsEmpty();
+
+ LLSpatialGroup::sNoDelete = FALSE;
for (LLCullResult::sg_list_t::iterator i = sCull->beginVisibleGroups(); i != sCull->endVisibleGroups(); ++i)
{
LLSpatialGroup* group = *i;
@@ -1989,6 +1984,18 @@ void LLPipeline::postSort(LLCamera& camera)
}
group->rebuildGeom();
+ }
+ LLSpatialGroup::sNoDelete = TRUE;
+
+ //build render map
+ for (LLCullResult::sg_list_t::iterator i = sCull->beginVisibleGroups(); i != sCull->endVisibleGroups(); ++i)
+ {
+ LLSpatialGroup* group = *i;
+ if (sUseOcclusion &&
+ group->isState(LLSpatialGroup::OCCLUDED))
+ {
+ continue;
+ }
for (LLSpatialGroup::draw_map_t::iterator j = group->mDrawMap.begin(); j != group->mDrawMap.end(); ++j)
{
@@ -2117,6 +2124,8 @@ void LLPipeline::postSort(LLCamera& camera)
} func;
LLSelectMgr::getInstance()->getSelection()->applyToTEs(&func);
}
+
+ LLSpatialGroup::sNoDelete = FALSE;
}
@@ -2507,7 +2516,7 @@ void LLPipeline::renderDebug()
gGLLastMatrix = NULL;
glLoadMatrixd(gGLModelView);
- glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
+ gGL.setColorMask(true, false);
// Debug stuff.
for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->getRegionList().begin();
@@ -2578,7 +2587,7 @@ void LLPipeline::renderForSelect(std::set<LLViewerObject*>& objects)
{
assertInitialized();
- glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
+ gGL.setColorMask(true, false);
gPipeline.resetDrawOrders();
for (std::set<LLViewerObject*>::iterator iter = objects.begin(); iter != objects.end(); ++iter)
@@ -2629,25 +2638,15 @@ void LLPipeline::renderForSelect(std::set<LLViewerObject*>& objects)
LLGLEnable alpha_test(GL_ALPHA_TEST);
if (gPickTransparent)
{
- glAlphaFunc(GL_GEQUAL, 0.0f);
+ gGL.setAlphaRejectSettings(LLRender::CF_GREATER_EQUAL, 0.f);
}
else
{
- glAlphaFunc(GL_GREATER, 0.2f);
+ gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.2f);
}
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PRIMARY_COLOR);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
-
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB, GL_PRIMARY_COLOR_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_ARB, GL_SRC_ALPHA);
+ gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_VERT_COLOR);
+ gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA);
U32 prim_mask = LLVertexBuffer::MAP_VERTEX |
LLVertexBuffer::MAP_TEXCOORD;
@@ -2748,11 +2747,11 @@ void LLPipeline::renderForSelect(std::set<LLViewerObject*>& objects)
glViewport(gGLViewport[0], gGLViewport[1], gGLViewport[2], gGLViewport[3]);
}
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
LLVertexBuffer::unbind();
- glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+ gGL.setColorMask(true, true);
}
void LLPipeline::renderFaceForUVSelect(LLFace* facep)
@@ -4127,10 +4126,7 @@ void LLPipeline::generateReflectionMap(LLCubeMap* cube_map, LLCamera& cube_cam)
glGetTexLevelParameteriv(GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB, 0, GL_TEXTURE_WIDTH, &width);
if (width != res)
{
- glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ cube_map->setReflection();
for (U32 i = 0; i < 6; i++)
{
@@ -4211,9 +4207,9 @@ void LLPipeline::generateReflectionMap(LLCubeMap* cube_map, LLCamera& cube_cam)
gPipeline.stateSort(cube_cam, result);
glClearColor(0,0,0,0);
- glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE);
+ gGL.setColorMask(true, true);
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
- glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_FALSE);
+ gGL.setColorMask(true, false);
stop_glerror();
gPipeline.renderGeom(cube_cam);
}
@@ -4329,7 +4325,7 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out)
U32 res = (U32) gSavedSettings.getS32("RenderReflectionRes");
enableLightsFullbright(LLColor4::white);
LLGLDepthTest depth(GL_FALSE);
- glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+ gGL.setColorMask(true, true);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
@@ -4343,10 +4339,7 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out)
glGetTexLevelParameteriv(GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB, 0, GL_TEXTURE_WIDTH, &width);
if (width != res)
{
- glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ cube_out->setReflection();
for (U32 i = 0; i < 6; i++)
{
@@ -4373,7 +4366,7 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out)
stop_glerror();
glViewport(0,0,res, res);
- gGL.blendFunc(GL_ONE, GL_ONE);
+ gGL.setSceneBlendType(LLRender::BT_ADD);
cube_in->enableTexture(0);
//3-axis blur
for (U32 j = 0; j < 3; j++)
@@ -4403,7 +4396,7 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out)
gl_cube_face[i],
j < 2 ? mBlurCubeTexture[j] : cube_out->getGLName(), 0);
validate_framebuffer_object();
- glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE);
+ gGL.setColorMask(true, true);
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
apply_cube_face_rotation(i);
@@ -4423,7 +4416,7 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out)
glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, 0);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
- glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_FALSE);
+ gGL.setColorMask(true, false);
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
@@ -4431,7 +4424,7 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out)
cube_in->disableTexture();
gViewerWindow->setupViewport();
- gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ gGL.setSceneBlendType(LLRender::BT_ALPHA);
LLGLState::checkStates();
LLGLState::checkTextureChannels();
@@ -4472,7 +4465,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
tc2 /= (F32) res_mod;
}
- glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+ gGL.setColorMask(true, true);
LLFastTimer ftm(LLFastTimer::FTM_RENDER_BLOOM);
gGL.color4f(1,1,1,1);
@@ -4491,7 +4484,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
LLGLDisable test(GL_ALPHA_TEST);
- glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+ gGL.setColorMask(true, true);
glClearColor(0,0,0,0);
if (for_snapshot)
@@ -4503,7 +4496,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
//glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
//LLGLDisable blend(GL_BLEND);
LLGLEnable blend(GL_BLEND);
- gGL.blendFunc(GL_ONE, GL_ONE);
+ gGL.setSceneBlendType(LLRender::BT_ADD);
tc2.setVec(1,1);
gGL.begin(LLVertexBuffer::TRIANGLE_STRIP);
gGL.color4f(1,1,1,1);
@@ -4521,7 +4514,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
gGL.end();
gGL.flush();
- gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ gGL.setSceneBlendType(LLRender::BT_ALPHA);
}
gGL.flush();
@@ -4553,8 +4546,8 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
gGlowExtractProgram.uniform1f("warmthAmount", warmthAmount);
LLGLEnable blend_on(GL_BLEND);
LLGLEnable test(GL_ALPHA_TEST);
- glAlphaFunc(GL_GREATER, 0.f);
- gGL.blendFunc(GL_SRC_ALPHA, GL_ONE);
+ gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
+ gGL.setSceneBlendType(LLRender::BT_ADD_WITH_ALPHA);
LLViewerImage::unbindTexture(0, GL_TEXTURE_2D);
glDisable(GL_TEXTURE_2D);
@@ -4764,24 +4757,16 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
LLGLDisable blend(GL_BLEND);
//tex unit 0
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
+ gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_COLOR);
mGlow[1].bindTexture();
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_FLOAT, 0, uv0);
- glActiveTextureARB(GL_TEXTURE1_ARB);
+ gGL.getTexUnit(1)->activate();
glEnable(GL_TEXTURE_RECTANGLE_ARB);
//tex unit 1
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_ADD);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
+ gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_ADD, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_PREV_COLOR);
glClientActiveTextureARB(GL_TEXTURE1_ARB);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
@@ -4796,14 +4781,14 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
glDisable(GL_TEXTURE_RECTANGLE_ARB);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ gGL.getTexUnit(1)->setTextureBlendType(LLTexUnit::TB_MULT);
glClientActiveTextureARB(GL_TEXTURE0_ARB);
- glActiveTextureARB(GL_TEXTURE0_ARB);
+ gGL.getTexUnit(0)->activate();
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
}
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ gGL.setSceneBlendType(LLRender::BT_ALPHA);
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
@@ -4891,11 +4876,11 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
{ //generate planar reflection map
LLViewerImage::unbindTexture(0, GL_TEXTURE_2D);
glClearColor(0,0,0,0);
- glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE);
+ gGL.setColorMask(true, true);
mWaterRef.bindTarget();
mWaterRef.getViewport(gGLViewport);
mWaterRef.clear();
- glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_FALSE);
+ gGL.setColorMask(true, false);
stop_glerror();
@@ -4997,11 +4982,11 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
LLViewerImage::unbindTexture(0, GL_TEXTURE_2D);
LLColor4& col = LLDrawPoolWater::sWaterFogColor;
glClearColor(col.mV[0], col.mV[1], col.mV[2], 0.f);
- glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE);
+ gGL.setColorMask(true, true);
mWaterDis.bindTarget();
mWaterDis.getViewport(gGLViewport);
mWaterDis.clear();
- glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_FALSE);
+ gGL.setColorMask(true, false);
if (!LLPipeline::sUnderWaterRender || LLDrawPoolWater::sNeedsReflectionUpdate)
{
@@ -5176,7 +5161,7 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
glh_set_current_modelview(mat);
glClearColor(0.0f,0.0f,0.0f,0.0f);
- glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+ gGL.setColorMask(true, true);
glStencilMask(0xFFFFFFFF);
glClearStencil(0);
@@ -5223,14 +5208,14 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
if (muted)
{
- glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+ gGL.setColorMask(true, true);
}
else
{
- glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE);
+ gGL.setColorMask(false, true);
}
- gGL.blendFunc(GL_ONE, GL_ONE);
+ gGL.setSceneBlendType(LLRender::BT_ADD);
LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
LLGLDepthTest depth(GL_FALSE, GL_FALSE);
@@ -5246,7 +5231,7 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
gGL.flush();
- gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ gGL.setSceneBlendType(LLRender::BT_ALPHA);
}