Конвертируйте текстуру NPOT PVR в POT в iOS - PullRequest
0 голосов
/ 04 декабря 2011

Я хотел бы вручную загрузить текстуры NPOT PVR на iOS (я не имею в виду загрузку текстуры в память OpenGL, я имею в виду загрузку ее в пользовательскую структуру данных, которая позволяет получить доступ к данным изображения, чтобы увеличить холст и сохранить его снова как новый PVR).

Я спрашиваю об этом, потому что мы реализуем приложение OpenGL для iOS с большим количеством фоновых текстур (480 x 320 на дисплеях без сетчатки). Мы намерены хранить эти текстуры в виде файлов NPOT PVR, поэтому мы имеем прирост памяти на iPhone 3GS +.

3G - iPhone не может загружать текстуры NPOT PVR в не OpenGL память. Я намерен реализовать шаг предварительной обработки для 3G-устройств, который преобразует все текстуры NPOT PVR в POT PVR и сохраняет их в папке Cache приложения.

Можно ли таким образом загружать и обрабатывать PVR? Например, TexturePacker сгенерировал PVR.

Ответы [ 2 ]

1 голос
/ 03 января 2012

Если вам не нужна текстура для автоматического повторения / переноса и вы просто собираетесь использовать ваши тексели 480 x 320 в качестве подмножества, скажем, текстуры 512x512 и никогда не получать доступ к частям, где X> 480 и y> 320,тогда вы можете изменить данные.

Одним из предложений было бы дополнить исходные изображения размером до 512x512 (используя некоторый постоянный цвет), сжать их, а затем просто сохранить соответствующие части текстуры.Когда вы загрузите текстуру в приложении, просто добавьте недостающие сжатые данные.(Просто понял, что это не самое ясное из описаний: - |).

Обратите внимание, что вам нужно будет принять во внимание порядок хранения (который, вероятно, описан в ссылке, которую дал bronxbomber92), но это просто пришло в головумне, что может быть более простой подход.Сжатые данные располагаются / чередуются в 64-битных порциях.Если вы дополнили исходное изображение постоянным цветом, после сжатия (по крайней мере, с помощью компрессора IMG PVRTextool) должен быть разумный процент (~ 38%) 64-битных блоков, которые совпадают.Вы можете использовать, скажем, набор флагов, чтобы отметить, какие 64-битные слова используют эту «одинаковую» константу, чтобы избежать сохранения этих данных.

1 голос
/ 04 декабря 2011

Конечно, это так.

  1. Распакуйте формат файла.
  2. Масштабирование необработанных данных изображения
  3. Сжатие новых масштабированных данных и сохранение

О первом шаге см. https://github.com/Volcore/quickpvr или PowerVR SDK.

На третьем шаге нет общедоступной документации или реализации сжатия PVRTC. Итак, у вас есть несколько вариантов. Используйте комбинацию class-dump и otx для декомпиляции Apple s texturetool (не рекомендуется) или (и, вероятно, проще) написать свой собственный кодировщик на основе любой спецификации формата файла, которую вы можете создать из шага 1.

Однако, учитывая вашу ситуацию, я бы просто сделал все это как предварительно обработанный шаг и включил две версии ваших текстур вместе с вашим приложением.

...