x ファイルのパーサーを作成 #3
見よう見まねで最適化したところ、10FPS ⇒ 15FPS。
std::vector を配列にしてみたら、15FPS ⇒ 18FPS。
速くはなってるけど、あまり効いてない。ボトルネックを QueryPerformanceCounter で洗い出す。
ボトルネックを修正して 18FPS ⇒ 59FPS。
何がボトルネックだったかというと、以下の
DWORD d = mesh->meshNormals->faceNormals[i].faceVertexIndices[j]; Vector v = mesh->meshNormals->normals[d]; glNormal3fv(v);
法線ベクトルを描画している箇所で
DWORD d = mesh->meshNormals->faceNormals[i].faceVertexIndices[j]; glNormal3fv(mesh->meshNormals->normals[d]);
Vector をローカル変数に取り出さずに直接関数に渡すところ。
暗黙にオブジェクトが生成され、暗黙にオブジェクトが破棄されるコストがとても馬鹿にならないのだった。
ちなみに計測した FPS の値は XLoader も Mint もすべて最適化無し。ボトルネックがある状態で 最適化オプションをつけて実行すると 36FPS。最適化オプション、スゲーな。