【发布时间】:2022-10-05 01:53:59
【问题描述】:
当我的游戏从窗口切换到全屏时,我想刷新我的交换链,反之亦然,目前我只发现 uMsg == WM_SIZE 但它不是最佳的,不幸的是,全屏到无边框不起作用.... 还有其他消息吗? 谢谢
标签: c++ windows window directx-11 wndproc
当我的游戏从窗口切换到全屏时,我想刷新我的交换链,反之亦然,目前我只发现 uMsg == WM_SIZE 但它不是最佳的,不幸的是,全屏到无边框不起作用.... 还有其他消息吗? 谢谢
标签: c++ windows window directx-11 wndproc
对于使用 DXGI 的“全屏”与“窗口”处理,有两种基本方法:
让 DXGI 通过DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH 为您完成。
使用标志DXGI_MWA_NO_WINDOW_CHANGES 并自己处理。实际上,您确实使用WM_SIZE 来确定更改。
见Microsoft Docs: DirectX Graphics Infrastructure (DXGI) Best Practices。
对于窗口模式,WM_SIZE 的一个挑战是,当调整“橡皮筋”矩形时,您会收到很多这样的消息,并且调整后缓冲区的大小并没有那么快。这里的一种解决方案是使用WM_ENTERSIZEMOVE 和WM_EXITSIZEMOVE,这样您就可以暂停调整大小,直到完成。
请参阅GitHub 详细的 WndProc 实现。
最后一点:“全屏”实际上有几个定义。见this blog post。
【讨论】: