Я хочу записать изображения, отрисованные с помощью OpenGL, в кинофайл с помощью AVAssetWriter
. Возникает проблема, что единственный способ получить доступ к пикселям из кадрового буфера OpenGL - это использовать glReadPixels, который поддерживает только RGBA-пиксельный формат на iOS. Но AVAssetWriter
не поддерживает этот формат. Здесь я могу использовать ARGB или BGRA. Поскольку альфа-значения можно игнорировать, я пришел к выводу, что самым быстрым способом преобразования RGBA в ARGB будет дать glReadPixels буфер, смещенный на один байт:
UInt8 *buffer = malloc(width*height*4+1);
glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, buffer+1);
Проблема в том, что вызов glReadPixels
приводит к сбою EXC_BAD_ACCESS
. Если я не сдвигаю буфер на один байт, он работает отлично (но, очевидно, с неправильными цветами в видеофайле). В чем здесь проблема?