diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index cf4dc5c8cd..331d684e6d 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -1068,7 +1068,10 @@ void LLAgent::capabilityReceivedCallback(const LLUUID ®ion_id, LLViewerRegion if (gAgent.getInterestListMode() == LLViewerRegion::IL_MODE_360) { - gAgent.changeInterestListMode(LLViewerRegion::IL_MODE_360); + // make this actually work + // gAgent.changeInterestListMode(LLViewerRegion::IL_MODE_360); + regionp->setInterestListMode(LLViewerRegion::IL_MODE_360); + // } } } @@ -1124,6 +1127,14 @@ void LLAgent::setRegion(LLViewerRegion *regionp) { regionp->requestSimulatorFeatures(); LLAppViewer::instance()->updateNameLookupUrl(regionp); + // move the interestlist update to a place where it is safe. + // Set the region to the desired interest list mode + if (getInterestListMode() == LLViewerRegion::IL_MODE_360) + { + changeInterestListMode(LLViewerRegion::IL_MODE_360); + regionp->setCapabilitiesReceivedCallback(LLAgent::capabilityReceivedCallback); + } + // } else { @@ -3510,7 +3521,7 @@ void LLAgent::changeInterestListMode(const std::string &new_mode) if ( (new_mode == LLViewerRegion::IL_MODE_DEFAULT && (!mFSAreaSearchActive && !m360CaptureActive)) || (new_mode == LLViewerRegion::IL_MODE_360) ) { - LL_DEBUGS("360Capture") << "Setting Agent interest list mode to " << mInterestListMode << " and updating regions" << LL_ENDL; + LL_DEBUGS("360Capture") << "Setting Agent interest list mode to " << new_mode << " and updating regions" << LL_ENDL; // mInterestListMode = new_mode; // Change interest list mode for all regions. If they are already set for the current mode, diff --git a/indra/newview/llfloater360capture.cpp b/indra/newview/llfloater360capture.cpp index 30551da3ea..97377b5ca9 100644 --- a/indra/newview/llfloater360capture.cpp +++ b/indra/newview/llfloater360capture.cpp @@ -83,12 +83,18 @@ LLFloater360Capture::~LLFloater360Capture() // Normally LLFloater360Capture tells the Simulator send everything // and now reverts to the regular "keyhole" frustum of interest // list updates. - if (!LLApp::isExiting() && - // gSavedSettings.getBOOL("360CaptureUseInterestListCap") && // Invalid dependency - This is not used anywhere else now. - mStartILMode != gAgent.getInterestListMode()) + // This whole thing is wrong because it is not a simple before/after state states can overlap. + // if (!LLApp::isExiting() && + // // gSavedSettings.getBOOL("360CaptureUseInterestListCap") && // Invalid dependency - This is not used anywhere else now. + // mStartILMode != gAgent.getInterestListMode()) + // { + // gAgent.set360CaptureActive(false); // make FS Area search work again + // gAgent.changeInterestListMode(mStartILMode); + // } + if ( !LLApp::isExiting() ) { gAgent.set360CaptureActive(false); // make FS Area search work again - gAgent.changeInterestListMode(mStartILMode); + gAgent.changeInterestListMode(LLViewerRegion::IL_MODE_DEFAULT);// The Change Interest Mode target mode is indicative only. If something else is holding the 360 mode open then this will be ignored. } } diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 14773e147f..f8e90bd8db 100755 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -106,7 +106,6 @@ const S32 MAX_CAP_REQUEST_ATTEMPTS = 30; const U32 DEFAULT_MAX_REGION_WIDE_PRIM_COUNT = 15000; -bool LLViewerRegion::sFSAreaSearchActive = false; // FIRE-32688 Area Search improvements BOOL LLViewerRegion::sVOCacheCullingEnabled = FALSE; S32 LLViewerRegion::sLastCameraUpdated = 0; S32 LLViewerRegion::sNewObjectCreationThrottle = -1; @@ -3541,8 +3540,10 @@ void LLViewerRegion::setCapabilitiesReceived(bool received) // This is a single-shot signal. Forget callbacks to save resources. mCapabilitiesReceivedSignal.disconnect_all_slots(); - // Set the region to the desired interest list mode - setInterestListMode(gAgent.getInterestListMode()); + // 360/AreaSearch fix - Move this to agent callback to avoid premature triggere with null region + // // Set the region to the desired interest list mode + // setInterestListMode(gAgent.getInterestListMode()); + // } } diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h index b07578df75..c07ffefd44 100644 --- a/indra/newview/llviewerregion.h +++ b/indra/newview/llviewerregion.h @@ -489,7 +489,6 @@ public: std::vector mMapAvatars; std::vector mMapAvatarIDs; - static bool sFSAreaSearchActive; // FIRE-32688 Area Search improvements static BOOL sVOCacheCullingEnabled; //vo cache culling enabled or not. static S32 sLastCameraUpdated; diff --git a/indra/newview/llvocache.cpp b/indra/newview/llvocache.cpp index b92f147506..9465d132b5 100644 --- a/indra/newview/llvocache.cpp +++ b/indra/newview/llvocache.cpp @@ -35,6 +35,7 @@ #include "pipeline.h" #include "llagentcamera.h" #include "llmemory.h" +#include "llagent.h" // For gAgent //static variables U32 LLVOCacheEntry::sMinFrameRange = 0; @@ -451,7 +452,7 @@ F32 LLVOCacheEntry::getSquaredPixelThreshold(bool is_front) bool LLVOCacheEntry::isAnyVisible(const LLVector4a& camera_origin, const LLVector4a& local_camera_origin, F32 dist_threshold) { - if( LLViewerRegion::sFSAreaSearchActive ) { return true; } // FIRE-32688 Area Search improvements + if( gAgent.getFSAreaSearchActive() ) { return true; } // FIRE-32688 Area Search improvements LLOcclusionCullingGroup* group = (LLOcclusionCullingGroup*)getGroup(); if(!group) { @@ -948,10 +949,7 @@ S32 LLVOCachePartition::cull(LLCamera &camera, bool do_occlusion) //process back objects selection selectBackObjects(camera, LLVOCacheEntry::getSquaredPixelThreshold(mFrontCull), - // FIRE-32688 Area Search improvements - // do_occlusion && use_object_cache_occlusion); - do_occlusion && use_object_cache_occlusion && !LLViewerRegion::sFSAreaSearchActive); - // + do_occlusion && use_object_cache_occlusion); return 0; //nothing changed, reduce frequency of culling } } @@ -965,10 +963,7 @@ S32 LLVOCachePartition::cull(LLCamera &camera, bool do_occlusion) camera.calcRegionFrustumPlanes(region_agent, gAgentCamera.mDrawDistance); mFrontCull = TRUE; - // FIRE-32688 Area Search improvements - // LLVOCacheOctreeCull culler(&camera, mRegionp, region_agent, do_occlusion && use_object_cache_occlusion, - LLVOCacheOctreeCull culler(&camera, mRegionp, region_agent, do_occlusion && use_object_cache_occlusion && !LLViewerRegion::sFSAreaSearchActive, - // + LLVOCacheOctreeCull culler(&camera, mRegionp, region_agent, do_occlusion && use_object_cache_occlusion, LLVOCacheEntry::getSquaredPixelThreshold(mFrontCull), this); culler.traverse(mOctree); diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 6e993b2a62..ddabeba9db 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -2592,7 +2592,7 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, LLPlane* pla LLVOCachePartition* vo_part = region->getVOCachePartition(); if(vo_part) { - bool do_occlusion_cull = can_use_occlusion && use_occlusion && !gUseWireframe; + bool do_occlusion_cull = can_use_occlusion && use_occlusion && !gUseWireframe && !gAgent.getFSAreaSearchActive(); vo_part->cull(camera, do_occlusion_cull); } }