使用多个监视系统 (Direct3D 9)

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

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

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

不在此类别中的设备(由不同的 Direct3D9 对象创建的设备、具有不同焦点窗口的设备)或具有全屏设备的某些适配器无法重置并一直处于丢失状态,直到独占模式丢失。

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

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

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

编程提示