LLSpatialPartition* LLDrawable::getSpatialPartition() { LLSpatialPartition* retval = NULL; if (!mVObjp || !getVOVolume() || isStatic()) { retval = gPipeline.getSpatialPartition((LLViewerObject*) mVObjp); } else if (isRoot()) { //must be an active volume if (!mSpatialBridge) { if (mVObjp->isHUDAttachment()) { setSpatialBridge(new LLHUDBridge(this)); } else if (mVObjp->isAttachment()) { setSpatialBridge(new LLAttachmentBridge(this)); } else { setSpatialBridge(new LLVolumeBridge(this)); } } return mSpatialBridge->asPartition(); } else { retval = getParent()->getSpatialPartition(); } if (retval && mSpatialBridge.notNull()) { mSpatialBridge->markDead(); setSpatialBridge(NULL); } return retval; }
void LLDrawable::makeStatic(BOOL warning_enabled) { if (isState(ACTIVE) && !isState(ACTIVE_CHILD) && !mVObjp->isAttachment() && !mVObjp->isFlexible()) { clearState(ACTIVE | ANIMATED_CHILD); //drawable became static with active parent, not acceptable llassert(mParent.isNull() || !mParent->isActive() || !warning_enabled); LLViewerObject::const_child_list_t& child_list = mVObjp->getChildren(); for (LLViewerObject::child_list_t::const_iterator iter = child_list.begin(); iter != child_list.end(); iter++) { LLViewerObject* child = *iter; LLDrawable* child_drawable = child->mDrawable; if (child_drawable) { if (child_drawable->getParent() != this) { LL_WARNS() << "Child drawable has unknown parent." << LL_ENDL; } child_drawable->makeStatic(warning_enabled); } } if (mVObjp->getPCode() == LL_PCODE_VOLUME) { gPipeline.markRebuild(this, LLDrawable::REBUILD_VOLUME, TRUE); } if (mSpatialBridge) { mSpatialBridge->markDead(); setSpatialBridge(NULL); } updatePartition(); } }
void LLDrawable::makeStatic(BOOL warning_enabled) { if (isState(ACTIVE)) { clearState(ACTIVE); gPipeline.setActive(this, FALSE); if (mParent.notNull() && mParent->isActive() && warning_enabled) { LL_WARNS_ONCE("Drawable") << "Drawable becomes static with active parent!" << LL_ENDL; } LLViewerObject::const_child_list_t& child_list = mVObjp->getChildren(); for (LLViewerObject::child_list_t::const_iterator iter = child_list.begin(); iter != child_list.end(); iter++) { LLViewerObject* child = *iter; LLDrawable* child_drawable = child->mDrawable; if (child_drawable) { if (child_drawable->getParent() != this) { llwarns << "Child drawable has unknown parent." << llendl; } child_drawable->makeStatic(warning_enabled); } } if (mVObjp->getPCode() == LL_PCODE_VOLUME) { gPipeline.markRebuild(this, LLDrawable::REBUILD_VOLUME, TRUE); } if (mSpatialBridge) { mSpatialBridge->markDead(); setSpatialBridge(NULL); } } updatePartition(); }