From 1b3f3fa7a66733c733a10963a2cf22477c3190e9 Mon Sep 17 00:00:00 2001 From: prep linden Date: Wed, 15 Jun 2011 13:26:14 -0400 Subject: Fix for sh-1771 and also fixed a bug with a never ending load (with eventual crash) bug when a visual scene is missing. --- indra/newview/llfloatermodelpreview.cpp | 24 +++++++++++++++++++----- indra/newview/llfloatermodelpreview.h | 2 +- 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."<(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 > children = element->getChildren(); for (S32 i = 0; i < children.getCount(); i++) { - processElement(children[i]); + processElement(children[i],badElement); } domNode* node = daeSafeCast(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 getMaterials(LLModel* model, domInstance_geometry* instance_geo); LLImportMaterial profileToMaterial(domProfile_COMMON* material); std::string getElementLabel(daeElement *element); -- cgit v1.2.3