diff options
author | Erik Kundiman <erik@megapahit.org> | 2024-11-06 17:30:47 +0800 |
---|---|---|
committer | Erik Kundiman <erik@megapahit.org> | 2024-11-06 17:30:47 +0800 |
commit | 5f3e7b7fb33160c3250d445f45214aa30130c9e7 (patch) | |
tree | 35aae8ac630096462d5e2ae1aa37b3787e80de56 | |
parent | 8af4df0022a484c3ea0b1fedb3a36235e2742e3b (diff) | |
parent | 55732f7343fa574a8dfcbfd807e69b1fb56e9209 (diff) |
Merge remote-tracking branch 'secondlife/release/2024.09-ExtraFPS' into 2024.09-ExtraFPS
-rw-r--r-- | indra/llcommon/llsdjson.cpp | 9 | ||||
-rw-r--r-- | indra/llinventory/llsettingswater.cpp | 4 | ||||
-rw-r--r-- | indra/newview/llappviewer.cpp | 5 | ||||
-rw-r--r-- | indra/newview/llappviewerwin32.cpp | 9 | ||||
-rw-r--r-- | indra/newview/llchiclet.cpp | 2 | ||||
-rw-r--r-- | indra/newview/llchiclet.h | 2 | ||||
-rw-r--r-- | indra/newview/llconversationlog.cpp | 16 | ||||
-rw-r--r-- | indra/newview/llconversationlog.h | 8 | ||||
-rw-r--r-- | indra/newview/llfloaterimsession.cpp | 1 | ||||
-rw-r--r-- | indra/newview/llfloaterimsessiontab.cpp | 22 | ||||
-rw-r--r-- | indra/newview/llfloaterimsessiontab.h | 30 | ||||
-rw-r--r-- | indra/newview/llimview.cpp | 3 | ||||
-rw-r--r-- | indra/newview/llimview.h | 2 | ||||
-rw-r--r-- | indra/newview/llspeakingindicatormanager.cpp | 4 | ||||
-rw-r--r-- | indra/newview/llviewershadermgr.cpp | 1 | ||||
-rw-r--r-- | indra/newview/llviewertexture.cpp | 6 | ||||
-rw-r--r-- | indra/newview/llvoicechannel.cpp | 3 | ||||
-rw-r--r-- | indra/newview/llvoiceclient.cpp | 16 | ||||
-rw-r--r-- | indra/newview/llvoiceclient.h | 3 | ||||
-rw-r--r-- | indra/newview/llvoicewebrtc.cpp | 7 | ||||
-rw-r--r-- | indra/newview/llvovolume.cpp | 1 |
21 files changed, 109 insertions, 45 deletions
diff --git a/indra/llcommon/llsdjson.cpp b/indra/llcommon/llsdjson.cpp index 1df2a8f9eb..655869a704 100644 --- a/indra/llcommon/llsdjson.cpp +++ b/indra/llcommon/llsdjson.cpp @@ -63,15 +63,16 @@ LLSD LlsdFromJson(const boost::json::value& val) case boost::json::kind::array: { result = LLSD::emptyArray(); - auto& array = val.as_array(); + const boost::json::array& array = val.as_array(); + size_t size = array.size(); // allocate elements 0 .. (size() - 1) to avoid incremental allocation if (! array.empty()) { - result[array.size() - 1] = LLSD(); + result[size - 1] = LLSD(); } - for (const auto &element : array) + for (size_t i = 0; i < size; i++) { - result.append(LlsdFromJson(element)); + result[i] = (LlsdFromJson(array[i])); } break; } diff --git a/indra/llinventory/llsettingswater.cpp b/indra/llinventory/llsettingswater.cpp index 191129d725..b8946dbdba 100644 --- a/indra/llinventory/llsettingswater.cpp +++ b/indra/llinventory/llsettingswater.cpp @@ -133,8 +133,8 @@ void LLSettingsWater::loadValuesFromLLSD() mWave1Dir = LLVector2(settings[SETTING_WAVE1_DIR]); mWave2Dir = LLVector2(settings[SETTING_WAVE2_DIR]); - mNormalMapID = getNormalMapID(); - mTransparentTextureID = getTransparentTextureID(); + mNormalMapID = settings[SETTING_NORMAL_MAP].asUUID(); + mTransparentTextureID = settings[SETTING_TRANSPARENT_TEXTURE].asUUID(); } void LLSettingsWater::saveValuesToLLSD() diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index c12cb74b7c..804462504b 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -5204,10 +5204,7 @@ void LLAppViewer::sendLogoutRequest() gLogoutMaxTime = LOGOUT_REQUEST_TIME; mLogoutRequestSent = true; - if(LLVoiceClient::instanceExists()) - { - LLVoiceClient::getInstance()->setVoiceEnabled(false); - } + LLVoiceClient::setVoiceEnabled(false); } } diff --git a/indra/newview/llappviewerwin32.cpp b/indra/newview/llappviewerwin32.cpp index ad817d5747..4d2c58bdab 100644 --- a/indra/newview/llappviewerwin32.cpp +++ b/indra/newview/llappviewerwin32.cpp @@ -152,8 +152,15 @@ namespace // LL_ERRS message, when there is one sBugSplatSender->setDefaultUserDescription(WCSTR(LLError::getFatalMessage())); - // App state + + sBugSplatSender->setAttribute(WCSTR(L"OS"), WCSTR(LLOSInfo::instance().getOSStringSimple())); // In case we ever stop using email for this sBugSplatSender->setAttribute(WCSTR(L"AppState"), WCSTR(LLStartUp::getStartupStateString())); + sBugSplatSender->setAttribute(WCSTR(L"GL Vendor"), WCSTR(gGLManager.mGLVendor)); + sBugSplatSender->setAttribute(WCSTR(L"GL Version"), WCSTR(gGLManager.mGLVersionString)); + sBugSplatSender->setAttribute(WCSTR(L"GPU Version"), WCSTR(gGLManager.mDriverVersionVendorString)); + sBugSplatSender->setAttribute(WCSTR(L"GL Renderer"), WCSTR(gGLManager.mGLRenderer)); + sBugSplatSender->setAttribute(WCSTR(L"VRAM"), WCSTR(STRINGIZE(gGLManager.mVRAM))); + sBugSplatSender->setAttribute(WCSTR(L"RAM"), WCSTR(STRINGIZE(gSysMemory.getPhysicalMemoryKB().value()))); if (gAgent.getRegion()) { diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp index 4c0f160f6f..e8a069dfdb 100644 --- a/indra/newview/llchiclet.cpp +++ b/indra/newview/llchiclet.cpp @@ -511,7 +511,7 @@ bool LLChicletPanel::postBuild() LLScriptFloaterManager::getInstance()->addNewObjectCallback(boost::bind(&LLChicletPanel::objectChicletCallback, this, _1)); LLScriptFloaterManager::getInstance()->addToggleObjectFloaterCallback(boost::bind(&LLChicletPanel::objectChicletCallback, this, _1)); LLIMChiclet::sFindChicletsSignal.connect(boost::bind(&LLChicletPanel::findChiclet<LLChiclet>, this, _1)); - LLVoiceChannel::setCurrentVoiceChannelChangedCallback(boost::bind(&LLChicletPanel::onCurrentVoiceChannelChanged, this, _1)); + mVoiceChannelChanged = LLVoiceChannel::setCurrentVoiceChannelChangedCallback(boost::bind(&LLChicletPanel::onCurrentVoiceChannelChanged, this, _1)); mLeftScrollButton=getChild<LLButton>("chicklet_left_scroll_button"); LLTransientFloaterMgr::getInstance()->addControlView(mLeftScrollButton); diff --git a/indra/newview/llchiclet.h b/indra/newview/llchiclet.h index ce8968253b..5114c97beb 100644 --- a/indra/newview/llchiclet.h +++ b/indra/newview/llchiclet.h @@ -822,6 +822,8 @@ protected: S32 mMinWidth; bool mShowControls; static const S32 s_scroll_ratio; + + boost::signals2::connection mVoiceChannelChanged; }; template<class T> diff --git a/indra/newview/llconversationlog.cpp b/indra/newview/llconversationlog.cpp index ed563cbec9..e6a720e734 100644 --- a/indra/newview/llconversationlog.cpp +++ b/indra/newview/llconversationlog.cpp @@ -190,6 +190,22 @@ LLConversationLog::LLConversationLog() : { } +LLConversationLog::~LLConversationLog() +{ + if (mLoggingEnabled) + { + if (LLIMMgr::instanceExists()) + { + LLIMMgr::instance().removeSessionObserver(this); + } + LLAvatarTracker::instance().removeObserver(mFriendObserver); + } + if (mAvatarNameCacheConnection.connected()) + { + mAvatarNameCacheConnection.disconnect(); + } +} + void LLConversationLog::enableLogging(S32 log_mode) { mLoggingEnabled = log_mode > 0; diff --git a/indra/newview/llconversationlog.h b/indra/newview/llconversationlog.h index b3a5be321e..957d90d55e 100644 --- a/indra/newview/llconversationlog.h +++ b/indra/newview/llconversationlog.h @@ -166,13 +166,7 @@ public: private: - virtual ~LLConversationLog() - { - if (mAvatarNameCacheConnection.connected()) - { - mAvatarNameCacheConnection.disconnect(); - } - } + virtual ~LLConversationLog(); void enableLogging(S32 log_mode); diff --git a/indra/newview/llfloaterimsession.cpp b/indra/newview/llfloaterimsession.cpp index 97e0d01b52..185274981b 100644 --- a/indra/newview/llfloaterimsession.cpp +++ b/indra/newview/llfloaterimsession.cpp @@ -638,6 +638,7 @@ void LLFloaterIMSession::onClose(bool app_quitting) // Last change: // EXT-3516 X Button should end IM session, _ button should hide gIMMgr->leaveSession(mSessionID); + mSession = nullptr; // leaveSession should have deleted it. // *TODO: Study why we need to restore the floater before we close it. // Might be because we want to save some state data in some clean open state. LLFloaterIMSessionTab::restoreFloater(); diff --git a/indra/newview/llfloaterimsessiontab.cpp b/indra/newview/llfloaterimsessiontab.cpp index 3bef74f376..7b1c0ba5d4 100644 --- a/indra/newview/llfloaterimsessiontab.cpp +++ b/indra/newview/llfloaterimsessiontab.cpp @@ -80,6 +80,7 @@ LLFloaterIMSessionTab::LLFloaterIMSessionTab(const LLSD& session_id) { setAutoFocus(false); mSession = LLIMModel::getInstance()->findIMSession(mSessionID); + LLIMMgr::instance().addSessionObserver(this); mCommitCallbackRegistrar.add("IMSession.Menu.Action", boost::bind(&LLFloaterIMSessionTab::onIMSessionMenuItemClicked, this, _2)); @@ -102,6 +103,7 @@ LLFloaterIMSessionTab::LLFloaterIMSessionTab(const LLSD& session_id) LLFloaterIMSessionTab::~LLFloaterIMSessionTab() { delete mRefreshTimer; + LLIMMgr::instance().removeSessionObserver(this); LLFloaterIMContainer* im_container = LLFloaterIMContainer::findInstance(); if (im_container) @@ -440,7 +442,10 @@ void LLFloaterIMSessionTab::enableDisableCallBtn() bool enable = false; - if (mSessionID.notNull() && mSession && mSession->mSessionInitialized && mSession->mCallBackEnabled) + if (mSessionID.notNull() + && mSession + && mSession->mSessionInitialized + && mSession->mCallBackEnabled) { if (mVoiceButtonHangUpMode) { @@ -450,9 +455,10 @@ void LLFloaterIMSessionTab::enableDisableCallBtn() else { // We allow to start call from this state only - if (mSession->mVoiceChannel && - !mSession->mVoiceChannel->callStarted() && - LLVoiceClient::instanceExists()) + if (LLVoiceClient::instanceExists() && + mSession->mVoiceChannel && + !mSession->mVoiceChannel->callStarted() + ) { LLVoiceClient* client = LLVoiceClient::getInstance(); if (client->voiceEnabled() && client->isVoiceWorking()) @@ -1367,6 +1373,14 @@ LLView* LLFloaterIMSessionTab::getChatHistory() return mChatHistory; } +void LLFloaterIMSessionTab::sessionRemoved(const LLUUID& session_id) +{ + if (session_id == mSessionID) + { + mSession = nullptr; + } +} + bool LLFloaterIMSessionTab::handleKeyHere(KEY key, MASK mask ) { bool handled = false; diff --git a/indra/newview/llfloaterimsessiontab.h b/indra/newview/llfloaterimsessiontab.h index bee5c8c2c4..367d988f26 100644 --- a/indra/newview/llfloaterimsessiontab.h +++ b/indra/newview/llfloaterimsessiontab.h @@ -45,6 +45,7 @@ class LLPanelEmojiComplete; class LLFloaterIMSessionTab : public LLTransientDockableFloater + , public LLIMSessionObserver { using super = LLTransientDockableFloater; @@ -76,13 +77,13 @@ public: bool isNearbyChat() {return mIsNearbyChat;} // LLFloater overrides - /*virtual*/ void onOpen(const LLSD& key); - /*virtual*/ bool postBuild(); - /*virtual*/ void draw(); - /*virtual*/ void setVisible(bool visible); - /*virtual*/ void setFocus(bool focus); - /*virtual*/ void closeFloater(bool app_quitting = false); - /*virtual*/ void deleteAllChildren(); + void onOpen(const LLSD& key) override; + bool postBuild() override; + void draw() override; + void setVisible(bool visible) override; + void setFocus(bool focus) override; + void closeFloater(bool app_quitting = false) override; + void deleteAllChildren() override; // Handle the left hand participant list widgets void addConversationViewParticipant(LLConversationItem* item, bool update_view = true); @@ -98,7 +99,7 @@ public: virtual void updateMessages() {} LLConversationItem* getCurSelectedViewModelItem(); void forceReshape(); - virtual bool handleKeyHere( KEY key, MASK mask ); + virtual bool handleKeyHere( KEY key, MASK mask ) override; bool isMessagePaneExpanded(){return mMessagePaneExpanded;} void setMessagePaneExpanded(bool expanded){mMessagePaneExpanded = expanded;} void restoreFloater(); @@ -108,6 +109,13 @@ public: LLView* getChatHistory(); + // LLIMSessionObserver triggers + virtual void sessionAdded(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id, bool has_offline_msg) override {}; // Stub + virtual void sessionActivated(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id) override {}; // Stub + virtual void sessionRemoved(const LLUUID& session_id) override; + virtual void sessionVoiceOrIMStarted(const LLUUID& session_id) override {}; // Stub + virtual void sessionIDUpdated(const LLUUID& old_session_id, const LLUUID& new_session_id) override {}; // Stub + protected: // callback for click on any items of the visual states menu @@ -139,8 +147,8 @@ protected: virtual void enableDisableCallBtn(); // process focus events to set a currently active session - /* virtual */ void onFocusReceived(); - /* virtual */ void onFocusLost(); + void onFocusReceived() override; + void onFocusLost() override; // prepare chat's params and out one message to chatHistory void appendMessage(const LLChat& chat, const LLSD& args = LLSD()); @@ -212,7 +220,7 @@ private: void getSelectedUUIDs(uuid_vec_t& selected_uuids); /// Refreshes the floater at a constant rate. - virtual void refresh() = 0; + virtual void refresh() override = 0; /** * Adjusts chat history height to fit vertically with input chat field diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index f800210eba..609536f92d 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -798,7 +798,6 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, void LLIMModel::LLIMSession::initVoiceChannel(const LLSD& voiceChannelInfo) { - if (mVoiceChannel) { if (mVoiceChannel->isThisVoiceChannel(voiceChannelInfo)) @@ -2346,7 +2345,7 @@ LLCallDialogManager::~LLCallDialogManager() void LLCallDialogManager::initSingleton() { - LLVoiceChannel::setCurrentVoiceChannelChangedCallback(LLCallDialogManager::onVoiceChannelChanged); + mVoiceChannelChanged = LLVoiceChannel::setCurrentVoiceChannelChangedCallback(LLCallDialogManager::onVoiceChannelChanged); } // static diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h index 99b19c9fa9..61776860e3 100644 --- a/indra/newview/llimview.h +++ b/indra/newview/llimview.h @@ -548,6 +548,8 @@ protected: std::string mCurrentSessionlName; LLIMModel::LLIMSession* mSession; LLVoiceChannel::EState mOldState; + + boost::signals2::connection mVoiceChannelChanged; }; class LLCallDialog : public LLDockableFloater diff --git a/indra/newview/llspeakingindicatormanager.cpp b/indra/newview/llspeakingindicatormanager.cpp index a9ef5e244d..532b245ced 100644 --- a/indra/newview/llspeakingindicatormanager.cpp +++ b/indra/newview/llspeakingindicatormanager.cpp @@ -133,6 +133,8 @@ private: * @see onChange() */ speaker_ids_t mSwitchedIndicatorsOn; + + boost::signals2::connection mVoiceChannelChanged; }; ////////////////////////////////////////////////////////////////////////// @@ -181,7 +183,7 @@ void SpeakingIndicatorManager::unregisterSpeakingIndicator(const LLUUID& speaker ////////////////////////////////////////////////////////////////////////// SpeakingIndicatorManager::SpeakingIndicatorManager() { - LLVoiceChannel::setCurrentVoiceChannelChangedCallback(boost::bind(&SpeakingIndicatorManager::sOnCurrentChannelChanged, this, _1)); + mVoiceChannelChanged = LLVoiceChannel::setCurrentVoiceChannelChangedCallback(boost::bind(&SpeakingIndicatorManager::sOnCurrentChannelChanged, this, _1)); LLVoiceClient::addObserver(this); } diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp index 58b541b19b..d1201df157 100644 --- a/indra/newview/llviewershadermgr.cpp +++ b/indra/newview/llviewershadermgr.cpp @@ -617,6 +617,7 @@ void LLViewerShaderMgr::setShaders() LLError::setDefaultLevel(LLError::LEVEL_DEBUG); loadBasicShaders(); LLError::setDefaultLevel(lvl); + gGLManager.printGLInfoString(); LL_ERRS() << "Unable to load basic shader " << shader_name << ", verify graphics driver installed and current." << LL_ENDL; reentrance = false; // For hygiene only, re-try probably helps nothing return; diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index 7feb807c62..82fefde0a7 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -1691,6 +1691,7 @@ void LLViewerFetchedTexture::processTextureStats() if(mDesiredDiscardLevel > mMinDesiredDiscardLevel)//need to load more { mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, mMinDesiredDiscardLevel); + mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, (S32)mLoadedCallbackDesiredDiscardLevel); mFullyLoaded = false; } //setDebugText("fully loaded"); @@ -1740,6 +1741,7 @@ void LLViewerFetchedTexture::processTextureStats() log((F32)mFullHeight / mKnownDrawHeight) / log_2); mDesiredDiscardLevel = llclamp(mDesiredDiscardLevel, (S8)0, (S8)getMaxDiscardLevel()); mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, mMinDesiredDiscardLevel); + mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, (S32)mLoadedCallbackDesiredDiscardLevel); } mKnownDrawSizeChanged = false; @@ -2464,6 +2466,7 @@ bool LLViewerFetchedTexture::doLoadedCallbacks() if (mIsRawImageValid) { // If we have an existing raw image, we have a baseline for the raw and auxiliary quality levels. + current_raw_discard = mRawDiscardLevel; best_raw_discard = llmin(best_raw_discard, mRawDiscardLevel); best_aux_discard = llmin(best_aux_discard, mRawDiscardLevel); // We always decode the aux when we decode the base raw current_aux_discard = llmin(current_aux_discard, best_aux_discard); @@ -2922,10 +2925,12 @@ void LLViewerLODTexture::processTextureStats() { // If the image has not been significantly visible in a while, we don't want it mDesiredDiscardLevel = llmin(mMinDesiredDiscardLevel, (S8)(MAX_DISCARD_LEVEL + 1)); + mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, (S32)mLoadedCallbackDesiredDiscardLevel); } else if (!mFullWidth || !mFullHeight) { mDesiredDiscardLevel = getMaxDiscardLevel(); + mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, (S32)mLoadedCallbackDesiredDiscardLevel); } else { @@ -2995,6 +3000,7 @@ void LLViewerLODTexture::processTextureStats() // stop requesting more mDesiredDiscardLevel = current_discard; } + mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, (S32)mLoadedCallbackDesiredDiscardLevel); } if(mForceToSaveRawImage && mDesiredSavedRawDiscardLevel >= 0) diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp index 55769f567b..cf128f381a 100644 --- a/indra/newview/llvoicechannel.cpp +++ b/indra/newview/llvoicechannel.cpp @@ -80,9 +80,8 @@ LLVoiceChannel::~LLVoiceChannel() if (sCurrentVoiceChannel == this) { sCurrentVoiceChannel = NULL; - // Must check instance exists here, the singleton MAY have already been destroyed. - LLVoiceClient::removeObserver(this); } + LLVoiceClient::removeObserver(this); sVoiceChannelMap.erase(mSessionID); } diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index 846c2b8867..3d8ffc35e7 100644 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -177,7 +177,11 @@ void LLVoiceClient::init(LLPumpIO *pump) void LLVoiceClient::userAuthorized(const std::string& user_id, const LLUUID &agentID) { - gAgent.addRegionChangedCallback(boost::bind(&LLVoiceClient::onRegionChanged, this)); + if (mRegionChangedCallbackSlot.connected()) + { + mRegionChangedCallbackSlot.disconnect(); + } + mRegionChangedCallbackSlot = gAgent.addRegionChangedCallback(boost::bind(&LLVoiceClient::onRegionChanged, this)); #if !__FreeBSD__ LLWebRTCVoiceClient::getInstance()->userAuthorized(user_id, agentID); #endif @@ -683,9 +687,15 @@ bool LLVoiceClient::voiceEnabled() void LLVoiceClient::setVoiceEnabled(bool enabled) { #if !__FreeBSD__ - LLWebRTCVoiceClient::getInstance()->setVoiceEnabled(enabled); + if (LLWebRTCVoiceClient::instanceExists()) + { + LLWebRTCVoiceClient::getInstance()->setVoiceEnabled(enabled); + } #endif - LLVivoxVoiceClient::getInstance()->setVoiceEnabled(enabled); + if (LLVivoxVoiceClient::instanceExists()) + { + LLVivoxVoiceClient::getInstance()->setVoiceEnabled(enabled); + } } void LLVoiceClient::updateMicMuteLogic() diff --git a/indra/newview/llvoiceclient.h b/indra/newview/llvoiceclient.h index d53f512d82..788ea3b3b3 100644 --- a/indra/newview/llvoiceclient.h +++ b/indra/newview/llvoiceclient.h @@ -438,7 +438,7 @@ public: bool getUserPTTState(); void toggleUserPTTState(void); void inputUserControlState(bool down); // interpret any sort of up-down mic-open control input according to ptt-toggle prefs - void setVoiceEnabled(bool enabled); + static void setVoiceEnabled(bool enabled); void setUsePTT(bool usePTT); void setPTTIsToggle(bool PTTIsToggle); @@ -519,6 +519,7 @@ protected: LLPumpIO *m_servicePump; boost::signals2::connection mSimulatorFeaturesReceivedSlot; + boost::signals2::connection mRegionChangedCallbackSlot; LLCachedControl<bool> mVoiceEffectEnabled; LLCachedControl<std::string> mVoiceEffectDefault; diff --git a/indra/newview/llvoicewebrtc.cpp b/indra/newview/llvoicewebrtc.cpp index ad8f6927ed..b2e5de5371 100644 --- a/indra/newview/llvoicewebrtc.cpp +++ b/indra/newview/llvoicewebrtc.cpp @@ -258,6 +258,8 @@ void LLWebRTCVoiceClient::cleanupSingleton() } cleanUp(); sessionState::clearSessions(); + + mStatusObservers.clear(); } //--------------------------------------------------- @@ -403,8 +405,9 @@ void LLWebRTCVoiceClient::notifyStatusObservers(LLVoiceClientStatusObserver::ESt LL_DEBUGS("Voice") << "( " << LLVoiceClientStatusObserver::status2string(status) << " )" << " mSession=" << mSession << LL_ENDL; + bool in_spatial_channel = inSpatialChannel(); LL_DEBUGS("Voice") << " " << LLVoiceClientStatusObserver::status2string(status) << ", session channelInfo " - << getAudioSessionChannelInfo() << ", proximal is " << inSpatialChannel() << LL_ENDL; + << getAudioSessionChannelInfo() << ", proximal is " << in_spatial_channel << LL_ENDL; mIsProcessingChannels = status == LLVoiceClientStatusObserver::STATUS_JOINED; @@ -412,7 +415,7 @@ void LLWebRTCVoiceClient::notifyStatusObservers(LLVoiceClientStatusObserver::ESt for (status_observer_set_t::iterator it = mStatusObservers.begin(); it != mStatusObservers.end();) { LLVoiceClientStatusObserver *observer = *it; - observer->onChange(status, channelInfo, inSpatialChannel()); + observer->onChange(status, channelInfo, in_spatial_channel); // In case onError() deleted an entry. it = mStatusObservers.upper_bound(observer); } diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 149b60ca53..c0df34d3ac 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -6483,6 +6483,7 @@ U32 LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, LLFace if (gltf_mat->mAlphaMode == LLGLTFMaterial::ALPHA_MODE_BLEND) { registerFace(group, facep, LLRenderPass::PASS_ALPHA); + is_alpha = true; } else if (gltf_mat->mAlphaMode == LLGLTFMaterial::ALPHA_MODE_MASK) { |