map
カスタム ID をvector
インデックスにマップするためにa を使用することを考えています。
struct Mesh
{
GLsizei mIndices;
GLuint mVBO;
GLuint mIndexBuffer;
GLuint mVAO;
size_t vertexDataSize;
size_t normalDataSize;
};
typedef uint32_t MeshID;
std::map<MeshID, uint16_t> gMeshIDIndexMap;
std::vector<Mesh> gMeshes;
std::vector<MeshID> drawCmds = {1, 1, 2, 3, 4, 5, 8, ,8 ,8, 9, 10, ...}; //sorted
std::for_each(drawCmds.begin(), drawCmds.end(), [](MeshID& id)
{
Mesh& mesh = gMeshes[gMeshIDIndexMap.at(id)];
glBindVertexArray(mesh.mVAO);
glDrawElements(GL_TRIANGLES, mesh.mIndexBuffer, GL_UNSIGNED_INT, 0);
glBindVertexArray(0);
....
}
std::map はその要素を連続したメモリに保存しないため、新しい反復ごとに、gMeshIDIndexMap.at(id)
新しいキャッシュ ライン全体をキャッシュにロードする必要があります。これにより、キャッシュが破棄され、多くのキャッシュ ミスが発生しますよね? これを改善してキャッシュミスをできるだけ少なくするにはどうすればよいですか?