feat: 帧率控制——手动限帧 + VSync 开关

- Application 帧率控制 API:SetLimitFps/SetTargetFps/SetVSync。
  限帧目标最低 24fps(防止过低刷新导致交互卡死),无上限;
  vsync 开启时 present 自带节奏,手动限帧不生效
- 限帧策略:sleep 到剩 ~2ms 后自旋,精度高且不烧 CPU
- Swapchain 加 VSync 开关:ChoosePresentMode 按开关选
  Mailbox(低延迟垂直同步)/ Immediate(不限速可撕裂),
  FIFO 兜底;切换经 SetVSync → 重建 swapchain(复用 HandleResize)
- Scene Debug 面板新增 Frame 区块(vsync/limit/目标滑条)
- Run 循环新增 CPU 归属遥测(update/ui/render/total,每 120 帧)
This commit is contained in:
2026-09-22 20:33:10 +08:00
parent cef32ea1ba
commit d8274e8bdc
7 changed files with 102 additions and 11 deletions
+7 -1
View File
@@ -151,9 +151,15 @@ namespace Engine
vk::PresentModeKHR Swapchain::ChoosePresentMode(const std::vector<vk::PresentModeKHR>& modes)
{
// vsync 开:Mailbox(三缓冲垂直同步,低延迟);关:Immediate
//(不限速,可能撕裂)。FIFO 是所有实现必须支持的兜底
const vk::PresentModeKHR preferred = m_VSync
? vk::PresentModeKHR::eMailbox
: vk::PresentModeKHR::eImmediate;
for (const auto& m : modes)
{
if (m == vk::PresentModeKHR::eMailbox)
if (m == preferred)
{
return m;
}