LLViewerObject::idleUpdate now returns void. Texture animations/flexis now have their own update queues.
This commit is contained in:
@@ -104,7 +104,6 @@ void LLDrawable::init()
|
||||
mPositionGroup.clear();
|
||||
mExtents[0].clear();
|
||||
mExtents[1].clear();
|
||||
mQuietCount = 0;
|
||||
|
||||
mState = 0;
|
||||
mVObjp = NULL;
|
||||
@@ -412,6 +411,8 @@ void LLDrawable::makeActive()
|
||||
if (!isRoot() && !mParent->isActive())
|
||||
{
|
||||
mParent->makeActive();
|
||||
//NOTE: linked set will now NEVER become static
|
||||
mParent->setState(LLDrawable::ACTIVE_CHILD);
|
||||
}
|
||||
|
||||
//all child objects must also be active
|
||||
@@ -429,14 +430,6 @@ void LLDrawable::makeActive()
|
||||
}
|
||||
}
|
||||
|
||||
if (mVObjp->getPCode() == LL_PCODE_VOLUME)
|
||||
{
|
||||
if (mVObjp->isFlexible())
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (mVObjp->getPCode() == LL_PCODE_VOLUME)
|
||||
{
|
||||
gPipeline.markRebuild(this, LLDrawable::REBUILD_VOLUME, TRUE);
|
||||
@@ -444,28 +437,22 @@ void LLDrawable::makeActive()
|
||||
updatePartition();
|
||||
}
|
||||
|
||||
if (isRoot())
|
||||
{
|
||||
mQuietCount = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
getParent()->mQuietCount = 0;
|
||||
}
|
||||
llassert(isAvatar() || isRoot() || mParent->isActive());
|
||||
}
|
||||
|
||||
|
||||
void LLDrawable::makeStatic(BOOL warning_enabled)
|
||||
{
|
||||
if (isState(ACTIVE))
|
||||
if (isState(ACTIVE) &&
|
||||
!isState(ACTIVE_CHILD) &&
|
||||
!mVObjp->isAttachment() &&
|
||||
!mVObjp->isFlexible())
|
||||
{
|
||||
clearState(ACTIVE | ANIMATED_CHILD);
|
||||
|
||||
if (mParent.notNull() && mParent->isActive() && warning_enabled)
|
||||
{
|
||||
LL_WARNS_ONCE("Drawable") << "Drawable becomes static with active parent!" << LL_ENDL;
|
||||
}
|
||||
|
||||
//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++)
|
||||
@@ -492,8 +479,8 @@ void LLDrawable::makeStatic(BOOL warning_enabled)
|
||||
mSpatialBridge->markDead();
|
||||
setSpatialBridge(NULL);
|
||||
}
|
||||
updatePartition();
|
||||
}
|
||||
updatePartition();
|
||||
}
|
||||
|
||||
// Returns "distance" between target destination and resulting xfrom
|
||||
@@ -643,8 +630,6 @@ BOOL LLDrawable::updateMove()
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
makeActive();
|
||||
|
||||
BOOL done;
|
||||
|
||||
if (isState(MOVE_UNDAMPED))
|
||||
@@ -653,6 +638,7 @@ BOOL LLDrawable::updateMove()
|
||||
}
|
||||
else
|
||||
{
|
||||
makeActive();
|
||||
done = updateMoveDamped();
|
||||
}
|
||||
return done;
|
||||
|
||||
@@ -298,6 +298,7 @@ public:
|
||||
RIGGED = 0x08000000,
|
||||
PARTITION_MOVE = 0x10000000,
|
||||
ANIMATED_CHILD = 0x20000000,
|
||||
ACTIVE_CHILD = 0x40000000,
|
||||
} EDrawableFlags;
|
||||
|
||||
private: //aligned members
|
||||
@@ -311,8 +312,6 @@ public:
|
||||
LLPointer<LLDrawable> mParent;
|
||||
|
||||
F32 mDistanceWRTCamera;
|
||||
|
||||
S32 mQuietCount;
|
||||
|
||||
static S32 getCurrentFrame() { return sCurVisible; }
|
||||
static S32 getMinVisFrameRange();
|
||||
|
||||
@@ -44,6 +44,8 @@
|
||||
#include "llvoavatar.h"
|
||||
|
||||
/*static*/ F32 LLVolumeImplFlexible::sUpdateFactor = 1.0f;
|
||||
std::vector<LLVolumeImplFlexible*> LLVolumeImplFlexible::sInstanceList;
|
||||
std::vector<S32> LLVolumeImplFlexible::sUpdateDelay;
|
||||
|
||||
static LLFastTimer::DeclareTimer FTM_FLEXIBLE_REBUILD("Rebuild");
|
||||
static LLFastTimer::DeclareTimer FTM_DO_FLEXIBLE_UPDATE("Update");
|
||||
@@ -70,8 +72,45 @@ LLVolumeImplFlexible::LLVolumeImplFlexible(LLViewerObject* vo, LLFlexibleObjectD
|
||||
{
|
||||
mVO->mDrawable->makeActive() ;
|
||||
}
|
||||
|
||||
mInstanceIndex = sInstanceList.size();
|
||||
sInstanceList.push_back(this);
|
||||
sUpdateDelay.push_back(0);
|
||||
}//-----------------------------------------------
|
||||
|
||||
LLVolumeImplFlexible::~LLVolumeImplFlexible()
|
||||
{
|
||||
S32 end_idx = sInstanceList.size()-1;
|
||||
|
||||
if (end_idx != mInstanceIndex)
|
||||
{
|
||||
sInstanceList[mInstanceIndex] = sInstanceList[end_idx];
|
||||
sInstanceList[mInstanceIndex]->mInstanceIndex = mInstanceIndex;
|
||||
sUpdateDelay[mInstanceIndex] = sUpdateDelay[end_idx];
|
||||
}
|
||||
|
||||
sInstanceList.pop_back();
|
||||
sUpdateDelay.pop_back();
|
||||
}
|
||||
|
||||
//static
|
||||
void LLVolumeImplFlexible::updateClass()
|
||||
{
|
||||
std::vector<S32>::iterator delay_iter = sUpdateDelay.begin();
|
||||
|
||||
for (std::vector<LLVolumeImplFlexible*>::iterator iter = sInstanceList.begin();
|
||||
iter != sInstanceList.end();
|
||||
++iter)
|
||||
{
|
||||
--(*delay_iter);
|
||||
if (*delay_iter <= 0)
|
||||
{
|
||||
(*iter)->doIdleUpdate();
|
||||
}
|
||||
++delay_iter;
|
||||
}
|
||||
}
|
||||
|
||||
LLVector3 LLVolumeImplFlexible::getFramePosition() const
|
||||
{
|
||||
return mVO->getRenderPosition();
|
||||
@@ -296,22 +335,17 @@ void LLVolumeImplFlexible::updateRenderRes()
|
||||
// optimization similar to what Havok does for objects that are stationary.
|
||||
//---------------------------------------------------------------------------------
|
||||
static LLFastTimer::DeclareTimer FTM_FLEXIBLE_UPDATE("Update Flexies");
|
||||
void LLVolumeImplFlexible::doIdleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
||||
void LLVolumeImplFlexible::doIdleUpdate()
|
||||
{
|
||||
LLDrawable* drawablep = mVO->mDrawable;
|
||||
|
||||
if (drawablep)
|
||||
{
|
||||
//LLFastTimer ftm(FTM_FLEXIBLE_UPDATE);
|
||||
|
||||
//flexible objects never go static
|
||||
drawablep->mQuietCount = 0;
|
||||
if (!drawablep->isRoot())
|
||||
{
|
||||
LLViewerObject* parent = (LLViewerObject*) mVO->getParent();
|
||||
parent->mDrawable->mQuietCount = 0;
|
||||
}
|
||||
|
||||
|
||||
//ensure drawable is active
|
||||
drawablep->makeActive();
|
||||
|
||||
if (gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_FLEXIBLE))
|
||||
{
|
||||
bool visible = drawablep->isVisible();
|
||||
@@ -321,34 +355,47 @@ void LLVolumeImplFlexible::doIdleUpdate(LLAgent &agent, LLWorld &world, const F6
|
||||
updateRenderRes();
|
||||
gPipeline.markRebuild(drawablep, LLDrawable::REBUILD_POSITION, FALSE);
|
||||
}
|
||||
else if (visible &&
|
||||
!drawablep->isState(LLDrawable::IN_REBUILD_Q1) &&
|
||||
mVO->getPixelArea() > 256.f)
|
||||
else
|
||||
{
|
||||
U32 id;
|
||||
F32 pixel_area = mVO->getPixelArea();
|
||||
|
||||
if (mVO->isRootEdit())
|
||||
{
|
||||
id = mID;
|
||||
}
|
||||
else
|
||||
{
|
||||
LLVOVolume* parent = (LLVOVolume*) mVO->getParent();
|
||||
id = parent->getVolumeInterfaceID();
|
||||
}
|
||||
|
||||
U32 update_period = (U32) (LLViewerCamera::getInstance()->getScreenPixelArea()*0.01f/(pixel_area*(sUpdateFactor+1.f)))+1;
|
||||
|
||||
if ((LLDrawable::getCurrentFrame()+id)%update_period == 0)
|
||||
if (visible)
|
||||
{
|
||||
updateRenderRes();
|
||||
gPipeline.markRebuild(drawablep, LLDrawable::REBUILD_POSITION, FALSE);
|
||||
if (!drawablep->isState(LLDrawable::IN_REBUILD_Q1) &&
|
||||
mVO->getPixelArea() > 256.f)
|
||||
{
|
||||
U32 id;
|
||||
|
||||
if (mVO->isRootEdit())
|
||||
{
|
||||
id = mID;
|
||||
}
|
||||
else
|
||||
{
|
||||
LLVOVolume* parent = (LLVOVolume*) mVO->getParent();
|
||||
id = parent->getVolumeInterfaceID();
|
||||
}
|
||||
|
||||
if ((LLDrawable::getCurrentFrame()+id)%update_period == 0)
|
||||
{
|
||||
sUpdateDelay[mInstanceIndex] = (S32) update_period-1;
|
||||
|
||||
updateRenderRes();
|
||||
|
||||
gPipeline.markRebuild(drawablep, LLDrawable::REBUILD_POSITION, FALSE);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sUpdateDelay[mInstanceIndex] = (S32) update_period;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(!mInitialized)
|
||||
updateRenderRes();
|
||||
}
|
||||
//if(!mInitialized)
|
||||
// updateRenderRes();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -372,7 +419,7 @@ void LLVolumeImplFlexible::doFlexibleUpdate()
|
||||
{
|
||||
BOOL force_update = mSimulateRes == 0 ? TRUE : FALSE;
|
||||
|
||||
doIdleUpdate(gAgent, *LLWorld::getInstance(), 0.0);
|
||||
doIdleUpdate();
|
||||
|
||||
if (!force_update || !gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_FLEXIBLE))
|
||||
{
|
||||
|
||||
@@ -3,31 +3,25 @@
|
||||
* @author JJ Ventrella, Andrew Meadows, Tom Yedwab
|
||||
* @brief Flexible object definition
|
||||
*
|
||||
* $LicenseInfo:firstyear=2006&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2006-2009, Linden Research, Inc.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2006&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
@@ -76,8 +70,16 @@ struct LLFlexibleObjectSection
|
||||
//---------------------------------------------------------
|
||||
class LLVolumeImplFlexible : public LLVolumeInterface
|
||||
{
|
||||
private:
|
||||
static std::vector<LLVolumeImplFlexible*> sInstanceList;
|
||||
static std::vector<S32> sUpdateDelay;
|
||||
S32 mInstanceIndex;
|
||||
|
||||
public:
|
||||
static void updateClass();
|
||||
|
||||
LLVolumeImplFlexible(LLViewerObject* volume, LLFlexibleObjectData* attributes);
|
||||
~LLVolumeImplFlexible();
|
||||
|
||||
// Implements LLVolumeInterface
|
||||
U32 getID() const { return mID; }
|
||||
@@ -85,7 +87,7 @@ class LLVolumeImplFlexible : public LLVolumeInterface
|
||||
LLQuaternion getFrameRotation() const;
|
||||
LLVolumeInterfaceType getInterfaceType() const { return INTERFACE_FLEXIBLE; }
|
||||
void updateRenderRes();
|
||||
void doIdleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
|
||||
void doIdleUpdate();
|
||||
BOOL doUpdateGeometry(LLDrawable *drawable);
|
||||
LLVector3 getPivotPosition() const;
|
||||
void onSetVolume(const LLVolumeParams &volume_params, const S32 detail);
|
||||
|
||||
@@ -2,31 +2,25 @@
|
||||
* @file llsurface.cpp
|
||||
* @brief Implementation of LLSurface class
|
||||
*
|
||||
* $LicenseInfo:firstyear=2000&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2000-2009, Linden Research, Inc.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2000&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
|
||||
@@ -2,31 +2,25 @@
|
||||
* @file llsurface.h
|
||||
* @brief Description of LLSurface class
|
||||
*
|
||||
* $LicenseInfo:firstyear=2000&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2000-2009, Linden Research, Inc.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2000&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
|
||||
@@ -2,31 +2,25 @@
|
||||
* @file llsurfacepatch.cpp
|
||||
* @brief LLSurfacePatch class implementation
|
||||
*
|
||||
* $LicenseInfo:firstyear=2001&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2001-2009, Linden Research, Inc.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2001&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
|
||||
@@ -810,6 +810,12 @@ BOOL LLViewerObject::setDrawableParent(LLDrawable* parentp)
|
||||
}
|
||||
LLDrawable* old_parent = mDrawable->mParent;
|
||||
mDrawable->mParent = parentp;
|
||||
|
||||
if (parentp && mDrawable->isActive())
|
||||
{
|
||||
parentp->makeActive();
|
||||
parentp->setState(LLDrawable::ACTIVE_CHILD);
|
||||
}
|
||||
|
||||
gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_VOLUME, TRUE);
|
||||
if( (old_parent != parentp && old_parent)
|
||||
@@ -2133,9 +2139,15 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
|
||||
gPipeline.addDebugBlip(getPositionAgent(), color);
|
||||
}
|
||||
|
||||
if ((0.0f == vel_mag_sq) &&
|
||||
(0.0f == accel_mag_sq) &&
|
||||
(0.0f == getAngularVelocity().magVecSquared()))
|
||||
const F32 MAG_CUTOFF = F_APPROXIMATELY_ZERO;
|
||||
|
||||
llassert(vel_mag_sq >= 0.f);
|
||||
llassert(accel_mag_sq >= 0.f);
|
||||
llassert(getAngularVelocity().magVecSquared() >= 0.f);
|
||||
|
||||
if ((MAG_CUTOFF >= vel_mag_sq) &&
|
||||
(MAG_CUTOFF >= accel_mag_sq) &&
|
||||
(MAG_CUTOFF >= getAngularVelocity().magVecSquared()))
|
||||
{
|
||||
mStatic = TRUE; // This object doesn't move!
|
||||
}
|
||||
@@ -2209,17 +2221,15 @@ BOOL LLViewerObject::isActive() const
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL LLViewerObject::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
||||
|
||||
|
||||
void LLViewerObject::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
||||
{
|
||||
//static LLFastTimer::DeclareTimer ftm("Viewer Object");
|
||||
//LLFastTimer t(ftm);
|
||||
|
||||
if (mDead)
|
||||
if (!mDead)
|
||||
{
|
||||
// It's dead. Don't update it.
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// CRO - don't velocity interp linked objects!
|
||||
// Leviathan - but DO velocity interp joints
|
||||
if (!mStatic && sVelocityInterpolate && !isSelected())
|
||||
@@ -2228,12 +2238,12 @@ BOOL LLViewerObject::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
||||
F32 dt_raw = (F32)(time - mLastInterpUpdateSecs);
|
||||
F32 dt = mTimeDilation * dt_raw;
|
||||
|
||||
applyAngularVelocity(dt);
|
||||
applyAngularVelocity(dt);
|
||||
|
||||
if (isAttachment())
|
||||
{
|
||||
mLastInterpUpdateSecs = time;
|
||||
return TRUE;
|
||||
if (isAttachment())
|
||||
{
|
||||
mLastInterpUpdateSecs = time;
|
||||
return;
|
||||
}
|
||||
else
|
||||
{ // Move object based on it's velocity and rotation
|
||||
@@ -2242,8 +2252,7 @@ BOOL LLViewerObject::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
||||
}
|
||||
|
||||
updateDrawable(FALSE);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -150,7 +150,7 @@ public:
|
||||
LLNameValue* getNVPair(const std::string& name) const; // null if no name value pair by that name
|
||||
|
||||
// Object create and update functions
|
||||
virtual BOOL idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
|
||||
virtual void idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
|
||||
|
||||
// Types of media we can associate
|
||||
enum { MEDIA_NONE = 0, MEDIA_SET = 1 };
|
||||
|
||||
@@ -56,6 +56,8 @@
|
||||
#include "llstring.h"
|
||||
#include "llhudnametag.h"
|
||||
#include "lldrawable.h"
|
||||
#include "llflexibleobject.h"
|
||||
#include "llviewertextureanim.h"
|
||||
#include "xform.h"
|
||||
#include "llsky.h"
|
||||
#include "llviewercamera.h"
|
||||
@@ -917,8 +919,6 @@ void LLViewerObjectList::update(LLAgent &agent, LLWorld &world)
|
||||
|
||||
const F64 frame_time = LLFrameTimer::getElapsedSeconds();
|
||||
|
||||
std::vector<LLViewerObject*> kill_list;
|
||||
S32 num_active_objects = 0;
|
||||
LLViewerObject *objectp = NULL;
|
||||
|
||||
// Make a copy of the list in case something in idleUpdate() messes with it
|
||||
@@ -982,24 +982,20 @@ void LLViewerObjectList::update(LLAgent &agent, LLWorld &world)
|
||||
idle_iter != idle_end; idle_iter++)
|
||||
{
|
||||
objectp = *idle_iter;
|
||||
if (objectp->idleUpdate(agent, world, frame_time))
|
||||
{
|
||||
num_active_objects++;
|
||||
}
|
||||
else
|
||||
{
|
||||
// If Idle Update returns false, kill object!
|
||||
kill_list.push_back(objectp);
|
||||
}
|
||||
}
|
||||
for (std::vector<LLViewerObject*>::iterator kill_iter = kill_list.begin();
|
||||
kill_iter != kill_list.end(); kill_iter++)
|
||||
{
|
||||
objectp = *kill_iter;
|
||||
killObject(objectp);
|
||||
llassert(objectp->isActive());
|
||||
objectp->idleUpdate(agent, world, frame_time);
|
||||
|
||||
}
|
||||
|
||||
//update flexible objects
|
||||
LLVolumeImplFlexible::updateClass();
|
||||
|
||||
//update animated textures
|
||||
LLViewerTextureAnim::updateClass();
|
||||
}
|
||||
|
||||
|
||||
|
||||
fetchObjectCosts();
|
||||
fetchPhysicsFlags();
|
||||
|
||||
@@ -1066,7 +1062,7 @@ void LLViewerObjectList::update(LLAgent &agent, LLWorld &world)
|
||||
*/
|
||||
|
||||
LLViewerStats::getInstance()->mNumObjectsStat.addValue((S32) mObjects.size() - mNumDeadObjects);
|
||||
LLViewerStats::getInstance()->mNumActiveObjectsStat.addValue(num_active_objects);
|
||||
LLViewerStats::getInstance()->mNumActiveObjectsStat.addValue(idle_count);
|
||||
LLViewerStats::getInstance()->mNumSizeCulledStat.addValue(mNumSizeCulled);
|
||||
LLViewerStats::getInstance()->mNumVisCulledStat.addValue(mNumVisCulled);
|
||||
}
|
||||
@@ -1437,8 +1433,9 @@ void LLViewerObjectList::removeFromActiveList(LLViewerObject* objectp)
|
||||
{
|
||||
mActiveObjects[idx] = mActiveObjects[last_index];
|
||||
mActiveObjects[idx]->setListIndex(idx);
|
||||
mActiveObjects.pop_back();
|
||||
}
|
||||
|
||||
mActiveObjects.pop_back();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1482,6 +1479,9 @@ void LLViewerObjectList::updateActive(LLViewerObject *objectp)
|
||||
objectp->setOnActiveList(FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
llassert(objectp->isActive() || objectp->getListIndex() == -1);
|
||||
|
||||
}
|
||||
|
||||
void LLViewerObjectList::updateObjectCost(LLViewerObject* object)
|
||||
@@ -1552,6 +1552,10 @@ void LLViewerObjectList::onPhysicsFlagsFetchFailure(const LLUUID& object_id)
|
||||
mPendingPhysicsFlags.erase(object_id);
|
||||
}
|
||||
|
||||
static LLFastTimer::DeclareTimer FTM_SHIFT_OBJECTS("Shift Objects");
|
||||
static LLFastTimer::DeclareTimer FTM_PIPELINE_SHIFT("Pipeline Shift");
|
||||
static LLFastTimer::DeclareTimer FTM_REGION_SHIFT("Region Shift");
|
||||
|
||||
void LLViewerObjectList::shiftObjects(const LLVector3 &offset)
|
||||
{
|
||||
// This is called when we shift our origin when we cross region boundaries...
|
||||
@@ -1563,6 +1567,8 @@ void LLViewerObjectList::shiftObjects(const LLVector3 &offset)
|
||||
return;
|
||||
}
|
||||
|
||||
LLFastTimer t(FTM_SHIFT_OBJECTS);
|
||||
|
||||
LLViewerObject *objectp;
|
||||
for (vobj_list_t::iterator iter = mObjects.begin(); iter != mObjects.end(); ++iter)
|
||||
{
|
||||
@@ -1579,8 +1585,15 @@ void LLViewerObjectList::shiftObjects(const LLVector3 &offset)
|
||||
}
|
||||
}
|
||||
|
||||
gPipeline.shiftObjects(offset);
|
||||
LLWorld::getInstance()->shiftRegions(offset);
|
||||
{
|
||||
LLFastTimer t(FTM_PIPELINE_SHIFT);
|
||||
gPipeline.shiftObjects(offset);
|
||||
}
|
||||
|
||||
{
|
||||
LLFastTimer t(FTM_REGION_SHIFT);
|
||||
LLWorld::getInstance()->shiftRegions(offset);
|
||||
}
|
||||
}
|
||||
|
||||
void LLViewerObjectList::repartitionObjects()
|
||||
|
||||
@@ -1533,7 +1533,8 @@ void LLViewerRegion::unpackRegionHandshake()
|
||||
// all of our terrain stuff, by
|
||||
if (compp->getParamsReady())
|
||||
{
|
||||
getLand().dirtyAllPatches();
|
||||
//this line creates frame stalls on region crossing and removing it appears to have no effect
|
||||
//getLand().dirtyAllPatches();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -27,21 +27,37 @@
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
|
||||
#include "llviewertextureanim.h"
|
||||
#include "llvovolume.h"
|
||||
|
||||
#include "llmath.h"
|
||||
#include "llerror.h"
|
||||
|
||||
LLViewerTextureAnim::LLViewerTextureAnim() : LLTextureAnim()
|
||||
std::vector<LLViewerTextureAnim*> LLViewerTextureAnim::sInstanceList;
|
||||
|
||||
LLViewerTextureAnim::LLViewerTextureAnim(LLVOVolume* vobj) : LLTextureAnim()
|
||||
{
|
||||
mVObj = vobj;
|
||||
mLastFrame = -1.f; // Force an update initially
|
||||
mLastTime = 0.f;
|
||||
mOffS = mOffT = 0;
|
||||
mScaleS = mScaleT = 1;
|
||||
mRot = 0;
|
||||
|
||||
mInstanceIndex = sInstanceList.size();
|
||||
sInstanceList.push_back(this);
|
||||
}
|
||||
|
||||
LLViewerTextureAnim::~LLViewerTextureAnim()
|
||||
{
|
||||
S32 end_idx = sInstanceList.size()-1;
|
||||
|
||||
if (end_idx != mInstanceIndex)
|
||||
{
|
||||
sInstanceList[mInstanceIndex] = sInstanceList[end_idx];
|
||||
sInstanceList[mInstanceIndex]->mInstanceIndex = mInstanceIndex;
|
||||
}
|
||||
|
||||
sInstanceList.pop_back();
|
||||
}
|
||||
|
||||
void LLViewerTextureAnim::reset()
|
||||
@@ -50,6 +66,14 @@ void LLViewerTextureAnim::reset()
|
||||
mTimer.reset();
|
||||
}
|
||||
|
||||
//static
|
||||
void LLViewerTextureAnim::updateClass()
|
||||
{
|
||||
for (std::vector<LLViewerTextureAnim*>::iterator iter = sInstanceList.begin(); iter != sInstanceList.end(); ++iter)
|
||||
{
|
||||
(*iter)->mVObj->animateTextures();
|
||||
}
|
||||
}
|
||||
|
||||
S32 LLViewerTextureAnim::animateTextures(F32 &off_s, F32 &off_t,
|
||||
F32 &scale_s, F32 &scale_t,
|
||||
|
||||
@@ -30,10 +30,18 @@
|
||||
#include "lltextureanim.h"
|
||||
#include "llframetimer.h"
|
||||
|
||||
class LLVOVolume;
|
||||
|
||||
class LLViewerTextureAnim : public LLTextureAnim
|
||||
{
|
||||
private:
|
||||
static std::vector<LLViewerTextureAnim*> sInstanceList;
|
||||
S32 mInstanceIndex;
|
||||
|
||||
public:
|
||||
LLViewerTextureAnim();
|
||||
static void updateClass();
|
||||
|
||||
LLViewerTextureAnim(LLVOVolume* vobj);
|
||||
virtual ~LLViewerTextureAnim();
|
||||
|
||||
/*virtual*/ void reset();
|
||||
@@ -51,6 +59,7 @@ public:
|
||||
F32 mRot;
|
||||
|
||||
protected:
|
||||
LLVOVolume* mVObj;
|
||||
LLFrameTimer mTimer;
|
||||
F64 mLastTime;
|
||||
F32 mLastFrame;
|
||||
|
||||
@@ -2859,7 +2859,7 @@ void LLVOAvatar::dumpAnimationState()
|
||||
//------------------------------------------------------------------------
|
||||
// idleUpdate()
|
||||
//------------------------------------------------------------------------
|
||||
BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
||||
void LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
||||
{
|
||||
LLMemType mt(LLMemType::MTYPE_AVATAR);
|
||||
LLFastTimer t(FTM_AVATAR_UPDATE);
|
||||
@@ -2867,12 +2867,12 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
||||
if (isDead())
|
||||
{
|
||||
llinfos << "Warning! Idle on dead avatar" << llendl;
|
||||
return TRUE;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_AVATAR)))
|
||||
{
|
||||
return TRUE;
|
||||
return;
|
||||
}
|
||||
|
||||
checkTextureLoading() ;
|
||||
@@ -2941,7 +2941,7 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
||||
|
||||
if (gNoRender)
|
||||
{
|
||||
return TRUE;
|
||||
return;
|
||||
}
|
||||
|
||||
idleUpdateVoiceVisualizer( voice_enabled );
|
||||
@@ -2958,8 +2958,6 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
||||
|
||||
idleUpdateNameTag( root_pos_last );
|
||||
idleUpdateRenderCost();
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void LLVOAvatar::idleUpdateVoiceVisualizer(bool voice_enabled)
|
||||
@@ -8828,6 +8826,9 @@ void LLVOAvatar::cullAvatarsByPixelArea()
|
||||
}
|
||||
}
|
||||
|
||||
// runway - this doesn't detect gray/grey state.
|
||||
// think we just need to be checking self av since it's the only
|
||||
// one with lltexlayer stuff.
|
||||
S32 grey_avatars = 0;
|
||||
if (LLVOAvatar::areAllNearbyInstancesBaked(grey_avatars))
|
||||
{
|
||||
|
||||
@@ -181,7 +181,7 @@ public:
|
||||
U32 block_num,
|
||||
const EObjectUpdateType update_type,
|
||||
LLDataPacker *dp);
|
||||
virtual BOOL idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
|
||||
virtual void idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
|
||||
virtual BOOL updateLOD();
|
||||
BOOL updateJointLODs();
|
||||
void updateLODRiggedAttachments( void );
|
||||
|
||||
@@ -570,25 +570,14 @@ BOOL LLVOAvatarSelf::updateCharacter(LLAgent &agent)
|
||||
}
|
||||
|
||||
// virtual
|
||||
BOOL LLVOAvatarSelf::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
||||
void LLVOAvatarSelf::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
||||
{
|
||||
if (!isAgentAvatarValid())
|
||||
if (isAgentAvatarValid())
|
||||
{
|
||||
return TRUE;
|
||||
LLVOAvatar::idleUpdate(agent, world, time);
|
||||
if(!gNoRender)
|
||||
idleUpdateTractorBeam();
|
||||
}
|
||||
/*if(!gNoRender)
|
||||
{
|
||||
//Emerald performs some force-bakes stuff here. Added it in because we noticed slow responses with client tag ident. -HgB
|
||||
for(U8 i=0;i<getNumTEs();++i)
|
||||
{
|
||||
LLViewerTexture* te = getTEImage(i);
|
||||
te->forceActive();
|
||||
}
|
||||
}*/
|
||||
LLVOAvatar::idleUpdate(agent,world,time);
|
||||
if(!gNoRender)
|
||||
idleUpdateTractorBeam();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// virtual
|
||||
|
||||
@@ -85,7 +85,7 @@ protected:
|
||||
//--------------------------------------------------------------------
|
||||
public:
|
||||
/*virtual*/ void updateRegion(LLViewerRegion *regionp);
|
||||
/*virtual*/ BOOL idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
|
||||
/*virtual*/ void idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// LLCharacter interface and related
|
||||
|
||||
@@ -79,11 +79,11 @@ BOOL LLVOClouds::isActive() const
|
||||
}
|
||||
|
||||
|
||||
BOOL LLVOClouds::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
||||
void LLVOClouds::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
||||
{
|
||||
if (!(gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_CLASSIC_CLOUDS)))
|
||||
{
|
||||
return TRUE;
|
||||
return;
|
||||
}
|
||||
|
||||
// Set dirty flag (so renderer will rebuild primitive)
|
||||
@@ -91,8 +91,6 @@ BOOL LLVOClouds::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
||||
{
|
||||
gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_VOLUME, TRUE);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -69,7 +69,7 @@ public:
|
||||
/*virtual*/ void setPixelAreaAndAngle(LLAgent &agent); // generate accurate apparent angle and area
|
||||
|
||||
void updateFaceSize(S32 idx) { }
|
||||
BOOL idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
|
||||
void idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
|
||||
|
||||
virtual U32 getPartitionType() const;
|
||||
|
||||
|
||||
@@ -301,17 +301,17 @@ BOOL LLVOGrass::isActive() const
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL LLVOGrass::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
||||
void LLVOGrass::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
||||
{
|
||||
if (mDead || !(gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_GRASS)))
|
||||
{
|
||||
return TRUE;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!mDrawable)
|
||||
{
|
||||
// So drones work.
|
||||
return TRUE;
|
||||
return;
|
||||
}
|
||||
|
||||
if(LLVOTree::isTreeRenderingStopped()) //stop rendering grass
|
||||
@@ -321,21 +321,22 @@ BOOL LLVOGrass::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
||||
mNumBlades = 0 ;
|
||||
gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_ALL, TRUE);
|
||||
}
|
||||
return TRUE ;
|
||||
return;
|
||||
}
|
||||
else if(!mNumBlades)//restart grass rendering
|
||||
{
|
||||
mNumBlades = GRASS_MAX_BLADES ;
|
||||
gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_ALL, TRUE);
|
||||
|
||||
return TRUE ;
|
||||
return;
|
||||
}
|
||||
|
||||
if (mPatch && (mLastPatchUpdateTime != mPatch->getLastUpdateTime()))
|
||||
{
|
||||
gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_VOLUME, TRUE);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -79,7 +79,7 @@ public:
|
||||
void plantBlades();
|
||||
|
||||
/*virtual*/ BOOL isActive() const; // Whether this object needs to do an idleUpdate.
|
||||
BOOL idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
|
||||
/*virtual*/ void idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
|
||||
|
||||
/*virtual*/ BOOL lineSegmentIntersect(const LLVector3& start, const LLVector3& end,
|
||||
S32 face = -1, // which face to check, -1 = ALL_SIDES
|
||||
|
||||
@@ -2,31 +2,25 @@
|
||||
* @file llvoground.cpp
|
||||
* @brief LLVOGround class implementation
|
||||
*
|
||||
* $LicenseInfo:firstyear=2001&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2001-2009, Linden Research, Inc.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2001&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
@@ -55,18 +49,8 @@ LLVOGround::~LLVOGround()
|
||||
{
|
||||
}
|
||||
|
||||
BOOL LLVOGround::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
||||
void LLVOGround::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
||||
{
|
||||
if (mDead || !(gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_GROUND)))
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*if (mDrawable)
|
||||
{
|
||||
gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_VOLUME, TRUE);
|
||||
}*/
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -2,31 +2,25 @@
|
||||
* @file llvoground.h
|
||||
* @brief LLVOGround class header file
|
||||
*
|
||||
* $LicenseInfo:firstyear=2001&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2001-2009, Linden Research, Inc.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2001&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
@@ -47,7 +41,7 @@ protected:
|
||||
public:
|
||||
LLVOGround(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp);
|
||||
|
||||
/*virtual*/ BOOL idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
|
||||
/*virtual*/ void idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
|
||||
|
||||
// Graphical stuff for objects - maybe broken out into render class
|
||||
// later?
|
||||
|
||||
@@ -202,9 +202,8 @@ void LLVOPartGroup::updateSpatialExtents(LLVector4a& newMin, LLVector4a& newMax)
|
||||
mDrawable->setPositionGroup(pos);
|
||||
}
|
||||
|
||||
BOOL LLVOPartGroup::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
||||
void LLVOPartGroup::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void LLVOPartGroup::setPixelAreaAndAngle(LLAgent &agent)
|
||||
|
||||
@@ -69,7 +69,7 @@ public:
|
||||
LLVOPartGroup(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp);
|
||||
|
||||
/*virtual*/ BOOL isActive() const; // Whether this object needs to do an idleUpdate.
|
||||
BOOL idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
|
||||
void idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
|
||||
|
||||
virtual F32 getBinRadius();
|
||||
virtual void updateSpatialExtents(LLVector4a& newMin, LLVector4a& newMax);
|
||||
|
||||
@@ -1055,9 +1055,8 @@ void LLVOSky::calcAtmospherics(void)
|
||||
mFadeColor.setAlpha(0);
|
||||
}
|
||||
|
||||
BOOL LLVOSky::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
||||
void LLVOSky::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL LLVOSky::updateSky()
|
||||
|
||||
@@ -2,31 +2,25 @@
|
||||
* @file llvosky.h
|
||||
* @brief LLVOSky class header file
|
||||
*
|
||||
* $LicenseInfo:firstyear=2001&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2001-2009, Linden Research, Inc.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2001&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
@@ -145,7 +139,7 @@ protected:
|
||||
~LLSkyTex();
|
||||
|
||||
|
||||
static S32 getResolution() { return sResolution; }
|
||||
static S32 getResolution() { return sResolution; }
|
||||
static S32 getCurrent() { return sCurrent; }
|
||||
static S32 stepCurrent() { sCurrent++; sCurrent &= 1; return sCurrent; }
|
||||
static S32 getNext() { return ((sCurrent+1) & 1); }
|
||||
@@ -467,7 +461,7 @@ public:
|
||||
void cleanupGL();
|
||||
void restoreGL();
|
||||
|
||||
/*virtual*/ BOOL idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
|
||||
/*virtual*/ void idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
|
||||
BOOL updateSky();
|
||||
|
||||
// Graphical stuff for objects - maybe broken out into render class
|
||||
@@ -616,8 +610,8 @@ protected:
|
||||
public:
|
||||
//by bao
|
||||
//fake vertex buffer updating
|
||||
//to guaranttee at least updating one VBO buffer every frame
|
||||
//to walk around the bug caused by ATI card --> DEV-3855
|
||||
//to guarantee at least updating one VBO buffer every frame
|
||||
//to work around the bug caused by ATI card --> DEV-3855
|
||||
//
|
||||
void createDummyVertexBuffer() ;
|
||||
void updateDummyVertexBuffer() ;
|
||||
|
||||
@@ -354,11 +354,11 @@ U32 LLVOTree::processUpdateMessage(LLMessageSystem *mesgsys,
|
||||
return retval;
|
||||
}
|
||||
|
||||
BOOL LLVOTree::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
||||
void LLVOTree::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
||||
{
|
||||
if (mDead || !(gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_TREE)))
|
||||
{
|
||||
return TRUE;
|
||||
return;
|
||||
}
|
||||
|
||||
S32 trunk_LOD = sMAX_NUM_TREE_LOD_LEVELS ;
|
||||
@@ -408,8 +408,6 @@ BOOL LLVOTree::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
||||
}
|
||||
|
||||
mTrunkLOD = trunk_LOD;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
const F32 TREE_BLEND_MIN = 1.f;
|
||||
|
||||
@@ -65,7 +65,7 @@ public:
|
||||
void **user_data,
|
||||
U32 block_num, const EObjectUpdateType update_type,
|
||||
LLDataPacker *dp);
|
||||
/*virtual*/ BOOL idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
|
||||
/*virtual*/ void idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
|
||||
|
||||
// Graphical stuff for objects - maybe broken out into render class later?
|
||||
/*virtual*/ void render(LLAgent &agent);
|
||||
|
||||
@@ -185,7 +185,7 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys,
|
||||
{
|
||||
if (!mTextureAnimp)
|
||||
{
|
||||
mTextureAnimp = new LLViewerTextureAnim();
|
||||
mTextureAnimp = new LLViewerTextureAnim(this);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -274,7 +274,7 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys,
|
||||
{
|
||||
if (!mTextureAnimp)
|
||||
{
|
||||
mTextureAnimp = new LLViewerTextureAnim();
|
||||
mTextureAnimp = new LLViewerTextureAnim(this);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -317,157 +317,118 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys,
|
||||
|
||||
void LLVOVolume::animateTextures()
|
||||
{
|
||||
F32 off_s = 0.f, off_t = 0.f, scale_s = 1.f, scale_t = 1.f, rot = 0.f;
|
||||
S32 result = mTextureAnimp->animateTextures(off_s, off_t, scale_s, scale_t, rot);
|
||||
|
||||
if (result)
|
||||
if (!mDead)
|
||||
{
|
||||
if (!mTexAnimMode)
|
||||
F32 off_s = 0.f, off_t = 0.f, scale_s = 1.f, scale_t = 1.f, rot = 0.f;
|
||||
S32 result = mTextureAnimp->animateTextures(off_s, off_t, scale_s, scale_t, rot);
|
||||
|
||||
if (result)
|
||||
{
|
||||
mFaceMappingChanged = TRUE;
|
||||
gPipeline.markTextured(mDrawable);
|
||||
}
|
||||
mTexAnimMode = result | mTextureAnimp->mMode;
|
||||
if (!mTexAnimMode)
|
||||
{
|
||||
mFaceMappingChanged = TRUE;
|
||||
gPipeline.markTextured(mDrawable);
|
||||
}
|
||||
mTexAnimMode = result | mTextureAnimp->mMode;
|
||||
|
||||
S32 start=0, end=mDrawable->getNumFaces()-1;
|
||||
if (mTextureAnimp->mFace >= 0 && mTextureAnimp->mFace <= end)
|
||||
{
|
||||
start = end = mTextureAnimp->mFace;
|
||||
}
|
||||
S32 start=0, end=mDrawable->getNumFaces()-1;
|
||||
if (mTextureAnimp->mFace >= 0 && mTextureAnimp->mFace <= end)
|
||||
{
|
||||
start = end = mTextureAnimp->mFace;
|
||||
}
|
||||
|
||||
for (S32 i = start; i <= end; i++)
|
||||
{
|
||||
LLFace* facep = mDrawable->getFace(i);
|
||||
if (!facep) continue;
|
||||
if(facep->getVirtualSize() <= MIN_TEX_ANIM_SIZE && facep->mTextureMatrix) continue;
|
||||
for (S32 i = start; i <= end; i++)
|
||||
{
|
||||
LLFace* facep = mDrawable->getFace(i);
|
||||
if (!facep) continue;
|
||||
if(facep->getVirtualSize() <= MIN_TEX_ANIM_SIZE && facep->mTextureMatrix) continue;
|
||||
|
||||
const LLTextureEntry* te = facep->getTextureEntry();
|
||||
const LLTextureEntry* te = facep->getTextureEntry();
|
||||
|
||||
if (!te)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (!te)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!(result & LLViewerTextureAnim::ROTATE))
|
||||
{
|
||||
te->getRotation(&rot);
|
||||
}
|
||||
if (!(result & LLViewerTextureAnim::TRANSLATE))
|
||||
{
|
||||
te->getOffset(&off_s,&off_t);
|
||||
}
|
||||
if (!(result & LLViewerTextureAnim::SCALE))
|
||||
{
|
||||
te->getScale(&scale_s, &scale_t);
|
||||
}
|
||||
if (!(result & LLViewerTextureAnim::ROTATE))
|
||||
{
|
||||
te->getRotation(&rot);
|
||||
}
|
||||
if (!(result & LLViewerTextureAnim::TRANSLATE))
|
||||
{
|
||||
te->getOffset(&off_s,&off_t);
|
||||
}
|
||||
if (!(result & LLViewerTextureAnim::SCALE))
|
||||
{
|
||||
te->getScale(&scale_s, &scale_t);
|
||||
}
|
||||
|
||||
if (!facep->mTextureMatrix)
|
||||
{
|
||||
facep->mTextureMatrix = new LLMatrix4();
|
||||
}
|
||||
if (!facep->mTextureMatrix)
|
||||
{
|
||||
facep->mTextureMatrix = new LLMatrix4();
|
||||
}
|
||||
|
||||
LLMatrix4& tex_mat = *facep->mTextureMatrix;
|
||||
tex_mat.setIdentity();
|
||||
LLVector3 trans ;
|
||||
{
|
||||
trans.set(LLVector3(off_s+0.5f, off_t+0.5f, 0.f));
|
||||
tex_mat.translate(LLVector3(-0.5f, -0.5f, 0.f));
|
||||
}
|
||||
LLMatrix4& tex_mat = *facep->mTextureMatrix;
|
||||
tex_mat.setIdentity();
|
||||
LLVector3 trans ;
|
||||
{
|
||||
trans.set(LLVector3(off_s+0.5f, off_t+0.5f, 0.f));
|
||||
tex_mat.translate(LLVector3(-0.5f, -0.5f, 0.f));
|
||||
}
|
||||
|
||||
LLVector3 scale(scale_s, scale_t, 1.f);
|
||||
LLQuaternion quat;
|
||||
quat.setQuat(rot, 0, 0, -1.f);
|
||||
LLVector3 scale(scale_s, scale_t, 1.f);
|
||||
LLQuaternion quat;
|
||||
quat.setQuat(rot, 0, 0, -1.f);
|
||||
|
||||
tex_mat.rotate(quat);
|
||||
tex_mat.rotate(quat);
|
||||
|
||||
LLMatrix4 mat;
|
||||
mat.initAll(scale, LLQuaternion(), LLVector3());
|
||||
tex_mat *= mat;
|
||||
LLMatrix4 mat;
|
||||
mat.initAll(scale, LLQuaternion(), LLVector3());
|
||||
tex_mat *= mat;
|
||||
|
||||
tex_mat.translate(trans);
|
||||
tex_mat.translate(trans);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mTexAnimMode && mTextureAnimp->mRate == 0)
|
||||
else
|
||||
{
|
||||
U8 start, count;
|
||||
|
||||
if (mTextureAnimp->mFace == -1)
|
||||
if (mTexAnimMode && mTextureAnimp->mRate == 0)
|
||||
{
|
||||
start = 0;
|
||||
count = getNumTEs();
|
||||
}
|
||||
else
|
||||
{
|
||||
start = (U8) mTextureAnimp->mFace;
|
||||
count = 1;
|
||||
}
|
||||
U8 start, count;
|
||||
|
||||
for (S32 i = start; i < start + count; i++)
|
||||
{
|
||||
if (mTexAnimMode & LLViewerTextureAnim::TRANSLATE)
|
||||
if (mTextureAnimp->mFace == -1)
|
||||
{
|
||||
setTEOffset(i, mTextureAnimp->mOffS, mTextureAnimp->mOffT);
|
||||
start = 0;
|
||||
count = getNumTEs();
|
||||
}
|
||||
if (mTexAnimMode & LLViewerTextureAnim::SCALE)
|
||||
else
|
||||
{
|
||||
setTEScale(i, mTextureAnimp->mScaleS, mTextureAnimp->mScaleT);
|
||||
start = (U8) mTextureAnimp->mFace;
|
||||
count = 1;
|
||||
}
|
||||
if (mTexAnimMode & LLViewerTextureAnim::ROTATE)
|
||||
{
|
||||
setTERotation(i, mTextureAnimp->mRot);
|
||||
}
|
||||
}
|
||||
|
||||
gPipeline.markTextured(mDrawable);
|
||||
mFaceMappingChanged = TRUE;
|
||||
mTexAnimMode = 0;
|
||||
for (S32 i = start; i < start + count; i++)
|
||||
{
|
||||
if (mTexAnimMode & LLViewerTextureAnim::TRANSLATE)
|
||||
{
|
||||
setTEOffset(i, mTextureAnimp->mOffS, mTextureAnimp->mOffT);
|
||||
}
|
||||
if (mTexAnimMode & LLViewerTextureAnim::SCALE)
|
||||
{
|
||||
setTEScale(i, mTextureAnimp->mScaleS, mTextureAnimp->mScaleT);
|
||||
}
|
||||
if (mTexAnimMode & LLViewerTextureAnim::ROTATE)
|
||||
{
|
||||
setTERotation(i, mTextureAnimp->mRot);
|
||||
}
|
||||
}
|
||||
|
||||
gPipeline.markTextured(mDrawable);
|
||||
mFaceMappingChanged = TRUE;
|
||||
mTexAnimMode = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
BOOL LLVOVolume::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
||||
{
|
||||
LLViewerObject::idleUpdate(agent, world, time);
|
||||
|
||||
//static LLFastTimer::DeclareTimer ftm("Volume Idle");
|
||||
//LLFastTimer t(ftm);
|
||||
|
||||
if (mDead || mDrawable.isNull())
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
///////////////////////
|
||||
//
|
||||
// Do texture animation stuff
|
||||
//
|
||||
|
||||
if (mTextureAnimp && gAnimateTextures)
|
||||
{
|
||||
animateTextures();
|
||||
}
|
||||
|
||||
// Dispatch to implementation
|
||||
if (mVolumeImpl)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
void LLVOVolume::updateTextures()
|
||||
{
|
||||
@@ -489,6 +450,7 @@ void LLVOVolume::updateTextures()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -711,8 +673,7 @@ void LLVOVolume::updateTextureVirtualSize(bool forced)
|
||||
|
||||
BOOL LLVOVolume::isActive() const
|
||||
{
|
||||
return !mStatic || mTextureAnimp || (mVolumeImpl && mVolumeImpl->isActive()) ||
|
||||
(mDrawable.notNull() && mDrawable->isActive());
|
||||
return !mStatic;
|
||||
}
|
||||
|
||||
BOOL LLVOVolume::setMaterial(const U8 material)
|
||||
|
||||
@@ -70,7 +70,7 @@ class LLVolumeInterface
|
||||
public:
|
||||
virtual ~LLVolumeInterface() { }
|
||||
virtual LLVolumeInterfaceType getInterfaceType() const = 0;
|
||||
virtual void doIdleUpdate(LLAgent &agent, LLWorld &world, const F64 &time) = 0;
|
||||
virtual void doIdleUpdate() = 0;
|
||||
virtual BOOL doUpdateGeometry(LLDrawable *drawable) = 0;
|
||||
virtual LLVector3 getPivotPosition() const = 0;
|
||||
virtual void onSetVolume(const LLVolumeParams &volume_params, const S32 detail) = 0;
|
||||
@@ -116,8 +116,7 @@ public:
|
||||
void deleteFaces();
|
||||
|
||||
void animateTextures();
|
||||
/*virtual*/ BOOL idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
|
||||
|
||||
|
||||
BOOL isVisible() const ;
|
||||
/*virtual*/ BOOL isActive() const;
|
||||
/*virtual*/ BOOL isAttachment() const;
|
||||
|
||||
@@ -106,17 +106,8 @@ void LLVOWater::updateTextures()
|
||||
}
|
||||
|
||||
// Never gets called
|
||||
BOOL LLVOWater::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
||||
void LLVOWater::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
||||
{
|
||||
/*if (mDead || !(gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_WATER)))
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
if (mDrawable)
|
||||
{
|
||||
gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_VOLUME, TRUE);
|
||||
}*/
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
LLDrawable *LLVOWater::createDrawable(LLPipeline *pipeline)
|
||||
|
||||
@@ -64,7 +64,7 @@ public:
|
||||
static void initClass();
|
||||
static void cleanupClass();
|
||||
|
||||
/*virtual*/ BOOL idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
|
||||
/*virtual*/ void idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
|
||||
/*virtual*/ LLDrawable* createDrawable(LLPipeline *pipeline);
|
||||
/*virtual*/ BOOL updateGeometry(LLDrawable *drawable);
|
||||
/*virtual*/ void updateSpatialExtents(LLVector4a& newMin, LLVector4a& newMax);
|
||||
|
||||
@@ -98,9 +98,9 @@ void LLVOWLSky::initSunDirection(LLVector3 const & sun_direction,
|
||||
{
|
||||
}
|
||||
|
||||
BOOL LLVOWLSky::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
||||
void LLVOWLSky::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
||||
{
|
||||
return TRUE;
|
||||
|
||||
}
|
||||
|
||||
BOOL LLVOWLSky::isActive(void) const
|
||||
|
||||
@@ -59,7 +59,7 @@ public:
|
||||
void initSunDirection(LLVector3 const & sun_direction,
|
||||
LLVector3 const & sun_angular_velocity);
|
||||
|
||||
/*virtual*/ BOOL idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
|
||||
/*virtual*/ void idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
|
||||
/*virtual*/ BOOL isActive(void) const;
|
||||
/*virtual*/ LLDrawable * createDrawable(LLPipeline *pipeline);
|
||||
/*virtual*/ BOOL updateGeometry(LLDrawable *drawable);
|
||||
|
||||
@@ -1642,6 +1642,10 @@ void LLPipeline::updateMovedList(LLDrawable::drawable_vector_t& moved_list)
|
||||
drawablep->clearState(LLDrawable::EARLY_MOVE | LLDrawable::MOVE_UNDAMPED);
|
||||
if (done)
|
||||
{
|
||||
if (drawablep->isRoot())
|
||||
{
|
||||
drawablep->makeStatic();
|
||||
}
|
||||
drawablep->clearState(LLDrawable::ON_MOVE_LIST);
|
||||
if (drawablep->isState(LLDrawable::ANIMATED_CHILD))
|
||||
{ //will likely not receive any future world matrix updates
|
||||
@@ -6130,9 +6134,12 @@ void LLPipeline::resetVertexBuffers(LLDrawable* drawable)
|
||||
}
|
||||
|
||||
void LLPipeline::resetVertexBuffers()
|
||||
{ mResetVertexBuffers = true;
|
||||
{
|
||||
mResetVertexBuffers = true;
|
||||
}
|
||||
|
||||
static LLFastTimer::DeclareTimer FTM_RESET_VB("Reset VB");
|
||||
|
||||
void LLPipeline::doResetVertexBuffers()
|
||||
{
|
||||
if (!mResetVertexBuffers)
|
||||
@@ -6168,6 +6175,8 @@ void LLPipeline::doResetVertexBuffers()
|
||||
if(LLPostProcess::instanceExists())
|
||||
LLPostProcess::getInstance()->destroyGL();
|
||||
|
||||
LLVOPartGroup::destroyGL();
|
||||
|
||||
LLVertexBuffer::cleanupClass();
|
||||
|
||||
//delete all name pool caches
|
||||
|
||||
Reference in New Issue
Block a user