我使用SharpDX在C#里面写了一些关于RenderLoop的文章,但都有同样的问题。使用此循环可以在V-Sync速率下进行渲染,除非发生某些事件。例如,拖动窗口或右键单击窗口栏(打开菜单)将停止循环。有办法避免这种情况吗?我想(甚至没有刷新控制)稳定的60 FPS循环。我正在渲染一个控件(面板),我需要这个。
OP现在肯定已经解决了这个问题,但由于3个月后没有答案,所以这是我的:
在窗口中运行时不要使用SharpDx VSync - 它不是那个意思,肯定会引起争用和死锁。只有拥有整个屏幕时,VSync才有用。
只需出示您的swapChain并让窗口管理器尽可能显示它,您将获得可以提供的最高帧速率。
这件事让我有点困扰,虽然我没有在文档中的任何地方找到答案,但是当你想到它时很明显:如果每个窗口试图独立地与VSync协调,那么Windows将无法管理桌面。
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