2008年3月30日日曜日

デバイスロスト対策(失敗)

今日一日丸々使って調べたり実験してみたりしてみたけど、
ぜんぜんうまくいかない。

デバイスロストのタイミングなんかはまあよい。
Present() == D3DERR_DEVICELOST

TestCooperativeLevel() == D3DERR_DEVICENOTRESET
から
Reset
を実行すればよいだけの話のはずだ。

しかしうまくいかない。
現状はClearが動くだけでDrawPrimitiveUPなんかが正しく動かず、何も表示されない。
エラーも返ってきていない。
Clearが動くのだからデバイス処理は間違ってはいないはず。
何か忘れてるのか?

テクスチャなんかはD3DPOOL_MANAGEDだから
読み込み直す必要は無い。
そもそも読まないといけないデータがあれば、
読み込む前に解放処理をしないとResetが失敗するはずだ。

PCの仕様か、と思いきやほかのソフトでは何の問題も無いのだから、
自分のプログラムが悪いのは明白。

一応Reset以外の方法を。ということで
Direct3DDeviceを作り直す方法、
それからDirect3Dから作り直す方法の2つをためしてみたが、
結果は相変わらずだった。何かし忘れている線が濃厚だが、さっぱりだ。

埒が明かないので、DirectXSDKをバージョンアップしてみる。他力本願作戦だ。
ちなみに現在使用しているバージョンは2005December。
今から入れようとするのは2007Novemberだ。

何にもかわらなかった。
しかたなく2007Novemberを殺した。

0 件のコメント: