diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp index a254f3899..19c5d6457 100644 --- a/indra/newview/lldrawable.cpp +++ b/indra/newview/lldrawable.cpp @@ -1149,6 +1149,7 @@ LLSpatialPartition* LLDrawable::getSpatialPartition() //must be an active volume if (!mSpatialBridge) { + // Spatial bridge ctors self-register... if (mVObjp->isHUDAttachment()) { setSpatialBridge(new LLHUDBridge(this, getRegion())); @@ -1615,9 +1616,9 @@ void LLSpatialBridge::cleanupReferences() } }*/ - LLDrawable* drawablep = mDrawable; - mDrawable = NULL; - drawablep->setSpatialBridge(NULL); + LLPointer drawablep = mDrawable; + mDrawable = nullptr; + drawablep->setSpatialBridge(nullptr); } } diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 26628e6f0..af81a0faf 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -5565,15 +5565,15 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) else { - if( type == LLDrawPool::POOL_FULLBRIGHT || type == LLDrawPool::POOL_FULLBRIGHT_ALPHA_MASK) - { - pool->addRiggedFace(facep, LLDrawPoolAvatar::RIGGED_FULLBRIGHT); - } //Annoying exception to the rule. getPoolTypeFromTE will return POOL_ALPHA_MASK for legacy bumpmaps, but there is no POOL_ALPHA_MASK in deferred. - else if(type == LLDrawPool::POOL_MATERIALS || (type == LLDrawPool::POOL_ALPHA_MASK && mat)) + if (type == LLDrawPool::POOL_MATERIALS || ((type == LLDrawPool::POOL_ALPHA_MASK || type == LLDrawPool::POOL_FULLBRIGHT_ALPHA_MASK) && mat)) { pool->addRiggedFace(facep, mat->getShaderMask()); } + else if (type == LLDrawPool::POOL_FULLBRIGHT || type == LLDrawPool::POOL_FULLBRIGHT_ALPHA_MASK) + { + pool->addRiggedFace(facep, LLDrawPoolAvatar::RIGGED_FULLBRIGHT); + } else if (type == LLDrawPool::POOL_BUMP && te->getBumpmap()) { pool->addRiggedFace(facep, LLDrawPoolAvatar::RIGGED_DEFERRED_BUMP); @@ -5670,7 +5670,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) type = LLDrawPool::POOL_FULLBRIGHT; } } - else if(force_simple && type != LLDrawPool::POOL_FULLBRIGHT && type != LLDrawPool::POOL_ALPHA_MASK && type != LLDrawPool::POOL_FULLBRIGHT_ALPHA_MASK) + else if(force_simple && type != LLDrawPool::POOL_FULLBRIGHT && (!LLPipeline::sRenderDeferred && (type != LLDrawPool::POOL_ALPHA_MASK && type != LLDrawPool::POOL_FULLBRIGHT_ALPHA_MASK))) { type = LLDrawPool::POOL_SIMPLE; } diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index ee4c4c25d..887faf733 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -2667,6 +2667,9 @@ void LLPipeline::clearRebuildGroups() iter != mGroupQ2.end(); ++iter) { LLSpatialGroup* group = *iter; + if (group == nullptr) { + LL_WARNS() << "Null spatial group in Pipeline::mGroupQ2." << LL_ENDL; + } // If the group contains HUD objects, save the group if (group->isHUDGroup())