summaryrefslogtreecommitdiff
path: root/indra/newview/llface.cpp
diff options
context:
space:
mode:
authorDave Parks <davep@lindenlab.com>2012-05-02 15:45:38 -0500
committerDave Parks <davep@lindenlab.com>2012-05-02 15:45:38 -0500
commit423659c68076f99a73985b9bd1befa5c0f5d3457 (patch)
treef4f4b78e2d208ca8d1d03de113d7b32de513e26c /indra/newview/llface.cpp
parentcabc36e993e8876a99c019e19fdf7e2ff0737af8 (diff)
MAINT-775 Particle vertex buffer management optimizations
Diffstat (limited to 'indra/newview/llface.cpp')
-rw-r--r--indra/newview/llface.cpp19
1 files changed, 18 insertions, 1 deletions
diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp
index 4108d69e82..97b832520d 100644
--- a/indra/newview/llface.cpp
+++ b/indra/newview/llface.cpp
@@ -44,6 +44,7 @@
#include "llsky.h"
#include "llviewercamera.h"
#include "llviewertexturelist.h"
+#include "llvopartgroup.h"
#include "llvosky.h"
#include "llvovolume.h"
#include "pipeline.h"
@@ -161,7 +162,15 @@ void LLFace::init(LLDrawable* drawablep, LLViewerObject* objp)
mGeomCount = 0;
mGeomIndex = 0;
mIndicesCount = 0;
- mIndicesIndex = 0;
+ if (drawablep->getRenderType() == LLPipeline::RENDER_TYPE_PARTICLES ||
+ drawablep->getRenderType() == LLPipeline::RENDER_TYPE_HUD_PARTICLES)
+ { //indicate to LLParticlePartition that this particle is uninitialized
+ mIndicesIndex = 0xFFFFFFFF;
+ }
+ else
+ {
+ mIndicesIndex = 0;
+ }
mIndexInTex = 0;
mTexture = NULL;
mTEOffset = -1;
@@ -203,6 +212,14 @@ void LLFace::destroy()
mTexture->removeFace(this) ;
}
+ if (mDrawablep.notNull() &&
+ (mDrawablep->getRenderType() == LLPipeline::RENDER_TYPE_PARTICLES ||
+ mDrawablep->getRenderType() == LLPipeline::RENDER_TYPE_HUD_PARTICLES) &&
+ mIndicesIndex != 0xFFFFFFFF)
+ {
+ LLVOPartGroup::freeVBSlot(getGeomIndex()/4);
+ }
+
if (mDrawPoolp)
{
if (this->isState(LLFace::RIGGED) && mDrawPoolp->getType() == LLDrawPool::POOL_AVATAR)