Я работаю над полноэкранным настольным приложением Windows, которое требует умеренной графики, использует OpenGL, но отображает только 2D-контент.Ничего особенного, в основном вывод пикселей на экран (до 4К, один монитор) и загрузка текстур.Мы используем VSync для управления частотой кадров рендеринга, т.е.вызов SwapBuffers () в конце рендеринга для блокировки до следующего VBlank.
Основное требование, которое у нас есть, заключается в том, чтобы приложение работало со скоростью 60FPS, поскольку оно используется с сенсорным экраном, и взаимодействие должно быть максимально плавным.
Поскольку приложение довольно простое, приложениеотлично работает на процессоре Intel i7 8-го поколения со встроенным графическим процессором Intel HD Graphics 630.Ни CPU, ни GPU не достигают пиковой нагрузки, и мы видим, что мы показываем комфортные 60FPS через наш индикатор FPS в приложении.Он также работает с аналогичными результатами на моей Surface Book 2 с Intel i7 и интегрированным графическим процессором Intel UHD Graphics 620.
Однако недавно я заметил, что приложение иногда начинает падать до 30FPS, а затемпребывание там или в течение длительных периодов времени или иногда даже навсегда.С помощью нашего счетчика FPS я могу сказать, что на самом деле мы не тратим время на рендеринг, а просто наш вызов SwapBuffers (), который произвольно блокируется на 2 кадра, ограничивая нас 30FPS.Единственный способ вернуться к 60FPS - это нажать alt-tab с другим приложением и вернуться к нашему, или просто открыть меню Windows, а затем вернуться в приложение.
Из-за того, что приложение впоследствии возвращается к 60FPSЯ уверен, что это намеренное поведение драйвера Intel, вероятно, предназначенное для игр (геймеры предпочитают стабильные 30FPS, а не нерегулярные / случайные пропущенные кадры, которые делают игру нестабильной).
Однако в нашемВ этом случае исключение случайного кадра не имеет большого значения, однако ограничение 30 кадров в секунду делает наш пользовательский интерфейс и взаимодействие гораздо менее приятным для глаз, особенно когда вместо этого он может легко рендериться со скоростью 60 кадров в секунду.
Есть лиМожно ли как-то изменить поведение водителя, предпочитая толкать 60FPS со случайными падениями, а не ограничивать скорость 30FPS?