From 94d4364084329cc6d16af7a126148117ad13555a Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Wed, 16 Oct 2019 22:36:10 +0300 Subject: SL-12103 More reliable memory detection --- indra/newview/llviewertexturelist.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index 06524847d1..561319ca5d 100644 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -1385,8 +1385,6 @@ S32Megabytes LLViewerTextureList::getMaxVideoRamSetting(bool get_recommended, fl { max_texmem = (S32Megabytes)128; } - - LL_WARNS() << "VRAM amount not detected, defaulting to " << max_texmem << " MB" << LL_ENDL; } S32Megabytes system_ram = gSysMemory.getPhysicalMemoryKB(); // In MB @@ -1428,6 +1426,11 @@ void LLViewerTextureList::updateMaxResidentTexMem(S32Megabytes mem) return; //listener will re-enter this function } + if (gGLManager.mVRAM == 0) + { + LL_WARNS() << "VRAM amount not detected, defaulting to " << mem << " MB" << LL_ENDL; + } + // TODO: set available resident texture mem based on use by other subsystems // currently max(12MB, VRAM/4) assumed... -- cgit v1.2.3 From cef34f5861527c83a88d84d8d2e9485a2d42a27c Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Fri, 18 Oct 2019 20:39:27 +0300 Subject: SL-12152 Fix for missing Hair Preview in texture uploading --- indra/newview/llvoavatar.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'indra/newview') diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index e42a7269b4..09eacf66b1 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -4807,6 +4807,15 @@ U32 LLVOAvatar::renderSkinned() BOOL first_pass = TRUE; if (!LLDrawPoolAvatar::sSkipOpaque) { + if (isUIAvatar() && mIsDummy) + { + LLViewerJoint* hair_mesh = getViewerJoint(MESH_ID_HAIR); + if (hair_mesh) + { + num_indices += hair_mesh->render(mAdjustedPixelArea, TRUE, mIsDummy); + } + first_pass = FALSE; + } if (!isSelf() || gAgent.needsRenderHead() || LLPipeline::sShadowRender) { if (isTextureVisible(TEX_HEAD_BAKED) || isUIAvatar()) -- cgit v1.2.3 From 5ee6853d07ed834e90c8c03b2f716ad9c1887484 Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Sun, 20 Oct 2019 22:20:06 +0300 Subject: SL-12152 Minimizing chances of calling 'first use' twice. --- indra/newview/llvoavatar.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 09eacf66b1..ee350594c7 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -4812,7 +4812,7 @@ U32 LLVOAvatar::renderSkinned() LLViewerJoint* hair_mesh = getViewerJoint(MESH_ID_HAIR); if (hair_mesh) { - num_indices += hair_mesh->render(mAdjustedPixelArea, TRUE, mIsDummy); + num_indices += hair_mesh->render(mAdjustedPixelArea, first_pass, mIsDummy); } first_pass = FALSE; } @@ -4823,7 +4823,7 @@ U32 LLVOAvatar::renderSkinned() LLViewerJoint* head_mesh = getViewerJoint(MESH_ID_HEAD); if (head_mesh) { - num_indices += head_mesh->render(mAdjustedPixelArea, TRUE, mIsDummy); + num_indices += head_mesh->render(mAdjustedPixelArea, first_pass, mIsDummy); } first_pass = FALSE; } -- cgit v1.2.3 From f60187d2240a3a09d78dc1e2a016820aa12f88ca Mon Sep 17 00:00:00 2001 From: Mnikolenko Productengine Date: Mon, 21 Oct 2019 19:20:57 +0300 Subject: SL-12161 FIXED Disabling voice while a call is active leaves the Speak button enabled. --- indra/newview/llvoicevivox.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'indra/newview') diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp index e10ba77e16..eb45e22066 100644 --- a/indra/newview/llvoicevivox.cpp +++ b/indra/newview/llvoicevivox.cpp @@ -5144,6 +5144,7 @@ void LLVivoxVoiceClient::setVoiceEnabled(bool enabled) { // Turning voice off looses your current channel -- this makes sure the UI isn't out of sync when you re-enable it. LLVoiceChannel::getCurrentVoiceChannel()->deactivate(); + gAgent.setVoiceConnected(false); status = LLVoiceClientStatusObserver::STATUS_VOICE_DISABLED; } -- cgit v1.2.3 From cc32c70518d39e10ca365e384ade1aa17595d5e3 Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Mon, 21 Oct 2019 21:45:45 +0300 Subject: SL-12164 attempt to close viewer on window init resulted in crash --- indra/newview/llappviewer.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'indra/newview') diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 2a928a47a2..b704bf84a1 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -3991,7 +3991,9 @@ static LLNotificationFunctorRegistration finish_quit_reg("ConfirmQuit", finish_q void LLAppViewer::userQuit() { - if (gDisconnected || gViewerWindow->getProgressView()->getVisible()) + if (gDisconnected + || !gViewerWindow + || (gViewerWindow->getProgressView() && gViewerWindow->getProgressView()->getVisible())) { requestQuit(); } -- cgit v1.2.3 From 7d7b60a9bec597e2a769ab9e798315194bd6294a Mon Sep 17 00:00:00 2001 From: Mnikolenko Productengine Date: Tue, 22 Oct 2019 17:47:44 +0300 Subject: SL-12168 FIXED crash on exit, if resetting camera was performed --- indra/newview/llagentcamera.cpp | 5 +++++ indra/newview/llappviewer.cpp | 5 +++++ indra/newview/llviewerkeyboard.cpp | 5 +++++ 3 files changed, 15 insertions(+) (limited to 'indra/newview') diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index fd8797481d..c9074d1a95 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -282,6 +282,11 @@ LLAgentCamera::~LLAgentCamera() //----------------------------------------------------------------------------- void LLAgentCamera::resetView(BOOL reset_camera, BOOL change_camera) { + if (gDisconnected) + { + return; + } + if (gAgent.getAutoPilot()) { gAgent.stopAutoPilot(TRUE); diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index b704bf84a1..228dd36e53 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -1719,6 +1719,11 @@ bool LLAppViewer::cleanup() disconnectViewer(); LL_INFOS() << "Viewer disconnected" << LL_ENDL; + + if (gKeyboard) + { + gKeyboard->resetKeys(); + } display_cleanup(); diff --git a/indra/newview/llviewerkeyboard.cpp b/indra/newview/llviewerkeyboard.cpp index e930eb20d3..a14041717f 100644 --- a/indra/newview/llviewerkeyboard.cpp +++ b/indra/newview/llviewerkeyboard.cpp @@ -986,6 +986,11 @@ EKeyboardMode LLViewerKeyboard::getMode() // Called from scanKeyboard. void LLViewerKeyboard::scanKey(KEY key, BOOL key_down, BOOL key_up, BOOL key_level) { + if (LLApp::isExiting()) + { + return; + } + S32 mode = getMode(); // Consider keyboard scanning as NOT mouse event. JC MASK mask = gKeyboard->currentMask(FALSE); -- cgit v1.2.3 From 07635d22f567cd0aeb9addf5ac22b02fa1da0e6c Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Tue, 22 Oct 2019 17:17:12 +0300 Subject: SL-12173 Crash on setShape --- indra/newview/llviewerwindow.cpp | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'indra/newview') diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index a7601fc30c..f3de5f03cd 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -1994,6 +1994,11 @@ void LLViewerWindow::initBase() LLPanel* panel_holder = main_view->getChild("toolbar_view_holder"); // Load the toolbar view from file gToolBarView = LLUICtrlFactory::getInstance()->createFromFile("panel_toolbar_view.xml", panel_holder, LLDefaultChildRegistry::instance()); + if (!gToolBarView) + { + LL_ERRS() << "Failed to initialize viewer: Viewer couldn't process file panel_toolbar_view.xml, " + << "if this problem happens again, please validate your installation." << LL_ENDL; + } gToolBarView->setShape(panel_holder->getLocalRect()); // Hide the toolbars for the moment: we'll make them visible after logging in world (see LLViewerWindow::initWorldUI()) gToolBarView->setVisible(FALSE); -- cgit v1.2.3 From 88100d8f62b81f02354663dc542e5b8a2ebb45b4 Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Tue, 22 Oct 2019 19:05:29 +0300 Subject: SL-12169 Crash on setToolBarsVisible() during exit --- indra/newview/llagent.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'indra/newview') diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 31b8b90518..be90e623ad 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -2022,6 +2022,14 @@ U8 LLAgent::getRenderState() //----------------------------------------------------------------------------- void LLAgent::endAnimationUpdateUI() { + if (LLApp::isExiting() + || !gViewerWindow + || !gMenuBarView + || !gToolBarView + || !gStatusBar) + { + return; + } if (gAgentCamera.getCameraMode() == gAgentCamera.getLastCameraMode()) { // We're already done endAnimationUpdateUI for this transition. -- cgit v1.2.3 From 0c568bf79934944b3fc1f31476a0b59340d9c360 Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Wed, 23 Oct 2019 12:22:27 +0300 Subject: SL-12164 crash on userQuit --- indra/newview/llappviewer.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'indra/newview') diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 228dd36e53..c9953566fc 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -3998,7 +3998,8 @@ void LLAppViewer::userQuit() { if (gDisconnected || !gViewerWindow - || (gViewerWindow->getProgressView() && gViewerWindow->getProgressView()->getVisible())) + || !gViewerWindow->getProgressView() + || gViewerWindow->getProgressView()->getVisible()) { requestQuit(); } -- cgit v1.2.3 From 1b4d5492c6f4aef54bc51e34c05b270bded584f5 Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Wed, 23 Oct 2019 16:37:15 +0300 Subject: SL-11727 Fix build warnings --- indra/newview/llappviewer.cpp | 4 ++-- indra/newview/llmeshrepository.cpp | 2 +- indra/newview/llsecapi.cpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index c9953566fc..7539d147ae 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -1136,7 +1136,7 @@ bool LLAppViewer::init() try { initializeSecHandler(); } - catch (LLProtectedDataException ex) + catch (LLProtectedDataException&) { LLNotificationsUtil::add("CorruptedProtectedDataStore"); } @@ -1352,7 +1352,7 @@ bool LLAppViewer::frame() { LOG_UNHANDLED_EXCEPTION(""); } - catch (std::bad_alloc) + catch (std::bad_alloc&) { LLMemory::logMemoryInfo(TRUE); LLFloaterMemLeak* mem_leak_instance = LLFloaterReg::findTypedInstance("mem_leaking"); diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index 95322cce6d..ce41e2bd35 100644 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -1889,7 +1889,7 @@ EMeshProcessingResult LLMeshRepoThread::lodReceived(const LLVolumeParams& mesh_p std::string mesh_string((char*)data, data_size); stream.str(mesh_string); } - catch (std::bad_alloc) + catch (std::bad_alloc&) { // out of memory, we won't be able to process this mesh return MESH_OUT_OF_MEMORY; diff --git a/indra/newview/llsecapi.cpp b/indra/newview/llsecapi.cpp index 72d7cf1e45..10e510b842 100644 --- a/indra/newview/llsecapi.cpp +++ b/indra/newview/llsecapi.cpp @@ -64,7 +64,7 @@ void initializeSecHandler() { handler->init(); } - catch (LLProtectedDataException e) + catch (LLProtectedDataException& e) { exception_msg = e.what(); } -- cgit v1.2.3 From 5591515f193a1ae3ec0dfcee4020636e529af859 Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Wed, 23 Oct 2019 20:27:05 +0300 Subject: MAC build fix --- indra/newview/llappviewer.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'indra/newview') diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 7539d147ae..d3067456fa 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -61,7 +61,9 @@ #include "llallocator.h" #include "llcalc.h" #include "llconversationlog.h" +#if LL_WINDOWS #include "lldxhardware.h" +#endif #include "lltexturestats.h" #include "lltrace.h" #include "lltracethreadrecorder.h" -- cgit v1.2.3 From 43809e1c5cddb4c434f6efcfd16b44ac72e6e707 Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Wed, 23 Oct 2019 22:37:59 +0300 Subject: SL-12180 Crash on requestOfflineMessagesCoro --- indra/newview/llimprocessing.cpp | 2 +- indra/newview/llinventorybridge.cpp | 2 +- indra/newview/llvoavatarself.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llimprocessing.cpp b/indra/newview/llimprocessing.cpp index 0294b17991..fa6f959ed0 100644 --- a/indra/newview/llimprocessing.cpp +++ b/indra/newview/llimprocessing.cpp @@ -1552,7 +1552,7 @@ void LLIMProcessing::requestOfflineMessagesCoro(std::string url) std::vector data; S32 binary_bucket_size = 0; - LLHost sender = gAgent.getRegion()->getHost(); + LLHost sender = gAgent.getRegionHost(); LLSD::array_iterator i = messages.beginArray(); LLSD::array_iterator iEnd = messages.endArray(); diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 36784ce3f9..d460aa1452 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -1797,7 +1797,7 @@ void LLItemBridge::restoreToWorld() msg->nextBlockFast(_PREHASH_InventoryData); itemp->packMessage(msg); - msg->sendReliable(gAgent.getRegion()->getHost()); + msg->sendReliable(gAgent.getRegionHost()); //remove local inventory copy, sim will deal with permissions and removing the item //from the actual inventory if its a no-copy etc diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index dcaade55a6..986ce60ae6 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -1250,7 +1250,7 @@ BOOL LLVOAvatarSelf::detachAttachmentIntoInventory(const LLUUID &item_id) gMessageSystem->nextBlockFast(_PREHASH_ObjectData); gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); gMessageSystem->addUUIDFast(_PREHASH_ItemID, item_id); - gMessageSystem->sendReliable(gAgent.getRegion()->getHost()); + gMessageSystem->sendReliable(gAgent.getRegionHost()); // This object might have been selected, so let the selection manager know it's gone now LLViewerObject *found_obj = gObjectList.findObject(item_id); -- cgit v1.2.3 From 39dc22d1adddb85a8b5edd5a30ad7750e9f19142 Mon Sep 17 00:00:00 2001 From: Mnikolenko Productengine Date: Thu, 24 Oct 2019 18:47:47 +0300 Subject: SL-12185 [mac] crash when typing letters while viewer is loading --- indra/newview/llviewerwindow.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'indra/newview') diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index f3de5f03cd..1e2b2c37d0 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -2884,7 +2884,8 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask) // If "Pressing letter keys starts local chat" option is selected, we are not in mouselook, // no view has keyboard focus, this is a printable character key (and no modifier key is // pressed except shift), then give focus to nearby chat (STORM-560) - if ( gSavedSettings.getS32("LetterKeysFocusChatBar") && !gAgentCamera.cameraMouselook() && + if ( LLStartUp::getStartupState() >= STATE_STARTED && + gSavedSettings.getS32("LetterKeysFocusChatBar") && !gAgentCamera.cameraMouselook() && !keyboard_focus && key < 0x80 && (mask == MASK_NONE || mask == MASK_SHIFT) ) { // Initialize nearby chat if it's missing -- cgit v1.2.3 From 0efd2dbede6419af13fec810db6150b261e8bf74 Mon Sep 17 00:00:00 2001 From: Mnikolenko Productengine Date: Mon, 28 Oct 2019 16:16:44 +0200 Subject: SL-12190 id_to_time_map_t should use F64 --- indra/newview/llrecentpeople.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/newview') diff --git a/indra/newview/llrecentpeople.h b/indra/newview/llrecentpeople.h index 1b4295ddad..18b669ff4f 100644 --- a/indra/newview/llrecentpeople.h +++ b/indra/newview/llrecentpeople.h @@ -53,7 +53,7 @@ class LLRecentPeople: public LLSingleton, public LLOldEvents::LL LLSINGLETON_EMPTY_CTOR(LLRecentPeople); LOG_CLASS(LLRecentPeople); public: - typedef std::map id_to_time_map_t; + typedef std::map id_to_time_map_t; typedef boost::signals2::signal signal_t; /** -- cgit v1.2.3 From 89d1bf39c5722be83924a7bb50409bf53c8a0600 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Wed, 5 Feb 2020 16:16:39 +0200 Subject: SL-4354 Not loaded avatars should stay cloud longer --- indra/newview/llvoavatar.cpp | 95 +++++++++++++++++++++++++++++++++++--------- indra/newview/llvoavatar.h | 4 +- 2 files changed, 79 insertions(+), 20 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index c7b35a9880..7bd0dfcfb3 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -197,6 +197,8 @@ const F32 NAMETAG_VERT_OFFSET_WEIGHT = 0.17f; const U32 LLVOAvatar::VISUAL_COMPLEXITY_UNKNOWN = 0; const F64 HUD_OVERSIZED_TEXTURE_DATA_SIZE = 1024 * 1024; +const F32 MAX_TEXTURE_WAIT_TIME_SEC = 60; + enum ERenderName { RENDER_NAME_NEVER, @@ -663,6 +665,7 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id, mFullyLoadedInitialized(FALSE), mVisualComplexity(VISUAL_COMPLEXITY_UNKNOWN), mLoadedCallbacksPaused(FALSE), + mLoadedCallbackTextures(0), mRenderUnloadedAvatar(LLCachedControl(gSavedSettings, "RenderUnloadedAvatar", false)), mLastRezzedStatus(-1), mIsEditingAppearance(FALSE), @@ -883,8 +886,9 @@ BOOL LLVOAvatar::hasGray() const S32 LLVOAvatar::getRezzedStatus() const { if (getIsCloud()) return 0; - if (isFullyTextured() && allBakedTexturesCompletelyDownloaded()) return 3; - if (isFullyTextured()) return 2; + bool textured = isFullyTextured(); + if (textured && allBakedTexturesCompletelyDownloaded()) return 3; + if (textured) return 2; llassert(hasGray()); return 1; // gray } @@ -5329,12 +5333,28 @@ void LLVOAvatar::checkTextureLoading() } if(mLoadedCallbacksPaused == pause) { + if (!pause && mFirstFullyVisible && mLoadedCallbackTextures < mCallbackTextureList.size()) + { + // We still need to update 'loaded' textures count to decide on 'cloud' visibility + // Alternatively this can be done on TextureLoaded callbacks, but is harder to properly track + mLoadedCallbackTextures = 0; + for (LLLoadedCallbackEntry::source_callback_list_t::iterator iter = mCallbackTextureList.begin(); + iter != mCallbackTextureList.end(); ++iter) + { + LLViewerFetchedTexture* tex = gTextureList.findImage(*iter); + if (tex && (tex->getDiscardLevel() >= 0 || tex->isMissingAsset())) + { + mLoadedCallbackTextures++; + } + } + } return ; } if(mCallbackTextureList.empty()) //when is self or no callbacks. Note: this list for self is always empty. { mLoadedCallbacksPaused = pause ; + mLoadedCallbackTextures = 0; return ; //nothing to check. } @@ -5342,7 +5362,9 @@ void LLVOAvatar::checkTextureLoading() { return ; //have not been invisible for enough time. } - + + mLoadedCallbackTextures = pause ? mCallbackTextureList.size() : 0; + for(LLLoadedCallbackEntry::source_callback_list_t::iterator iter = mCallbackTextureList.begin(); iter != mCallbackTextureList.end(); ++iter) { @@ -5363,9 +5385,15 @@ void LLVOAvatar::checkTextureLoading() tex->unpauseLoadedCallbacks(&mCallbackTextureList) ; tex->addTextureStats(START_AREA); //jump start the fetching again + + // technically shouldn't need to account for missing, but callback might not have happened yet + if (tex->getDiscardLevel() >= 0 || tex->isMissingAsset()) + { + mLoadedCallbackTextures++; // consider it loaded (we have at least some data) + } } - } - } + } + } if(!pause) { @@ -7629,14 +7657,13 @@ bool LLVOAvatar::getIsCloud() const ); } -void LLVOAvatar::updateRezzedStatusTimers() +void LLVOAvatar::updateRezzedStatusTimers(S32 rez_status) { // State machine for rezzed status. Statuses are -1 on startup, 0 // = cloud, 1 = gray, 2 = downloading, 3 = full. // Purpose is to collect time data for each it takes avatar to reach // various loading landmarks: gray, textured (partial), textured fully. - S32 rez_status = getRezzedStatus(); if (rez_status != mLastRezzedStatus) { LL_DEBUGS("Avatar") << avString() << "rez state change: " << mLastRezzedStatus << " -> " << rez_status << LL_ENDL; @@ -7806,8 +7833,21 @@ void LLVOAvatar::logMetricsTimerRecord(const std::string& phase_name, F32 elapse // returns true if the value has changed. BOOL LLVOAvatar::updateIsFullyLoaded() { - const bool loading = getIsCloud(); - updateRezzedStatusTimers(); + S32 rez_status = getRezzedStatus(); + bool loading = getIsCloud(); + if (mFirstFullyVisible && !mIsControlAvatar) + { + loading = ((rez_status < 2) + // Wait at least 60s for unfinished textures to finish on first load, + // don't wait forever, it might fail. Even if it will eventually load by + // itself and update mLoadedCallbackTextures (or fail and clean the list), + // avatars are more time-sensitive than textures and can't wait that long. + || (mLoadedCallbackTextures < mCallbackTextureList.size() && mLastTexCallbackAddedTime.getElapsedTimeF32() < MAX_TEXTURE_WAIT_TIME_SEC) + || !mPendingAttachment.empty() + || (rez_status < 3 && !isFullyBaked()) + ); + } + updateRezzedStatusTimers(rez_status); updateRuthTimer(loading); return processFullyLoadedChange(loading); } @@ -7843,13 +7883,22 @@ void LLVOAvatar::updateRuthTimer(bool loading) BOOL LLVOAvatar::processFullyLoadedChange(bool loading) { - // we wait a little bit before giving the all clear, - // to let textures settle down - const F32 PAUSE = 1.f; + // We wait a little bit before giving the 'all clear', to let things to + // settle down (models to snap into place, textures to get first packets) + const F32 LOADED_DELAY = 1.f; + const F32 FIRST_USE_DELAY = 3.f; + if (loading) mFullyLoadedTimer.reset(); - - mFullyLoaded = (mFullyLoadedTimer.getElapsedTimeF32() > PAUSE); + + if (mFirstFullyVisible) + { + mFullyLoaded = (mFullyLoadedTimer.getElapsedTimeF32() > FIRST_USE_DELAY); + } + else + { + mFullyLoaded = (mFullyLoadedTimer.getElapsedTimeF32() > LOADED_DELAY); + } if (!mPreviousFullyLoaded && !loading && mFullyLoaded) { @@ -8139,6 +8188,7 @@ void LLVOAvatar::updateMeshTextures() LLViewerTexLayerSet* layerset = getTexLayerSet(i); if (use_lkg_baked_layer[i] && !isUsingLocalAppearance() ) { + // use last known good layer (no new one) LLViewerFetchedTexture* baked_img = LLViewerTextureManager::getFetchedTexture(mBakedTextureDatas[i].mLastTextureID); mBakedTextureDatas[i].mIsUsed = TRUE; @@ -8157,6 +8207,7 @@ void LLVOAvatar::updateMeshTextures() } else if (!isUsingLocalAppearance() && is_layer_baked[i]) { + // use new layer LLViewerFetchedTexture* baked_img = LLViewerTextureManager::staticCastToFetchedTexture( getImage( mBakedTextureDatas[i].mTextureIndex, 0 ), TRUE) ; @@ -8176,10 +8227,15 @@ void LLVOAvatar::updateMeshTextures() ((i == BAKED_HEAD) || (i == BAKED_UPPER) || (i == BAKED_LOWER)) ) { baked_img->setLoadedCallback(onBakedTextureMasksLoaded, MORPH_MASK_REQUESTED_DISCARD, TRUE, TRUE, new LLTextureMaskData( mID ), - src_callback_list, paused); + src_callback_list, paused); } baked_img->setLoadedCallback(onBakedTextureLoaded, SWITCH_TO_BAKED_DISCARD, FALSE, FALSE, new LLUUID( mID ), src_callback_list, paused ); + if (baked_img->getDiscardLevel() < 0 && !paused) + { + // mLoadedCallbackTextures will be updated by checkTextureLoading() below + mLastTexCallbackAddedTime.reset(); + } // this could add paused texture callbacks mLoadedCallbacksPaused |= paused; @@ -8573,13 +8629,16 @@ void LLVOAvatar::onFirstTEMessageReceived() LL_DEBUGS("Avatar") << avString() << "layer_baked, setting onInitialBakedTextureLoaded as callback" << LL_ENDL; image->setLoadedCallback( onInitialBakedTextureLoaded, MAX_DISCARD_LEVEL, FALSE, FALSE, new LLUUID( mID ), src_callback_list, paused ); - + if (image->getDiscardLevel() < 0 && !paused) + { + mLastTexCallbackAddedTime.reset(); + } // this could add paused texture callbacks mLoadedCallbacksPaused |= paused; } } - mMeshTexturesDirty = TRUE; + mMeshTexturesDirty = TRUE; gPipeline.markGLRebuild(this); } } @@ -9226,8 +9285,6 @@ void LLVOAvatar::onBakedTextureMasksLoaded( BOOL success, LLViewerFetchedTexture // static void LLVOAvatar::onInitialBakedTextureLoaded( BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* aux_src, S32 discard_level, BOOL final, void* userdata ) { - - LLUUID *avatar_idp = (LLUUID *)userdata; LLVOAvatar *selfp = (LLVOAvatar *)gObjectList.findObject(*avatar_idp); diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index 00dccc5d12..ca6ac5c902 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -348,7 +348,7 @@ public: BOOL isFullyTextured() const; BOOL hasGray() const; S32 getRezzedStatus() const; // 0 = cloud, 1 = gray, 2 = textured, 3 = textured and fully downloaded. - void updateRezzedStatusTimers(); + void updateRezzedStatusTimers(S32 status); S32 mLastRezzedStatus; @@ -629,6 +629,8 @@ protected: LLLoadedCallbackEntry::source_callback_list_t mCallbackTextureList ; BOOL mLoadedCallbacksPaused; + S32 mLoadedCallbackTextures; // count of 'loaded' baked textures, filled from mCallbackTextureList + LLFrameTimer mLastTexCallbackAddedTime; std::set mTextureIDs; //-------------------------------------------------------------------- // Local Textures -- cgit v1.2.3 From 88ae7dcb29e289631623c753366019a1a4d3a4d9 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Wed, 12 Feb 2020 14:52:07 +0200 Subject: SL-12678 Remove automatic retry of login --- indra/newview/lllogininstance.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/newview') diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp index 8a69acb8dc..b7c15b3a99 100644 --- a/indra/newview/lllogininstance.cpp +++ b/indra/newview/lllogininstance.cpp @@ -62,7 +62,7 @@ #include #include -const S32 LOGIN_MAX_RETRIES = 3; +const S32 LOGIN_MAX_RETRIES = 1; // Viewer should not autmatically retry login const F32 LOGIN_SRV_TIMEOUT_MIN = 10; const F32 LOGIN_SRV_TIMEOUT_MAX = 120; const F32 LOGIN_DNS_TIMEOUT_FACTOR = 0.9; // make DNS wait shorter then retry time -- cgit v1.2.3 From c5371bb2715325aa6d705a2fc9973510675e5e59 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Fri, 21 Feb 2020 18:51:14 +0200 Subject: SL-12732 Lights not working in some cases --- indra/newview/pipeline.cpp | 37 ++++++++++++++++--------------------- 1 file changed, 16 insertions(+), 21 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index bec33790bd..dcf435f78f 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -8684,29 +8684,24 @@ void LLPipeline::renderDeferredLighting() } } - const LLViewerObject *vobj = drawablep->getVObj(); - if (vobj) - { - LLVOAvatar *av = vobj->getAvatar(); - if (av) - { - if (av->isTooComplex() || av->isInMuteList() || dist_vec(av->getPosition(), LLViewerCamera::getInstance()->getOrigin()) > RenderFarClip) - { - continue; - } - } - else - { - const LLViewerObject *root_obj = drawablep->getParent() ? drawablep->getParent()->getVObj() : vobj; - if (root_obj && dist_vec(root_obj->getPosition(), LLViewerCamera::getInstance()->getOrigin()) > RenderFarClip) - { - continue; - } - } - } + const LLViewerObject *vobj = drawablep->getVObj(); + if (vobj) + { + LLVOAvatar *av = vobj->getAvatar(); + if (av && (av->isTooComplex() || av->isInMuteList())) + { + continue; + } + } + + const LLVector3 position = drawablep->getPositionAgent(); + if (dist_vec(position, LLViewerCamera::getInstance()->getOrigin()) > RenderFarClip + volume->getLightRadius()) + { + continue; + } LLVector4a center; - center.load3(drawablep->getPositionAgent().mV); + center.load3(position.mV); const F32* c = center.getF32ptr(); F32 s = volume->getLightRadius()*1.5f; -- cgit v1.2.3 From bfcb558f90d1b3108893cfcd3cc07325c47486b6 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Fri, 21 Feb 2020 23:38:39 +0200 Subject: SL-12678 Remove automatic retry of login --- indra/newview/lllogininstance.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/newview') diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp index b7c15b3a99..873531ef22 100644 --- a/indra/newview/lllogininstance.cpp +++ b/indra/newview/lllogininstance.cpp @@ -62,7 +62,7 @@ #include #include -const S32 LOGIN_MAX_RETRIES = 1; // Viewer should not autmatically retry login +const S32 LOGIN_MAX_RETRIES = 0; // Viewer should not autmatically retry login const F32 LOGIN_SRV_TIMEOUT_MIN = 10; const F32 LOGIN_SRV_TIMEOUT_MAX = 120; const F32 LOGIN_DNS_TIMEOUT_FACTOR = 0.9; // make DNS wait shorter then retry time -- cgit v1.2.3 From 4b62779fd3379561e97fe283ffd1c80d27703e86 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Wed, 4 Mar 2020 14:58:55 +0200 Subject: SL-12562 Change events URL --- indra/newview/app_settings/settings.xml | 2 +- indra/newview/llfloaterevent.cpp | 2 +- indra/newview/skins/default/xui/en/menu_viewer.xml | 2 +- indra/newview/skins/default/xui/en/notifications.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index da1e87fda4..b8bc4fe0b9 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -3775,7 +3775,7 @@ Type String Value - http://events.secondlife.com/viewer/embed/event/ + https://secondlife.com/my/community/events/event.php?id= FastCacheFetchEnabled diff --git a/indra/newview/llfloaterevent.cpp b/indra/newview/llfloaterevent.cpp index 3e303e0932..a6640cc073 100644 --- a/indra/newview/llfloaterevent.cpp +++ b/indra/newview/llfloaterevent.cpp @@ -110,7 +110,7 @@ void LLFloaterEvent::setEventID(const U32 event_id) // get the search URL and expand all of the substitutions // (also adds things like [LANGUAGE], [VERSION], [OS], etc.) std::ostringstream url; - url << gSavedSettings.getString("EventURL") << event_id << "/" << std::endl; + url << gSavedSettings.getString("EventURL") << event_id << std::endl; // and load the URL in the web view mBrowser->navigateTo(url.str()); diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 04b5d808ec..6284fe9a4d 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -461,7 +461,7 @@ name="Events"> + parameter="https://secondlife.com/my/community/events"/> confirm - http://secondlife.com/events/ + https://secondlife.com/my/community/events Date: Wed, 11 Mar 2020 16:48:22 +0200 Subject: SL-12562 Reverted change to 'embed' link --- indra/newview/app_settings/settings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/newview') diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index b8bc4fe0b9..da1e87fda4 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -3775,7 +3775,7 @@ Type String Value - https://secondlife.com/my/community/events/event.php?id= + http://events.secondlife.com/viewer/embed/event/ FastCacheFetchEnabled -- cgit v1.2.3 From 7d992f2331c36e660dc167cb874bb7410efd8cb1 Mon Sep 17 00:00:00 2001 From: Andrey Lihatskiy Date: Mon, 6 Apr 2020 20:57:33 +0300 Subject: SL-10993 Fixed Korean font on OSX Catalina --- indra/newview/skins/default/xui/en/fonts.xml | 1 + 1 file changed, 1 insertion(+) (limited to 'indra/newview') diff --git a/indra/newview/skins/default/xui/en/fonts.xml b/indra/newview/skins/default/xui/en/fonts.xml index 2d5263b78f..76df0abdfd 100644 --- a/indra/newview/skins/default/xui/en/fonts.xml +++ b/indra/newview/skins/default/xui/en/fonts.xml @@ -21,6 +21,7 @@ AppleGothic.dfont AppleGothic.ttf AppleSDGothicNeo-Regular.otf + AppleSDGothicNeo.ttc 华文细黑.ttf PingFang.ttc STIXGeneral.otf -- cgit v1.2.3 From d9783adba73cce9a68fde4ba0ba78add28da4279 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Wed, 15 Apr 2020 19:36:37 +0300 Subject: SL-13040 Fixed crash at EnvironmentPersistAcrossLogin --- indra/newview/llenvironment.cpp | 8 ++++---- indra/newview/llsettingsvo.h | 3 +++ indra/newview/llstartup.cpp | 3 +-- 3 files changed, 8 insertions(+), 6 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llenvironment.cpp b/indra/newview/llenvironment.cpp index 0e1c4f9434..342ee3ccf5 100644 --- a/indra/newview/llenvironment.cpp +++ b/indra/newview/llenvironment.cpp @@ -2800,7 +2800,7 @@ void LLEnvironment::loadSkyWaterFromSettings(const LLSD &env_data, bool &valid, } else if (env_data.has("sky_llsd")) { - LLSettingsSky::ptr_t sky = std::make_shared(env_data["sky_llsd"]); + LLSettingsSky::ptr_t sky = LLSettingsVOSky::buildSky(env_data["sky_llsd"]); setEnvironment(ENV_LOCAL, sky); valid = true; } @@ -2814,7 +2814,7 @@ void LLEnvironment::loadSkyWaterFromSettings(const LLSD &env_data, bool &valid, } else if (env_data.has("water_llsd")) { - LLSettingsWater::ptr_t sky = std::make_shared(env_data["water_llsd"]); + LLSettingsWater::ptr_t sky = LLSettingsVOWater::buildWater(env_data["water_llsd"]); setEnvironment(ENV_LOCAL, sky); valid = true; } @@ -2899,8 +2899,8 @@ bool LLEnvironment::loadFromSettings() { S32 length = env_data["day_length"].asInteger(); S32 offset = env_data["day_offset"].asInteger(); - LLSettingsDay::ptr_t day = std::make_shared(env_data["day_llsd"]); - setEnvironment(ENV_LOCAL, day, LLSettingsDay::Seconds(length), LLSettingsDay::Seconds(offset)); + LLSettingsDay::ptr_t pday = LLSettingsVODay::buildDay(env_data["day_llsd"]); + setEnvironment(ENV_LOCAL, pday, LLSettingsDay::Seconds(length), LLSettingsDay::Seconds(offset)); valid = true; } diff --git a/indra/newview/llsettingsvo.h b/indra/newview/llsettingsvo.h index 1f29013ecf..65136ad2f5 100644 --- a/indra/newview/llsettingsvo.h +++ b/indra/newview/llsettingsvo.h @@ -158,6 +158,9 @@ class LLSettingsVODay : public LLSettingsDay public: typedef std::function asset_built_fn; + // Todo: find a way to make this cnstructor private + // It shouldn't be used outside shared_prt and LLSettingsVODay + // outside of settings only use buildDay(settings) LLSettingsVODay(const LLSD &data); static ptr_t buildDay(LLSD settings); diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index a1d1e85492..7673bae725 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -1879,8 +1879,7 @@ bool idle_startup() display_startup(); - // Load stored local environment if needed. Only should be done once at least - // initial region data got loaded to avoid race condition with region's environment + // Load stored local environment if needed. LLEnvironment::instance().loadFromSettings(); // *TODO : Uncomment that line once the whole grid migrated to SLM and suppress it from LLAgent::handleTeleportFinished() (llagent.cpp) -- cgit v1.2.3 From 231b51f40fd1541ba33377690989fcd49d338451 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Mon, 20 Apr 2020 22:20:16 +0300 Subject: Restored SL-12732 after merge conflict --- indra/newview/pipeline.cpp | 37 ++++++++++++++++--------------------- 1 file changed, 16 insertions(+), 21 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index f0ed303f66..01438bfb9f 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -8740,29 +8740,24 @@ void LLPipeline::renderDeferredLighting(LLRenderTarget* screen_target) } } - const LLViewerObject *vobj = drawablep->getVObj(); - if (vobj) - { - LLVOAvatar *av = vobj->getAvatar(); - if (av) - { - if (av->isTooComplex() || av->isInMuteList() || dist_vec(av->getPosition(), LLViewerCamera::getInstance()->getOrigin()) > RenderFarClip) - { - continue; - } - } - else - { - const LLViewerObject *root_obj = drawablep->getParent() ? drawablep->getParent()->getVObj() : vobj; - if (root_obj && dist_vec(root_obj->getPosition(), LLViewerCamera::getInstance()->getOrigin()) > RenderFarClip) - { - continue; - } - } - } + const LLViewerObject *vobj = drawablep->getVObj(); + if (vobj) + { + LLVOAvatar *av = vobj->getAvatar(); + if (av && (av->isTooComplex() || av->isInMuteList())) + { + continue; + } + } + + const LLVector3 position = drawablep->getPositionAgent(); + if (dist_vec(position, LLViewerCamera::getInstance()->getOrigin()) > RenderFarClip + volume->getLightRadius()) + { + continue; + } LLVector4a center; - center.load3(drawablep->getPositionAgent().mV); + center.load3(position.mV); const F32* c = center.getF32ptr(); F32 s = volume->getLightRadius()*1.5f; -- cgit v1.2.3 From 4a7fd0117a43dca9e30c58c6417ebdf6862561f6 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Mon, 4 May 2020 12:15:30 -0400 Subject: Increment viewer version to 6.4.2 following promotion of DRTVWR-500 --- indra/newview/VIEWER_VERSION.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/newview') diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt index 4c77920fd2..a4c853ea2e 100644 --- a/indra/newview/VIEWER_VERSION.txt +++ b/indra/newview/VIEWER_VERSION.txt @@ -1 +1 @@ -6.4.1 +6.4.2 -- cgit v1.2.3