PVR текстуры против PNG в OpenGL ES - PullRequest
21 голосов
/ 02 февраля 2009

Я разрабатываю 2D-приложение для iPhone, которое отображает множество текстур. Большинство из них загружаются из файлов PNG с альфа-прозрачностью на данный момент. В качестве теста я также поиграл с PVR-тестами, чтобы увидеть, есть ли разница в производительности.

PNG-текстуры загружаются с классом Texture2D, который поставляется с примером аварийной посадки. Тесты PVR загружаются с классом PVRTexture из примера PVRTextureLoader. Я создаю PVR-текстуры с помощью Apple. Texturetool.

В качестве теста я рисую фон (512 * 512) и поверх этих 36 спрайтов 90 * 64 пикселей (из текстуры 512 * 512) с прозрачностью. Текстуры PVR отображаются со скоростью около 58 кадров в секунду, а PNG - со скоростью 47 кадров в секунду. Это то, что я могу ожидать, или разница должна быть больше? Кроме того, текстуры, созданные с помощью texturetool, выглядят очень плохо, PVRTexTool лучше?

Ответы [ 2 ]

42 голосов
/ 03 февраля 2011

PNGs:

  • Высокая точность цветопередачи, без потерь
  • Медленное чтение / распаковка с диска.
  • Медленная загрузка на графическое оборудование, внутреннее переупорядочение пикселей (свизлинг) выполняется драйверами. Возможно, существует также преобразование между RGBA <-> BGRA <-> ARGB, хотя Xcode обычно преобразует PNG в формат цвета, более оптимизированный для аппаратного обеспечения.
  • Более медленный рендеринг из-за ограниченной пропускной способности памяти (больше байтов для чтения из памяти для графического процессора). Фактическое замедление зависит от сценария использования. Эта проблема наиболее заметна при коэффициенте увеличения ниже 1х и отсутствии MIP-картографирования.
  • Занимайте больше памяти RAM / VRAM.
  • Редактируемый, может быть отфильтрован / смешан / изменен в размере / преобразован вашим программным обеспечением перед загрузкой.
  • Mip-карты могут генерироваться автоматически при загрузке текстуры драйверами
  • Использование дискового пространства зависит от содержимого, очень маленькое для простых изображений, почти несжатое для фотореалистичных.
  • Может быть быстро и быстро экспортирован из любого программного обеспечения для редактирования изображений.

PVRs:

  • Низкая точность сжатия с потерями. Доступны 2 уровня сжатия: 2 бита на пиксель и 4 бита на пиксель. Блочные, могут повредить острые края и плавные градиенты. Качество изображения зависит от содержимого. 3 или 4 цветовых канала, так что вы можете использовать альфа-канал, но сжатие с потерями может привести к нежелательным результатам.
  • Быстрая загрузка с диска, не требуется программная декомпрессия.
  • Практически мгновенная загрузка текстур, поскольку это внутренний аппаратный формат, будет проходить через драйверы без изменений.
  • Быстрый рендеринг из-за меньшей пропускной способности памяти. Скорость рендеринга пикселей в основном ограничивается другими факторами, когда используются текстуры PVR.
  • Используйте наименьшее количество оперативной памяти и места в памяти.
  • Mip-карты должны быть предварительно сгенерированы.
  • Вы не можете создавать или редактировать PVR внутри вашего программного обеспечения AFAIK. Или это будет очень медленно.
  • Использование дискового пространства прямо пропорционально размеру исходного изображения (фиксированный коэффициент сжатия). Может быть дополнительно сжат (слегка) другими методами.
  • Ограничения по размеру. Полномочия 2, только квадрат.
  • Требуется дополнительный инструмент преобразования, обработка может быть автоматизирована, но значительно замедлит время сборки.
10 голосов
/ 13 февраля 2009

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

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