о быстрой замене текстур на IOS opengl ES - PullRequest
0 голосов
/ 26 января 2011

Я работаю над буфером для загрузки очень больших изображений (размер экрана) на одну поверхность. Идея состоит в том, чтобы анимировать много кадров (больше, чем может вместить видеопамять) кадр за кадром.

Я создал код для создания буфера, но у меня большая проблема со временем загрузки растрового изображения.

Мой код работает так:

  1. Я загружаю массив локальных файлов растровых файлов.

  2. Я (думаю) предварительно загружаю свои растровые данные в память. Я использую поток для хранения CGImageRef в NSArray для всей моей картины (40 на данный момент)

  3. Во втором потоке код ищет другой NSArray, чтобы определить, пусто оно или нет, если пусто, я привязываю свой cgimageRef к видеопамяти, создавая текстуры. (используйте sharedgroup для этого) В этом массиве хранится адрес из 20 имен текстур, и он используется непосредственно openGL для рисования поверхности. этот массив мой (буфер)

Когда я играю свою анимацию, я удаляю старые текстуры из моего «буфера», и мой поток (в точке 3) загружает новую текстуру.

Работает отлично, но очень медленно, и через несколько секунд анимации не хватает.

Можете ли вы помочь мне оптимизировать мой код?

1 Ответ

1 голос
/ 31 января 2011

В зависимости от устройства и версии iOS, glTexImage работает медленно.В iOS 4 была улучшена производительность, так что вы можете ожидать приличную скорость и на устройствах 2-го поколения, а при приличном я имею в виду одну или две загрузки текстуры на кадр ... В любом случае: используйте glTexSubImage и повторно используйте уже созданные идентификаторы текстуры.Также, при использовании glTex (Sub) Image, попробуйте использовать идентификатор текстуры, который не использовался для рендеринга в этом кадре.Я имею в виду: добавить какую-то текстурный ID-двойной буфер.Я полагаю, что вы делаете все свои вещи GL в одной теме, если не меняете.

...