summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorprep linden <prep@lindenlab.com>2011-06-15 13:26:14 -0400
committerprep linden <prep@lindenlab.com>2011-06-15 13:26:14 -0400
commit1b3f3fa7a66733c733a10963a2cf22477c3190e9 (patch)
treec528c53b42550d1eaca80138185e526e2ab17136
parenta451c9e83431c7d39ef912680bf9d7411c7a12d2 (diff)
Fix for sh-1771 and also fixed a bug with a never ending load (with eventual crash) bug when a visual scene is missing.
-rw-r--r--indra/newview/llfloatermodelpreview.cpp24
-rw-r--r--indra/newview/llfloatermodelpreview.h2
2 files changed, 20 insertions, 6 deletions
diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp
index 866cc39eec..4e35029ce6 100644
--- a/indra/newview/llfloatermodelpreview.cpp
+++ b/indra/newview/llfloatermodelpreview.cpp
@@ -1901,11 +1901,19 @@ bool LLModelLoader::doLoadModel()
{
llwarns << "document has no visual_scene" << llendl;
setLoadState( ERROR_PARSING );
- return false;
+ return true;
}
+
setLoadState( DONE );
- processElement(scene);
+ bool badElement = false;
+
+ processElement( scene, badElement );
+
+ if ( badElement )
+ {
+ setLoadState( ERROR_PARSING );
+ }
return true;
}
@@ -2489,7 +2497,7 @@ daeElement* LLModelLoader::getChildFromElement( daeElement* pElement, std::strin
return NULL;
}
-void LLModelLoader::processElement(daeElement* element)
+void LLModelLoader::processElement( daeElement* element, bool& badElement )
{
LLMatrix4 saved_transform = mTransform;
@@ -2589,6 +2597,12 @@ void LLModelLoader::processElement(daeElement* element)
}
}
}
+ else
+ {
+ llinfos<<"Unable to resolve geometry URL."<<llendl;
+ badElement = true;
+ }
+
}
domInstance_node* instance_node = daeSafeCast<domInstance_node>(element);
@@ -2597,7 +2611,7 @@ void LLModelLoader::processElement(daeElement* element)
daeElement* instance = instance_node->getUrl().getElement();
if (instance)
{
- processElement(instance);
+ processElement(instance,badElement);
}
}
@@ -2605,7 +2619,7 @@ void LLModelLoader::processElement(daeElement* element)
daeTArray< daeSmartRef<daeElement> > children = element->getChildren();
for (S32 i = 0; i < children.getCount(); i++)
{
- processElement(children[i]);
+ processElement(children[i],badElement);
}
domNode* node = daeSafeCast<domNode>(element);
diff --git a/indra/newview/llfloatermodelpreview.h b/indra/newview/llfloatermodelpreview.h
index a328bfb4dd..8e7189e8c6 100644
--- a/indra/newview/llfloatermodelpreview.h
+++ b/indra/newview/llfloatermodelpreview.h
@@ -108,7 +108,7 @@ public:
void loadModelCallback();
void loadTextures() ; //called in the main thread.
- void processElement(daeElement* element);
+ void processElement(daeElement* element, bool& badElement);
std::vector<LLImportMaterial> getMaterials(LLModel* model, domInstance_geometry* instance_geo);
LLImportMaterial profileToMaterial(domProfile_COMMON* material);
std::string getElementLabel(daeElement *element);