x ファイルのパーサーを作成 #2

今回はコンパイラではなくローダーを作成。ローダーの名前は Mint。

上記で公開されている XLoader というローダーと比較。

上が XLoader の表示結果、下が僕が作った Mint の表示結果。色合いがちょっと違うのは、Mint が少し処理を端折ってるからだろう。

Mint の方が 6 倍遅い。というか、XLoader が60FPS 出ているのが驚き。OpenGL 速いな。

XLoader と Mint で違うのは:

  • XLoader は X ファイルの構造を最適化しているのに対し、Mint は最適化をしていない(どのように最適化すればよいかわからない)
  • XLoader は動的配列を realloc で再取得しているのに対し、Mint は std::vector を使用している

というところだろうか。

最初の課題である最適化は、X ファイルの文法の他に、詳細ない仕様(TextureCoords は Mesh に 0 または 1 つだけ存在するのか、MeshNormals も同様なのか、MeshMaterialList も同様なのか)を知らなければならない。どこに資料があるんだろう。

std::vector に添え字でアクセスするのは、配列にアクセスするのと大差ないと思っているんだけど、1 フレーム描画する際に、このサンプルだと何千回と繰り返しアクセスするので、じわじわ効いてくるのかもしれない。

とりあえず std::vector をやめてみる、というのは試してみよう。



しかし、先人は偉大だ。比較するものが無かったら「こんなもんかな」で終わってしまうところだ。