---------------------------------------------------------------------
| 148 | } |
| 149 | //--------------------------------------------------------------------- |
| 150 | void MeshSerializer::importMesh( DataStreamPtr &stream, Mesh *pDest ) |
| 151 | { |
| 152 | determineEndianness( stream ); |
| 153 | |
| 154 | // Read header and determine the version |
| 155 | unsigned short headerID; |
| 156 | |
| 157 | // Read header ID |
| 158 | readShorts( stream, &headerID, 1 ); |
| 159 | |
| 160 | if( headerID != HEADER_CHUNK_ID ) |
| 161 | { |
| 162 | OGRE_EXCEPT( Exception::ERR_INTERNAL_ERROR, "File header not found", |
| 163 | "MeshSerializer::importMesh" ); |
| 164 | } |
| 165 | // Read version |
| 166 | String ver = readString( stream ); |
| 167 | // Jump back to start |
| 168 | stream->seek( 0 ); |
| 169 | |
| 170 | // Find the implementation to use |
| 171 | MeshSerializerImpl *impl = 0; |
| 172 | for( MeshVersionDataList::iterator i = mVersionData.begin(); i != mVersionData.end(); ++i ) |
| 173 | { |
| 174 | if( ( *i )->versionString == ver ) |
| 175 | { |
| 176 | impl = ( *i )->impl; |
| 177 | break; |
| 178 | } |
| 179 | } |
| 180 | if( !impl ) |
| 181 | { |
| 182 | OGRE_EXCEPT( Exception::ERR_INTERNAL_ERROR, |
| 183 | "Cannot find serializer implementation for " |
| 184 | "mesh version " + |
| 185 | ver, |
| 186 | "MeshSerializer::importMesh" ); |
| 187 | } |
| 188 | |
| 189 | // Call implementation |
| 190 | impl->importMesh( stream, pDest, mListener ); |
| 191 | // Warn on old version of mesh |
| 192 | if( ver != mVersionData[0]->versionString ) |
| 193 | { |
| 194 | LogManager::getSingleton().logMessage( |
| 195 | "WARNING: " + pDest->getName() + " is an older format (" + ver + |
| 196 | "); you should upgrade it as soon as possible" + " using the OgreMeshTool tool.", |
| 197 | LML_CRITICAL ); |
| 198 | } |
| 199 | |
| 200 | if( mListener ) |
| 201 | mListener->processMeshCompleted( pDest ); |
| 202 | } |
| 203 | //--------------------------------------------------------------------- |
| 204 | void MeshSerializer::setListener( MeshSerializerListener *listener ) { mListener = listener; } |
| 205 | //------------------------------------------------------------------------- |