Это похоже на причуду программирования OpenTK. Когда вы вызываете .Run (), он в основном запускает бесконечное количество l oop событий окна обработки плюс 60 раз в секунду, он вызывает ваш метод рендеринга кадра. Вы можете увидеть это l oop в их репозитории Github :
while (true)
{
ProcessEvents();
if (Exists && !IsExiting)
{
if (isSingleThreaded)
{
DispatchUpdateFrame(watchRender);
}
DispatchRenderFrame();
}
else
{
return;
}
}
в DispatchRenderFrame (), он проверяет, прошло ли достаточно времени для вызова вашего метода рендеринга кадра.
Таким образом, вам необходимо включить VSyn c (window.VSync = OpenTK.VSyncMode.On
) + SwapBuffers или реализовать свой собственный Thread.Sleep (), если вы не хотите, чтобы он занимал одно ядро.
По Кстати, у меня лично были странные проблемы с VSyn c, некорректно применяемым в 32-битных приложениях с картой geforce. Если это произойдет с вами, единственное, что я понял, - это переключиться на 64-битное приложение и / или создать профиль nvidia вручную или программно, используя SOP.CS