マルチモニタ システムの処理

マルチモニタ システムの処理

排他的なフルスクリーン モードの概念は Microsoft® DirectX® 9.0 でも保持されているが、IDirect3D9::CreateDevice および IDirect3DDevice9::Reset メソッドの呼び出しでは完全に非明示的に保持される。フルスクリーン処理でデバイスのリセットまたは作成が正常に行われると、そのデバイスを作成した Microsoft Direct3D® オブジェクトがシステム上のすべてのアダプタを所有しているものとしてマークされる。この状態は排他モードと呼ばれ、この時点で Direct3D オブジェクトは排他モードを所有している。排他モードでは、他の Direct3D9 オブジェクトによって作成されたデバイスがフルスクリーン処理を行ったりビデオ メモリを割り当てることはできない。また、Direct3D9 オブジェクトが排他モードであると見なしたときには、フルスクリーンになったデバイス以外のデバイスはすべて消失状態になる。消失したデバイスを処理する方法については、「デバイスの消失」を参照すること。

排他モードでは、その Direct3D9 オブジェクトに、デバイスが使用するフォーカス ウィンドウが通知される。その Direct3D9 オブジェクトが所有する最後のフルスクリーン デバイスがウィンドウ モードにリセットされるか破壊されると、排他モードは解放される。

Direct3D9 オブジェクトが排他モードを所有するとき、デバイスは 2 つのカテゴリに分類される。最初のカテゴリのデバイスは、既にフルスクリーンであるデバイスを作成したものと同じ Direct3D9 オブジェクトによって作成され、既にフルスクリーンであるデバイスと同じフォーカス ウィンドウを持ち、他のフルスクリーン デバイスとは別のアダプタを表す。このカテゴリのデバイスは、制限なく Reset または作成でき、消失状態になることはない。このカテゴリのデバイスは、フルスクリーン モードにすることもできる。

このカテゴリに入らないデバイス (別の Direct3D9 オブジェクトによって作成されたか、別のフォーカス ウィンドウで作成されたか、既にフルスクリーンのデイバイスがあるアダプタに作成されたデバイス) はリセットできず、排他モードがなくなるまで消失状態のままになる。

実際には、マルチモニタ アプリケーションでは複数のデバイスをフルスクリーン モードにすることができるが、それは、これらのデバイスがすべて異なるアダプタのデバイスであり、同じ Direct3D9 オブジェクトによって作成され、しかも同じフォーカス ウィンドウを共有する場合に限られる。

  同じ IDirect3D9 オブジェクトおよびフォーカス ウィンドウを使う新しいデバイスを作成すると、元のデバイスはサーフェイスを失う。アプリケーションで最初のデバイスを使うには、そのデバイスに対する IDirect3DDevice9::Reset を呼び出す必要がある。たとえば、2 つのデバイスを作成するには、次の手順を実行する。

  1. デバイス 1 を作成する。
  2. デバイス 2 を作成する。
  3. デバイス 1 をリセットする。