uint32 serialize(UniverseContext& ctx, OutputBlob& serializer) override { SerializedEngineHeader header; header.m_magic = SERIALIZED_ENGINE_MAGIC; // == '_LEN' header.m_version = SerializedEngineVersion::LATEST; header.m_reserved = 0; serializer.write(header); serializePluginList(serializer); serializerSceneVersions(serializer, ctx); m_path_manager.serialize(serializer); int pos = serializer.getSize(); ctx.m_universe->serialize(serializer); m_plugin_manager->serialize(serializer); serializer.write((int32)ctx.m_scenes.size()); for (int i = 0; i < ctx.m_scenes.size(); ++i) { serializer.writeString(ctx.m_scenes[i]->getPlugin().getName()); serializer.write(ctx.m_scenes[i]->getVersion()); ctx.m_scenes[i]->serialize(serializer); } uint32 crc = crc32((const uint8*)serializer.getData() + pos, serializer.getSize() - pos); return crc; }
InputBlob::InputBlob(const OutputBlob& blob) : m_data((const uint8_t*)blob.getData()) , m_size(blob.getSize()) , m_pos(0) {}