在窗口模式下使用VSync时Gameloop的问题

时间:2018-06-11 22:43:25

标签: c# sharpdx

我使用SharpDX在C#里面写了一些关于RenderLoop的文章,但都有同样的问题。 使用此循环可以在V-Sync速率下进行渲染,除非发生某些事件。 例如,拖动窗口或右键单击窗口栏(打开菜单)将停止循环。有办法避免这种情况吗?我想(甚至没有刷新控制)稳定的60 FPS循环。 我在控件(面板)上渲染,我需要这个。

1 个答案:

答案 0 :(得分:0)

OP确实已经解决了此问题,但是由于3个月后没有任何答案,因此属于我:

在窗口中运行时不要使用SharpDx VSync -并非这样做,并且肯定会引起争用和死锁。仅当您拥有整个屏幕时,VSync才有用。

只需显示您的swapChain并让窗口管理器在可能的时候显示它,您将获得可以提供的最高帧速率。

同样的事情让我有些困惑,尽管我没有在文档中的任何地方找到答案,但是当您考虑它时很明显:如果每个窗口都试图协调,则窗口将无法管理桌面单独使用VSync。

bool vSync = false;     // vSync should not be used in windowed modes -- may cause UI deadlocks when resizing form windows
swapChain.Present(vSync ? 1 : 0, PresentFlags.None, new PresentParameters());    // requires v11.1
相关问题