Чтобы уточнить, я знаю, что атлас текстур улучшает производительность при использовании нескольких отдельных изображений. Но мне интересно, как дела обстоят, когда вы этого не делаете.
Я попытался выполнить покадровую анимацию вручную в пользовательском OpenGL, где для каждого кадра я привязываю новую текстуру и рисую ее на одном и том же точечном спрайте. Это работает, но очень медленно по сравнению с UIImageView
способностью абстрагироваться. Я загружаю все текстуры заранее, но повторная привязка выполняется каждый кадр. Для сравнения, UIImageView
принимает отдельные изображения, а не атлас текстуры, поэтому я предполагаю, что он делает то же самое.
Это 76 изображений, загружаемых индивидуально, а не в виде атласа текстур, и каждое имеет квадрат около 200 пикселей. В OpenGL я подозреваю, что узким местом является необходимость повторного связывания текстуры в каждом кадре. Но как UIImageView
это делает, если я ожидал такого же узкого места ?? Создает ли UIImageView
каким-то образом атлас «за кулисами», чтобы не было необходимости в повторном связывании текстур? Поскольку в конечном итоге под UIKit работает OpenGL, мне любопытно, как это должно работать.
Если есть более эффективные средства для анимации нескольких текстур, вместо того, чтобы заменять разные связанные текстуры в каждом кадре в OpenGL, я хотел бы знать, поскольку это может намекнуть на то, что Apple делает в своей структуре .
Если бы я действительно получал новый кадр для каждого из 60 кадров в секунду, то для анимации моих 76 кадров потребовалось бы около 1,25 секунды. Действительно, я получаю это с UIImageView, но OpenGL занимает около 3-4 секунд.