summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/contributions.txt3
-rw-r--r--indra/llcommon/llversionviewer.h2
-rw-r--r--indra/llrender/llrendertarget.cpp15
-rw-r--r--indra/llwindow/llwindowwin32.cpp3
-rw-r--r--indra/newview/app_settings/settings.xml35
-rwxr-xr-x[-rw-r--r--]indra/newview/linux_tools/handle_secondlifeprotocol.sh0
-rwxr-xr-x[-rw-r--r--]indra/newview/linux_tools/register_secondlifeprotocol.sh0
-rw-r--r--indra/newview/llappviewer.cpp122
-rw-r--r--indra/newview/llappviewer.h16
-rw-r--r--indra/newview/llfloatercolorpicker.cpp7
-rw-r--r--indra/newview/llhudeffectlookat.cpp29
-rw-r--r--indra/newview/llhudeffectlookat.h2
-rw-r--r--indra/newview/llhudeffectpointat.cpp21
-rw-r--r--indra/newview/llhudeffectpointat.h2
-rw-r--r--indra/newview/llprogressview.cpp75
-rw-r--r--indra/newview/llstartup.cpp9
-rw-r--r--indra/newview/llviewerkeyboard.cpp4
-rw-r--r--indra/newview/llviewermenu.cpp1
-rw-r--r--indra/newview/llviewerwindow.cpp25
-rw-r--r--indra/newview/llvovolume.cpp26
20 files changed, 259 insertions, 138 deletions
diff --git a/doc/contributions.txt b/doc/contributions.txt
index 31c1e2cc6e..f6dfb063a9 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -45,6 +45,7 @@ Alissa Sabre
VWR-6384
VWR-6385
VWR-5929
+ VWR-6430
Angus Boyd
VWR-592
Argent Stonecutter
@@ -332,6 +333,8 @@ Strife Onizuka
VWR-183
VWR-2265
VWR-4111
+Teardrops Fall
+ VWR-5366
tenebrous pau
VWR-247
TBBle Kurosawa
diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h
index c586acc7d9..a1fd0ff509 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 = 0;
+const S32 LL_VERSION_PATCH = 2;
const S32 LL_VERSION_BUILD = 0;
const char * const LL_CHANNEL = "Second Life Release";
diff --git a/indra/llrender/llrendertarget.cpp b/indra/llrender/llrendertarget.cpp
index 593a5a18e5..cbadb029ac 100644
--- a/indra/llrender/llrendertarget.cpp
+++ b/indra/llrender/llrendertarget.cpp
@@ -80,15 +80,16 @@ void LLRenderTarget::allocate(U32 resx, U32 resy, U32 color_fmt, BOOL depth, U32
stop_glerror();
- if (depth)
+ if ((sUseFBO || use_fbo) && gGLManager.mHasFramebufferObject)
{
- stop_glerror();
- allocateDepth();
- stop_glerror();
- }
- if ((sUseFBO && use_fbo) && gGLManager.mHasFramebufferObject)
- {
+ if (depth)
+ {
+ stop_glerror();
+ allocateDepth();
+ stop_glerror();
+ }
+
glGenFramebuffersEXT(1, (GLuint *) &mFBO);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, mFBO);
diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp
index 0a40fb8a95..e6e999bac4 100644
--- a/indra/llwindow/llwindowwin32.cpp
+++ b/indra/llwindow/llwindowwin32.cpp
@@ -1277,7 +1277,8 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO
<< " Depth Bits " << S32(pfd.cDepthBits)
<< llendl;
- if (pfd.cColorBits < 32)
+ // make sure we have 32 bits per pixel
+ if (pfd.cColorBits < 32 || GetDeviceCaps(mhDC, BITSPIXEL) < 32)
{
close();
OSMessageBox(
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index f6bedc3339..41566d68d0 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -76,6 +76,17 @@
<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>
<key>AnimateTextures</key>
<map>
<key>Comment</key>
@@ -938,7 +949,7 @@
<key>Comment</key>
<string>Disable Voice.</string>
<key>Persist</key>
- <integer>1</integer>
+ <integer>0</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
@@ -4768,6 +4779,17 @@
<key>Value</key>
<real>0</real>
</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>
<key>PermissionsCautionEnabled</key>
<map>
<key>Comment</key>
@@ -8832,17 +8854,6 @@
<key>Value</key>
<map />
</map>
- <key>UserSettingsFile</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>
<key>UseStartScreen</key>
<map>
<key>Comment</key>
diff --git a/indra/newview/linux_tools/handle_secondlifeprotocol.sh b/indra/newview/linux_tools/handle_secondlifeprotocol.sh
index 7ff86d1b93..7ff86d1b93 100644..100755
--- a/indra/newview/linux_tools/handle_secondlifeprotocol.sh
+++ b/indra/newview/linux_tools/handle_secondlifeprotocol.sh
diff --git a/indra/newview/linux_tools/register_secondlifeprotocol.sh b/indra/newview/linux_tools/register_secondlifeprotocol.sh
index 4ab96f97d6..4ab96f97d6 100644..100755
--- a/indra/newview/linux_tools/register_secondlifeprotocol.sh
+++ b/indra/newview/linux_tools/register_secondlifeprotocol.sh
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 69c71224a9..8c62969bec 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -235,10 +235,10 @@ LLString gDisabledMessage; // Set in LLAppViewer::initConfiguration used in idle
BOOL gHideLinks = FALSE; // Set in LLAppViewer::initConfiguration, used externally
BOOL gAllowIdleAFK = TRUE;
+BOOL gAllowTapTapHoldRun = TRUE;
BOOL gShowObjectUpdates = FALSE;
BOOL gUseQuickTime = TRUE;
-const char* DEFAULT_SETTINGS_FILE = "settings.xml";
BOOL gAcceptTOS = FALSE;
BOOL gAcceptCriticalMessage = FALSE;
@@ -404,6 +404,7 @@ static void settings_to_globals()
gDebugWindowProc = gSavedSettings.getBOOL("DebugWindowProc");
gAllowIdleAFK = gSavedSettings.getBOOL("AllowIdleAFK");
+ gAllowTapTapHoldRun = gSavedSettings.getBOOL("AllowTapTapHoldRun");
gShowObjectUpdates = gSavedSettings.getBOOL("ShowObjectUpdates");
gMapScale = gSavedSettings.getF32("MapScale");
gMiniMapScale = gSavedSettings.getF32("MiniMapScale");
@@ -559,6 +560,10 @@ bool send_url_to_other_instance(const std::string& url)
// The single viewer app.
LLAppViewer* LLAppViewer::sInstance = NULL;
+const std::string LLAppViewer::sGlobalSettingsName = "Global";
+const std::string LLAppViewer::sPerAccountSettingsName = "PerAccount";
+const std::string LLAppViewer::sCrashSettingsName = "CrashSettings";
+
LLTextureCache* LLAppViewer::sTextureCache = NULL;
LLWorkerThread* LLAppViewer::sImageDecodeThread = NULL;
LLTextureFetch* LLAppViewer::sTextureFetch = NULL;
@@ -1266,9 +1271,9 @@ bool LLAppViewer::cleanup()
// save their rects on delete.
gSavedSettings.saveToFile(gSavedSettings.getString("ClientSettingsFile"), TRUE);
- // UserSettingsFile should be empty if no use has been logged on.
+ // PerAccountSettingsFile should be empty if no use has been logged on.
// *FIX:Mani This should get really saved in a "logoff" mode.
- gSavedPerAccountSettings.saveToFile(gSavedSettings.getString("UserSettingsFile"), TRUE);
+ gSavedPerAccountSettings.saveToFile(gSavedSettings.getString("PerAccountSettingsFile"), TRUE);
llinfos << "Saved settings" << llendflush;
std::string crash_settings_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE);
@@ -1443,13 +1448,31 @@ void LLAppViewer::loadSettingsFromDirectory(ELLPath path_index)
{
LLString settings_name = (*itr).first;
LLString settings_file = mSettingsFileList[settings_name].asString();
+
LLString full_settings_path = gDirUtilp->getExpandedFilename(path_index, settings_file);
+
+ if(settings_name == sGlobalSettingsName)
+ {
+ // The non-persistent setting, ClientSettingsFile, specifies a
+ // custom name to use for the global settings file.
+ std::string custom_path;
+ if(gSettings[sGlobalSettingsName]->controlExists("ClientSettingsFile"))
+ {
+ custom_path =
+ gSettings[sGlobalSettingsName]->getString("ClientSettingsFile");
+ }
+ if(!custom_path.empty())
+ {
+ full_settings_path = custom_path;
+ }
+ }
+
if(gSettings.find(settings_name) == gSettings.end())
{
llwarns << "Cannot load " << settings_file << " - No matching settings group for name " << settings_name << llendl;
continue;
}
- if(!gSettings[settings_name]->loadFromFile(gDirUtilp->getExpandedFilename(path_index, settings_file)))
+ if(!gSettings[settings_name]->loadFromFile(full_settings_path))
{
llwarns << "Cannot load " << full_settings_path << " - No settings found." << llendl;
}
@@ -1460,12 +1483,21 @@ void LLAppViewer::loadSettingsFromDirectory(ELLPath path_index)
}
}
+std::string LLAppViewer::getSettingsFileName(const std::string& file)
+{
+ if(mSettingsFileList.has(file))
+ {
+ return mSettingsFileList[file].asString();
+ }
+ return std::string();
+}
+
bool LLAppViewer::initConfiguration()
{
//Set up internal pointers
- gSettings["Global"] = &gSavedSettings;
- gSettings["PerAccount"] = &gSavedPerAccountSettings;
- gSettings["CrashSettings"] = &gCrashSettings;
+ gSettings[sGlobalSettingsName] = &gSavedSettings;
+ gSettings[sPerAccountSettingsName] = &gSavedPerAccountSettings;
+ gSettings[sCrashSettingsName] = &gCrashSettings;
//Load settings files list
std::string settings_file_list = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "settings_files.xml");
@@ -1478,15 +1510,22 @@ bool LLAppViewer::initConfiguration()
mSettingsFileList = settings_control.getLLSD("Files");
- //Order of loading
- // - App Settings (Defaults)
- // - user_settings (Client Overrides)
- // - user directory (user specific overrides, happens in llstartup)
+ // The settings and command line parsing have a fragile
+ // order-of-operation:
+ // - load defaults from app_settings
+ // - set procedural settings values
+ // - read command line settings
+ // - selectively apply settings needed to load user settings.
+ // - load overrides from user_settings
+ // - apply command line settings (to override the overrides)
+ // - load per account settings (happens in llstartup
+
+ // - load defaults
loadSettingsFromDirectory(LL_PATH_APP_SETTINGS);
- //Fix settings that require compiled information
+ // - set procedural settings
gSavedSettings.setString("ClientSettingsFile",
- gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, DEFAULT_SETTINGS_FILE));
+ gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, getSettingsFileName("Global")));
gSavedSettings.setString("VersionChannelName", LL_CHANNEL);
@@ -1544,9 +1583,6 @@ bool LLAppViewer::initConfiguration()
// Do this *before* loading the settings file
LLAlertDialog::parseAlerts("alerts.xml", &gSavedSettings, TRUE);
- // Overwrite default user settings with user settings
- loadSettingsFromDirectory(LL_PATH_USER_SETTINGS);
-
#if LL_DYNAMIC_FONT_DISCOVERY
// Linux does *dynamic* font discovery which is preferable to
// whatever got written-out into the config file last time. This
@@ -1556,7 +1592,7 @@ bool LLAppViewer::initConfiguration()
LLWindow::getFontListSans());
#endif
- // Parse command line settings.
+ // - read command line settings.
LLControlGroupCLP clp;
std::string cmd_line_config = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,
"cmd_line.xml");
@@ -1582,36 +1618,35 @@ bool LLAppViewer::initConfiguration()
return false;
}
+
+ // - selectively apply settings
// If we have specified crash on startup, might as well do it now.
if(clp.hasOption("crashonstartup"))
{
LLAppViewer::instance()->forceErrorLLError();
}
-
+
// If the user has specified a alternate settings file name.
- // Load it now.
+ // Load it now before loading the user_settings/settings.xml
if(clp.hasOption("settings"))
{
- std::string user_settings_filename = clp.getOption("settings")[0];
- std::string full_settings_path = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS,
- user_settings_filename);
-
- llinfos << "Loading command line specified settings file: " << full_settings_path << llendl;
-
- if(!gSavedSettings.loadFromFile(full_settings_path))
- {
- llwarns << "File not found: " << full_settings_path << llendl;
- }
-
- gSavedSettings.setString("ClientSettingsFile", full_settings_path);
+ std::string user_settings_filename =
+ gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS,
+ clp.getOption("settings")[0]);
+ gSavedSettings.setString("ClientSettingsFile", user_settings_filename);
+ llinfos << "Using command line specified settings filename: "
+ << user_settings_filename << llendl;
}
- // Apply the command line params to the settings system.
- // Anyway the following call to notify depends upon the settings being init'd.
+ // - load overrides from user_settings
+ loadSettingsFromDirectory(LL_PATH_USER_SETTINGS);
+
+ // - apply command line settings
clp.notify();
- // Start up the debugging console before handling other options.
+ // Handle initialization from settings.
+ // Start up the debugging console before handling other options.
if (gSavedSettings.getBOOL("ShowConsoleWindow"))
{
initConsole();
@@ -1647,7 +1682,7 @@ bool LLAppViewer::initConfiguration()
// {
// const std::string& name = *itr;
// const std::string& value = *(++itr);
- // LLControlVariable* c = gSettings["global"]->getControl(name);
+ // LLControlVariable* c = gSettings[sGlobalSettingsName]->getControl(name);
// if(c)
// {
// c->setDefault(value);
@@ -1675,7 +1710,7 @@ bool LLAppViewer::initConfiguration()
{
const std::string& name = *itr;
const std::string& value = *(++itr);
- LLControlVariable* c = gSettings["Global"]->getControl(name);
+ LLControlVariable* c = gSettings[sGlobalSettingsName]->getControl(name);
if(c)
{
c->setValue(value, false);
@@ -1866,7 +1901,6 @@ bool LLAppViewer::initConfiguration()
// Check for another instance of the app running
//
-
mSecondInstance = anotherInstanceRunning();
if (mSecondInstance)
@@ -1966,15 +2000,14 @@ bool LLAppViewer::initConfiguration()
if (mSecondInstance)
{
- gSavedSettings.setBOOL("CmdLineDisableVoice", TRUE);
- /* Don't start another instance if using -multiple
- //RN: if we received a URL, hand it off to the existing instance
- if (LLURLSimString::parse())
+ // This is the second instance of SL. Turn off voice support,
+ // but make sure the setting is *not* persisted.
+ LLControlVariable* disable_voice = gSavedSettings.getControl("CmdLineDisableVoice");
+ if(disable_voice)
{
- LLURLSimString::send_to_other_instance();
- return 1;
+ const BOOL DO_NOT_PERSIST = FALSE;
+ disable_voice->setValue(LLSD(TRUE), DO_NOT_PERSIST);
}
- */
}
initMarkerFile();
@@ -2084,6 +2117,7 @@ void LLAppViewer::cleanupSavedSettings()
gSavedSettings.setBOOL("DebugWindowProc", gDebugWindowProc);
gSavedSettings.setBOOL("AllowIdleAFK", gAllowIdleAFK);
+ gSavedSettings.setBOOL("AllowTapTapHoldRun", gAllowTapTapHoldRun);
gSavedSettings.setBOOL("ShowObjectUpdates", gShowObjectUpdates);
if (!gNoRender)
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h
index 2d050c3d94..56dd0efbdd 100644
--- a/indra/newview/llappviewer.h
+++ b/indra/newview/llappviewer.h
@@ -124,7 +124,20 @@ public:
virtual void forceErrorInifiniteLoop();
virtual void forceErrorSoftwareException();
+ // *NOTE: There are currently 3 settings files:
+ // "Global", "PerAccount" and "CrashSettings"
+ // The list is found in app_settings/settings_files.xml
+ // but since they are used explicitly in code,
+ // the follow consts should also do the trick.
+ static const std::string sGlobalSettingsName;
+ static const std::string sPerAccountSettingsName;
+ static const std::string sCrashSettingsName;
+
void loadSettingsFromDirectory(ELLPath path_index);
+
+ std::string getSettingsFileName(const std::string& file);
+
+
protected:
virtual bool initWindow(); // Initialize the viewer's window.
virtual bool initLogging(); // Initialize log files, logging system, return false on failure.
@@ -210,10 +223,9 @@ extern BOOL gHideLinks; // used by llpanellogin, lllfloaterbuycurrency, llstartu
extern LLSD gDebugInfo;
extern BOOL gAllowIdleAFK;
+extern BOOL gAllowTapTapHoldRun;
extern BOOL gShowObjectUpdates;
-extern const char* DEFAULT_SETTINGS_FILE; // llstartup
-
extern BOOL gAcceptTOS;
extern BOOL gAcceptCriticalMessage;
diff --git a/indra/newview/llfloatercolorpicker.cpp b/indra/newview/llfloatercolorpicker.cpp
index c805eea6ae..751de2be20 100644
--- a/indra/newview/llfloatercolorpicker.cpp
+++ b/indra/newview/llfloatercolorpicker.cpp
@@ -902,9 +902,7 @@ BOOL
LLFloaterColorPicker::
handleMouseDown ( S32 x, S32 y, MASK mask )
{
- BOOL ret = LLFloater::handleMouseDown ( x, y, mask );
-
- // make it the frontmost
+ // make it the frontmost
gFloaterView->bringToFront(this);
// rect containing RGB area
@@ -998,7 +996,8 @@ handleMouseDown ( S32 x, S32 y, MASK mask )
}
// dispatch to base class for the rest of things
- return ret;
+
+ return LLFloater::handleMouseDown ( x, y, mask );
}
//////////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llhudeffectlookat.cpp b/indra/newview/llhudeffectlookat.cpp
index 613f310b08..046eac73fe 100644
--- a/indra/newview/llhudeffectlookat.cpp
+++ b/indra/newview/llhudeffectlookat.cpp
@@ -400,7 +400,11 @@ BOOL LLHUDEffectLookAt::setLookAt(ELookAtType target_type, LLViewerObject *objec
return FALSE;
}
- llassert(target_type < LOOKAT_NUM_TARGETS);
+ if (target_type >= LOOKAT_NUM_TARGETS)
+ {
+ llwarns << "Bad target_type " << (int)target_type << " - ignoring." << llendl;
+ return FALSE;
+ }
// must be same or higher priority than existing effect
if ((*mAttentions)[target_type].mPriority < (*mAttentions)[mTargetType].mPriority)
@@ -557,12 +561,13 @@ void LLHUDEffectLookAt::update()
if (mTargetType != LOOKAT_TARGET_NONE)
{
- calcTargetPosition();
-
- LLMotion* head_motion = ((LLVOAvatar*)(LLViewerObject*)mSourceObject)->findMotion(ANIM_AGENT_HEAD_ROT);
- if (!head_motion || head_motion->isStopped())
+ if (calcTargetPosition())
{
- ((LLVOAvatar*)(LLViewerObject*)mSourceObject)->startMotion(ANIM_AGENT_HEAD_ROT);
+ LLMotion* head_motion = ((LLVOAvatar*)(LLViewerObject*)mSourceObject)->findMotion(ANIM_AGENT_HEAD_ROT);
+ if (!head_motion || head_motion->isStopped())
+ {
+ ((LLVOAvatar*)(LLViewerObject*)mSourceObject)->startMotion(ANIM_AGENT_HEAD_ROT);
+ }
}
}
@@ -579,12 +584,14 @@ void LLHUDEffectLookAt::update()
*
* Has the side-effect of also calling setAnimationData("LookAtPoint") with the new
* mTargetPos on the source object which is assumed to be an avatar.
+ *
+ * Returns whether we successfully calculated a finite target position.
*/
-void LLHUDEffectLookAt::calcTargetPosition()
+bool LLHUDEffectLookAt::calcTargetPosition()
{
if (gNoRender)
{
- return;
+ return false;
}
LLViewerObject *target_obj = (LLViewerObject *)mTargetObject;
@@ -659,5 +666,11 @@ void LLHUDEffectLookAt::calcTargetPosition()
}
mTargetPos -= source_avatar->mHeadp->getWorldPosition();
+
+ if (!mTargetPos.isFinite())
+ return false;
+
source_avatar->setAnimationData("LookAtPoint", (void *)&mTargetPos);
+
+ return true;
}
diff --git a/indra/newview/llhudeffectlookat.h b/indra/newview/llhudeffectlookat.h
index ef3691d8d7..c1a123f55c 100644
--- a/indra/newview/llhudeffectlookat.h
+++ b/indra/newview/llhudeffectlookat.h
@@ -68,7 +68,7 @@ public:
ELookAtType getLookAtType() { return mTargetType; }
const LLVector3& getTargetPos() { return mTargetPos; }
const LLVector3d& getTargetOffset() { return mTargetOffsetGlobal; }
- void calcTargetPosition();
+ bool calcTargetPosition();
protected:
LLHUDEffectLookAt(const U8 type);
diff --git a/indra/newview/llhudeffectpointat.cpp b/indra/newview/llhudeffectpointat.cpp
index 2679ed5fbb..4c352bab72 100644
--- a/indra/newview/llhudeffectpointat.cpp
+++ b/indra/newview/llhudeffectpointat.cpp
@@ -232,7 +232,11 @@ BOOL LLHUDEffectPointAt::setPointAt(EPointAtType target_type, LLViewerObject *ob
return FALSE;
}
- llassert(target_type < POINTAT_NUM_TARGETS);
+ if (target_type >= POINTAT_NUM_TARGETS)
+ {
+ llwarns << "Bad target_type " << (int)target_type << " - ignoring." << llendl;
+ return FALSE;
+ }
// must be same or higher priority than existing effect
if (POINTAT_PRIORITIES[target_type] < POINTAT_PRIORITIES[mTargetType])
@@ -379,17 +383,19 @@ void LLHUDEffectPointAt::update()
}
else
{
- calcTargetPosition();
-
- ((LLVOAvatar*)(LLViewerObject*)mSourceObject)->startMotion(ANIM_AGENT_EDITING);
+ if (calcTargetPosition())
+ {
+ ((LLVOAvatar*)(LLViewerObject*)mSourceObject)->startMotion(ANIM_AGENT_EDITING);
+ }
}
}
}
//-----------------------------------------------------------------------------
// calcTargetPosition()
+// returns whether we successfully calculated a finite target position.
//-----------------------------------------------------------------------------
-void LLHUDEffectPointAt::calcTargetPosition()
+bool LLHUDEffectPointAt::calcTargetPosition()
{
LLViewerObject *targetObject = (LLViewerObject *)mTargetObject;
LLVector3 local_offset;
@@ -435,10 +441,15 @@ void LLHUDEffectPointAt::calcTargetPosition()
mTargetPos -= mSourceObject->getRenderPosition();
+ if (!mTargetPos.isFinite())
+ return false;
+
if (mSourceObject->isAvatar())
{
((LLVOAvatar*)(LLViewerObject*)mSourceObject)->setAnimationData("PointAtPoint", (void *)&mTargetPos);
}
+
+ return true;
}
const LLVector3d LLHUDEffectPointAt::getPointAtPosGlobal()
diff --git a/indra/newview/llhudeffectpointat.h b/indra/newview/llhudeffectpointat.h
index 3d1ded6c7b..ba8835073c 100644
--- a/indra/newview/llhudeffectpointat.h
+++ b/indra/newview/llhudeffectpointat.h
@@ -71,7 +71,7 @@ protected:
// lookat behavior has either target position or target object with offset
void setTargetObjectAndOffset(LLViewerObject *objp, LLVector3d offset);
void setTargetPosGlobal(const LLVector3d &target_pos_global);
- void calcTargetPosition();
+ bool calcTargetPosition();
void update();
public:
static BOOL sDebugPointAt;
diff --git a/indra/newview/llprogressview.cpp b/indra/newview/llprogressview.cpp
index 15795d57cd..d27b587a09 100644
--- a/indra/newview/llprogressview.cpp
+++ b/indra/newview/llprogressview.cpp
@@ -255,10 +255,11 @@ void LLProgressView::draw()
const LLFontGL* font = LLFontGL::sSansSerif;
LLUIImagePtr shadow_imagep = LLUI::getUIImage("rounded_square_soft.tga");
+ LLUIImagePtr bar_fg_imagep = LLUI::getUIImage("progressbar_fill.tga");
+ LLUIImagePtr bar_bg_imagep = LLUI::getUIImage("progressbar_track.tga");
LLUIImagePtr bar_imagep = LLUI::getUIImage("rounded_square.tga");
-
- //LLColor4 background_color = gColors.getColor("DefaultShadowLight");
- LLColor4 background_color = LLColor4(0.3254f, 0.4f, 0.5058f, 1.0f);
+
+ LLColor4 background_color = gColors.getColor("LoginProgressBarBgColor");
F32 alpha = 0.5f + 0.5f*0.5f*(1.f + (F32)sin(3.f*timer.getElapsedTimeF32()));
// background_color.mV[3] = background_color.mV[3]*alpha;
@@ -278,22 +279,22 @@ void LLProgressView::draw()
S32 background_box_width = background_box_right - background_box_left + 1;
S32 background_box_height = background_box_top - background_box_bottom + 1;
- shadow_imagep->draw( background_box_left + 2,
- background_box_bottom - 2,
- background_box_width,
- background_box_height,
- gColors.getColor( "ColorDropShadow" ) );
- bar_imagep->draw( background_box_left,
- background_box_bottom,
- background_box_width,
- background_box_height,
- LLColor4( 0.0f, 0.0f, 0.0f, 0.4f ) );
+// shadow_imagep->draw( background_box_left + 2,
+// background_box_bottom - 2,
+// background_box_width,
+// background_box_height,
+// gColors.getColor( "LoginProgressBoxShadowColor" ) );
+// bar_outline_imagep->draw( background_box_left,
+// background_box_bottom,
+// background_box_width,
+// background_box_height,
+// gColors.getColor("LoginProgressBoxBorderColor") );
bar_imagep->draw( background_box_left + 1,
background_box_bottom + 1,
background_box_width - 2,
background_box_height - 2,
- LLColor4( 0.4f, 0.4f, 0.4f, 0.3f ) );
+ gColors.getColor("LoginProgressBoxCenterColor") );
// we'll need this later for catching a click if it looks like it contains a link
if ( mMessage.find( "http://" ) != std::string::npos )
@@ -304,39 +305,41 @@ void LLProgressView::draw()
// draw loading bar
font->renderUTF8(top_line, 0,
line_x, line_one_y,
- LLColor4::white,
+ //LLColor4::white,
+ gColors.getColor("LoginProgressBoxTextColor"),
LLFontGL::HCENTER, LLFontGL::BASELINE,
LLFontGL::DROP_SHADOW);
font->renderUTF8(mText, 0,
line_x, line_two_y,
- LLColor4::white,
+ //LLColor4::white,
+ gColors.getColor("LoginProgressBoxTextColor"),
LLFontGL::HCENTER, LLFontGL::BASELINE,
LLFontGL::DROP_SHADOW);
-
- shadow_imagep->draw(
- bar_left + 2,
- bar_bottom - 2,
- bar_width,
- bar_height,
- gColors.getColor("ColorDropShadow"));
-
- bar_imagep->draw(
- bar_left,
- bar_bottom,
- bar_width,
- bar_height,
- LLColor4(0.7f, 0.7f, 0.8f, 1.0f));
-
- bar_imagep->draw(
+
+// shadow_imagep->draw(
+// bar_left + 2,
+// bar_bottom - 2,
+// bar_width,
+// bar_height,
+// gColors.getColor("LoginProgressBoxShadowColor"));
+
+// bar_imagep->draw(
+// bar_left,
+// bar_bottom,
+// bar_width,
+// bar_height,
+// LLColor4(0.7f, 0.7f, 0.8f, 1.0f));
+
+ bar_bg_imagep->draw(
bar_left + 2,
bar_bottom + 2,
bar_width - 4,
bar_height - 4,
background_color);
- LLColor4 bar_color = LLColor4(0.5764f, 0.6627f, 0.8352f, 1.0f);
+ LLColor4 bar_color = gColors.getColor("LoginProgressBarFgColor");
bar_color.mV[3] = alpha;
- bar_imagep->draw(
+ bar_fg_imagep->draw(
bar_left + 2,
bar_bottom + 2,
llround((bar_width - 4) * (mPercentDone / 100.f)),
@@ -348,6 +351,7 @@ void LLProgressView::draw()
// draw the message if there is one
if(!mMessage.empty())
{
+ LLColor4 text_message_color = gColors.getColor("LoginProgressBoxTextColor");
LLWString wmessage = utf8str_to_wstring(mMessage);
const F32 MAX_PIXELS = 640.0f;
S32 chars_left = wmessage.length();
@@ -362,7 +366,8 @@ void LLProgressView::draw()
LLWString wbuffer = wmessage.substr(msgidx, chars_this_time);
font->render(wbuffer, 0,
(F32)line_x, (F32)line_three_y,
- LLColor4::white,
+ //LLColor4::white,
+ gColors.getColor("LoginProgressBoxTextColor"),
LLFontGL::HCENTER, LLFontGL::BASELINE,
LLFontGL::DROP_SHADOW);
msgidx += chars_this_time;
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 6cd4d90e5f..139ab8f1aa 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -773,9 +773,12 @@ BOOL idle_startup()
gDirUtilp->setLindenUserDir(firstname.c_str(), lastname.c_str());
LLFile::mkdir(gDirUtilp->getLindenUserDir().c_str());
- // Set UserSettingsFile to the default value.
- gSavedSettings.setString("UserSettingsFile",
- gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, DEFAULT_SETTINGS_FILE));
+ // Set PerAccountSettingsFile to the default value.
+ gSavedSettings.setString("PerAccountSettingsFile",
+ gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT,
+ LLAppViewer::instance()->getSettingsFileName("PerAccount")
+ )
+ );
// Overwrite default user settings with user settings
LLAppViewer::instance()->loadSettingsFromDirectory(LL_PATH_PER_SL_ACCOUNT);
diff --git a/indra/newview/llviewerkeyboard.cpp b/indra/newview/llviewerkeyboard.cpp
index b885e4e6b9..bea4b910b6 100644
--- a/indra/newview/llviewerkeyboard.cpp
+++ b/indra/newview/llviewerkeyboard.cpp
@@ -31,6 +31,7 @@
#include "llviewerprecompiledheaders.h"
+#include "llappviewer.h"
#include "llviewerkeyboard.h"
#include "llmath.h"
#include "llagent.h"
@@ -99,7 +100,8 @@ static void agent_handle_doubletap_run(EKeystate s, LLAgent::EDoubleTapRunMode m
}
gAgent.mDoubleTapRunMode = mode;
}
- else if (KEYSTATE_DOWN == s &&
+ else if (gAllowTapTapHoldRun &&
+ KEYSTATE_DOWN == s &&
gAgent.mDoubleTapRunMode == mode &&
gAgent.mDoubleTapRunTimer.getElapsedTimeF32() < NUDGE_TIME)
{
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 3a09af3fce..cfcd446b55 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -1490,6 +1490,7 @@ void init_debug_avatar_menu(LLMenuGL* menu)
menu->appendMenu(sub_menu);
+ 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));
menu->append(new LLMenuItemToggleGL("Animation Info", &LLVOAvatar::sShowAnimationDebug));
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index c6c751147c..a753032180 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -4419,19 +4419,11 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
F32 scale_factor = 1.0f ;
if(!keep_window_aspect) //image cropping
- {
- //if(snapshot_width > image_width && snapshot_height > image_height) //crop
- //{
- // snapshot_width = image_width ;
- // snapshot_height = image_height ;
- //}
- //else //crop and enlarge
- {
- 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) ;
- }
+ {
+ 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) ;
}
LLRenderTarget target;
@@ -4457,6 +4449,13 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
mWindowRect.set(0, 0, snapshot_width, snapshot_height);
target.bindTarget();
}
+ else //tiling
+ {
+ 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) ;
+ }
}
S32 buffer_x_offset = llfloor(((window_width - snapshot_width) * scale_factor) / 2.f);
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index ce4a660682..e7dbf0bfb8 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -2063,6 +2063,8 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
{
if (group->isState(LLSpatialGroup::MESH_DIRTY))
{
+ S32 num_mapped_veretx_buffer = LLVertexBuffer::sMappedCount ;
+
group->mBuilt = 1.f;
LLFastTimer ftm(LLFastTimer::FTM_REBUILD_VBO);
@@ -2071,6 +2073,12 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
for (LLSpatialGroup::element_iter drawable_iter = group->getData().begin(); drawable_iter != group->getData().end(); ++drawable_iter)
{
LLDrawable* drawablep = *drawable_iter;
+
+ if (drawablep->isDead() || drawablep->isState(LLDrawable::FORCE_INVISIBLE) )
+ {
+ continue;
+ }
+
if (drawablep->isState(LLDrawable::REBUILD_ALL))
{
LLVOVolume* vobj = drawablep->getVOVolume();
@@ -2112,6 +2120,24 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
group->mVertexBuffer->setBuffer(0);
}
+ //if not all buffers are unmapped
+ if(num_mapped_veretx_buffer != LLVertexBuffer::sMappedCount)
+ {
+ llwarns << "Not all mapped vertex buffers are unmapped!" << llendl ;
+ for (LLSpatialGroup::element_iter drawable_iter = group->getData().begin(); drawable_iter != group->getData().end(); ++drawable_iter)
+ {
+ LLDrawable* drawablep = *drawable_iter;
+ for (S32 i = 0; i < drawablep->getNumFaces(); ++i)
+ {
+ LLFace* face = drawablep->getFace(i);
+ if (face && face->mVertexBuffer.notNull() && face->mVertexBuffer->isLocked())
+ {
+ face->mVertexBuffer->setBuffer(0) ;
+ }
+ }
+ }
+ }
+
group->clearState(LLSpatialGroup::MESH_DIRTY);
}