From 8fe8ad59a2f8df4fb1b90ee7cb4d884d9b366920 Mon Sep 17 00:00:00 2001 From: Jacek Antonelli Date: Tue, 9 Feb 2010 21:16:01 -0600 Subject: Ported some minor rendering engine changes from Snowglobe. --- ChangeLog.txt | 12 ++++++ linden/indra/newview/llappviewer.cpp | 2 +- linden/indra/newview/llviewerobject.cpp | 18 ++------ linden/indra/newview/llviewerobject.h | 1 - linden/indra/newview/llviewerobjectlist.cpp | 64 ++++++++++++++++++----------- linden/indra/newview/llvlcomposition.cpp | 9 +--- linden/indra/newview/llvosky.h | 2 +- linden/indra/newview/pipeline.cpp | 10 ++--- 8 files changed, 63 insertions(+), 55 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index d36f291..1ae938f 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -1,5 +1,17 @@ 2010-02-09 Jacek Antonelli + * Ported some minor rendering engine changes from Snowglobe. + + modified: linden/indra/newview/llappviewer.cpp + modified: linden/indra/newview/llhudobject.cpp + modified: linden/indra/newview/llviewerobject.cpp + modified: linden/indra/newview/llviewerobject.h + modified: linden/indra/newview/llviewerobjectlist.cpp + modified: linden/indra/newview/llvlcomposition.cpp + modified: linden/indra/newview/llvosky.h + modified: linden/indra/newview/pipeline.cpp + + * Ported some stats and texture console changes from Snowglobe. modified: linden/indra/newview/llappviewer.cpp diff --git a/linden/indra/newview/llappviewer.cpp b/linden/indra/newview/llappviewer.cpp index 3a509ff..1eac043 100644 --- a/linden/indra/newview/llappviewer.cpp +++ b/linden/indra/newview/llappviewer.cpp @@ -250,7 +250,7 @@ F32 gFPSClamped = 10.f; // Pretend we start at target rate. F32 gFrameDTClamped = 0.f; // Time between adjacent checks to network for packets U64 gStartTime = 0; // gStartTime is "private", used only to calculate gFrameTimeSeconds U32 gFrameStalls = 0; -const F64 FRAME_STALL_THRESHOLD = 5.0; +const F64 FRAME_STALL_THRESHOLD = 1.0; LLTimer gRenderStartTime; LLFrameTimer gForegroundTime; diff --git a/linden/indra/newview/llviewerobject.cpp b/linden/indra/newview/llviewerobject.cpp index 860052c..ca741c4 100644 --- a/linden/indra/newview/llviewerobject.cpp +++ b/linden/indra/newview/llviewerobject.cpp @@ -506,8 +506,6 @@ void LLViewerObject::setParent(LLViewerObject* parent) void LLViewerObject::addChild(LLViewerObject *childp) { - BOOL result = TRUE; - for (child_list_t::iterator i = mChildList.begin(); i != mChildList.end(); ++i) { if (*i == childp) @@ -525,16 +523,6 @@ void LLViewerObject::addChild(LLViewerObject *childp) childp->setParent(this); mChildList.push_back(childp); - if (!result) - { - llwarns << "Failed to attach child " << childp->getID() << " to object " << getID() << llendl; - removeChild(childp); - if (mJointInfo) - { - delete mJointInfo; - mJointInfo = NULL; - } - } } void LLViewerObject::removeChild(LLViewerObject *childp) @@ -637,8 +625,8 @@ BOOL LLViewerObject::setDrawableParent(LLDrawable* parentp) BOOL ret = mDrawable->mXform.setParent(parentp ? &parentp->mXform : NULL); gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_VOLUME, TRUE); - if( old_parent != parentp && - old_parent || (parentp && parentp->isActive())) + if( (old_parent != parentp && old_parent) + || (parentp && parentp->isActive())) { // *TODO we should not be relying on setDrawable parent to call markMoved gPipeline.markMoved(mDrawable, FALSE); @@ -1814,7 +1802,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys, if (cdp) { F32 ping_delay = 0.5f * mTimeDilation * ( ((F32)cdp->getPingDelay()) * 0.001f + gFrameDTClamped); - LLVector3 diff = getVelocity() * (0.5f*mTimeDilation*(gFrameDTClamped + ((F32)ping_delay)*0.001f)); + LLVector3 diff = getVelocity() * ping_delay; new_pos_parent += diff; } else diff --git a/linden/indra/newview/llviewerobject.h b/linden/indra/newview/llviewerobject.h index 88f967f..7f8bd63 100644 --- a/linden/indra/newview/llviewerobject.h +++ b/linden/indra/newview/llviewerobject.h @@ -50,7 +50,6 @@ #include "v3dmath.h" #include "v3math.h" #include "llvertexbuffer.h" -#include "llpartdata.h" class LLAgent; // TODO: Get rid of this. class LLAudioSource; diff --git a/linden/indra/newview/llviewerobjectlist.cpp b/linden/indra/newview/llviewerobjectlist.cpp index 3ac8fc4..21a9252 100644 --- a/linden/indra/newview/llviewerobjectlist.cpp +++ b/linden/indra/newview/llviewerobjectlist.cpp @@ -166,7 +166,7 @@ U64 LLViewerObjectList::getIndex(const U32 local_id, BOOL LLViewerObjectList::removeFromLocalIDTable(const LLViewerObject &object) { - if (object.mRegionp) + if(object.getRegion()) { U32 local_id = object.mLocalID; LLHost region_host = object.getRegion()->getHost(); @@ -176,7 +176,22 @@ BOOL LLViewerObjectList::removeFromLocalIDTable(const LLViewerObject &object) U32 index = sIPAndPortToIndex[ipport]; U64 indexid = (((U64)index) << 32) | (U64)local_id; - return sIndexAndLocalIDToUUID.erase(indexid) > 0 ? TRUE : FALSE; + + std::map::iterator iter = sIndexAndLocalIDToUUID.find(indexid); + if (iter == sIndexAndLocalIDToUUID.end()) + { + return FALSE; + } + + // Found existing entry + if (iter->second == object.getID()) + { // Full UUIDs match, so remove the entry + sIndexAndLocalIDToUUID.erase(iter); + return TRUE; + } + // UUIDs did not match - this would zap a valid entry, so don't erase it + //llinfos << "Tried to erase entry where id in table (" + // << iter->second << ") did not match object " << object.getID() << llendl; } return FALSE; } @@ -429,13 +444,27 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys, // This looks like it will break if the local_id of the object doesn't change // upon boundary crossing, but we check for region id matching later... - if (objectp && (objectp->mLocalID != local_id)) + // Reset object local id and region pointer if things have changed + if (objectp && + ((objectp->mLocalID != local_id) || + (objectp->getRegion() != regionp))) { removeFromLocalIDTable(*objectp); setUUIDAndLocal(fullid, local_id, gMessageSystem->getSenderIP(), gMessageSystem->getSenderPort()); + + if (objectp->mLocalID != local_id) + { // Update local ID in object with the one sent from the region + objectp->mLocalID = local_id; + } + + if (objectp->getRegion() != regionp) + { // Object changed region, so update it + objectp->setRegion(regionp); + objectp->updateRegion(regionp); // for LLVOAvatar + } } if (!objectp) @@ -478,20 +507,6 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys, justCreated = TRUE; mNumNewObjects++; } - else - { - if (objectp->getRegion() != regionp) - { - // Object has changed region! Update lookup tables, set region pointer. - removeFromLocalIDTable(*objectp); - setUUIDAndLocal(fullid, - local_id, - gMessageSystem->getSenderIP(), - gMessageSystem->getSenderPort()); - objectp->setRegion(regionp); - } - objectp->updateRegion(regionp); // for LLVOAvatar - } if (objectp->isDead()) @@ -837,10 +852,17 @@ void LLViewerObjectList::removeDrawable(LLDrawable* drawablep) for (S32 i = 0; i < drawablep->getNumFaces(); i++) { - LLViewerObject* objectp = drawablep->getFace(i)->getViewerObject(); + LLFace* facep = drawablep->getFace(i) ; + if(facep) + { + LLViewerObject* objectp = facep->getViewerObject(); + if(objectp) + { mSelectPickList.erase(objectp); } } + } +} BOOL LLViewerObjectList::killObject(LLViewerObject *objectp) { @@ -876,10 +898,6 @@ void LLViewerObjectList::killObjects(LLViewerRegion *regionp) if (objectp->mRegionp == regionp) { killObject(objectp); - - // invalidate region pointer. region will become invalid, but - // refcounted objects may survive the cleanDeadObjects() call below - objectp->mRegionp = NULL; } } @@ -917,7 +935,7 @@ void LLViewerObjectList::killAllObjects() if (!mMapObjects.empty()) { llwarns << "Some objects still on map object list!" << llendl; - mActiveObjects.clear(); + mMapObjects.clear(); } } diff --git a/linden/indra/newview/llvlcomposition.cpp b/linden/indra/newview/llvlcomposition.cpp index 9c383c7..e12504c 100644 --- a/linden/indra/newview/llvlcomposition.cpp +++ b/linden/indra/newview/llvlcomposition.cpp @@ -80,13 +80,8 @@ LLVLComposition::LLVLComposition(LLSurface *surfacep, const U32 width, const F32 // Initialize the texture matrix to defaults. for (S32 i = 0; i < CORNER_COUNT; ++i) { - //Zwag: I'm making these static values because they are a LARGE performance problem - // right now, and I've never heard of anyone changing them, they are not referenced - // elsewhere, and have not changed in defaults since the original source code release. - // We can move these back to signal connected statics if they really become important - // variables in the future. - mStartHeight[i] = 20.f;//gSavedSettings.getF32("TerrainColorStartHeight"); - mHeightRange[i] = 60.f;//gSavedSettings.getF32("TerrainColorHeightRange"); + mStartHeight[i] = gSavedSettings.getF32("TerrainColorStartHeight"); + mHeightRange[i] = gSavedSettings.getF32("TerrainColorHeightRange"); } mTexScaleX = 16.f; mTexScaleY = 16.f; diff --git a/linden/indra/newview/llvosky.h b/linden/indra/newview/llvosky.h index 333e144..dabf5b1 100644 --- a/linden/indra/newview/llvosky.h +++ b/linden/indra/newview/llvosky.h @@ -147,7 +147,7 @@ protected: static S32 getResolution() { return sResolution; } static S32 getCurrent() { return sCurrent; } - static S32 stepCurrent() { return (sCurrent = (sCurrent+1) % 2); } + static S32 stepCurrent() { sCurrent++; sCurrent&=1; return sCurrent; } static S32 getNext() { return ((sCurrent+1) % 2); } static S32 getWhich(const BOOL curr) { return curr ? sCurrent : getNext(); } diff --git a/linden/indra/newview/pipeline.cpp b/linden/indra/newview/pipeline.cpp index d3ee8b6..e36e296 100644 --- a/linden/indra/newview/pipeline.cpp +++ b/linden/indra/newview/pipeline.cpp @@ -1272,6 +1272,7 @@ F32 LLPipeline::calcPixelArea(LLVector3 center, LLVector3 size, LLCamera &camera F32 dist = lookAt.length(); //ramp down distance for nearby objects + //shrink dist by dist/16. if (dist < 16.f) { dist /= 16.f; @@ -2540,8 +2541,8 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate) //to guaranttee at least updating one VBO buffer every frame //to walk around the bug caused by ATI card --> DEV-3855 // - if(forceVBOUpdate) - gSky.mVOSkyp->updateDummyVertexBuffer() ; + //if(forceVBOUpdate) + // gSky.mVOSkyp->updateDummyVertexBuffer() ; gFrameStats.start(LLFrameStats::RENDER_GEOM); @@ -4202,11 +4203,6 @@ void LLPipeline::enableLightsAvatar() void LLPipeline::enableLightsAvatarEdit(const LLColor4& color) { - if (mLightingDetail < 1) - { - return; - } - U32 mask = 0x2002; // Avatar backlight only, set ambient setupAvatarLights(TRUE); enableLights(mask); -- cgit v1.1