当我的游戏从窗口切换到全屏时,我想刷新我的交换链,反之亦然,目前我只找到了uMsg==WM_SIZE,但它不是最佳的,不幸的是,全屏切换到无边界不起作用。。。。还有其他信息吗?感谢
对于"全屏";与";加窗的";使用DXGI处理时,有两种基本方法:
-
让DXGI通过
DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH
为您完成。 -
使用标志
DXGI_MWA_NO_WINDOW_CHANGES
并自行处理。事实上,您确实使用WM_SIZE
来确定更改。您可能还想使用DXGI_MWA_NO_ALT_ENTER
并在WndProc中处理ALT+ENTER快捷键。
请参阅Microsoft文档:DirectX图形基础结构(DXGI(最佳实践。
对于窗口模式,WM_SIZE
的一个挑战是,随着"橡皮筋"矩形的调整,您会收到很多这样的消息,而调整后缓冲区的大小并没有那么快。这里的一个解决方案是使用WM_ENTERSIZEMOVE
和WM_EXITSIZEMOVE
,这样您就可以暂停调整大小,直到它完成。
有关WndProc的详细实现,请参阅GitHub。
最后一点:"全屏"实际上有几个定义。请参阅此博客文章。