SH-2564. Testing region visibility driven by spatial partitions.
This commit is contained in:
@@ -597,25 +597,25 @@ void LLWorld::updateVisibilities()
|
|||||||
{
|
{
|
||||||
F32 cur_far_clip = LLViewerCamera::getInstance()->getFar();
|
F32 cur_far_clip = LLViewerCamera::getInstance()->getFar();
|
||||||
|
|
||||||
LLViewerCamera::getInstance()->setFar(mLandFarClip);
|
|
||||||
|
|
||||||
F32 diagonal_squared = F_SQRT2 * F_SQRT2 * mWidth * mWidth;
|
|
||||||
// Go through the culled list and check for visible regions
|
// Go through the culled list and check for visible regions
|
||||||
for (region_list_t::iterator iter = mCulledRegionList.begin();
|
for (region_list_t::iterator iter = mCulledRegionList.begin();
|
||||||
iter != mCulledRegionList.end(); )
|
iter != mCulledRegionList.end(); )
|
||||||
{
|
{
|
||||||
region_list_t::iterator curiter = iter++;
|
region_list_t::iterator curiter = iter++;
|
||||||
LLViewerRegion* regionp = *curiter;
|
LLViewerRegion* regionp = *curiter;
|
||||||
F32 height = regionp->getLand().getMaxZ() - regionp->getLand().getMinZ();
|
|
||||||
F32 radius = 0.5f*(F32) sqrt(height * height + diagonal_squared);
|
LLSpatialPartition* part = regionp->getSpatialPartition(LLViewerRegion::PARTITION_TERRAIN);
|
||||||
if (!regionp->getLand().hasZData()
|
if (part)
|
||||||
|| LLViewerCamera::getInstance()->sphereInFrustum(regionp->getCenterAgent(), radius))
|
|
||||||
{
|
{
|
||||||
mCulledRegionList.erase(curiter);
|
LLSpatialGroup* group = (LLSpatialGroup*) part->mOctree->getListener(0);
|
||||||
mVisibleRegionList.push_back(regionp);
|
if (LLViewerCamera::getInstance()->AABBInFrustum(group->mBounds[0], group->mBounds[1]))
|
||||||
|
{
|
||||||
|
mCulledRegionList.erase(curiter);
|
||||||
|
mVisibleRegionList.push_back(regionp);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update all of the visible regions
|
// Update all of the visible regions
|
||||||
for (region_list_t::iterator iter = mVisibleRegionList.begin();
|
for (region_list_t::iterator iter = mVisibleRegionList.begin();
|
||||||
iter != mVisibleRegionList.end(); )
|
iter != mVisibleRegionList.end(); )
|
||||||
@@ -627,20 +627,23 @@ void LLWorld::updateVisibilities()
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
F32 height = regionp->getLand().getMaxZ() - regionp->getLand().getMinZ();
|
LLSpatialPartition* part = regionp->getSpatialPartition(LLViewerRegion::PARTITION_TERRAIN);
|
||||||
F32 radius = 0.5f*(F32) sqrt(height * height + diagonal_squared);
|
if (part)
|
||||||
if (LLViewerCamera::getInstance()->sphereInFrustum(regionp->getCenterAgent(), radius))
|
|
||||||
{
|
{
|
||||||
regionp->calculateCameraDistance();
|
LLSpatialGroup* group = (LLSpatialGroup*) part->mOctree->getListener(0);
|
||||||
if (!gNoRender)
|
if (LLViewerCamera::getInstance()->AABBInFrustum(group->mBounds[0], group->mBounds[1]))
|
||||||
{
|
{
|
||||||
regionp->getLand().updatePatchVisibilities(gAgent);
|
regionp->calculateCameraDistance();
|
||||||
|
if (!gNoRender)
|
||||||
|
{
|
||||||
|
regionp->getLand().updatePatchVisibilities(gAgent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mVisibleRegionList.erase(curiter);
|
||||||
|
mCulledRegionList.push_back(regionp);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mVisibleRegionList.erase(curiter);
|
|
||||||
mCulledRegionList.push_back(regionp);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user