6

これは少し特殊なケースですが、複数のモニターを使用するゲームを開発しています。この質問の範囲外の理由で、スワップ チェーンではなく「マルチデバイス方式」を使用しています。私のコードは次のサンプルに似ています。

http://www.codesampler.com/dx9src/dx9src_1.htm#dx9_multiple_devices

私が苦労していること、およびドキュメントが見つからないことは、両方のウィンドウを真のフルスクリーン (つまりd3dpp.Windowed = FALSE;) で実行できるかどうかです。現在、2 回目の呼び出し時に「無効なパラメーター」HRESULT を取得してCreateDeviceいます。ウィンドウの1 つが全画面表示の場合は問題なく動作しますが、両方ではありません。これを機能させるための設定があることを願っていますが...

事前に乾杯

4

2 に答える 2

8

Direct3D 9 のドキュメント ( Working with Multiple Monitor Systems ) によると: Direct3D9 オブジェクトであり、すべてが同じフォーカス ウィンドウを共有します。」

デバイスの初期化ごとに 2 つのウィンドウ ハンドルがあることに気付くでしょう。プレゼンテーション ウィンドウとフォーカス ウィンドウです。フォーカス ウィンドウ ( IDirect3D9::CreateDeviceに渡される) は、フォアグラウンドからバックグラウンドへの切り替えや Alt+Tab などのイベントの処理に使用されます。プレゼンテーション ウィンドウは D3DPRESENT_PARAMETERS 構造体に渡され、Direct3D のキャンバスとしてのみ使用されます。

作成するウィンドウの 1 つ (おそらく最初のウィンドウ) をフォーカス ウィンドウとしてマークする必要があります。デバイス間でフォーカス ウィンドウを共有しますが、「キャンバス」(プレゼンテーション) ウィンドウは分離したままにします。

編集: これも役立つかもしれません。

両方のデバイスのフォーカス ウィンドウを作成します。

(オプション) 最初のアダプターのデバイス ウィンドウを作成します。

2 番目のアダプターのデバイス ウィンドウを作成します。

direct3d9 コンテキストを作成します。

これを使用して両方のデバイスを作成します。

共有フォーカス ウィンドウと (オプションで) 最初のデバイス ウィンドウを使用して、最初のフルスクリーン デバイスを作成します。

共有フォーカス ウィンドウと 2 番目のデバイス ウィンドウを使用して、2 番目のフルスクリーン デバイスを作成します。

最初のデバイスをリセットします。

共有フォーカス ウィンドウは、パラメーターとして CreateDevice に直接渡されます。

デバイス ウィンドウは、プレゼンテーション パラメーター構造体で渡されます。

于 2012-06-16T08:56:42.400 に答える