Properly parse 'mg' keyword in .obj files

The 'mg' keyword is currently being interpreted as a material library keyword,
when it really refers to the merging group.  Handle this case, in effect ignoring
the keyword as merging groups are currently unsupported.
pull/199/head
Jared Duke 2013-11-26 14:21:32 -08:00
parent ca7542cf5d
commit 931f0489bd
2 changed files with 16 additions and 2 deletions

View File

@ -149,9 +149,12 @@ void ObjFileParser::parseFile()
} }
break; break;
case 'm': // Parse a material library case 'm': // Parse a material library or merging group ('mg')
{ {
getMaterialLib(); if (*(m_DataIt + 1) == 'g')
getGroupNumberAndResolution();
else
getMaterialLib();
} }
break; break;
@ -609,6 +612,15 @@ void ObjFileParser::getGroupNumber()
m_DataIt = skipLine<DataArrayIt>( m_DataIt, m_DataItEnd, m_uiLine ); m_DataIt = skipLine<DataArrayIt>( m_DataIt, m_DataItEnd, m_uiLine );
} }
// -------------------------------------------------------------------
// Not supported
void ObjFileParser::getGroupNumberAndResolution()
{
// Not used
m_DataIt = skipLine<DataArrayIt>( m_DataIt, m_DataItEnd, m_uiLine );
}
// ------------------------------------------------------------------- // -------------------------------------------------------------------
// Stores values for a new object instance, name will be used to // Stores values for a new object instance, name will be used to
// identify it. // identify it.

View File

@ -102,6 +102,8 @@ private:
void getGroupName(); void getGroupName();
/// Gets the group number from file. /// Gets the group number from file.
void getGroupNumber(); void getGroupNumber();
/// Gets the group number and resolution from file.
void getGroupNumberAndResolution();
/// Returns the index of the material. Is -1 if not material was found. /// Returns the index of the material. Is -1 if not material was found.
int getMaterialIndex( const std::string &strMaterialName ); int getMaterialIndex( const std::string &strMaterialName );
/// Parse object name /// Parse object name