キャプチャしたグラフィックス情報を Visual Studio のグラフィックス診断ツールで使用して、DirectX ベースのアプリケーションのレンダリングに関する問題を診断できます。
グラフィックス情報は手動またはプログラムを使用してキャプチャできます。手動でキャプチャするには、アプリケーションを Visual Studio から実行して、[フレームのキャプチャ] をクリックします。プログラムを使用してキャプチャするには、Visual Studio に用意されているキャプチャ API をアプリケーションのソース コードで使用して、フレームをキャプチャするタイミングを指定します。
また、グラフィックス情報がアプリケーションからキャプチャされるのを防ぐこともできます。
グラフィックス情報を手動でキャプチャする
[グラフィックス診断] ツール バーの [フレームのキャプチャ] を使用して、実行中の Direct3D アプリケーションからグラフィックス情報のフレームを手動でキャプチャします。複数のフレームを取得するには、ボタンを複数回選択します。フレームを手動でキャプチャする前に、アプリケーションを Visual Studio から起動して、グラフィックス診断を有効にする必要があります。
Visual Studio はキャプチャされた情報を使用して、キャプチャされたフレームを後で再作成します。これにより、グラフィックス診断ツールを使用して詳細を調べることができます。
グラフィックス診断を有効にしてアプリケーションを起動するには
- メニュー バーで、[デバッグ]、[グラフィックス]、[診断の開始] の順に選択します。(キーボード: Alt キーを押しながら F5 キーを押します)
グラフィックス診断によってアプリケーションがフックされたら、必要なフレームのグラフィックス情報をすべてキャプチャできます。キャプチャを開始するたびに、次のフレームの間に生じた Direct3D のイベントが、Direct3D のオブジェクトとそれらをサポートするリソースと共に記録されます。記録は、現在のフレームが表示された直後に開始し、キャプチャするフレームが表示されると終了します。
グラフィックス情報のフレームをキャプチャするには
- [グラフィックス診断] ツール バーで、[フレームのキャプチャ] をクリックします。
(キーボード: アプリケーションにフォーカスを置いた状態で、PrintScreen キーを押します)
最初のフレームがキャプチャされると、Visual Studio にグラフィックス ログが作成され、情報が保持されます。追加でキャプチャされたフレームはこのログに追加されます。アプリケーションの実行中に Visual Studio のグラフィックス ログ (.vsglog) のドキュメントを閉じると、それ以降はグラフィックス情報のフレームをキャプチャできませんが、Visual Studio デバッガーを使用してデバッグを続行できます。さらにグラフィックス情報をキャプチャするには、アプリケーションをデバッグを停止し、その後 [診断の開始] を使用してアプリケーションを再起動します。
グラフィックス情報をプログラムを使用してキャプチャする
解決しようとしているレンダリングの問題に関する情報の収集を、手動キャプチャに依存することは現実的でない、または不可能な場合があります。たとえば、問題によっては手動で再現するには断続的すぎるが、その原因となるプログラム条件は既知である場合があります。また、Visual Studio がサポートされていないため、手動キャプチャがサポートされていないシステム (Windows RT デバイスなど) からグラフィックス情報を収集する必要がある場合もあります。これらのシナリオでは、プログラムで呼び出すことのできる API が Visual Studio に用意されているため、それを使用してログにグラフィックス情報を取り込むことができます。プログラムの実行が完了したら、Visual Studio にあるグラフィックス ログを開き、記録された問題を調査できます。
アプリケーションでプログラムによるキャプチャを有効にする方法、およびプログラムによるキャプチャの実行をサポートするコンピューターを構成する方法の詳細については、「チュートリアル: プログラムによるグラフィックス情報のキャプチャ」を参照してください。
グラフィックス情報のキャプチャを防ぐ
アプリケーションを発行する前に、アプリケーションによる Direct3D API の使用動作をユーザーが確認できないように、グラフィックス診断ツールとその他のプロファイリング ツールを無効にできます。この情報は不正に使用される場合があります。詳細については、「方法: アプリケーションのグラフィックス診断を無効にする」を参照してください。
グラフィックス ログのドキュメント
グラフィックス ログのドキュメントには、グラフィックス診断のキャプチャ セッション中に収集されたグラフィックス情報が格納されます。キャプチャ セッションは手動またはプログラムを使用して開始できます。グラフィックス ログには、実行中の DirectX のグラフィックス アプリケーションからキャプチャされた 1 つ以上のフレームが含まれます。キャプチャされた各フレームについて、フレームの間に発生したすべての Direct3D イベントの一覧が記録されます。これには、以前に発生した Direct3D の補助イベント (グラフィックス デバイスの作成など) のほか、補助的なシェーダー、モデル、テクスチャ、その他のグラフィックス リソースなどが含まれます。各グラフィックス ログは単体で使用できるため、これらのフレームはいつでも、1 つずつ、外部情報または参照なしに、再作成できます。グラフィックス ログを共有し、データのキャプチャおよびコードの開発に使用されたコンピューター以外の問題を調べることができます。また、モデルとテクスチャが開発で変更されていても、変更前のグラフィックス ログを調べることができます。グラフィックス診断を使用してグラフィックスの問題を診断するときに、任意の Direct3D API 呼び出しと、それに関連付けられている状態、バッファーの個々の頂点、および描画呼び出しによって個々のピクセルが受ける影響も調べることができます。
[!メモ]
グラフィックス ログには関連情報の大部分が内部的にキャプチャされますが、グラフィック診断の一部の機能を十分に活用するには追加の情報が必要です。たとえば、グラフィックの呼び出し履歴の機能を十分に活用するには、プログラム データベース (.pdb) ファイルとアプリケーションのソース コードが必要で、HLSL シェーダーのソース コードをデバッグするには、シェーダーのソース コードも必要です (シェーダーが D3D11.1 シェーダー コンパイラを使用してコンパイルされていて、デバッグ情報を使用できる場合は、キャプチャ中にシェーダーのソース コードがグラフィックス ログに埋め込まれます)。
[!メモ]
Visual Studio の一部であるグラフィック ツールを使用して、グラフィックス ログからメッシュおよびテクスチャのコピーを展開、変更および保存できます。ただし、グラフィックス ログの内容はこの変更の影響を受けません。これらのグラフィックス ツールの使用に関する詳細については、「ゲームとアプリケーション用の 3D アセットの操作」を参照してください。