MTKView против производительности GLKView на старых устройствах - PullRequest
1 голос
/ 13 октября 2019

С тех пор, как я перешел на MTKView из представлений на основе OpenGLES, у меня возникли странные проблемы с производительностью на старых устройствах (iPad Mini 2 года 2014). Подводя итог, я делаю предварительный просмотр видео в реальном времени с помощью MTKView, а также при необходимости записываю видео (как в примере кода RosyWriter). Моя новая версия приложения написана на Swift и поддерживает как Metal, так и OpenGLES. Так что для сравнения у меня есть и код визуализации Open GL, и MetalУ меня также есть устаревшая версия приложения, написанная на Objective C, и использующая OpenGLES для всего предварительного просмотра и рендеринга. Вот проблемы с производительностью, которые я вижу на iPad Mini 2:

  1. При использовании MTKView, если я отлаживаю приложение в XCode и масштабирую видео (используя AVCaptureDevice zoom API, нет металлического кода для обрезки / масштабированиякадров), частота кадров значительно падает (с 30 до 10 кадров в секунду). Если я записываю видео во время масштабирования (что означает дополнительный конвейер кодирования видео в другом потоке), в записанном видео также будут пропадать кадры.

  2. Когда я профилирую приложение, используя профилировщик времени,MTKView достаточно плавный с масштабированием. Однако, если я сейчас начну записывать видео, MTKView fps снова пропадет или кадры будут задержаны в предварительном просмотре, но в записанном видео проблемы с пропуском кадров не возникнет - конец записанного видео по-прежнему плавный.

  3. Если я выберу версию выпуска приложения для отладки, поведение будет таким же, как при профилировании,

  4. Если я переключаюсь обратно к GLKView вместо MTKView, проблем с предварительным просмотром даже вОтладочная версия. При записи все еще есть проблемы - предварительный просмотр задерживается при увеличении. Но если я профилирую приложение, НИКАКИХ задержек или пропаданий кадров !!!!

  5. Наконец, оригинальная устаревшая версия в Objective C, которая использует OpenGLES для всех целей, вообще не имеет проблем. .

Теперь вопрос в том, какие инструменты в инструментах я могу использовать, чтобы точно определить проблемы с пропаданием кадров при предварительном просмотре и записи. Может ли Metal не соответствовать производительности OpenGLES на старых устройствах?

...