Уменьшенное качество скриншотов OpenGL ES (iPhone) - PullRequest
4 голосов
/ 09 сентября 2011

В настоящее время я использую этот метод от Apple , чтобы делать скриншоты моей игры OpenGL ES для iPhone. Скриншоты выглядят великолепно. Однако снятие скриншота приводит к небольшому заиканию в игре (в противном случае он работает плавно при 60 кадрах в секунду). Как я могу изменить метод от Apple , чтобы сделать снимки экрана низкого качества (отсюда и устранение заикания, вызванного снимком экрана)?

Edit # 1 : конечная цель - создать видеоигру, используя AVAssetWriter. Возможно, есть более эффективный способ генерирования CVPixelBuffers, на который есть ссылка в этой публикации SO .

Ответы [ 3 ]

3 голосов
/ 15 сентября 2011

Какова цель записи?

  • Если вы хотите воспроизвести последовательность на устройстве, вы можете вместо этого сохранить положения объектов и т. Д. И перерисовать последовательность в 3D.Это также позволяет воспроизводить последовательности с других позиций просмотра.

  • Если вы хотите показать игровой процесс, например, на YouTube или другом, вы можете посмотреть запись игрового процесса на другом устройстве /Камера или запишите игру, запущенную в симуляторе, используя программное обеспечение для захвата экрана, например ScreenFlow.

2 голосов
/ 15 сентября 2011

Если ничего не помогает.

Получите один из них http://store.apple.com/us/product/MC748ZM/A

, а затем преобразуйте это композитное видео в цифровое через какое-то внешнее устройство.Я сделал это, когда я конвертировал VHS фильмы на DVD давным-давно.

2 голосов
/ 14 сентября 2011

В методе Apple используется glReadPixels(), который просто перетаскивает все данные из буфера дисплея и, вероятно, запускает барьеры синхронизации и т. Д. Между графическим процессором и процессором.Вы не можете сделать эту часть быстрее или с меньшим разрешением.

Вы делаете это, чтобы создать одноразовое видео?Или вы хотите, чтобы пользователь мог запускать это поведение в рабочем коде?Если первое, вы могли бы сделать все виды хитрости, чтобы ускорить его - рендеринг в меньший размер для всего, не present вообще и просто захватывать кадры на основе записи входных данных, поступающих в игру,или другие подобные трюки, или еще больше запустите всю эту симуляцию на половинной скорости, чтобы получить все кадры.

Я менее полезен, если вам нужна действительная внутриигровая функция для этого.Возможно, кто-то еще будет.

...