QAR-488 Viewer 1.20 RC 2

merge Branch_1-20-Viewer -r 84760 : 85100 -> release
master
Steven Bennetts 2008-04-23 01:04:01 +00:00
parent c01edec021
commit 3901894708
20 changed files with 257 additions and 136 deletions

View File

@ -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

View File

@ -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";

View File

@ -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);

View File

@ -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(

View File

@ -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>

0
indra/newview/linux_tools/handle_secondlifeprotocol.sh Normal file → Executable file
View File

View File

View File

@ -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)

View File

@ -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;

View File

@ -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 );
}
//////////////////////////////////////////////////////////////////////////////

View File

@ -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;
}

View File

@ -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);

View File

@ -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()

View File

@ -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;

View File

@ -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("LoginProgressBoxShadowColor"));
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(
bar_left,
bar_bottom,
bar_width,
bar_height,
LLColor4(0.7f, 0.7f, 0.8f, 1.0f));
bar_imagep->draw(
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;

View File

@ -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);

View File

@ -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)
{

View File

@ -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));

View File

@ -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);

View File

@ -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);
}