diff options
Diffstat (limited to 'linden/indra/newview/llspatialpartition.h')
-rw-r--r-- | linden/indra/newview/llspatialpartition.h | 213 |
1 files changed, 139 insertions, 74 deletions
diff --git a/linden/indra/newview/llspatialpartition.h b/linden/indra/newview/llspatialpartition.h index 1936423..a38e3fe 100644 --- a/linden/indra/newview/llspatialpartition.h +++ b/linden/indra/newview/llspatialpartition.h | |||
@@ -40,14 +40,18 @@ | |||
40 | #include "llvertexbuffer.h" | 40 | #include "llvertexbuffer.h" |
41 | #include "llgltypes.h" | 41 | #include "llgltypes.h" |
42 | #include "llcubemap.h" | 42 | #include "llcubemap.h" |
43 | #include "lldrawpool.h" | ||
43 | 44 | ||
44 | #include <queue> | 45 | #include <queue> |
45 | 46 | ||
46 | #define SG_STATE_INHERIT_MASK (CULLED | OCCLUDED) | 47 | #define SG_STATE_INHERIT_MASK (OCCLUDED) |
47 | #define SG_INITIAL_STATE_MASK (OCCLUSION_DIRTY | DIRTY | GEOM_DIRTY) | 48 | #define SG_INITIAL_STATE_MASK (DIRTY | GEOM_DIRTY) |
48 | 49 | ||
49 | class LLSpatialPartition; | 50 | class LLSpatialPartition; |
50 | class LLSpatialBridge; | 51 | class LLSpatialBridge; |
52 | class LLSpatialGroup; | ||
53 | |||
54 | S32 AABBSphereIntersect(const LLVector3& min, const LLVector3& max, const LLVector3 &origin, const F32 &rad); | ||
51 | 55 | ||
52 | class LLDrawInfo : public LLRefCount | 56 | class LLDrawInfo : public LLRefCount |
53 | { | 57 | { |
@@ -55,7 +59,7 @@ protected: | |||
55 | ~LLDrawInfo(); | 59 | ~LLDrawInfo(); |
56 | 60 | ||
57 | public: | 61 | public: |
58 | LLDrawInfo(U32 start, U32 end, U32 count, U32 offset, | 62 | LLDrawInfo(U16 start, U16 end, U32 count, U32 offset, |
59 | LLViewerImage* image, LLVertexBuffer* buffer, | 63 | LLViewerImage* image, LLVertexBuffer* buffer, |
60 | BOOL fullbright = FALSE, U8 bump = 0, BOOL particle = FALSE, F32 part_size = 0); | 64 | BOOL fullbright = FALSE, U8 bump = 0, BOOL particle = FALSE, F32 part_size = 0); |
61 | 65 | ||
@@ -64,9 +68,11 @@ public: | |||
64 | LLPointer<LLViewerImage> mTexture; | 68 | LLPointer<LLViewerImage> mTexture; |
65 | LLPointer<LLCubeMap> mReflectionMap; | 69 | LLPointer<LLCubeMap> mReflectionMap; |
66 | LLColor4U mGlowColor; | 70 | LLColor4U mGlowColor; |
71 | S32 mDebugColor; | ||
67 | const LLMatrix4* mTextureMatrix; | 72 | const LLMatrix4* mTextureMatrix; |
68 | U32 mStart; | 73 | const LLMatrix4* mModelMatrix; |
69 | U32 mEnd; | 74 | U16 mStart; |
75 | U16 mEnd; | ||
70 | U32 mCount; | 76 | U32 mCount; |
71 | U32 mOffset; | 77 | U32 mOffset; |
72 | BOOL mFullbright; | 78 | BOOL mFullbright; |
@@ -74,7 +80,8 @@ public: | |||
74 | BOOL mParticle; | 80 | BOOL mParticle; |
75 | F32 mPartSize; | 81 | F32 mPartSize; |
76 | F32 mVSize; | 82 | F32 mVSize; |
77 | 83 | LLSpatialGroup* mGroup; | |
84 | |||
78 | struct CompareTexture | 85 | struct CompareTexture |
79 | { | 86 | { |
80 | bool operator()(const LLDrawInfo& lhs, const LLDrawInfo& rhs) | 87 | bool operator()(const LLDrawInfo& lhs, const LLDrawInfo& rhs) |
@@ -84,7 +91,7 @@ public: | |||
84 | }; | 91 | }; |
85 | 92 | ||
86 | struct CompareTexturePtr | 93 | struct CompareTexturePtr |
87 | { | 94 | { //sort by texture |
88 | bool operator()(const LLPointer<LLDrawInfo>& lhs, const LLPointer<LLDrawInfo>& rhs) | 95 | bool operator()(const LLPointer<LLDrawInfo>& lhs, const LLPointer<LLDrawInfo>& rhs) |
89 | { | 96 | { |
90 | // sort by pointer, sort NULL down to the end | 97 | // sort by pointer, sort NULL down to the end |
@@ -93,6 +100,17 @@ public: | |||
93 | } | 100 | } |
94 | }; | 101 | }; |
95 | 102 | ||
103 | struct CompareTexturePtrMatrix | ||
104 | { | ||
105 | bool operator()(const LLPointer<LLDrawInfo>& lhs, const LLPointer<LLDrawInfo>& rhs) | ||
106 | { | ||
107 | return lhs.get() != rhs.get() | ||
108 | && (lhs.isNull() || (rhs.notNull() && (lhs->mTexture.get() > rhs->mTexture.get() || | ||
109 | (lhs->mTexture.get() == rhs->mTexture.get() && lhs->mModelMatrix > rhs->mModelMatrix)))); | ||
110 | } | ||
111 | |||
112 | }; | ||
113 | |||
96 | struct CompareBump | 114 | struct CompareBump |
97 | { | 115 | { |
98 | bool operator()(const LLPointer<LLDrawInfo>& lhs, const LLPointer<LLDrawInfo>& rhs) | 116 | bool operator()(const LLPointer<LLDrawInfo>& lhs, const LLPointer<LLDrawInfo>& rhs) |
@@ -108,23 +126,24 @@ class LLSpatialGroup : public LLOctreeListener<LLDrawable> | |||
108 | { | 126 | { |
109 | friend class LLSpatialPartition; | 127 | friend class LLSpatialPartition; |
110 | public: | 128 | public: |
129 | static U32 sNodeCount; | ||
111 | 130 | ||
112 | typedef std::vector<LLPointer<LLSpatialGroup> > sg_vector_t; | 131 | typedef std::vector<LLPointer<LLSpatialGroup> > sg_vector_t; |
113 | typedef std::set<LLPointer<LLSpatialGroup> > sg_set_t; | 132 | typedef std::set<LLPointer<LLSpatialGroup> > sg_set_t; |
114 | typedef std::vector<LLPointer<LLSpatialBridge> > bridge_list_t; | 133 | typedef std::vector<LLPointer<LLSpatialBridge> > bridge_list_t; |
115 | typedef std::vector<LLPointer<LLDrawInfo> > drawmap_elem_t; | 134 | typedef std::vector<LLPointer<LLDrawInfo> > drawmap_elem_t; |
116 | typedef std::map<U32, drawmap_elem_t > draw_map_t; | 135 | typedef std::map<U32, drawmap_elem_t > draw_map_t; |
117 | typedef std::map<LLPointer<LLViewerImage>, LLPointer<LLVertexBuffer> > buffer_map_t; | 136 | typedef std::vector<LLPointer<LLVertexBuffer> > buffer_list_t; |
137 | typedef std::map<LLPointer<LLViewerImage>, buffer_list_t> buffer_map_t; | ||
118 | 138 | ||
119 | typedef LLOctreeListener<LLDrawable> BaseType; | 139 | typedef LLOctreeListener<LLDrawable> BaseType; |
120 | typedef LLOctreeListener<LLDrawable> OctreeListener; | 140 | typedef LLOctreeListener<LLDrawable> OctreeListener; |
121 | typedef LLTreeNode<LLDrawable> TreeNode; | 141 | typedef LLTreeNode<LLDrawable> TreeNode; |
122 | typedef LLOctreeNode<LLDrawable> OctreeNode; | 142 | typedef LLOctreeNode<LLDrawable> OctreeNode; |
123 | typedef LLOctreeRoot<LLDrawable> OctreeRoot; | 143 | typedef LLOctreeRoot<LLDrawable> OctreeRoot; |
124 | typedef LLOctreeState<LLDrawable> OctreeState; | ||
125 | typedef LLOctreeTraveler<LLDrawable> OctreeTraveler; | 144 | typedef LLOctreeTraveler<LLDrawable> OctreeTraveler; |
126 | typedef LLOctreeState<LLDrawable>::element_iter element_iter; | 145 | typedef LLOctreeNode<LLDrawable>::element_iter element_iter; |
127 | typedef LLOctreeState<LLDrawable>::element_list element_list; | 146 | typedef LLOctreeNode<LLDrawable>::element_list element_list; |
128 | 147 | ||
129 | struct CompareDistanceGreater | 148 | struct CompareDistanceGreater |
130 | { | 149 | { |
@@ -144,29 +163,22 @@ public: | |||
144 | 163 | ||
145 | typedef enum | 164 | typedef enum |
146 | { | 165 | { |
147 | IN_QUEUE = 0x00000001, | 166 | OCCLUDED = 0x00000001, |
148 | QUERY_PENDING = 0x00000002, | 167 | IN_QUEUE = 0x00000002, |
149 | CULLED = 0x00000004, | 168 | QUERY_PENDING = 0x00000004, |
150 | OCCLUDED = 0x00000008, | 169 | ACTIVE_OCCLUSION = 0x00000008, |
151 | DEAD = 0x00000010, | 170 | DISCARD_QUERY = 0x00000010, |
152 | ACTIVE_OCCLUSION = 0x00000020, | 171 | DEAD = 0x00000020, |
153 | EARLY_FAIL = 0x00000040, | 172 | EARLY_FAIL = 0x00000040, |
154 | DEACTIVATE_OCCLUSION = 0x00000080, | 173 | DIRTY = 0x00000080, |
155 | RESHADOW = 0x00000100, | 174 | OBJECT_DIRTY = 0x00000100, |
156 | RESHADOW_QUEUE = 0x00000200, | 175 | GEOM_DIRTY = 0x00000200, |
157 | DIRTY = 0x00000400, | 176 | ALPHA_DIRTY = 0x00000800, |
158 | OBJECT_DIRTY = 0x00000800, | 177 | SKIP_FRUSTUM_CHECK = 0x00001000, |
159 | GEOM_DIRTY = 0x00001000, | 178 | IN_IMAGE_QUEUE = 0x00002000, |
160 | MATRIX_DIRTY = 0x00002000, | 179 | IMAGE_DIRTY = 0x00004000, |
161 | ALPHA_DIRTY = 0x00004000, | 180 | OCCLUSION_DIRTY = 0x00008000, |
162 | DISCARD_QUERY = 0x00008000, | 181 | MESH_DIRTY = 0x00010000, |
163 | QUERY_OUT = 0x00010000, | ||
164 | OCCLUDING = 0x00020000, | ||
165 | SKIP_FRUSTUM_CHECK = 0x00040000, | ||
166 | OCCLUSION_DIRTY = 0x00080000, | ||
167 | BELOW_WATER = 0x00100000, | ||
168 | IN_IMAGE_QUEUE = 0x00200000, | ||
169 | IMAGE_DIRTY = 0x00400000, | ||
170 | } eSpatialState; | 182 | } eSpatialState; |
171 | 183 | ||
172 | typedef enum | 184 | typedef enum |
@@ -181,11 +193,12 @@ public: | |||
181 | BOOL isDead() { return isState(DEAD); } | 193 | BOOL isDead() { return isState(DEAD); } |
182 | BOOL isState(U32 state) const { return mState & state ? TRUE : FALSE; } | 194 | BOOL isState(U32 state) const { return mState & state ? TRUE : FALSE; } |
183 | U32 getState() { return mState; } | 195 | U32 getState() { return mState; } |
184 | void setState(U32 state) { mState |= state; } | 196 | void setState(U32 state); |
185 | void clearState(U32 state) { mState &= ~state; } | 197 | void clearState(U32 state); |
186 | 198 | ||
187 | void clearDrawMap(); | 199 | void clearDrawMap(); |
188 | void validate(); | 200 | void validate(); |
201 | void checkStates(); | ||
189 | void validateDrawMap(); | 202 | void validateDrawMap(); |
190 | 203 | ||
191 | void setState(U32 state, S32 mode); | 204 | void setState(U32 state, S32 mode); |
@@ -196,20 +209,26 @@ public: | |||
196 | BOOL addObject(LLDrawable *drawablep, BOOL add_all = FALSE, BOOL from_octree = FALSE); | 209 | BOOL addObject(LLDrawable *drawablep, BOOL add_all = FALSE, BOOL from_octree = FALSE); |
197 | BOOL removeObject(LLDrawable *drawablep, BOOL from_octree = FALSE); | 210 | BOOL removeObject(LLDrawable *drawablep, BOOL from_octree = FALSE); |
198 | BOOL updateInGroup(LLDrawable *drawablep, BOOL immediate = FALSE); // Update position if it's in the group | 211 | BOOL updateInGroup(LLDrawable *drawablep, BOOL immediate = FALSE); // Update position if it's in the group |
199 | BOOL isVisible(); | 212 | BOOL isVisible() const; |
213 | void setVisible(); | ||
200 | void shift(const LLVector3 &offset); | 214 | void shift(const LLVector3 &offset); |
201 | BOOL boundObjects(BOOL empty, LLVector3& newMin, LLVector3& newMax); | 215 | BOOL boundObjects(BOOL empty, LLVector3& newMin, LLVector3& newMax); |
202 | void unbound(); | 216 | void unbound(); |
203 | BOOL rebound(); | 217 | BOOL rebound(); |
218 | void buildOcclusion(); //rebuild mOcclusionVerts | ||
219 | void checkOcclusion(); //read back last occlusion query (if any) | ||
220 | void doOcclusion(LLCamera* camera); //issue occlusion query | ||
204 | void destroyGL(); | 221 | void destroyGL(); |
205 | 222 | ||
206 | void updateDistance(LLCamera& camera); | 223 | void updateDistance(LLCamera& camera); |
224 | BOOL needsUpdate(); | ||
207 | BOOL changeLOD(); | 225 | BOOL changeLOD(); |
208 | void rebuildGeom(); | 226 | void rebuildGeom(); |
209 | void makeStatic(); | 227 | |
210 | |||
211 | void dirtyGeom() { setState(GEOM_DIRTY); } | 228 | void dirtyGeom() { setState(GEOM_DIRTY); } |
212 | element_list& getData() { return mOctreeNode->getOctState()->getData(); } | 229 | void dirtyMesh() { setState(MESH_DIRTY); } |
230 | element_list& getData() { return mOctreeNode->getData(); } | ||
231 | U32 getElementCount() const { return mOctreeNode->getElementCount(); } | ||
213 | 232 | ||
214 | //LISTENER FUNCTIONS | 233 | //LISTENER FUNCTIONS |
215 | virtual void handleInsertion(const TreeNode* node, LLDrawable* face); | 234 | virtual void handleInsertion(const TreeNode* node, LLDrawable* face); |
@@ -235,25 +254,24 @@ public: | |||
235 | LLSpatialPartition* mSpatialPartition; | 254 | LLSpatialPartition* mSpatialPartition; |
236 | LLVector3 mBounds[2]; | 255 | LLVector3 mBounds[2]; |
237 | LLVector3 mExtents[2]; | 256 | LLVector3 mExtents[2]; |
257 | |||
238 | LLVector3 mObjectExtents[2]; | 258 | LLVector3 mObjectExtents[2]; |
239 | LLVector3 mObjectBounds[2]; | 259 | LLVector3 mObjectBounds[2]; |
240 | 260 | ||
241 | LLPointer<LLVertexBuffer> mVertexBuffer; | 261 | LLPointer<LLVertexBuffer> mVertexBuffer; |
242 | LLPointer<LLVertexBuffer> mOcclusionVerts; | 262 | F32* mOcclusionVerts; |
263 | GLuint mOcclusionQuery; | ||
243 | LLPointer<LLCubeMap> mReflectionMap; | 264 | LLPointer<LLCubeMap> mReflectionMap; |
244 | 265 | ||
245 | U32 mBufferUsage; | 266 | U32 mBufferUsage; |
246 | draw_map_t mDrawMap; | 267 | draw_map_t mDrawMap; |
247 | 268 | ||
248 | U32 mVertexCount; | 269 | S32 mVisible; |
249 | U32 mIndexCount; | ||
250 | F32 mDistance; | 270 | F32 mDistance; |
251 | F32 mDepth; | 271 | F32 mDepth; |
252 | F32 mLastUpdateDistance; | 272 | F32 mLastUpdateDistance; |
253 | F32 mLastUpdateTime; | 273 | F32 mLastUpdateTime; |
254 | F32 mLastAddTime; | 274 | |
255 | F32 mLastRenderTime; | ||
256 | |||
257 | LLVector3 mViewAngle; | 275 | LLVector3 mViewAngle; |
258 | LLVector3 mLastUpdateViewAngle; | 276 | LLVector3 mLastUpdateViewAngle; |
259 | 277 | ||
@@ -275,7 +293,9 @@ public: | |||
275 | class LLSpatialPartition: public LLGeometryManager | 293 | class LLSpatialPartition: public LLGeometryManager |
276 | { | 294 | { |
277 | public: | 295 | public: |
278 | LLSpatialPartition(U32 data_mask, BOOL is_volatile = FALSE, U32 mBufferUsage = GL_STATIC_DRAW_ARB); | 296 | static BOOL sFreezeState; //if true, no spatialgroup state updates will be made |
297 | |||
298 | LLSpatialPartition(U32 data_mask, U32 mBufferUsage = GL_STATIC_DRAW_ARB); | ||
279 | virtual ~LLSpatialPartition(); | 299 | virtual ~LLSpatialPartition(); |
280 | 300 | ||
281 | LLSpatialGroup *put(LLDrawable *drawablep, BOOL was_visible = FALSE); | 301 | LLSpatialGroup *put(LLDrawable *drawablep, BOOL was_visible = FALSE); |
@@ -293,63 +313,42 @@ public: | |||
293 | virtual void rebuildGeom(LLSpatialGroup* group); | 313 | virtual void rebuildGeom(LLSpatialGroup* group); |
294 | 314 | ||
295 | S32 cull(LLCamera &camera, std::vector<LLDrawable *>* results = NULL, BOOL for_select = FALSE); // Cull on arbitrary frustum | 315 | S32 cull(LLCamera &camera, std::vector<LLDrawable *>* results = NULL, BOOL for_select = FALSE); // Cull on arbitrary frustum |
296 | BOOL checkOcclusion(LLSpatialGroup* group, LLCamera* camera); | ||
297 | void markReimage(LLSpatialGroup* group); | 316 | void markReimage(LLSpatialGroup* group); |
298 | void processImagery(LLCamera* camera); | 317 | void processImagery(LLCamera* camera); |
299 | void processOcclusion(LLCamera* camera); | 318 | |
300 | void buildOcclusion(); | ||
301 | void doOcclusion(LLCamera* camera); | ||
302 | BOOL isVisible(const LLVector3& v); | 319 | BOOL isVisible(const LLVector3& v); |
303 | BOOL isVolatile() const { return mVolatile; } | 320 | |
304 | |||
305 | virtual LLSpatialBridge* asBridge() { return NULL; } | 321 | virtual LLSpatialBridge* asBridge() { return NULL; } |
306 | virtual BOOL isBridge() { return asBridge() != NULL; } | 322 | virtual BOOL isBridge() { return asBridge() != NULL; } |
307 | 323 | ||
308 | S32 getObjects(const LLVector3& pos, F32 rad, LLDrawable::drawable_set_t &results ); | ||
309 | S32 getLights(const LLVector3& pos, F32 rad, LLDrawable::drawable_set_t &results ); | ||
310 | |||
311 | void renderDebug(); | 324 | void renderDebug(); |
312 | void restoreGL(); | 325 | void restoreGL(); |
313 | void resetVertexBuffers(); | 326 | void resetVertexBuffers(); |
314 | 327 | ||
315 | protected: | 328 | protected: |
316 | S32 getDrawables(const LLVector3& pos, F32 rad, LLDrawable::drawable_set_t &results, BOOL get_lights ); | ||
317 | 329 | ||
318 | typedef std::set<LLPointer<LLSpatialGroup> > spatial_group_set_t; | 330 | typedef std::set<LLPointer<LLSpatialGroup> > spatial_group_set_t; |
319 | spatial_group_set_t mSpatialGroups; | 331 | spatial_group_set_t mSpatialGroups; |
320 | 332 | ||
321 | //things that might be occluded | ||
322 | typedef std::queue<LLPointer<LLSpatialGroup> > spatial_group_queue_t; | 333 | typedef std::queue<LLPointer<LLSpatialGroup> > spatial_group_queue_t; |
323 | spatial_group_queue_t mOcclusionQueue; | 334 | |
324 | |||
325 | //things that need an image update | 335 | //things that need an image update |
326 | spatial_group_queue_t mImageQueue; | 336 | spatial_group_queue_t mImageQueue; |
327 | 337 | ||
328 | //things awaiting query | ||
329 | spatial_group_queue_t mQueryQueue; | ||
330 | |||
331 | std::vector<LLGLuint> mOcclusionQueries; | ||
332 | |||
333 | public: | 338 | public: |
334 | LLSpatialGroup::OctreeNode* mOctree; | 339 | LLSpatialGroup::OctreeNode* mOctree; |
335 | 340 | BOOL mOcclusionEnabled; // if TRUE, occlusion culling is performed | |
341 | BOOL mInfiniteFarClip; // if TRUE, frustum culling ignores far clip plane | ||
336 | U32 mBufferUsage; | 342 | U32 mBufferUsage; |
337 | BOOL mRenderByGroup; | 343 | BOOL mRenderByGroup; |
338 | BOOL mImageEnabled; | 344 | BOOL mImageEnabled; |
339 | U32 mLODSeed; | 345 | U32 mLODSeed; |
340 | U32 mLODPeriod; | 346 | U32 mLODPeriod; //number of frames between LOD updates for a given spatial group (staggered by mLODSeed) |
341 | U32 mVertexDataMask; | 347 | U32 mVertexDataMask; |
342 | F32 mSlopRatio; //percentage distance must change before drawables receive LOD update (default is 0.25); | 348 | F32 mSlopRatio; //percentage distance must change before drawables receive LOD update (default is 0.25); |
343 | BOOL mVolatile; //if TRUE, occlusion queries will be discarded when nodes change size | ||
344 | BOOL mDepthMask; //if TRUE, objects in this partition will be written to depth during alpha rendering | 349 | BOOL mDepthMask; //if TRUE, objects in this partition will be written to depth during alpha rendering |
345 | U32 mDrawableType; | 350 | U32 mDrawableType; |
346 | U32 mPartitionType; | 351 | U32 mPartitionType; |
347 | |||
348 | //index buffer for occlusion verts | ||
349 | LLPointer<LLVertexBuffer> mOcclusionIndices; | ||
350 | |||
351 | //things that are occluded | ||
352 | std::vector<LLPointer<LLSpatialGroup> > mOccludedList; | ||
353 | }; | 352 | }; |
354 | 353 | ||
355 | // class for creating bridges between spatial partitions | 354 | // class for creating bridges between spatial partitions |
@@ -370,7 +369,6 @@ public: | |||
370 | virtual void setVisible(LLCamera& camera_in, std::vector<LLDrawable*>* results = NULL, BOOL for_select = FALSE); | 369 | virtual void setVisible(LLCamera& camera_in, std::vector<LLDrawable*>* results = NULL, BOOL for_select = FALSE); |
371 | virtual void updateDistance(LLCamera& camera_in); | 370 | virtual void updateDistance(LLCamera& camera_in); |
372 | virtual void makeActive(); | 371 | virtual void makeActive(); |
373 | virtual void makeStatic(); | ||
374 | virtual void move(LLDrawable *drawablep, LLSpatialGroup *curp, BOOL immediate = FALSE); | 372 | virtual void move(LLDrawable *drawablep, LLSpatialGroup *curp, BOOL immediate = FALSE); |
375 | virtual BOOL updateMove(); | 373 | virtual BOOL updateMove(); |
376 | virtual void shiftPos(const LLVector3& vec); | 374 | virtual void shiftPos(const LLVector3& vec); |
@@ -383,6 +381,72 @@ public: | |||
383 | LLDrawable* mDrawable; | 381 | LLDrawable* mDrawable; |
384 | }; | 382 | }; |
385 | 383 | ||
384 | class LLCullResult | ||
385 | { | ||
386 | public: | ||
387 | LLCullResult(); | ||
388 | |||
389 | typedef std::vector<LLSpatialGroup*> sg_list_t; | ||
390 | typedef std::vector<LLDrawable*> drawable_list_t; | ||
391 | typedef std::vector<LLSpatialBridge*> bridge_list_t; | ||
392 | typedef std::vector<LLDrawInfo*> drawinfo_list_t; | ||
393 | |||
394 | void clear(); | ||
395 | |||
396 | sg_list_t::iterator beginVisibleGroups(); | ||
397 | sg_list_t::iterator endVisibleGroups(); | ||
398 | |||
399 | sg_list_t::iterator beginAlphaGroups(); | ||
400 | sg_list_t::iterator endAlphaGroups(); | ||
401 | |||
402 | sg_list_t::iterator beginOcclusionGroups(); | ||
403 | sg_list_t::iterator endOcclusionGroups(); | ||
404 | |||
405 | sg_list_t::iterator beginDrawableGroups(); | ||
406 | sg_list_t::iterator endDrawableGroups(); | ||
407 | |||
408 | drawable_list_t::iterator beginVisibleList(); | ||
409 | drawable_list_t::iterator endVisibleList(); | ||
410 | |||
411 | bridge_list_t::iterator beginVisibleBridge(); | ||
412 | bridge_list_t::iterator endVisibleBridge(); | ||
413 | |||
414 | drawinfo_list_t::iterator beginRenderMap(U32 type); | ||
415 | drawinfo_list_t::iterator endRenderMap(U32 type); | ||
416 | |||
417 | void pushVisibleGroup(LLSpatialGroup* group); | ||
418 | void pushAlphaGroup(LLSpatialGroup* group); | ||
419 | void pushOcclusionGroup(LLSpatialGroup* group); | ||
420 | void pushDrawableGroup(LLSpatialGroup* group); | ||
421 | void pushDrawable(LLDrawable* drawable); | ||
422 | void pushBridge(LLSpatialBridge* bridge); | ||
423 | void pushDrawInfo(U32 type, LLDrawInfo* draw_info); | ||
424 | |||
425 | U32 getVisibleGroupsSize() { return mVisibleGroupsSize; } | ||
426 | U32 getAlphaGroupsSize() { return mAlphaGroupsSize; } | ||
427 | U32 getDrawableGroupsSize() { return mDrawableGroupsSize; } | ||
428 | U32 getVisibleListSize() { return mVisibleListSize; } | ||
429 | U32 getVisibleBridgeSize() { return mVisibleBridgeSize; } | ||
430 | U32 getRenderMapSize(U32 type) { return mRenderMapSize[type]; } | ||
431 | |||
432 | private: | ||
433 | U32 mVisibleGroupsSize; | ||
434 | U32 mAlphaGroupsSize; | ||
435 | U32 mOcclusionGroupsSize; | ||
436 | U32 mDrawableGroupsSize; | ||
437 | U32 mVisibleListSize; | ||
438 | U32 mVisibleBridgeSize; | ||
439 | U32 mRenderMapSize[LLRenderPass::NUM_RENDER_TYPES]; | ||
440 | |||
441 | sg_list_t mVisibleGroups; | ||
442 | sg_list_t mAlphaGroups; | ||
443 | sg_list_t mOcclusionGroups; | ||
444 | sg_list_t mDrawableGroups; | ||
445 | drawable_list_t mVisibleList; | ||
446 | bridge_list_t mVisibleBridge; | ||
447 | drawinfo_list_t mRenderMap[LLRenderPass::NUM_RENDER_TYPES]; | ||
448 | }; | ||
449 | |||
386 | //spatial partition for water (implemented in LLVOWater.cpp) | 450 | //spatial partition for water (implemented in LLVOWater.cpp) |
387 | class LLWaterPartition : public LLSpatialPartition | 451 | class LLWaterPartition : public LLSpatialPartition |
388 | { | 452 | { |
@@ -500,5 +564,6 @@ extern const F32 SG_BOX_RAD; | |||
500 | extern const F32 SG_OBJ_SIDE; | 564 | extern const F32 SG_OBJ_SIDE; |
501 | extern const F32 SG_MAX_OBJ_RAD; | 565 | extern const F32 SG_MAX_OBJ_RAD; |
502 | 566 | ||
567 | |||
503 | #endif //LL_LLSPATIALPARTITION_H | 568 | #endif //LL_LLSPATIALPARTITION_H |
504 | 569 | ||