iOS Metal с двойной буферизацией при 120 кадрах в секунду - PullRequest
0 голосов
/ 02 июля 2018

Есть ли способ получить двойную буферизацию на частоте 120 Гц (ProMotion) вместо тройной буферизации? Я пытаюсь минимизировать задержку пользовательского интерфейса.

Когда я использую шаблон Xcode iOS Game (который отображает вращающийся куб), я все равно получаю тройную буферизацию на частоте 120 Гц, несмотря на тривиальный объем работы. Это двойная буферизация на 60 Гц.

Воспроизвести:

  1. Создайте новый проект в Xcode, используя Файл → Создать → Проект
  2. Выберите iOS → Игра
  3. Выбрать Swift / Metal
  4. В GameViewController добавить mtkView.preferredFramesPerSecond = 120
  5. Товар → Профиль
  6. Выбор трассировки системы металла
  7. Замечание: тройная буферизация (3 цвета для кадров):

Image showing triple buffering in Instruments

Глядя на график, кажется, что GPU хорошо завершает работу за время, необходимое для двойной буферизации.

Вот полезное видео для просмотра фона: https://developer.apple.com/videos/play/wwdc2015/233/

1 Ответ

0 голосов
/ 02 июля 2018

Приложения могут управлять максимальным числом Металла выдвижных элементов CAMetalLayer.maximumDrawableCount . Установка этого значения в 2 приведет к двойной буферизации (3 по умолчанию). Имейте в виду, что это повышает вероятность того, что - [CAMetalLayer nextDrawable] (или эквиваленты MTKView) вернет nil, что заставит вас удалить кадр.

...