Oldshelf
@Oldshelf

Как устранить подёргивание картинки в OpenGL-приложении на видеокарте NVidia?

Есть несколько C++ приложений на OpenGL. Работают нормально на старых, встроенных и дискретных, видеокартах. Возникла проблема с новой видеокартой NVidia 2070. Кажется, дело в синхронизации FPS с частотой обновления дисплея. Выглядит так, будто раз в секунду картинка немного подтормаживает. Попробовал отключить синхронизацию. Не получилось: остались 60 FPS. В программах установлена небольшая задержка в виде Sleep'а - для снижения нагрузки. Убрал её. Частота кадров выросла то ~1000, тормоза исчезли. Интересный момент: если был установлен Sleep (1) или даже usleep (1) - видеокарта выдавала стабильно 60 FPS.

Вопрос. Можно ли заставить легковесные приложения на OpenGL (1.0) работать с NVidia плавно, не повышая FPS до максимума?
  • Вопрос задан
  • 45 просмотров
Решения вопроса 1
Oldshelf
@Oldshelf Автор вопроса
Подсказали, что этот эффект называется "stuttering". К сожалению, не нашёл способа борьбы с ним на OpenGL. В основном, все обсуждения данной проблемы сводятся к настройке системы.

P.S. Почитал внимательнее обсуждение этого вопроса. Кажется, удалось решить проблему выставлением "wglSwapIntervalEXT(1) ", убиранием Sleep'а и отключением "твика" приращения переменных движения / поворотов, установив вместо этого постоянный коэффициент, не зависящий от текущих FPS.

P.P.S. Решение плохо работает, если в программе используется многопоточность.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
gbg
@gbg
Баянист. Тамада. Услуги.
Вам нужно настроить VSYNC.
In short:
wglSwapIntervalEXT(0) - disables vsync, OK
wglSwapIntervalEXT(1) - adaptive vsync, NOT OK !
wglSwapIntervalEXT(-1) - adaptive vsync, OK
wglSwapIntervalEXT(-2) - adaptive vsync half rate, OK
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы