summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/llappviewer.cpp5
-rw-r--r--indra/newview/llappviewerwin32.cpp9
-rw-r--r--indra/newview/llchiclet.cpp2
-rw-r--r--indra/newview/llchiclet.h2
-rw-r--r--indra/newview/llconversationlog.cpp16
-rw-r--r--indra/newview/llconversationlog.h8
-rw-r--r--indra/newview/llfloaterimsession.cpp1
-rw-r--r--indra/newview/llfloaterimsessiontab.cpp22
-rw-r--r--indra/newview/llfloaterimsessiontab.h30
-rw-r--r--indra/newview/llimview.cpp3
-rw-r--r--indra/newview/llimview.h2
-rw-r--r--indra/newview/llspeakingindicatormanager.cpp4
-rw-r--r--indra/newview/llviewershadermgr.cpp1
-rw-r--r--indra/newview/llviewertexture.cpp6
-rw-r--r--indra/newview/llvoicechannel.cpp3
-rw-r--r--indra/newview/llvoiceclient.cpp16
-rw-r--r--indra/newview/llvoiceclient.h3
-rw-r--r--indra/newview/llvoicewebrtc.cpp7
-rw-r--r--indra/newview/llvovolume.cpp1
19 files changed, 102 insertions, 39 deletions
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)
{