From 2ede35f1b67ad4e101f31e7329e53be10128d18c Mon Sep 17 00:00:00 2001 From: Mnikolenko ProductEngine Date: Tue, 1 Dec 2015 15:29:43 +0200 Subject: MAINT-5681 FIXED particles still render when complexity threshold is reached --- indra/newview/llviewerpartsim.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'indra/newview/llviewerpartsim.cpp') diff --git a/indra/newview/llviewerpartsim.cpp b/indra/newview/llviewerpartsim.cpp index 230bdca4ef..ab510c1e95 100755 --- a/indra/newview/llviewerpartsim.cpp +++ b/indra/newview/llviewerpartsim.cpp @@ -39,6 +39,7 @@ #include "llworld.h" #include "pipeline.h" #include "llspatialpartition.h" +#include "llvoavatarself.h" #include "llvovolume.h" const F32 PART_SIM_BOX_SIDE = 16.f; @@ -703,16 +704,18 @@ void LLViewerPartSim::updateSimulation() if (!mViewerPartSources[i]->isDead()) { BOOL upd = TRUE; - if (!LLPipeline::sRenderAttachedParticles) + LLViewerObject* vobj = mViewerPartSources[i]->mSourceObjectp; + if (vobj && (vobj->getPCode() == LL_PCODE_VOLUME)) { - LLViewerObject* vobj = mViewerPartSources[i]->mSourceObjectp; - if (vobj && (vobj->getPCode() == LL_PCODE_VOLUME)) + if(vobj->getAvatar() && vobj->getAvatar()->isTooComplex()) { - LLVOVolume* vvo = (LLVOVolume *)vobj; - if (vvo && vvo->isAttachment()) - { - upd = FALSE; - } + upd = FALSE; + } + + LLVOVolume* vvo = (LLVOVolume *)vobj; + if (!LLPipeline::sRenderAttachedParticles && vvo && vvo->isAttachment()) + { + upd = FALSE; } } -- cgit v1.3 From 0ffc4f2667806653d1f0548fdda7eb91bdea5025 Mon Sep 17 00:00:00 2001 From: ruslantproductengine Date: Wed, 2 Mar 2016 18:35:43 +0200 Subject: MAINT-5700 [QuickGraphics-RC] Blocked avatars should always be derendered --- indra/newview/lldrawpoolavatar.cpp | 10 +++++++--- indra/newview/llviewermenu.cpp | 2 ++ indra/newview/llviewerpartsim.cpp | 8 +++++++- indra/newview/llvoavatar.cpp | 6 +++--- indra/newview/pipeline.cpp | 4 +++- 5 files changed, 22 insertions(+), 8 deletions(-) (limited to 'indra/newview/llviewerpartsim.cpp') diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index c200ecfaf8..63e4abb308 100755 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -472,7 +472,9 @@ void LLDrawPoolAvatar::renderShadow(S32 pass) } BOOL impostor = avatarp->isImpostor(); - if (impostor) + if (impostor + && LLVOAvatar::AV_DO_NOT_RENDER != avatarp->getVisualMuteSettings() + && LLVOAvatar::AV_ALWAYS_RENDER != avatarp->getVisualMuteSettings()) { return; } @@ -1246,7 +1248,9 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass) BOOL impostor = avatarp->isImpostor() && !single_avatar; - if (impostor && pass != 0) + if (( avatarp->isInMuteList() + || impostor + || (LLVOAvatar::AV_DO_NOT_RENDER == avatarp->getVisualMuteSettings() && !avatarp->needsImpostorUpdate()) ) && pass != 0) { //don't draw anything but the impostor for impostored avatars return; } @@ -1263,7 +1267,7 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass) LLVOAvatar::sNumVisibleAvatars++; } - if (impostor) + if (impostor || (LLVOAvatar::AV_DO_NOT_RENDER == avatarp->getVisualMuteSettings() && !avatarp->needsImpostorUpdate())) { if (LLPipeline::sRenderDeferred && !LLPipeline::sReflectionRender && avatarp->mImpostor.isComplete()) { diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index cbc2ecc3c0..20f3d25be3 100755 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -3145,6 +3145,8 @@ class LLObjectMute : public view_listener_t LLVOAvatar* avatar = find_avatar_from_object(object); if (avatar) { + avatar->mNeedsImpostorUpdate = TRUE; + id = avatar->getID(); LLNameValue *firstname = avatar->getNVPair("FirstName"); diff --git a/indra/newview/llviewerpartsim.cpp b/indra/newview/llviewerpartsim.cpp index ab510c1e95..b4617566ac 100755 --- a/indra/newview/llviewerpartsim.cpp +++ b/indra/newview/llviewerpartsim.cpp @@ -705,7 +705,13 @@ void LLViewerPartSim::updateSimulation() { BOOL upd = TRUE; LLViewerObject* vobj = mViewerPartSources[i]->mSourceObjectp; - if (vobj && (vobj->getPCode() == LL_PCODE_VOLUME)) + + if (vobj && vobj->isAvatar() && ((LLVOAvatar*)vobj)->isInMuteList()) + { + upd = FALSE; + } + + if (upd && vobj && (vobj->getPCode() == LL_PCODE_VOLUME)) { if(vobj->getAvatar() && vobj->getAvatar()->isTooComplex()) { diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index c88f5d1fce..c3c18f7c54 100755 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -1,4 +1,4 @@ -/** +/** * @File llvoavatar.cpp * @brief Implementation of LLVOAvatar class which is a derivation of LLViewerObject * @@ -8138,7 +8138,7 @@ void LLVOAvatar::updateImpostors() { LLVOAvatar* avatar = (LLVOAvatar*) *iter; if (!avatar->isDead() && avatar->isVisible() - && (avatar->isImpostor() && avatar->needsImpostorUpdate()) + && ((avatar->isImpostor() || LLVOAvatar::AV_DO_NOT_RENDER == avatar->getVisualMuteSettings()) && avatar->needsImpostorUpdate()) ) { avatar->calcMutedAVColor(); @@ -8487,7 +8487,7 @@ void LLVOAvatar::calculateUpdateRenderComplexity() void LLVOAvatar::setVisualMuteSettings(VisualMuteSettings set) { mVisuallyMuteSetting = set; - mNeedsImpostorUpdate = true; + mNeedsImpostorUpdate = TRUE; } diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 4d1725e927..a4d41164e5 100755 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -3114,7 +3114,9 @@ void LLPipeline::markVisible(LLDrawable *drawablep, LLCamera& camera) if (vobj) // this test may not be needed, see above { LLVOAvatar* av = vobj->asAvatar(); - if (av && av->isImpostor()) + if (av && (av->isImpostor() + || av->isInMuteList() + || (LLVOAvatar::AV_DO_NOT_RENDER == av->getVisualMuteSettings() && !av->needsImpostorUpdate()) )) { return; } -- cgit v1.3