merge
commit
0980df1e0c
|
|
@ -3018,6 +3018,9 @@ void LLAgent::endAnimationUpdateUI()
|
|||
//-----------------------------------------------------------------------------
|
||||
void LLAgent::updateCamera()
|
||||
{
|
||||
static LLFastTimer::DeclareTimer ftm("Camera");
|
||||
LLFastTimer t(ftm);
|
||||
|
||||
//Ventrella - changed camera_skyward to the new global "mCameraUpVector"
|
||||
mCameraUpVector = LLVector3::z_axis;
|
||||
//LLVector3 camera_skyward(0.f, 0.f, 1.f);
|
||||
|
|
|
|||
|
|
@ -3593,13 +3593,15 @@ void LLAppViewer::idle()
|
|||
|
||||
{
|
||||
// Handle pending gesture processing
|
||||
static LLFastTimer::DeclareTimer ftm("Agent Position");
|
||||
LLFastTimer t(ftm);
|
||||
LLGestureManager::instance().update();
|
||||
|
||||
gAgent.updateAgentPosition(gFrameDTClamped, yaw, current_mouse.mX, current_mouse.mY);
|
||||
}
|
||||
|
||||
{
|
||||
LLFastTimer t(FTM_OBJECTLIST_UPDATE); // Actually "object update"
|
||||
LLFastTimer t(FTM_OBJECTLIST_UPDATE);
|
||||
|
||||
if (!(logoutRequestSent() && hasSavedFinalSnapshot()))
|
||||
{
|
||||
|
|
@ -3633,6 +3635,8 @@ void LLAppViewer::idle()
|
|||
//
|
||||
|
||||
{
|
||||
static LLFastTimer::DeclareTimer ftm("HUD Effects");
|
||||
LLFastTimer t(ftm);
|
||||
LLSelectMgr::getInstance()->updateEffects();
|
||||
LLHUDManager::getInstance()->cleanupEffects();
|
||||
LLHUDManager::getInstance()->sendEffects();
|
||||
|
|
@ -3889,7 +3893,7 @@ void LLAppViewer::sendLogoutRequest()
|
|||
static F32 CheckMessagesMaxTime = CHECK_MESSAGES_DEFAULT_MAX_TIME;
|
||||
#endif
|
||||
|
||||
static LLFastTimer::DeclareTimer FTM_IDLE_NETWORK("Network");
|
||||
static LLFastTimer::DeclareTimer FTM_IDLE_NETWORK("Idle Network");
|
||||
|
||||
void LLAppViewer::idleNetwork()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -386,8 +386,6 @@ void LLDrawable::makeActive()
|
|||
mParent->makeActive();
|
||||
}
|
||||
|
||||
gPipeline.setActive(this, TRUE);
|
||||
|
||||
//all child objects must also be active
|
||||
llassert_always(mVObjp);
|
||||
|
||||
|
|
@ -434,7 +432,6 @@ void LLDrawable::makeStatic(BOOL warning_enabled)
|
|||
if (isState(ACTIVE))
|
||||
{
|
||||
clearState(ACTIVE);
|
||||
gPipeline.setActive(this, FALSE);
|
||||
|
||||
if (mParent.notNull() && mParent->isActive() && warning_enabled)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -51,6 +51,9 @@
|
|||
|
||||
/*static*/ F32 LLVolumeImplFlexible::sUpdateFactor = 1.0f;
|
||||
|
||||
static LLFastTimer::DeclareTimer FTM_FLEXIBLE_REBUILD("Rebuild");
|
||||
static LLFastTimer::DeclareTimer FTM_DO_FLEXIBLE_UPDATE("Update");
|
||||
|
||||
// LLFlexibleObjectData::pack/unpack now in llprimitive.cpp
|
||||
|
||||
//-----------------------------------------------
|
||||
|
|
@ -194,7 +197,6 @@ void LLVolumeImplFlexible::remapSections(LLFlexibleObjectSection *source, S32 so
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
void LLVolumeImplFlexible::setAttributesOfAllSections(LLVector3* inScale)
|
||||
{
|
||||
|
|
@ -363,6 +365,7 @@ inline S32 log2(S32 x)
|
|||
|
||||
void LLVolumeImplFlexible::doFlexibleUpdate()
|
||||
{
|
||||
LLFastTimer ftm(FTM_DO_FLEXIBLE_UPDATE);
|
||||
LLVolume* volume = mVO->getVolume();
|
||||
LLPath *path = &volume->getPath();
|
||||
if (mSimulateRes == 0)
|
||||
|
|
@ -693,7 +696,10 @@ BOOL LLVolumeImplFlexible::doUpdateGeometry(LLDrawable *drawable)
|
|||
}
|
||||
|
||||
volume->updateRelativeXform();
|
||||
doFlexibleUpdate();
|
||||
{
|
||||
LLFastTimer t(FTM_DO_FLEXIBLE_UPDATE);
|
||||
doFlexibleUpdate();
|
||||
}
|
||||
|
||||
// Object may have been rotated, which means it needs a rebuild. See SL-47220
|
||||
BOOL rotated = FALSE;
|
||||
|
|
@ -710,7 +716,10 @@ BOOL LLVolumeImplFlexible::doUpdateGeometry(LLDrawable *drawable)
|
|||
volume->regenFaces();
|
||||
volume->mDrawable->setState(LLDrawable::REBUILD_VOLUME);
|
||||
volume->dirtySpatialGroup();
|
||||
doFlexibleRebuild();
|
||||
{
|
||||
LLFastTimer t(FTM_FLEXIBLE_REBUILD);
|
||||
doFlexibleRebuild();
|
||||
}
|
||||
volume->genBBoxes(isVolumeGlobal());
|
||||
}
|
||||
else if (!mUpdated || rotated)
|
||||
|
|
|
|||
|
|
@ -897,19 +897,21 @@ void LLViewerObjectList::renderObjectBeacons()
|
|||
S32 last_line_width = -1;
|
||||
// gGL.begin(LLRender::LINES); // Always happens in (line_width != last_line_width)
|
||||
|
||||
for (S32 i = 0; i < mDebugBeacons.count(); i++)
|
||||
BOOL flush = FALSE;
|
||||
for (std::vector<LLDebugBeacon>::iterator iter = mDebugBeacons.begin(); iter != mDebugBeacons.end(); ++iter)
|
||||
{
|
||||
const LLDebugBeacon &debug_beacon = mDebugBeacons[i];
|
||||
const LLDebugBeacon &debug_beacon = *iter;
|
||||
LLColor4 color = debug_beacon.mColor;
|
||||
color.mV[3] *= 0.25f;
|
||||
S32 line_width = debug_beacon.mLineWidth;
|
||||
if (line_width != last_line_width)
|
||||
{
|
||||
if (i > 0)
|
||||
if (flush)
|
||||
{
|
||||
gGL.end();
|
||||
gGL.flush();
|
||||
}
|
||||
flush = TRUE;
|
||||
gGL.flush();
|
||||
glLineWidth( (F32)line_width );
|
||||
last_line_width = line_width;
|
||||
gGL.begin(LLRender::LINES);
|
||||
|
|
@ -936,18 +938,20 @@ void LLViewerObjectList::renderObjectBeacons()
|
|||
S32 last_line_width = -1;
|
||||
// gGL.begin(LLRender::LINES); // Always happens in (line_width != last_line_width)
|
||||
|
||||
for (S32 i = 0; i < mDebugBeacons.count(); i++)
|
||||
BOOL flush = FALSE;
|
||||
for (std::vector<LLDebugBeacon>::iterator iter = mDebugBeacons.begin(); iter != mDebugBeacons.end(); ++iter)
|
||||
{
|
||||
const LLDebugBeacon &debug_beacon = mDebugBeacons[i];
|
||||
const LLDebugBeacon &debug_beacon = *iter;
|
||||
|
||||
S32 line_width = debug_beacon.mLineWidth;
|
||||
if (line_width != last_line_width)
|
||||
{
|
||||
if (i > 0)
|
||||
if (flush)
|
||||
{
|
||||
gGL.end();
|
||||
gGL.flush();
|
||||
}
|
||||
flush = TRUE;
|
||||
gGL.flush();
|
||||
glLineWidth( (F32)line_width );
|
||||
last_line_width = line_width;
|
||||
gGL.begin(LLRender::LINES);
|
||||
|
|
@ -969,9 +973,9 @@ void LLViewerObjectList::renderObjectBeacons()
|
|||
gGL.flush();
|
||||
glLineWidth(1.f);
|
||||
|
||||
for (S32 i = 0; i < mDebugBeacons.count(); i++)
|
||||
for (std::vector<LLDebugBeacon>::iterator iter = mDebugBeacons.begin(); iter != mDebugBeacons.end(); ++iter)
|
||||
{
|
||||
LLDebugBeacon &debug_beacon = mDebugBeacons[i];
|
||||
LLDebugBeacon &debug_beacon = *iter;
|
||||
if (debug_beacon.mString == "")
|
||||
{
|
||||
continue;
|
||||
|
|
|
|||
|
|
@ -2001,6 +2001,9 @@ BOOL LLViewerObject::isActive() const
|
|||
|
||||
BOOL LLViewerObject::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
||||
{
|
||||
static LLFastTimer::DeclareTimer ftm("Viewer Object");
|
||||
LLFastTimer t(ftm);
|
||||
|
||||
if (mDead)
|
||||
{
|
||||
// It's dead. Don't update it.
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@ extern LLPipeline gPipeline;
|
|||
|
||||
// Statics for object lookup tables.
|
||||
U32 LLViewerObjectList::sSimulatorMachineIndex = 1; // Not zero deliberately, to speed up index check.
|
||||
LLMap<U64, U32> LLViewerObjectList::sIPAndPortToIndex;
|
||||
std::map<U64, U32> LLViewerObjectList::sIPAndPortToIndex;
|
||||
std::map<U64, LLUUID> LLViewerObjectList::sIndexAndLocalIDToUUID;
|
||||
|
||||
LLViewerObjectList::LLViewerObjectList()
|
||||
|
|
@ -571,10 +571,9 @@ void LLViewerObjectList::processCachedObjectUpdate(LLMessageSystem *mesgsys,
|
|||
|
||||
void LLViewerObjectList::dirtyAllObjectInventory()
|
||||
{
|
||||
S32 count = mObjects.count();
|
||||
for(S32 i = 0; i < count; ++i)
|
||||
for (vobj_list_t::iterator iter = mObjects.begin(); iter != mObjects.end(); ++iter)
|
||||
{
|
||||
mObjects[i]->dirtyInventory();
|
||||
(*iter)->dirtyInventory();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -587,14 +586,14 @@ void LLViewerObjectList::updateApparentAngles(LLAgent &agent)
|
|||
S32 num_updates, max_value;
|
||||
if (NUM_BINS - 1 == mCurBin)
|
||||
{
|
||||
num_updates = mObjects.count() - mCurLazyUpdateIndex;
|
||||
max_value = mObjects.count();
|
||||
num_updates = (S32) mObjects.size() - mCurLazyUpdateIndex;
|
||||
max_value = (S32) mObjects.size();
|
||||
gTextureList.setUpdateStats(TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
num_updates = (mObjects.count() / NUM_BINS) + 1;
|
||||
max_value = llmin(mObjects.count(), mCurLazyUpdateIndex + num_updates);
|
||||
num_updates = ((S32) mObjects.size() / NUM_BINS) + 1;
|
||||
max_value = llmin((S32) mObjects.size(), mCurLazyUpdateIndex + num_updates);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -647,7 +646,7 @@ void LLViewerObjectList::updateApparentAngles(LLAgent &agent)
|
|||
}
|
||||
|
||||
mCurLazyUpdateIndex = max_value;
|
||||
if (mCurLazyUpdateIndex == mObjects.count())
|
||||
if (mCurLazyUpdateIndex == mObjects.size())
|
||||
{
|
||||
mCurLazyUpdateIndex = 0;
|
||||
}
|
||||
|
|
@ -694,20 +693,26 @@ void LLViewerObjectList::update(LLAgent &agent, LLWorld &world)
|
|||
|
||||
// Make a copy of the list in case something in idleUpdate() messes with it
|
||||
std::vector<LLViewerObject*> idle_list;
|
||||
idle_list.reserve( mActiveObjects.size() );
|
||||
|
||||
static LLFastTimer::DeclareTimer idle_copy("Idle Copy");
|
||||
|
||||
for (std::set<LLPointer<LLViewerObject> >::iterator active_iter = mActiveObjects.begin();
|
||||
active_iter != mActiveObjects.end(); active_iter++)
|
||||
{
|
||||
objectp = *active_iter;
|
||||
if (objectp)
|
||||
LLFastTimer t(idle_copy);
|
||||
idle_list.reserve( mActiveObjects.size() );
|
||||
|
||||
for (std::set<LLPointer<LLViewerObject> >::iterator active_iter = mActiveObjects.begin();
|
||||
active_iter != mActiveObjects.end(); active_iter++)
|
||||
{
|
||||
idle_list.push_back( objectp );
|
||||
}
|
||||
else
|
||||
{ // There shouldn't be any NULL pointers in the list, but they have caused
|
||||
// crashes before. This may be idleUpdate() messing with the list.
|
||||
llwarns << "LLViewerObjectList::update has a NULL objectp" << llendl;
|
||||
objectp = *active_iter;
|
||||
if (objectp)
|
||||
{
|
||||
idle_list.push_back( objectp );
|
||||
}
|
||||
else
|
||||
{ // There shouldn't be any NULL pointers in the list, but they have caused
|
||||
// crashes before. This may be idleUpdate() messing with the list.
|
||||
llwarns << "LLViewerObjectList::update has a NULL objectp" << llendl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -807,7 +812,7 @@ void LLViewerObjectList::update(LLAgent &agent, LLWorld &world)
|
|||
}
|
||||
*/
|
||||
|
||||
LLViewerStats::getInstance()->mNumObjectsStat.addValue(mObjects.count());
|
||||
LLViewerStats::getInstance()->mNumObjectsStat.addValue((S32) mObjects.size());
|
||||
LLViewerStats::getInstance()->mNumActiveObjectsStat.addValue(num_active_objects);
|
||||
LLViewerStats::getInstance()->mNumSizeCulledStat.addValue(mNumSizeCulled);
|
||||
LLViewerStats::getInstance()->mNumVisCulledStat.addValue(mNumVisCulled);
|
||||
|
|
@ -815,9 +820,9 @@ void LLViewerObjectList::update(LLAgent &agent, LLWorld &world)
|
|||
|
||||
void LLViewerObjectList::clearDebugText()
|
||||
{
|
||||
for (S32 i = 0; i < mObjects.count(); i++)
|
||||
for (vobj_list_t::iterator iter = mObjects.begin(); iter != mObjects.end(); ++iter)
|
||||
{
|
||||
mObjects[i]->setDebugText("");
|
||||
(*iter)->setDebugText("");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -856,7 +861,7 @@ void LLViewerObjectList::cleanupReferences(LLViewerObject *objectp)
|
|||
|
||||
if (objectp->isOnMap())
|
||||
{
|
||||
mMapObjects.removeObj(objectp);
|
||||
removeFromMap(objectp);
|
||||
}
|
||||
|
||||
// Don't clean up mObject references, these will be cleaned up more efficiently later!
|
||||
|
|
@ -913,10 +918,10 @@ void LLViewerObjectList::killObjects(LLViewerRegion *regionp)
|
|||
{
|
||||
LLViewerObject *objectp;
|
||||
|
||||
S32 i;
|
||||
for (i = 0; i < mObjects.count(); i++)
|
||||
|
||||
for (vobj_list_t::iterator iter = mObjects.begin(); iter != mObjects.end(); ++iter)
|
||||
{
|
||||
objectp = mObjects[i];
|
||||
objectp = *iter;
|
||||
|
||||
if (objectp->mRegionp == regionp)
|
||||
{
|
||||
|
|
@ -933,10 +938,9 @@ void LLViewerObjectList::killAllObjects()
|
|||
// Used only on global destruction.
|
||||
LLViewerObject *objectp;
|
||||
|
||||
for (S32 i = 0; i < mObjects.count(); i++)
|
||||
for (vobj_list_t::iterator iter = mObjects.begin(); iter != mObjects.end(); ++iter)
|
||||
{
|
||||
objectp = mObjects[i];
|
||||
|
||||
objectp = *iter;
|
||||
killObject(objectp);
|
||||
llassert(objectp->isDead());
|
||||
}
|
||||
|
|
@ -945,7 +949,7 @@ void LLViewerObjectList::killAllObjects()
|
|||
|
||||
if(!mObjects.empty())
|
||||
{
|
||||
llwarns << "LLViewerObjectList::killAllObjects still has entries in mObjects: " << mObjects.count() << llendl;
|
||||
llwarns << "LLViewerObjectList::killAllObjects still has entries in mObjects: " << mObjects.size() << llendl;
|
||||
mObjects.clear();
|
||||
}
|
||||
|
||||
|
|
@ -970,16 +974,15 @@ void LLViewerObjectList::cleanDeadObjects(BOOL use_timer)
|
|||
return;
|
||||
}
|
||||
|
||||
S32 i = 0;
|
||||
S32 num_removed = 0;
|
||||
LLViewerObject *objectp;
|
||||
while (i < mObjects.count())
|
||||
for (vobj_list_t::iterator iter = mObjects.begin(); iter != mObjects.end(); )
|
||||
{
|
||||
// Scan for all of the dead objects and remove any "global" references to them.
|
||||
objectp = mObjects[i];
|
||||
objectp = *iter;
|
||||
if (objectp->isDead())
|
||||
{
|
||||
mObjects.remove(i);
|
||||
iter = mObjects.erase(iter);
|
||||
num_removed++;
|
||||
|
||||
if (num_removed == mNumDeadObjects)
|
||||
|
|
@ -990,8 +993,7 @@ void LLViewerObjectList::cleanDeadObjects(BOOL use_timer)
|
|||
}
|
||||
else
|
||||
{
|
||||
// iterate, this isn't a dead object.
|
||||
i++;
|
||||
++iter;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1041,12 +1043,11 @@ void LLViewerObjectList::shiftObjects(const LLVector3 &offset)
|
|||
}
|
||||
|
||||
LLViewerObject *objectp;
|
||||
S32 i;
|
||||
for (i = 0; i < mObjects.count(); i++)
|
||||
for (vobj_list_t::iterator iter = mObjects.begin(); iter != mObjects.end(); ++iter)
|
||||
{
|
||||
objectp = getObject(i);
|
||||
objectp = *iter;
|
||||
// There could be dead objects on the object list, so don't update stuff if the object is dead.
|
||||
if (objectp)
|
||||
if (!objectp->isDead())
|
||||
{
|
||||
objectp->updatePositionCaches();
|
||||
|
||||
|
|
@ -1076,9 +1077,9 @@ void LLViewerObjectList::renderObjectsForMap(LLNetMap &netmap)
|
|||
|
||||
F32 max_radius = gSavedSettings.getF32("MiniMapPrimMaxRadius");
|
||||
|
||||
for (S32 i = 0; i < mMapObjects.count(); i++)
|
||||
for (vobj_list_t::iterator iter = mMapObjects.begin(); iter != mMapObjects.end(); ++iter)
|
||||
{
|
||||
LLViewerObject* objectp = mMapObjects[i];
|
||||
LLViewerObject* objectp = *iter;
|
||||
if (!objectp->getRegion() || objectp->isOrphaned() || objectp->isAttachment())
|
||||
{
|
||||
continue;
|
||||
|
|
@ -1144,21 +1145,14 @@ void LLViewerObjectList::renderObjectBounds(const LLVector3 ¢er)
|
|||
{
|
||||
}
|
||||
|
||||
void LLViewerObjectList::renderObjectsForSelect(LLCamera &camera, const LLRect& screen_rect, BOOL pick_parcel_wall, BOOL render_transparent)
|
||||
{
|
||||
generatePickList(camera);
|
||||
renderPickList(screen_rect, pick_parcel_wall, render_transparent);
|
||||
}
|
||||
|
||||
void LLViewerObjectList::generatePickList(LLCamera &camera)
|
||||
{
|
||||
LLViewerObject *objectp;
|
||||
S32 i;
|
||||
// Reset all of the GL names to zero.
|
||||
for (i = 0; i < mObjects.count(); i++)
|
||||
for (vobj_list_t::iterator iter = mObjects.begin(); iter != mObjects.end(); ++iter)
|
||||
{
|
||||
objectp = mObjects[i];
|
||||
objectp->mGLName = 0;
|
||||
(*iter)->mGLName = 0;
|
||||
}
|
||||
|
||||
mSelectPickList.clear();
|
||||
|
|
@ -1321,17 +1315,19 @@ void LLViewerObjectList::addDebugBeacon(const LLVector3 &pos_agent,
|
|||
const LLColor4 &text_color,
|
||||
S32 line_width)
|
||||
{
|
||||
LLDebugBeacon *beaconp = mDebugBeacons.reserve_block(1);
|
||||
beaconp->mPositionAgent = pos_agent;
|
||||
beaconp->mString = string;
|
||||
beaconp->mColor = color;
|
||||
beaconp->mTextColor = text_color;
|
||||
beaconp->mLineWidth = line_width;
|
||||
LLDebugBeacon beacon;
|
||||
beacon.mPositionAgent = pos_agent;
|
||||
beacon.mString = string;
|
||||
beacon.mColor = color;
|
||||
beacon.mTextColor = text_color;
|
||||
beacon.mLineWidth = line_width;
|
||||
|
||||
mDebugBeacons.push_back(beacon);
|
||||
}
|
||||
|
||||
void LLViewerObjectList::resetObjectBeacons()
|
||||
{
|
||||
mDebugBeacons.reset();
|
||||
mDebugBeacons.clear();
|
||||
}
|
||||
|
||||
LLViewerObject *LLViewerObjectList::createObjectViewer(const LLPCode pcode, LLViewerRegion *regionp)
|
||||
|
|
@ -1349,7 +1345,7 @@ LLViewerObject *LLViewerObjectList::createObjectViewer(const LLPCode pcode, LLVi
|
|||
|
||||
mUUIDObjectMap[fullid] = objectp;
|
||||
|
||||
mObjects.put(objectp);
|
||||
mObjects.push_back(objectp);
|
||||
|
||||
updateActive(objectp);
|
||||
|
||||
|
|
@ -1388,7 +1384,7 @@ LLViewerObject *LLViewerObjectList::createObject(const LLPCode pcode, LLViewerRe
|
|||
gMessageSystem->getSenderIP(),
|
||||
gMessageSystem->getSenderPort());
|
||||
|
||||
mObjects.put(objectp);
|
||||
mObjects.push_back(objectp);
|
||||
|
||||
updateActive(objectp);
|
||||
|
||||
|
|
@ -1411,11 +1407,11 @@ LLViewerObject *LLViewerObjectList::replaceObject(const LLUUID &id, const LLPCod
|
|||
S32 LLViewerObjectList::findReferences(LLDrawable *drawablep) const
|
||||
{
|
||||
LLViewerObject *objectp;
|
||||
S32 i;
|
||||
S32 num_refs = 0;
|
||||
for (i = 0; i < mObjects.count(); i++)
|
||||
|
||||
for (vobj_list_t::const_iterator iter = mObjects.begin(); iter != mObjects.end(); ++iter)
|
||||
{
|
||||
objectp = mObjects[i];
|
||||
objectp = *iter;
|
||||
if (objectp->mDrawable.notNull())
|
||||
{
|
||||
num_refs += objectp->mDrawable->findReferences(drawablep);
|
||||
|
|
@ -1460,15 +1456,15 @@ void LLViewerObjectList::orphanize(LLViewerObject *childp, U32 parent_id, U32 ip
|
|||
// Unknown parent, add to orpaned child list
|
||||
U64 parent_info = getIndex(parent_id, ip, port);
|
||||
|
||||
if (-1 == mOrphanParents.find(parent_info))
|
||||
if (std::find(mOrphanParents.begin(), mOrphanParents.end(), parent_info) == mOrphanParents.end())
|
||||
{
|
||||
mOrphanParents.put(parent_info);
|
||||
mOrphanParents.push_back(parent_info);
|
||||
}
|
||||
|
||||
LLViewerObjectList::OrphanInfo oi(parent_info, childp->mID);
|
||||
if (-1 == mOrphanChildren.find(oi))
|
||||
if (std::find(mOrphanChildren.begin(), mOrphanChildren.end(), oi) == mOrphanChildren.end())
|
||||
{
|
||||
mOrphanChildren.put(oi);
|
||||
mOrphanChildren.push_back(oi);
|
||||
mNumOrphans++;
|
||||
}
|
||||
}
|
||||
|
|
@ -1491,28 +1487,29 @@ void LLViewerObjectList::findOrphans(LLViewerObject* objectp, U32 ip, U32 port)
|
|||
// See if we are a parent of an orphan.
|
||||
// Note: This code is fairly inefficient but it should happen very rarely.
|
||||
// It can be sped up if this is somehow a performance issue...
|
||||
if (0 == mOrphanParents.count())
|
||||
if (mOrphanParents.empty())
|
||||
{
|
||||
// no known orphan parents
|
||||
return;
|
||||
}
|
||||
if (-1 == mOrphanParents.find(getIndex(objectp->mLocalID, ip, port)))
|
||||
if (std::find(mOrphanParents.begin(), mOrphanParents.end(), getIndex(objectp->mLocalID, ip, port)) == mOrphanParents.end())
|
||||
{
|
||||
// did not find objectp in OrphanParent list
|
||||
return;
|
||||
}
|
||||
|
||||
S32 i;
|
||||
U64 parent_info = getIndex(objectp->mLocalID, ip, port);
|
||||
BOOL orphans_found = FALSE;
|
||||
// Iterate through the orphan list, and set parents of matching children.
|
||||
for (i = 0; i < mOrphanChildren.count(); i++)
|
||||
{
|
||||
if (mOrphanChildren[i].mParentInfo != parent_info)
|
||||
|
||||
for (std::vector<OrphanInfo>::iterator iter = mOrphanChildren.begin(); iter != mOrphanChildren.end(); )
|
||||
{
|
||||
if (iter->mParentInfo != parent_info)
|
||||
{
|
||||
++iter;
|
||||
continue;
|
||||
}
|
||||
LLViewerObject *childp = findObject(mOrphanChildren[i].mChildInfo);
|
||||
LLViewerObject *childp = findObject(iter->mChildInfo);
|
||||
if (childp)
|
||||
{
|
||||
if (childp == objectp)
|
||||
|
|
@ -1546,29 +1543,35 @@ void LLViewerObjectList::findOrphans(LLViewerObject* objectp, U32 ip, U32 port)
|
|||
|
||||
objectp->addChild(childp);
|
||||
orphans_found = TRUE;
|
||||
++iter;
|
||||
}
|
||||
else
|
||||
{
|
||||
llinfos << "Missing orphan child, removing from list" << llendl;
|
||||
mOrphanChildren.remove(i);
|
||||
i--;
|
||||
|
||||
iter = mOrphanChildren.erase(iter);
|
||||
}
|
||||
}
|
||||
|
||||
// Remove orphan parent and children from lists now that they've been found
|
||||
mOrphanParents.remove(mOrphanParents.find(parent_info));
|
||||
|
||||
i = 0;
|
||||
while (i < mOrphanChildren.count())
|
||||
{
|
||||
if (mOrphanChildren[i].mParentInfo == parent_info)
|
||||
std::vector<U64>::iterator iter = std::find(mOrphanParents.begin(), mOrphanParents.end(), parent_info);
|
||||
if (iter != mOrphanParents.end())
|
||||
{
|
||||
mOrphanChildren.remove(i);
|
||||
mOrphanParents.erase(iter);
|
||||
}
|
||||
}
|
||||
|
||||
for (std::vector<OrphanInfo>::iterator iter = mOrphanChildren.begin(); iter != mOrphanChildren.end(); )
|
||||
{
|
||||
if (iter->mParentInfo == parent_info)
|
||||
{
|
||||
iter = mOrphanChildren.erase(iter);
|
||||
mNumOrphans--;
|
||||
}
|
||||
else
|
||||
{
|
||||
i++;
|
||||
++iter;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -38,8 +38,6 @@
|
|||
|
||||
// common includes
|
||||
#include "llstat.h"
|
||||
#include "lldarrayptr.h"
|
||||
#include "llmap.h" // *TODO: switch to std::map
|
||||
#include "llstring.h"
|
||||
|
||||
// project includes
|
||||
|
|
@ -50,7 +48,7 @@ class LLNetMap;
|
|||
class LLDebugBeacon;
|
||||
|
||||
const U32 CLOSE_BIN_SIZE = 10;
|
||||
const U32 NUM_BINS = 16;
|
||||
const U32 NUM_BINS = 128;
|
||||
|
||||
// GL name = position in object list + GL_NAME_INDEX_OFFSET so that
|
||||
// we can have special numbers like zero.
|
||||
|
|
@ -111,13 +109,12 @@ public:
|
|||
void updateAvatarVisibility();
|
||||
|
||||
// Selection related stuff
|
||||
void renderObjectsForSelect(LLCamera &camera, const LLRect& screen_rect, BOOL pick_parcel_wall = FALSE, BOOL render_transparent = TRUE);
|
||||
void generatePickList(LLCamera &camera);
|
||||
void renderPickList(const LLRect& screen_rect, BOOL pick_parcel_wall, BOOL render_transparent);
|
||||
|
||||
LLViewerObject *getSelectedObject(const U32 object_id);
|
||||
|
||||
inline S32 getNumObjects() { return mObjects.count(); }
|
||||
inline S32 getNumObjects() { return (S32) mObjects.size(); }
|
||||
|
||||
void addToMap(LLViewerObject *objectp);
|
||||
void removeFromMap(LLViewerObject *objectp);
|
||||
|
|
@ -131,7 +128,7 @@ public:
|
|||
|
||||
S32 findReferences(LLDrawable *drawablep) const; // Find references to drawable in all objects, and return value.
|
||||
|
||||
S32 getOrphanParentCount() const { return mOrphanParents.count(); }
|
||||
S32 getOrphanParentCount() const { return (S32) mOrphanParents.size(); }
|
||||
S32 getOrphanCount() const { return mNumOrphans; }
|
||||
void orphanize(LLViewerObject *childp, U32 parent_id, U32 ip, U32 port);
|
||||
void findOrphans(LLViewerObject* objectp, U32 ip, U32 port);
|
||||
|
|
@ -179,26 +176,28 @@ public:
|
|||
S32 mNumUnknownKills;
|
||||
S32 mNumDeadObjects;
|
||||
protected:
|
||||
LLDynamicArray<U64> mOrphanParents; // LocalID/ip,port of orphaned objects
|
||||
LLDynamicArray<OrphanInfo> mOrphanChildren; // UUID's of orphaned objects
|
||||
std::vector<U64> mOrphanParents; // LocalID/ip,port of orphaned objects
|
||||
std::vector<OrphanInfo> mOrphanChildren; // UUID's of orphaned objects
|
||||
S32 mNumOrphans;
|
||||
|
||||
LLDynamicArrayPtr<LLPointer<LLViewerObject>, 256> mObjects;
|
||||
typedef std::vector<LLPointer<LLViewerObject> > vobj_list_t;
|
||||
|
||||
vobj_list_t mObjects;
|
||||
std::set<LLPointer<LLViewerObject> > mActiveObjects;
|
||||
|
||||
LLDynamicArrayPtr<LLPointer<LLViewerObject> > mMapObjects;
|
||||
vobj_list_t mMapObjects;
|
||||
|
||||
typedef std::map<LLUUID, LLPointer<LLViewerObject> > vo_map;
|
||||
vo_map mDeadObjects; // Need to keep multiple entries per UUID
|
||||
|
||||
std::map<LLUUID, LLPointer<LLViewerObject> > mUUIDObjectMap;
|
||||
|
||||
LLDynamicArray<LLDebugBeacon> mDebugBeacons;
|
||||
std::vector<LLDebugBeacon> mDebugBeacons;
|
||||
|
||||
S32 mCurLazyUpdateIndex;
|
||||
|
||||
static U32 sSimulatorMachineIndex;
|
||||
static LLMap<U64, U32> sIPAndPortToIndex;
|
||||
static std::map<U64, U32> sIPAndPortToIndex;
|
||||
|
||||
static std::map<U64, LLUUID> sIndexAndLocalIDToUUID;
|
||||
|
||||
|
|
@ -264,12 +263,16 @@ inline LLViewerObject *LLViewerObjectList::getObject(const S32 index)
|
|||
|
||||
inline void LLViewerObjectList::addToMap(LLViewerObject *objectp)
|
||||
{
|
||||
mMapObjects.put(objectp);
|
||||
mMapObjects.push_back(objectp);
|
||||
}
|
||||
|
||||
inline void LLViewerObjectList::removeFromMap(LLViewerObject *objectp)
|
||||
{
|
||||
mMapObjects.removeObj(objectp);
|
||||
std::vector<LLPointer<LLViewerObject> >::iterator iter = std::find(mMapObjects.begin(), mMapObjects.end(), objectp);
|
||||
if (iter != mMapObjects.end())
|
||||
{
|
||||
mMapObjects.erase(iter);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -2479,6 +2479,9 @@ void append_xui_tooltip(LLView* viewp, LLToolTip::Params& params)
|
|||
// event processing.
|
||||
void LLViewerWindow::updateUI()
|
||||
{
|
||||
static LLFastTimer::DeclareTimer ftm("Update UI");
|
||||
LLFastTimer t(ftm);
|
||||
|
||||
static std::string last_handle_msg;
|
||||
|
||||
LLConsole::updateClass();
|
||||
|
|
@ -3059,7 +3062,6 @@ void LLViewerWindow::saveLastMouse(const LLCoordGL &point)
|
|||
// Must be called after displayObjects is called, which sets the mGLName parameter
|
||||
// NOTE: This function gets called 3 times:
|
||||
// render_ui_3d: FALSE, FALSE, TRUE
|
||||
// renderObjectsForSelect: TRUE, pick_parcel_wall, FALSE
|
||||
// render_hud_elements: FALSE, FALSE, FALSE
|
||||
void LLViewerWindow::renderSelections( BOOL for_gl_pick, BOOL pick_parcel_walls, BOOL for_hud )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -77,9 +77,11 @@ BOOL LLVOClouds::isActive() const
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
BOOL LLVOClouds::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
||||
{
|
||||
static LLFastTimer::DeclareTimer ftm("Idle Clouds");
|
||||
LLFastTimer t(ftm);
|
||||
|
||||
if (!(gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_CLOUDS)))
|
||||
{
|
||||
return TRUE;
|
||||
|
|
|
|||
|
|
@ -84,6 +84,9 @@ BOOL LLVOTextBubble::isActive() const
|
|||
|
||||
BOOL LLVOTextBubble::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
||||
{
|
||||
static LLFastTimer::DeclareTimer ftm("Text Bubble");
|
||||
LLFastTimer t(ftm);
|
||||
|
||||
F32 dt = mUpdateTimer.getElapsedTimeF32();
|
||||
// Die after a few seconds.
|
||||
if (dt > 1.5f)
|
||||
|
|
|
|||
|
|
@ -603,6 +603,9 @@ BOOL LLVOVolume::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
|||
{
|
||||
LLViewerObject::idleUpdate(agent, world, time);
|
||||
|
||||
static LLFastTimer::DeclareTimer ftm("Volume");
|
||||
LLFastTimer t(ftm);
|
||||
|
||||
if (mDead || mDrawable.isNull())
|
||||
{
|
||||
return TRUE;
|
||||
|
|
@ -624,6 +627,18 @@ BOOL LLVOVolume::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
|||
mVolumeImpl->doIdleUpdate(agent, world, time);
|
||||
}
|
||||
|
||||
const S32 MAX_ACTIVE_OBJECT_QUIET_FRAMES = 40;
|
||||
|
||||
if (mDrawable->isActive())
|
||||
{
|
||||
if (mDrawable->isRoot() &&
|
||||
mDrawable->mQuietCount++ > MAX_ACTIVE_OBJECT_QUIET_FRAMES &&
|
||||
(!mDrawable->getParent() || !mDrawable->getParent()->isActive()))
|
||||
{
|
||||
mDrawable->makeStatic();
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
@ -1073,7 +1088,7 @@ BOOL LLVOVolume::calcLOD()
|
|||
S32 cur_detail = 0;
|
||||
|
||||
F32 radius = getVolume()->mLODScaleBias.scaledVec(getScale()).length();
|
||||
F32 distance = llmin(mDrawable->mDistanceWRTCamera, MAX_LOD_DISTANCE);
|
||||
F32 distance = mDrawable->mDistanceWRTCamera; //llmin(mDrawable->mDistanceWRTCamera, MAX_LOD_DISTANCE);
|
||||
distance *= sDistanceFactor;
|
||||
|
||||
F32 rampDist = LLVOVolume::sLODFactor * 2;
|
||||
|
|
|
|||
|
|
@ -657,6 +657,9 @@ void LLWorld::updateParticles()
|
|||
|
||||
void LLWorld::updateClouds(const F32 dt)
|
||||
{
|
||||
static LLFastTimer::DeclareTimer ftm("World Clouds");
|
||||
LLFastTimer t(ftm);
|
||||
|
||||
if (gSavedSettings.getBOOL("FreezeTime") ||
|
||||
!gSavedSettings.getBOOL("SkyUseClassicClouds"))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -116,7 +116,6 @@ const F32 BACKLIGHT_DAY_MAGNITUDE_AVATAR = 0.2f;
|
|||
const F32 BACKLIGHT_NIGHT_MAGNITUDE_AVATAR = 0.1f;
|
||||
const F32 BACKLIGHT_DAY_MAGNITUDE_OBJECT = 0.1f;
|
||||
const F32 BACKLIGHT_NIGHT_MAGNITUDE_OBJECT = 0.08f;
|
||||
const S32 MAX_ACTIVE_OBJECT_QUIET_FRAMES = 40;
|
||||
const S32 MAX_OFFSCREEN_GEOMETRY_CHANGES_PER_FRAME = 10;
|
||||
const U32 REFLECTION_MAP_RES = 128;
|
||||
|
||||
|
|
@ -1410,38 +1409,26 @@ void LLPipeline::updateMove()
|
|||
|
||||
assertInitialized();
|
||||
|
||||
for (LLDrawable::drawable_set_t::iterator iter = mRetexturedList.begin();
|
||||
iter != mRetexturedList.end(); ++iter)
|
||||
{
|
||||
LLDrawable* drawablep = *iter;
|
||||
if (drawablep && !drawablep->isDead())
|
||||
{
|
||||
drawablep->updateTexture();
|
||||
}
|
||||
}
|
||||
mRetexturedList.clear();
|
||||
static LLFastTimer::DeclareTimer ftm("Retexture");
|
||||
LLFastTimer t(ftm);
|
||||
|
||||
updateMovedList(mMovedList);
|
||||
|
||||
for (LLDrawable::drawable_set_t::iterator iter = mActiveQ.begin();
|
||||
iter != mActiveQ.end(); )
|
||||
{
|
||||
LLDrawable::drawable_set_t::iterator curiter = iter++;
|
||||
LLDrawable* drawablep = *curiter;
|
||||
if (drawablep && !drawablep->isDead())
|
||||
for (LLDrawable::drawable_set_t::iterator iter = mRetexturedList.begin();
|
||||
iter != mRetexturedList.end(); ++iter)
|
||||
{
|
||||
if (drawablep->isRoot() &&
|
||||
drawablep->mQuietCount++ > MAX_ACTIVE_OBJECT_QUIET_FRAMES &&
|
||||
(!drawablep->getParent() || !drawablep->getParent()->isActive()))
|
||||
LLDrawable* drawablep = *iter;
|
||||
if (drawablep && !drawablep->isDead())
|
||||
{
|
||||
drawablep->makeStatic(); // removes drawable and its children from mActiveQ
|
||||
iter = mActiveQ.upper_bound(drawablep); // next valid entry
|
||||
drawablep->updateTexture();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
mActiveQ.erase(curiter);
|
||||
}
|
||||
mRetexturedList.clear();
|
||||
}
|
||||
|
||||
{
|
||||
static LLFastTimer::DeclareTimer ftm("Moved List");
|
||||
LLFastTimer t(ftm);
|
||||
updateMovedList(mMovedList);
|
||||
}
|
||||
|
||||
//balance octrees
|
||||
|
|
@ -3055,12 +3042,6 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
|
|||
}
|
||||
}
|
||||
|
||||
if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_PICKING))
|
||||
{
|
||||
LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderForSelect");
|
||||
gObjectList.renderObjectsForSelect(camera, gViewerWindow->getWindowRectScaled());
|
||||
}
|
||||
else
|
||||
{
|
||||
LLFastTimer t(FTM_POOLS);
|
||||
|
||||
|
|
@ -4792,10 +4773,6 @@ void LLPipeline::findReferences(LLDrawable *drawablep)
|
|||
llinfos << "In mRetexturedList" << llendl;
|
||||
}
|
||||
|
||||
if (mActiveQ.find(drawablep) != mActiveQ.end())
|
||||
{
|
||||
llinfos << "In mActiveQ" << llendl;
|
||||
}
|
||||
if (std::find(mBuildQ1.begin(), mBuildQ1.end(), drawablep) != mBuildQ1.end())
|
||||
{
|
||||
llinfos << "In mBuildQ1" << llendl;
|
||||
|
|
@ -4952,19 +4929,6 @@ void LLPipeline::setLight(LLDrawable *drawablep, BOOL is_light)
|
|||
}
|
||||
}
|
||||
|
||||
void LLPipeline::setActive(LLDrawable *drawablep, BOOL active)
|
||||
{
|
||||
assertInitialized();
|
||||
if (active)
|
||||
{
|
||||
mActiveQ.insert(drawablep);
|
||||
}
|
||||
else
|
||||
{
|
||||
mActiveQ.erase(drawablep);
|
||||
}
|
||||
}
|
||||
|
||||
//static
|
||||
void LLPipeline::toggleRenderType(U32 type)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -270,8 +270,7 @@ public:
|
|||
void shiftObjects(const LLVector3 &offset);
|
||||
|
||||
void setLight(LLDrawable *drawablep, BOOL is_light);
|
||||
void setActive(LLDrawable *drawablep, BOOL active);
|
||||
|
||||
|
||||
BOOL hasRenderBatches(const U32 type) const;
|
||||
LLCullResult::drawinfo_list_t::iterator beginRenderMap(U32 type);
|
||||
LLCullResult::drawinfo_list_t::iterator endRenderMap(U32 type);
|
||||
|
|
@ -589,8 +588,6 @@ protected:
|
|||
|
||||
LLViewerObject::vobj_list_t mCreateQ;
|
||||
|
||||
LLDrawable::drawable_set_t mActiveQ;
|
||||
|
||||
LLDrawable::drawable_set_t mRetexturedList;
|
||||
|
||||
class HighlightItem
|
||||
|
|
|
|||
Loading…
Reference in New Issue