Проблемы с Gameloop при использовании VSync в оконном режиме - PullRequest
0 голосов
/ 12 июня 2018

Я прочитал несколько статей о RenderLoop внутри C #, используя SharpDX, но у всех одна и та же проблема.Использование этих циклов хорошо для рендеринга с частотой V-Sync, за исключением случаев, когда происходят некоторые события.Например, перетаскивание окна или щелчок правой кнопкой мыши по панели окон (открывающееся меню) остановит цикл.Есть способ избежать этого?Я хочу (даже не обновляя управление) стабильную петлю 60 FPS.Я выполняю рендеринг на панели управления, и мне это нужно.

1 Ответ

0 голосов
/ 06 сентября 2018

ОП наверняка уже решил эту проблему, но, поскольку через 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
...