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:
- Откройте PNG в PVRTexToolGUI
- Предварительно умножить альфу (хотя я тоже пробовал без этого шага)
- Кодировать текущую текстуру в новый формат (пробовал несколько форматов, как описано выше)
- Сохраните текстуру в виде файла.pvr.
1 ответ
Существует две версии файла PVR: новая и старая. Попробуйте сохранить свои PVR текстуры в другом формате (сохранить как устаревший).