1

次のように、ブースト シリアライゼーションを使用して 3D モデル メッシュをシリアライズ/デシリアライズしています。

struct PackageMesh
{
    std::vector<Vec3> mVertexData;
    std::vector<Vec3> mNormalData;
    std::vector<Vec2> mTexCoordsData;
    std::vector<uint32_t> mIndiceData;
    uint16_t mMaterialIndex;
    bool mHasMaterial;


    PackageMesh();
};

現在、各ベクターには数千の Vec3 を含めることができ、逆シリアル化するパッケージメッシュが多数存在する可能性があります。

これはカスタム オブジェクトのベクトルであるため、Vec3/Vec2 のコンストラクターに多くの時間を費やし、パフォーマンスが低下する可能性があることを懸念しています。それは本当ですか? 代わりにすべてをフロートとして保存する方が速いでしょうか?

編集:かなり複雑なモデルとそのテクスチャなどの読み込みには5〜10秒ほどかかるので、プロファイリングを行いました...

http://i43.tinypic.com/xqansy.png

通常、最初の 5 ~ 10 秒でデシリアライズが行われることがわかります

キラーが実際にテクスチャ構造体をデシリアライズしていると思います

struct PackageTexture
{
    std::string mName;
    std::vector<uint8_t> mTextureData;
    uint32_t mTextureWidth;         // width/height in pixels
    uint32_t mTextureHeight;
    ITexture::TextureFormat mTextureFormat;
    ITexture::TextureType mTextureType;


    PackageTexture();
};

各テクスチャは約 200k バイト以上になる可能性があるため、大量のエントリになります。

これを最適化するにはどうすればよいですか?

4

2 に答える 2