在DirectX 10应用程序中,在全屏和窗口模式之间切换是否会产生任何类型的开销,例如必须重新创建纹理和/或顶点缓冲区?
换句话说,我是否可以构建一个应用程序,该应用程序可以在窗口模式和全屏模式之间进行“大量”切换,而不会在切换发生时遭受性能损失?
答案 0 :(得分:6)
在DirectX10中有DXGI。您使用交换链。交换链的缓冲区需要调整大小,因此有一些开销(当然),但据推测它是优化的。我担心的是通过切换视图模式导致用户癫痫发作。
http://msdn.microsoft.com/en-us/library/bb205075(VS.85).aspx
答案 1 :(得分:2)
在D3D10中,您无需在模式切换上重新创建纹理,缓冲区或任何D3D资源。一个值得注意的例外是在调用ResizeBuffers之后需要更新swapchain backbuffer引用(这应该是为了获得最佳的全屏性能),但它在性能方面并没有那么大的优势。
但是,这并不意味着模式变化很便宜。模式更改操作本身对于您的应用程序和系统的其余部分都非常昂贵(特别是在Vista中,DWM需要重新启动)。 Win7改进了很多,所以我建议你玩它,看看它是否符合你的性能要求,但不要指望即时过渡。