XNAを使用してコントロール内の3Dモデルをアニメーション化するWinFormsアプリケーションがあります。このアプリは何ヶ月も問題なく動作していますが、最近、アニメーションが定期的に一時停止するようになりました。何が起こっているのかを調査するために着手し、私はこれらの事実を確立しました:
- それは私のマシンでのみ発生し、他のマシンは正常に動作します
- レンダリングループからすべてを削除しても問題は改善されません
2.では、実際にすべてを削除したわけではありません。ループを制限して、GraphicsDeviceにビューポートを設定してから、GraphicsDevice.Presentを実行しました。
さらに掘り下げようとして、いくつかの統計をキャプチャするためにPIXを起動しました。2つのPIX実行のスクリーンショットは、ここ(Run6)とここ(Run14 )で表示できます。Run6は元のレンダリングループを使用しており、Run14は必要最低限のPresentループを使用しています。
PIXは、GPUが定期的に何かを実行していることを教えてくれますが、これが一時停止の原因であると思います。これの原因は何でしょうか?または、GPUが実際に何をしているのかを知るにはどうすればよいですか?
更新:私は通常、自分のコードが完璧であると信じているので(誰が笑っているのですか?)、同じ動作を示すかどうかを確認するために、新しいXNAプロジェクトを最初から開始しました。したがって、新しいXNA 3.1 Windowsゲームプロジェクトを開始してPIXを実行すると、このタイムラインが得られます。同じ定期的な一時停止。したがって、XNAまたはDirect3Dでは、問題はスタックの下位にある必要があります。
したがって、PIXはGPUが何かに取り組んでいることを示し、各フレーム内で行われたDX呼び出しのリストを確認でき、タイミング計算は、呼び出し中(またはIDirect3DDevice9::Present
呼び出し後)に一時停止が発生することを示しています。
更新プログラム2:問題のあるマシンにXNA4.0CTPを以前にインストールおよびアンインストールしました。これが関連していることは確かではありませんが、XNA GameStudio3.1ビットを再インストールすると違いが生じる可能性があると思いました。やったことがわかった。
根本的な質問は同じままです(そして賞金はまだあります):XNA 3.1(またはDirectX)に影響を与えて、このように動作させることができますか?DirectXおよび/またはGPUレベル用のロギング/トレースパワーツールはありますか?何が起こっているのかを明らかにすることができますか?
注: 8GBのRAMを搭載したWindows7x64デュアルコアマシンでXNA3.1を使用しています。
注2:この質問はXNACreatorsフォーラムにも投稿されています。