使用 Direct3D 9 (多个监视)

独占全屏模式的概念保留在 Direct3D 9 中,但在 IDirect3D9::CreateDeviceIDirect3DDevice9::Reset 方法调用中完全隐式。 每当在全屏操作中成功重置或创建设备时,创建设备的 Direct3D 对象都会标记为拥有该系统上的所有适配器。 此状态称为独占模式,此时 Direct3D 对象拥有独占模式。 独占模式意味着由任何其他 Direct3D9 对象创建的设备既不能采用全屏操作,也不能分配视频内存。 此外,当 Direct3D9 对象采用独占模式时,除全屏设备之外的所有设备都处于丢失状态。 若要了解如何处理丢失的设备,请参阅Direct3D 9 (丢失) 。

除了独占模式外,Direct3D9 对象还通知设备使用焦点窗口。 当 Direct3D9 对象拥有的最后一个全屏设备重置为开窗模式或销毁时,将释放独占模式。

当 Direct3D9 对象拥有独占模式时,设备可以分为两个类别。 第一类设备是由同一 Direct3D9 对象创建的,该对象创建了已全屏的设备,其焦点窗口与已全屏的设备相同,并且表示与任何全屏设备不同的适配器。 此类别中的设备对重置或创建设备的能力没有限制,并且不会处于丢失状态。 此类别中的设备甚至可以置于全屏模式。

不在此类别中的设备(即由其他 Direct3D9 对象创建的设备,或使用不同的焦点窗口的设备,或者对于设备已全屏的适配器)无法重置并处于丢失状态,直到独占模式丢失。

实际含义是,多个监视器应用程序可以将多个设备放在全屏模式下,但只有当所有这些设备都用于不同的适配器时,由同一 Direct3D9 对象创建,并且所有设备共享相同的焦点窗口。

使用相同的 IDirect3D9 对象和焦点窗口创建新设备时,原始设备将丢失其表面。 需要在第一台设备上调用 IDirect3DDevice9::Reset, 以便应用程序使用它。 例如,若要创建两个设备,请执行下列操作:

  1. 创建设备 1
  2. 创建设备 2
  3. 重置设备 1

编程使用技巧