parent
c01edec021
commit
3901894708
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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 );
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue