39

DirectX アプリケーションを作成する場合、高速でエラーのない方法でAlt、ユーザーがアプリケーションを中断するのをサポートすることが望ましいのは明らかです。これを確実にするためのベストプラクティスは何ですか? 対処する必要がある事項は次のとおりです。Tab

  1. アプリケーションがいつ alt-tab キーを押して終了したか、いつ戻ったかを検出する最良の方法。
  2. ユーザーが Alt-Tab キーを押したときに失われる DirectX リソースと、これに対処する最善の方法。
  3. alt-tab サポートの目的で、アプリケーション アーキテクチャで行うべき主なことと避けるべきこと。
  4. 上記に適用される主要な DirectX バージョン間の重大な違い。

興味深いトリックや落とし穴も聞くのに適しています。

4

4 に答える 4

44

私の回答では C++ を使用していると仮定しますが、C# を使用する余裕がある場合、XNA ( http://creators.xna.com/ ) はこれらの問題をすべて処理する優れたゲーム プラットフォームです。

1]

この記事は、ウィンドウ プロシージャ内のウィンドウ イベントで、ウィンドウがフォーカスを失ったり取得したりしたことを検出するのに役立ちます。メイン ウィンドウでこれを処理できます: http://www.functionx.com/win32/Lesson05.htm。また、ここで WM_ACTIVATEAPP メッセージを確認してください: http://msdn.microsoft.com/en-us/library/ms632614(VS.85).aspx

2]

3]

Alt-Tab を無効にしないようにします。アプリケーションがアクティブでない間は、CPU 負荷を最小限に抑える必要があります。これは、ユーザーが何か他のことをしたいために Alt キーを押しながら Tab キーを押した可能性があるためです。そのため、アプリケーションを完全に一時停止するか、1 秒あたりにレンダリングされるフレームを減らすことができます。アプリケーションが最小化されている場合、もちろん何もレンダリングする必要はありません。ネットワーク ゲームについて考えた後、私の最善の解決策は、1 秒あたりにレンダリングされるフレーム数と、処理されるネットワーク パケットの量を減らすことです。おそらく、ゲームが再びアクティブになるまで、入ってくるパケットの多くを破棄することさえあります。

4]

正直なところ、可能であれば、DirectX 9.0c(またはターゲットオペレーティングシステムをVista以降に制限したい場合はDirectX 10)に固執します:)

最後に、DirectX SDK には多数のチュートリアルとサンプルがあります

于 2009-06-09T21:56:12.430 に答える
2

フルスクリーンの DirectX デバイスをまったく使用しないことで、この問題を解決しました。代わりに、一番上のフラグを付けたフルスクリーン ウィンドウを使用して、タスク バーを非表示にしました。そこから Alt-Tab を押すと、フラグを削除してウィンドウを最小化できます。テクスチャ リソースは、ウィンドウによって維持されます。

ただし、この方法では、「画面のロック」、Ctrl+Alt+Delete、リモート デスクトップ接続、ユーザーの切り替えなどによって発生するデバイス紛失イベントを処理できません。しかし、それらを非常に高速または効率的に処理する必要はありません (少なくとも、このアプリケーションではそうでした)。

于 2009-06-16T20:26:53.833 に答える
2

これはさまざまな理由で発生する可能性があるため、すべての深刻な D3D アプリは紛失したデバイスを処理できる必要があります。

Vista の DX10 には、新しい「タイムアウトの検出と回復」機能があり、これにより、私の経験では、アプリのデバイスが失われる原因となるグラフィックス デバイスがリセットされることがよくあります。これは、ドライバーが成熟するにつれて改善されているようですが、とにかく処理する必要があります。

于 2009-06-17T13:46:22.013 に答える
1

DX8 および 9 (および 10?) では、D3DPOOL_MANAGED を使用してリソース (主に頂点およびインデックス バッファーとテクスチャ) を作成すると、失われたデバイス間で保持され、リロードする必要がなくなります。これは、それらがシステム メモリに保存され、DX ランタイムがビデオ メモリに自動的にコピーするためです。ただし、コピーによるパフォーマンス コストが発生するため、急速に変化する頂点データにはお勧めできません。もちろん、最初にプロファイルを作成して、速度の問題があるかどうかを判断します:-)

于 2009-06-16T02:09:59.470 に答える