GLKTextureLoader не может загрузить PVR (ошибка 12 - ошибка предварительной обработки)

Фон

В нашем приложении мы используем лист спрайтов PNG, где каждый спрайт просто используется в качестве маски. Они успешно загружены с помощью GLKTextureLoader, Когда iOS 7 достигла 5-й /6-й бета-версии, казалось, что-то изменилось GLKTextureLoader работает, как вдруг все наши PNG начали рендерить неправильно, как будто что-то не так с предварительным умножением альфа.

После того, как отчеты об ошибках были отправлены, и от Apple не было получено никакого ответа (и проблема, к сожалению, все еще присутствует в живом выпуске iOS 7), мы решили преобразовать наши PNG в формат PVR.


проблема

При попытке загрузить текстуру PVR с помощью GLKTextureLoader:

NSDictionary *options = @{ GLKTextureLoaderOriginBottomLeft : @YES, GLKTextureLoaderApplyPremultiplication : @NO };
GLKTextureInfo *textureInfo = [GLKTextureLoader textureWithContentsOfURL:url options:options error:&error];

не получается с ошибкой 12 (GLKTextureLoaderErrorDataPreprocessingFailure). Что входит в этот этап "предварительной обработки" и в чем может быть проблема?

Вот некоторые вещи, которые я проверил:

  • URL действителен
  • Расширение файла .pvr
  • Изображение имеет квадратные размеры POT (512x512)
  • Я пробовал несколько форматов PVR, включая сжатый и несжатый (PVRTC 4bpp, RGBA8888, L8, A8)
  • Я поставил glErrorChecks до и после textureWithContentsOfURL:options:error:, но ничего не регистрируется (предположительно GLKTextureLoader использует ошибку GL, или ошибка не связана с OpenGL)

Этот ответ указывает, что это может быть вызвано повреждением файла. Это заставляет меня задаться вопросом, правильно ли я генерирую PVR. Я использую PVRTexToolGUI Imagination для преобразования PNG:

  1. Откройте PNG в PVRTexToolGUI
  2. Предварительно умножить альфу (хотя я тоже пробовал без этого шага)
  3. Кодировать текущую текстуру в новый формат (пробовал несколько форматов, как описано выше)
  4. Сохраните текстуру в виде файла.pvr.

1 ответ

Решение

Существует две версии файла PVR: новая и старая. Попробуйте сохранить свои PVR текстуры в другом формате (сохранить как устаревший).

Другие вопросы по тегам