summaryrefslogtreecommitdiff
path: root/indra/newview/llvieweroctree.h
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llvieweroctree.h')
-rw-r--r--indra/newview/llvieweroctree.h512
1 files changed, 256 insertions, 256 deletions
diff --git a/indra/newview/llvieweroctree.h b/indra/newview/llvieweroctree.h
index 353429d254..2a072056df 100644
--- a/indra/newview/llvieweroctree.h
+++ b/indra/newview/llvieweroctree.h
@@ -1,25 +1,25 @@
-/**
+/**
* @file llvieweroctree.h
* @brief LLViewerObjectOctree.cpp header file, defining all supporting classes.
*
* $LicenseInfo:firstyear=2002&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2010, Linden Research, Inc.
- *
+ *
* 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.
- *
+ *
* 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.
- *
+ *
* 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$
*/
@@ -74,52 +74,52 @@ S32 AABBSphereIntersectR2(const LLVector3& min, const LLVector3& max, const LLVe
class LLViewerOctreeEntry : public LLRefCount
{
LL_ALIGN_NEW
- friend class LLViewerOctreeEntryData;
+ friend class LLViewerOctreeEntryData;
public:
- typedef enum
- {
- LLDRAWABLE = 0,
- LLVOCACHEENTRY,
- NUM_DATA_TYPE
- }eEntryDataType_t;
+ typedef enum
+ {
+ LLDRAWABLE = 0,
+ LLVOCACHEENTRY,
+ NUM_DATA_TYPE
+ }eEntryDataType_t;
protected:
- virtual ~LLViewerOctreeEntry();
+ virtual ~LLViewerOctreeEntry();
public:
- LLViewerOctreeEntry();
-
- void nullGroup(); //called by group handleDestruction() only
- void setGroup(LLViewerOctreeGroup* group);
- void removeData(LLViewerOctreeEntryData* data);
-
- LLViewerOctreeEntryData* getDrawable() const {return mData[LLDRAWABLE];}
- bool hasDrawable() const {return mData[LLDRAWABLE] != NULL;}
- LLViewerOctreeEntryData* getVOCacheEntry() const {return mData[LLVOCACHEENTRY];}
- bool hasVOCacheEntry() const {return mData[LLVOCACHEENTRY] != NULL;}
-
- const LLVector4a* getSpatialExtents() const {return mExtents;}
- const LLVector4a& getPositionGroup() const {return mPositionGroup;}
- LLViewerOctreeGroup* getGroup()const {return mGroup;}
-
- F32 getBinRadius() const {return mBinRadius;}
- S32 getBinIndex() const {return mBinIndex; }
- void setBinIndex(S32 index) const {mBinIndex = index; }
+ LLViewerOctreeEntry();
+
+ void nullGroup(); //called by group handleDestruction() only
+ void setGroup(LLViewerOctreeGroup* group);
+ void removeData(LLViewerOctreeEntryData* data);
+
+ LLViewerOctreeEntryData* getDrawable() const {return mData[LLDRAWABLE];}
+ bool hasDrawable() const {return mData[LLDRAWABLE] != NULL;}
+ LLViewerOctreeEntryData* getVOCacheEntry() const {return mData[LLVOCACHEENTRY];}
+ bool hasVOCacheEntry() const {return mData[LLVOCACHEENTRY] != NULL;}
+
+ const LLVector4a* getSpatialExtents() const {return mExtents;}
+ const LLVector4a& getPositionGroup() const {return mPositionGroup;}
+ LLViewerOctreeGroup* getGroup()const {return mGroup;}
+
+ F32 getBinRadius() const {return mBinRadius;}
+ S32 getBinIndex() const {return mBinIndex; }
+ void setBinIndex(S32 index) const {mBinIndex = index; }
private:
- void addData(LLViewerOctreeEntryData* data);
+ void addData(LLViewerOctreeEntryData* data);
private:
- LLViewerOctreeEntryData* mData[NUM_DATA_TYPE]; //do not use LLPointer here.
- LLViewerOctreeGroup* mGroup;
+ LLViewerOctreeEntryData* mData[NUM_DATA_TYPE]; //do not use LLPointer here.
+ LLViewerOctreeGroup* mGroup;
- //aligned members
- LL_ALIGN_16(LLVector4a mExtents[2]);
- LL_ALIGN_16(LLVector4a mPositionGroup);
- F32 mBinRadius;
- mutable S32 mBinIndex;
- mutable U32 mVisible;
+ //aligned members
+ LL_ALIGN_16(LLVector4a mExtents[2]);
+ LL_ALIGN_16(LLVector4a mPositionGroup);
+ F32 mBinRadius;
+ mutable S32 mBinIndex;
+ mutable U32 mVisible;
} ;//LL_ALIGN_POSTFIX(16);
@@ -128,144 +128,144 @@ private:
class LLViewerOctreeEntryData : public LLRefCount
{
protected:
- virtual ~LLViewerOctreeEntryData();
+ virtual ~LLViewerOctreeEntryData();
public:
- LLViewerOctreeEntryData(const LLViewerOctreeEntryData& rhs)
- {
- *this = rhs;
- }
- LLViewerOctreeEntryData(LLViewerOctreeEntry::eEntryDataType_t data_type);
-
- LLViewerOctreeEntry::eEntryDataType_t getDataType() const {return mDataType;}
- LLViewerOctreeEntry* getEntry() {return mEntry;}
-
- virtual void setOctreeEntry(LLViewerOctreeEntry* entry);
- void removeOctreeEntry();
-
- F32 getBinRadius() const {return mEntry->getBinRadius();}
- const LLVector4a* getSpatialExtents() const;
- LLViewerOctreeGroup* getGroup()const;
- const LLVector4a& getPositionGroup() const;
-
- void setBinRadius(F32 rad) {mEntry->mBinRadius = rad;}
- void setSpatialExtents(const LLVector3& min, const LLVector3& max);
- void setSpatialExtents(const LLVector4a& min, const LLVector4a& max);
- void setPositionGroup(const LLVector4a& pos);
-
- virtual void setGroup(LLViewerOctreeGroup* group);
- void shift(const LLVector4a &shift_vector);
-
- U32 getVisible() const {return mEntry ? mEntry->mVisible : 0;}
- void setVisible() const;
- void resetVisible() const;
- virtual bool isVisible() const;
- virtual bool isRecentlyVisible() const;
-
- static S32 getCurrentFrame() { return sCurVisible; }
+ LLViewerOctreeEntryData(const LLViewerOctreeEntryData& rhs)
+ {
+ *this = rhs;
+ }
+ LLViewerOctreeEntryData(LLViewerOctreeEntry::eEntryDataType_t data_type);
+
+ LLViewerOctreeEntry::eEntryDataType_t getDataType() const {return mDataType;}
+ LLViewerOctreeEntry* getEntry() {return mEntry;}
+
+ virtual void setOctreeEntry(LLViewerOctreeEntry* entry);
+ void removeOctreeEntry();
+
+ F32 getBinRadius() const {return mEntry->getBinRadius();}
+ const LLVector4a* getSpatialExtents() const;
+ LLViewerOctreeGroup* getGroup()const;
+ const LLVector4a& getPositionGroup() const;
+
+ void setBinRadius(F32 rad) {mEntry->mBinRadius = rad;}
+ void setSpatialExtents(const LLVector3& min, const LLVector3& max);
+ void setSpatialExtents(const LLVector4a& min, const LLVector4a& max);
+ void setPositionGroup(const LLVector4a& pos);
+
+ virtual void setGroup(LLViewerOctreeGroup* group);
+ void shift(const LLVector4a &shift_vector);
+
+ U32 getVisible() const {return mEntry ? mEntry->mVisible : 0;}
+ void setVisible() const;
+ void resetVisible() const;
+ virtual bool isVisible() const;
+ virtual bool isRecentlyVisible() const;
+
+ static S32 getCurrentFrame() { return sCurVisible; }
protected:
- LLVector4a& getGroupPosition() {return mEntry->mPositionGroup;}
- void initVisible(U32 visible) {mEntry->mVisible = visible;}
+ LLVector4a& getGroupPosition() {return mEntry->mPositionGroup;}
+ void initVisible(U32 visible) {mEntry->mVisible = visible;}
- static void incrementVisible() {sCurVisible++;}
+ static void incrementVisible() {sCurVisible++;}
protected:
- LLPointer<LLViewerOctreeEntry> mEntry;
- LLViewerOctreeEntry::eEntryDataType_t mDataType;
- static U32 sCurVisible; // Counter for what value of mVisible means currently visible
+ LLPointer<LLViewerOctreeEntry> mEntry;
+ LLViewerOctreeEntry::eEntryDataType_t mDataType;
+ static U32 sCurVisible; // Counter for what value of mVisible means currently visible
};//LL_ALIGN_POSTFIX(16);
//defines an octree group for an octree node, which contains multiple entries.
//LL_ALIGN_PREFIX(16)
class LLViewerOctreeGroup
-: public OctreeListener
+: public OctreeListener
{
LL_ALIGN_NEW
- friend class LLViewerOctreeCull;
+ friend class LLViewerOctreeCull;
protected:
- virtual ~LLViewerOctreeGroup();
-
-public:
- enum
- {
- CLEAN = 0x00000000,
- DIRTY = 0x00000001,
- OBJECT_DIRTY = 0x00000002,
- SKIP_FRUSTUM_CHECK = 0x00000004,
- DEAD = 0x00000008,
- INVALID_STATE = 0x00000010,
- };
+ virtual ~LLViewerOctreeGroup();
public:
- typedef OctreeNode::element_iter element_iter;
- typedef OctreeNode::element_list element_list;
-
- LLViewerOctreeGroup(OctreeNode* node);
- LLViewerOctreeGroup(const LLViewerOctreeGroup& rhs)
- {
- *this = rhs;
- }
-
- bool removeFromGroup(LLViewerOctreeEntryData* data);
- bool removeFromGroup(LLViewerOctreeEntry* entry);
-
- virtual void unbound();
- virtual void rebound();
-
- BOOL isDead() { return hasState(DEAD); }
-
- void setVisible();
- BOOL isVisible() const;
- virtual BOOL isRecentlyVisible() const;
- S32 getVisible(LLViewerCamera::eCameraID id) const {return mVisible[id];}
- S32 getAnyVisible() const {return mAnyVisible;}
- bool isEmpty() const { return mOctreeNode->isEmpty(); }
-
- U32 getState() {return mState; }
- bool isDirty() const {return mState & DIRTY;}
- bool hasState(U32 state) const {return mState & state;}
- void setState(U32 state) {mState |= state;}
- void clearState(U32 state) {mState &= ~state;}
-
- //LISTENER FUNCTIONS
- virtual void handleInsertion(const TreeNode* node, LLViewerOctreeEntry* obj);
- virtual void handleRemoval(const TreeNode* node, LLViewerOctreeEntry* obj);
- virtual void handleDestruction(const TreeNode* node);
- virtual void handleStateChange(const TreeNode* node);
- virtual void handleChildAddition(const OctreeNode* parent, OctreeNode* child);
- virtual void handleChildRemoval(const OctreeNode* parent, const OctreeNode* child);
-
- OctreeNode* getOctreeNode() {return mOctreeNode;}
- LLViewerOctreeGroup* getParent();
-
- const LLVector4a* getBounds() const {return mBounds;}
- const LLVector4a* getExtents() const {return mExtents;}
- const LLVector4a* getObjectBounds() const {return mObjectBounds;}
- const LLVector4a* getObjectExtents() const {return mObjectExtents;}
-
- //octree wrappers to make code more readable
- element_iter getDataBegin() { return mOctreeNode->getDataBegin(); }
- element_iter getDataEnd() { return mOctreeNode->getDataEnd(); }
- U32 getElementCount() const { return mOctreeNode->getElementCount(); }
- bool hasElement(LLViewerOctreeEntryData* data);
-
+ enum
+ {
+ CLEAN = 0x00000000,
+ DIRTY = 0x00000001,
+ OBJECT_DIRTY = 0x00000002,
+ SKIP_FRUSTUM_CHECK = 0x00000004,
+ DEAD = 0x00000008,
+ INVALID_STATE = 0x00000010,
+ };
+
+public:
+ typedef OctreeNode::element_iter element_iter;
+ typedef OctreeNode::element_list element_list;
+
+ LLViewerOctreeGroup(OctreeNode* node);
+ LLViewerOctreeGroup(const LLViewerOctreeGroup& rhs)
+ {
+ *this = rhs;
+ }
+
+ bool removeFromGroup(LLViewerOctreeEntryData* data);
+ bool removeFromGroup(LLViewerOctreeEntry* entry);
+
+ virtual void unbound();
+ virtual void rebound();
+
+ BOOL isDead() { return hasState(DEAD); }
+
+ void setVisible();
+ BOOL isVisible() const;
+ virtual BOOL isRecentlyVisible() const;
+ S32 getVisible(LLViewerCamera::eCameraID id) const {return mVisible[id];}
+ S32 getAnyVisible() const {return mAnyVisible;}
+ bool isEmpty() const { return mOctreeNode->isEmpty(); }
+
+ U32 getState() {return mState; }
+ bool isDirty() const {return mState & DIRTY;}
+ bool hasState(U32 state) const {return mState & state;}
+ void setState(U32 state) {mState |= state;}
+ void clearState(U32 state) {mState &= ~state;}
+
+ //LISTENER FUNCTIONS
+ virtual void handleInsertion(const TreeNode* node, LLViewerOctreeEntry* obj);
+ virtual void handleRemoval(const TreeNode* node, LLViewerOctreeEntry* obj);
+ virtual void handleDestruction(const TreeNode* node);
+ virtual void handleStateChange(const TreeNode* node);
+ virtual void handleChildAddition(const OctreeNode* parent, OctreeNode* child);
+ virtual void handleChildRemoval(const OctreeNode* parent, const OctreeNode* child);
+
+ OctreeNode* getOctreeNode() {return mOctreeNode;}
+ LLViewerOctreeGroup* getParent();
+
+ const LLVector4a* getBounds() const {return mBounds;}
+ const LLVector4a* getExtents() const {return mExtents;}
+ const LLVector4a* getObjectBounds() const {return mObjectBounds;}
+ const LLVector4a* getObjectExtents() const {return mObjectExtents;}
+
+ //octree wrappers to make code more readable
+ element_iter getDataBegin() { return mOctreeNode->getDataBegin(); }
+ element_iter getDataEnd() { return mOctreeNode->getDataEnd(); }
+ U32 getElementCount() const { return mOctreeNode->getElementCount(); }
+ bool hasElement(LLViewerOctreeEntryData* data);
+
protected:
- void checkStates();
+ void checkStates();
private:
- virtual bool boundObjects(BOOL empty, LLVector4a& minOut, LLVector4a& maxOut);
+ virtual bool boundObjects(BOOL empty, LLVector4a& minOut, LLVector4a& maxOut);
protected:
- U32 mState;
- OctreeNode* mOctreeNode;
+ U32 mState;
+ OctreeNode* mOctreeNode;
- LL_ALIGN_16(LLVector4a mBounds[2]); // bounding box (center, size) of this node and all its children (tight fit to objects)
- LL_ALIGN_16(LLVector4a mObjectBounds[2]); // bounding box (center, size) of objects in this node
- LL_ALIGN_16(LLVector4a mExtents[2]); // extents (min, max) of this node and all its children
- LL_ALIGN_16(LLVector4a mObjectExtents[2]); // extents (min, max) of objects in this node
+ LL_ALIGN_16(LLVector4a mBounds[2]); // bounding box (center, size) of this node and all its children (tight fit to objects)
+ LL_ALIGN_16(LLVector4a mObjectBounds[2]); // bounding box (center, size) of objects in this node
+ LL_ALIGN_16(LLVector4a mExtents[2]); // extents (min, max) of this node and all its children
+ LL_ALIGN_16(LLVector4a mObjectExtents[2]); // extents (min, max) of objects in this node
- S32 mAnyVisible; //latest visible to any camera
- S32 mVisible[LLViewerCamera::NUM_CAMERAS];
+ S32 mAnyVisible; //latest visible to any camera
+ S32 mVisible[LLViewerCamera::NUM_CAMERAS];
};//LL_ALIGN_POSTFIX(16);
@@ -274,152 +274,152 @@ protected:
class LLOcclusionCullingGroup : public LLViewerOctreeGroup
{
public:
- typedef enum
- {
- OCCLUDED = 0x00010000,
- QUERY_PENDING = 0x00020000,
- ACTIVE_OCCLUSION = 0x00040000,
- DISCARD_QUERY = 0x00080000,
- EARLY_FAIL = 0x00100000,
- } eOcclusionState;
-
- typedef enum
- {
- STATE_MODE_SINGLE = 0, //set one node
- STATE_MODE_BRANCH, //set entire branch
- STATE_MODE_DIFF, //set entire branch as long as current state is different
- STATE_MODE_ALL_CAMERAS, //used for occlusion state, set state for all cameras
- } eSetStateMode;
+ typedef enum
+ {
+ OCCLUDED = 0x00010000,
+ QUERY_PENDING = 0x00020000,
+ ACTIVE_OCCLUSION = 0x00040000,
+ DISCARD_QUERY = 0x00080000,
+ EARLY_FAIL = 0x00100000,
+ } eOcclusionState;
+
+ typedef enum
+ {
+ STATE_MODE_SINGLE = 0, //set one node
+ STATE_MODE_BRANCH, //set entire branch
+ STATE_MODE_DIFF, //set entire branch as long as current state is different
+ STATE_MODE_ALL_CAMERAS, //used for occlusion state, set state for all cameras
+ } eSetStateMode;
protected:
- virtual ~LLOcclusionCullingGroup();
+ virtual ~LLOcclusionCullingGroup();
public:
- LLOcclusionCullingGroup(OctreeNode* node, LLViewerOctreePartition* part);
- LLOcclusionCullingGroup(const LLOcclusionCullingGroup& rhs) : LLViewerOctreeGroup(rhs)
- {
- *this = rhs;
- }
+ LLOcclusionCullingGroup(OctreeNode* node, LLViewerOctreePartition* part);
+ LLOcclusionCullingGroup(const LLOcclusionCullingGroup& rhs) : LLViewerOctreeGroup(rhs)
+ {
+ *this = rhs;
+ }
- void setOcclusionState(U32 state, S32 mode = STATE_MODE_SINGLE);
- void clearOcclusionState(U32 state, S32 mode = STATE_MODE_SINGLE);
- void checkOcclusion(); //read back last occlusion query (if any)
- void doOcclusion(LLCamera* camera, const LLVector4a* shift = NULL); //issue occlusion query
- BOOL isOcclusionState(U32 state) const { return mOcclusionState[LLViewerCamera::sCurCameraID] & state ? TRUE : FALSE; }
- U32 getOcclusionState() const { return mOcclusionState[LLViewerCamera::sCurCameraID];}
+ void setOcclusionState(U32 state, S32 mode = STATE_MODE_SINGLE);
+ void clearOcclusionState(U32 state, S32 mode = STATE_MODE_SINGLE);
+ void checkOcclusion(); //read back last occlusion query (if any)
+ void doOcclusion(LLCamera* camera, const LLVector4a* shift = NULL); //issue occlusion query
+ BOOL isOcclusionState(U32 state) const { return mOcclusionState[LLViewerCamera::sCurCameraID] & state ? TRUE : FALSE; }
+ U32 getOcclusionState() const { return mOcclusionState[LLViewerCamera::sCurCameraID];}
- BOOL needsUpdate();
- U32 getLastOcclusionIssuedTime();
+ BOOL needsUpdate();
+ U32 getLastOcclusionIssuedTime();
- //virtual
- void handleChildAddition(const OctreeNode* parent, OctreeNode* child);
+ //virtual
+ void handleChildAddition(const OctreeNode* parent, OctreeNode* child);
- //virtual
- BOOL isRecentlyVisible() const;
- LLViewerOctreePartition* getSpatialPartition()const {return mSpatialPartition;}
- BOOL isAnyRecentlyVisible() const;
+ //virtual
+ BOOL isRecentlyVisible() const;
+ LLViewerOctreePartition* getSpatialPartition()const {return mSpatialPartition;}
+ BOOL isAnyRecentlyVisible() const;
- static U32 getNewOcclusionQueryObjectName();
- static void releaseOcclusionQueryObjectName(U32 name);
+ static U32 getNewOcclusionQueryObjectName();
+ static void releaseOcclusionQueryObjectName(U32 name);
protected:
- void releaseOcclusionQueryObjectNames();
+ void releaseOcclusionQueryObjectNames();
-private:
- BOOL earlyFail(LLCamera* camera, const LLVector4a* bounds);
+private:
+ BOOL earlyFail(LLCamera* camera, const LLVector4a* bounds);
protected:
- U32 mOcclusionState[LLViewerCamera::NUM_CAMERAS];
- U32 mOcclusionIssued[LLViewerCamera::NUM_CAMERAS];
+ U32 mOcclusionState[LLViewerCamera::NUM_CAMERAS];
+ U32 mOcclusionIssued[LLViewerCamera::NUM_CAMERAS];
- S32 mLODHash;
+ S32 mLODHash;
- LLViewerOctreePartition* mSpatialPartition;
- U32 mOcclusionQuery[LLViewerCamera::NUM_CAMERAS];
+ LLViewerOctreePartition* mSpatialPartition;
+ U32 mOcclusionQuery[LLViewerCamera::NUM_CAMERAS];
U32 mOcclusionCheckCount[LLViewerCamera::NUM_CAMERAS];
-public:
- static std::set<U32> sPendingQueries;
+public:
+ static std::set<U32> sPendingQueries;
};//LL_ALIGN_POSTFIX(16);
class LLViewerOctreePartition
{
public:
- LLViewerOctreePartition();
- virtual ~LLViewerOctreePartition();
+ LLViewerOctreePartition();
+ virtual ~LLViewerOctreePartition();
- // Cull on arbitrary frustum
- virtual S32 cull(LLCamera &camera, bool do_occlusion) = 0;
- BOOL isOcclusionEnabled();
+ // Cull on arbitrary frustum
+ virtual S32 cull(LLCamera &camera, bool do_occlusion) = 0;
+ BOOL isOcclusionEnabled();
protected:
// MUST call from destructor of any derived classes (SL-17276)
void cleanup();
-public:
- U32 mPartitionType;
- U32 mDrawableType;
- OctreeNode* mOctree;
- LLViewerRegion* mRegionp; // the region this partition belongs to.
- BOOL mOcclusionEnabled; // if TRUE, occlusion culling is performed
- U32 mLODSeed;
- U32 mLODPeriod; //number of frames between LOD updates for a given spatial group (staggered by mLODSeed)
+public:
+ U32 mPartitionType;
+ U32 mDrawableType;
+ OctreeNode* mOctree;
+ LLViewerRegion* mRegionp; // the region this partition belongs to.
+ BOOL mOcclusionEnabled; // if TRUE, occlusion culling is performed
+ U32 mLODSeed;
+ U32 mLODPeriod; //number of frames between LOD updates for a given spatial group (staggered by mLODSeed)
};
class LLViewerOctreeCull : public OctreeTraveler
{
public:
- LLViewerOctreeCull(LLCamera* camera)
- : mCamera(camera), mRes(0) { }
-
- virtual void traverse(const OctreeNode* n);
+ LLViewerOctreeCull(LLCamera* camera)
+ : mCamera(camera), mRes(0) { }
+
+ virtual void traverse(const OctreeNode* n);
protected:
- virtual bool earlyFail(LLViewerOctreeGroup* group);
-
- //agent space group cull
- S32 AABBInFrustumNoFarClipGroupBounds(const LLViewerOctreeGroup* group);
- S32 AABBSphereIntersectGroupExtents(const LLViewerOctreeGroup* group);
- S32 AABBInFrustumGroupBounds(const LLViewerOctreeGroup* group);
-
- //agent space object set cull
- S32 AABBInFrustumNoFarClipObjectBounds(const LLViewerOctreeGroup* group);
- S32 AABBSphereIntersectObjectExtents(const LLViewerOctreeGroup* group);
- S32 AABBInFrustumObjectBounds(const LLViewerOctreeGroup* group);
-
- //local region space group cull
- S32 AABBInRegionFrustumNoFarClipGroupBounds(const LLViewerOctreeGroup* group);
- S32 AABBInRegionFrustumGroupBounds(const LLViewerOctreeGroup* group);
- S32 AABBRegionSphereIntersectGroupExtents(const LLViewerOctreeGroup* group, const LLVector3& shift);
-
- //local region space object set cull
- S32 AABBInRegionFrustumNoFarClipObjectBounds(const LLViewerOctreeGroup* group);
- S32 AABBInRegionFrustumObjectBounds(const LLViewerOctreeGroup* group);
- S32 AABBRegionSphereIntersectObjectExtents(const LLViewerOctreeGroup* group, const LLVector3& shift);
-
- virtual S32 frustumCheck(const LLViewerOctreeGroup* group) = 0;
- virtual S32 frustumCheckObjects(const LLViewerOctreeGroup* group) = 0;
-
- bool checkProjectionArea(const LLVector4a& center, const LLVector4a& size, const LLVector3& shift, F32 pixel_threshold, F32 near_radius);
- virtual bool checkObjects(const OctreeNode* branch, const LLViewerOctreeGroup* group);
- virtual void preprocess(LLViewerOctreeGroup* group);
- virtual void processGroup(LLViewerOctreeGroup* group);
- virtual void visit(const OctreeNode* branch);
-
+ virtual bool earlyFail(LLViewerOctreeGroup* group);
+
+ //agent space group cull
+ S32 AABBInFrustumNoFarClipGroupBounds(const LLViewerOctreeGroup* group);
+ S32 AABBSphereIntersectGroupExtents(const LLViewerOctreeGroup* group);
+ S32 AABBInFrustumGroupBounds(const LLViewerOctreeGroup* group);
+
+ //agent space object set cull
+ S32 AABBInFrustumNoFarClipObjectBounds(const LLViewerOctreeGroup* group);
+ S32 AABBSphereIntersectObjectExtents(const LLViewerOctreeGroup* group);
+ S32 AABBInFrustumObjectBounds(const LLViewerOctreeGroup* group);
+
+ //local region space group cull
+ S32 AABBInRegionFrustumNoFarClipGroupBounds(const LLViewerOctreeGroup* group);
+ S32 AABBInRegionFrustumGroupBounds(const LLViewerOctreeGroup* group);
+ S32 AABBRegionSphereIntersectGroupExtents(const LLViewerOctreeGroup* group, const LLVector3& shift);
+
+ //local region space object set cull
+ S32 AABBInRegionFrustumNoFarClipObjectBounds(const LLViewerOctreeGroup* group);
+ S32 AABBInRegionFrustumObjectBounds(const LLViewerOctreeGroup* group);
+ S32 AABBRegionSphereIntersectObjectExtents(const LLViewerOctreeGroup* group, const LLVector3& shift);
+
+ virtual S32 frustumCheck(const LLViewerOctreeGroup* group) = 0;
+ virtual S32 frustumCheckObjects(const LLViewerOctreeGroup* group) = 0;
+
+ bool checkProjectionArea(const LLVector4a& center, const LLVector4a& size, const LLVector3& shift, F32 pixel_threshold, F32 near_radius);
+ virtual bool checkObjects(const OctreeNode* branch, const LLViewerOctreeGroup* group);
+ virtual void preprocess(LLViewerOctreeGroup* group);
+ virtual void processGroup(LLViewerOctreeGroup* group);
+ virtual void visit(const OctreeNode* branch);
+
protected:
- LLCamera *mCamera;
- S32 mRes;
+ LLCamera *mCamera;
+ S32 mRes;
};
//scan the octree, output the info of each node for debug use.
class LLViewerOctreeDebug : public OctreeTraveler
{
public:
- virtual void processGroup(LLViewerOctreeGroup* group);
- virtual void visit(const OctreeNode* branch);
+ virtual void processGroup(LLViewerOctreeGroup* group);
+ virtual void visit(const OctreeNode* branch);
public:
- static BOOL sInDebug;
+ static BOOL sInDebug;
};
#endif