void AssbinImporter::InternReadFile( const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler ) { IOStream * stream = pIOHandler->Open(pFile,"rb"); if (!stream) return; stream->Seek( 44, aiOrigin_CUR ); // signature /*unsigned int versionMajor =*/ Read<unsigned int>(stream); /*unsigned int versionMinor =*/ Read<unsigned int>(stream); /*unsigned int versionRevision =*/ Read<unsigned int>(stream); /*unsigned int compileFlags =*/ Read<unsigned int>(stream); shortened = Read<uint16_t>(stream) > 0; compressed = Read<uint16_t>(stream) > 0; if (shortened) throw DeadlyImportError( "Shortened binaries are not supported!" ); stream->Seek( 256, aiOrigin_CUR ); // original filename stream->Seek( 128, aiOrigin_CUR ); // options stream->Seek( 64, aiOrigin_CUR ); // padding if (compressed) { uLongf uncompressedSize = Read<uint32_t>(stream); uLongf compressedSize = stream->FileSize() - stream->Tell(); unsigned char * compressedData = new unsigned char[ compressedSize ]; stream->Read( compressedData, 1, compressedSize ); unsigned char * uncompressedData = new unsigned char[ uncompressedSize ]; uncompress( uncompressedData, &uncompressedSize, compressedData, compressedSize ); MemoryIOStream io( uncompressedData, uncompressedSize ); ReadBinaryScene(&io,pScene); delete[] uncompressedData; delete[] compressedData; } else { ReadBinaryScene(stream,pScene); } pIOHandler->Close(stream); }