使用多个监视器系统 (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

编程提示