对于 D3D11 使用 DXGI 翻转模型交换链。
Direct3D 11 支持两种呈现模式:Windows 7 样式的 BitBlt 和现代翻转模型。历史上,BitBlt 模型是将 Direct3D 交换链呈现到屏幕的唯一方式。每次需要显示帧时,它都会复制交换链表面并将其 blit 到屏幕缓冲区。Windows 8.1 引入了 DXGI 翻转模型,使桌面窗口管理器能够直接使用交换链表面。
DXGI 翻转模型交换链确保最佳性能。在窗口模式下运行时,它通过消除昂贵且冗余的表面 blit 到屏幕缓冲区来提高性能。在窗口化(无边框)全屏模式下运行时,它会直接在屏幕上显示应用程序交换链,这将输入延迟减少一帧,并消除桌面窗口管理器执行的桌面合成,就像独占全屏模式一样。这种优化称为“独立翻转”。
要利用 Direct3D 11 的 DXGI 翻转模型,您需要在 Windows 8.1 或更高版本上运行播放器,并且不使用 FullScreenMode.ExclusiveFullScreen。如果这两个条件中的任何一个未满足,Unity 将自动回退到使用 Windows 7 样式的 BitBlt 交换链模型,即使启用了此设置也是如此。Unity 在使用独占全屏模式时使用 BitBlt 模型,因为翻转模型交换链在独占全屏模式下运行时不支持帧延迟可等待对象,这会导致它们输入延迟增加。
DXGI 翻转模型交换链在使用 DwmExtendFrameIntoClientArea 函数时不支持透明度,因此,如果您需要使窗口的某些部分透明或不可见,您将不得不禁用此设置并使用 BitBlt 模型交换链。
Unity 默认情况下对 Direct3D 11 图形 API 使用 DXGI 翻转模型。Unity 在使用 Direct3D 12 时始终使用 DXGI 翻转模型,因此此设置仅影响 Direct3D 11。最佳实践是保持此设置启用。
可以通过传递“ -force-d3d11-flip-model”命令行参数在构建的播放器中强制使用翻转模型交换链。同样,可以通过传递“ -force-d3d11-bitblt-model”命令行参数强制使用 BitBlt 模型交换链。
有关更多信息,请参阅 https://docs.microsoft.com/en-us/windows/win32/direct3ddxgi/dxgi-flip-model 和 https://docs.microsoft.com/en-us/windows/win32/direct3ddxgi/for-best-performance--use-dxgi-flip-model。