GPUPPURUT開発6

GPUPPURUTのDirect3Dで実装したほうのGDXUTでteapotを描画するテストプログラムを書いていたのですが、3つ目の窓を作ったときteapot描画でおかしくなるバグが発生しました。
この原因を探すのに数時間掛かってしまったのですが、結局teapotのメッシュを作成するときに間違ったオブジェクトのdeviceのアドレスを渡していただけでした。
GDXUTのどこかがおかしいと思ってGDXUTのソースコードばかり見てたら、原因がテストプログラムのほうにあったとは・・・orz

現在の実装ではGDXUTのデストラクタで、もしIDirect3DDevice9が残ってたらDirect3D関連の後始末して、ウィンドウが破棄されてなかったらDestroyWindowで破棄するようにしています。(uninitializeメンバ関数でも同様のことができるようにはなっています。)GDXUTを静的変数にしてWinMainから抜けた後にデストラクタ内でdirect3dやwindowの破棄をやるとID3DXMeshをReleaseするときに例外が発生するようです。
GDXUTを一時変数にしたとき、デストラクタで後始末をしてくれると楽なのですがね。静的変数のデストラクタの呼ばれる順番はわからないし、GDXUT自体が静的変数を使っているのでGDXUTを静的変数にしてデストラクタで後始末を行うのはまずそうです。GDXUTで静的変数を使わないようにしても、Direct3dとかwindows関連でおかしなことになりそうだし。