Каковы хорошие методы для высокопроизводительного полноэкранного бит-бита на iOS? - PullRequest
5 голосов
/ 25 августа 2010

Предположим, я хочу запрограммировать Звездное поле анимацию. Не с помощью OpenGL, а путем рисования непосредственно в буфер экрана или вне экранных буферов, которые могут быть размещены на экране.

Это демо Star Field, работающее на TRS-80, конечно, только пример. Подумайте о декодировании видео или полноэкранной анимации как о других возможностях, где требуется скорость более 20 кадров в секунду.

Какие хорошие методы для этого? Меня интересуют как официальные, так и частные реализации API.

Если можете, пожалуйста, покажите базовый код.

Ответы [ 2 ]

2 голосов
/ 27 августа 2010

Вот краткое описание одного распространенного и достаточно быстрого метода.

Во время инициализации используйте CGBitmapContextCreate (), чтобы создать как минимум 2 контекста растрового изображения из указателей на буферы внеэкранной памяти и добавить CALayer в качествеподслой вашего UIView.

В цикле рендеринга чередуйте использование двойного буфера, скопируйте и / или измените текущий буфер внеэкранной памяти, используйте CGBitmapContextCreateImage () для создания изображения из этого буфера и назначьтеПолученное изображение к содержимому CALayer.

0 голосов
/ 01 сентября 2010

Обычный способ сделать этот тип эффекта - использовать функции рисования растровых изображений, которые позволяют смещать изображения: для эффекта прокрутки вниз просто сделайте две копии из вашего исходного растрового изображения звездного поля в буфер экрана: сначала из источника От (0, 0) до (ширина, высота-смещение) до экрана (от 0, Yoffset) до (ширина, высота). Во-вторых, перейдите от источника (0, высота-Yoffset) к (ширина, высота) к экрану (0, 0) к (ширина, Yoffset). Изменяя Yoffset в каждом кадре, вы можете контролировать скорость прокрутки, просто убедитесь, что Yoffset сброшен, когда он достигает (высота) обратно в 0. Реверсирование направления такое же, только инвертируйте изменения Yoffset. Один и тот же метод может быть применен к X и Y, даже в одно и то же время, для получения очень мощных эффектов прокрутки на весь экран.

Мы используем этот метод в нашем ядре iSGPU для прокрутки обоев и других фоновых эффектов. Производительность обычно очень высокая, так как вы имеете дело с 2-мя блоками передачи линейной памяти. Так как метод использует растровые изображения в памяти, вы можете иметь очень хорошую прокрутку изображений, а не просто изменение пикселей. С помощью всего лишь нескольких изменений вышеуказанных параметров вы также можете использовать растровые изображения, превышающие размер экрана, для создания эффекта «большего мира».

Удачи! Стюарт, Главный архитектор / You.i Labs

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...