summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
authorDave Parks <davep@lindenlab.com>2010-09-22 15:58:35 -0500
committerDave Parks <davep@lindenlab.com>2010-09-22 15:58:35 -0500
commit7b44a8ee8de662355c8f5c8091ab25dccce494e5 (patch)
tree5bb10c9ee83c556f82950c9060471ab68d838d2f /indra/newview
parentcf09d6c58a741263cddcf338c2f79836873475b1 (diff)
SH-110 Fix for viewer crash when checking HULL in decomposition window... converted various maps to use smart pointers for keys instead of naked pointers, properly clear maps on various operations.
Diffstat (limited to 'indra/newview')
-rwxr-xr-xindra/newview/llfloatermodelpreview.cpp26
-rwxr-xr-xindra/newview/llfloatermodelpreview.h10
2 files changed, 27 insertions, 9 deletions
diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp
index 088c9e6546..8be56009aa 100755
--- a/indra/newview/llfloatermodelpreview.cpp
+++ b/indra/newview/llfloatermodelpreview.cpp
@@ -1989,13 +1989,13 @@ void LLModelPreview::loadModel(std::string filename, S32 lod)
if (lod == 3 && !mGroup.empty())
{
- for (std::map<LLModel*, U32>::iterator iter = mGroup.begin(); iter != mGroup.end(); ++iter)
+ for (std::map<LLPointer<LLModel>, U32>::iterator iter = mGroup.begin(); iter != mGroup.end(); ++iter)
{
glodDeleteGroup(iter->second);
stop_gloderror();
}
- for (std::map<LLModel*, U32>::iterator iter = mObject.begin(); iter != mObject.end(); ++iter)
+ for (std::map<LLPointer<LLModel>, U32>::iterator iter = mObject.begin(); iter != mObject.end(); ++iter)
{
glodDeleteObject(iter->second);
stop_gloderror();
@@ -2055,6 +2055,11 @@ void LLModelPreview::loadModelCallback(S32 lod)
mScene[lod] = mModelLoader->mScene;
mVertexBuffer[lod].clear();
+ if (lod == LLModel::LOD_PHYSICS)
+ {
+ mPhysicsMesh.clear();
+ }
+
setPreviewLOD(lod);
@@ -2338,6 +2343,11 @@ void LLModelPreview::genLODs(S32 which_lod)
return;
}
+ if (which_lod == LLModel::LOD_PHYSICS)
+ { //clear physics mesh map
+ mPhysicsMesh.clear();
+ }
+
LLVertexBuffer::unbind();
stop_gloderror();
@@ -2365,6 +2375,14 @@ void LLModelPreview::genLODs(S32 which_lod)
U32 type_mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0;
+ if (mGroup[mBaseModel[0]] == 0)
+ { //clear LOD maps
+ mGroup.clear();
+ mObject.clear();
+ mPercentage.clear();
+ mPatch.clear();
+ }
+
for (LLModelLoader::model_list::iterator iter = mBaseModel.begin(); iter != mBaseModel.end(); ++iter)
{ //build GLOD objects for each model in base model list
LLModel* mdl = *iter;
@@ -3118,7 +3136,7 @@ BOOL LLModelPreview::render()
{
LLMutexLock(decomp->mMutex);
- std::map<LLModel*, std::vector<LLPointer<LLVertexBuffer> > >::iterator iter =
+ std::map<LLPointer<LLModel>, std::vector<LLPointer<LLVertexBuffer> > >::iterator iter =
mPhysicsMesh.find(model);
if (iter != mPhysicsMesh.end())
{
@@ -3406,7 +3424,7 @@ void LLFloaterModelPreview::onDecompose(void* user_data)
void LLFloaterModelPreview::onModelDecompositionComplete(LLModel* model, std::vector<LLPointer<LLVertexBuffer> >& physics_mesh)
{
if (sInstance && sInstance->mModelPreview)
- {
+ {
sInstance->mModelPreview->mPhysicsMesh[model] = physics_mesh;
sInstance->mModelPreview->mDirty = true;
diff --git a/indra/newview/llfloatermodelpreview.h b/indra/newview/llfloatermodelpreview.h
index 148687aecd..d8f06295ac 100755
--- a/indra/newview/llfloatermodelpreview.h
+++ b/indra/newview/llfloatermodelpreview.h
@@ -168,12 +168,12 @@ class LLModelPreview : public LLViewerDynamicTexture, public LLMutex
LLModelLoader::model_list mModel[LLModel::NUM_LODS];
LLModelLoader::model_list mBaseModel;
- std::map<LLModel*, U32> mGroup;
- std::map<LLModel*, U32> mObject;
- std::map<LLModel*, std::vector<U32> > mPatch;
+ std::map<LLPointer<LLModel>, U32> mGroup;
+ std::map<LLPointer<LLModel>, U32> mObject;
+ std::map<LLPointer<LLModel>, std::vector<U32> > mPatch;
+ std::map<LLPointer<LLModel>, F32> mPercentage;
- std::map<LLModel*, F32> mPercentage;
- std::map<LLModel*, std::vector<LLPointer<LLVertexBuffer> > > mPhysicsMesh;
+ std::map<LLPointer<LLModel>, std::vector<LLPointer<LLVertexBuffer> > > mPhysicsMesh;
LLMeshUploadThread::instance_list mUploadData;
std::set<LLPointer<LLViewerFetchedTexture> > mTextureSet;