From 771d804c46783da8427c557e7f4c6e48284768e4 Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Fri, 16 Mar 2012 12:02:53 +0100 Subject: [PATCH] ColladaParser: Tolerate empty data arrays and controller weights. --- code/ColladaParser.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/code/ColladaParser.cpp b/code/ColladaParser.cpp index 41aaee320..2f7787b62 100644 --- a/code/ColladaParser.cpp +++ b/code/ColladaParser.cpp @@ -599,7 +599,7 @@ void ColladaParser::ReadControllerWeights( Collada::Controller& pController) if( mReader->getNodeType() == irr::io::EXN_ELEMENT) { // Input channels for weight data. Two possible semantics: "JOINT" and "WEIGHT" - if( IsElement( "input")) + if( IsElement( "input") && vertexCount > 0 ) { InputChannel channel; @@ -628,7 +628,7 @@ void ColladaParser::ReadControllerWeights( Collada::Controller& pController) if( !mReader->isEmptyElement()) SkipElement(); } - else if( IsElement( "vcount")) + else if( IsElement( "vcount") && vertexCount > 0 ) { // read weight count per vertex const char* text = GetTextContent(); @@ -648,7 +648,7 @@ void ColladaParser::ReadControllerWeights( Collada::Controller& pController) // reserve weight count pController.mWeights.resize( numWeights); } - else if( IsElement( "v")) + else if( IsElement( "v") && vertexCount > 0 ) { // read JointIndex - WeightIndex pairs const char* text = GetTextContent(); @@ -1656,6 +1656,7 @@ void ColladaParser::ReadDataArray() std::string id = mReader->getAttributeValue( indexID); int indexCount = GetAttribute( "count"); unsigned int count = (unsigned int) mReader->getAttributeValueAsInt( indexCount); + if (count == 0) { return; } // some exporters write empty data arrays with count="0" const char* content = TestTextContent(); // read values and store inside an array in the data library