【发布时间】:2012-02-04 23:41:50
【问题描述】:
我想在AVAssetWriter 的帮助下将使用 OpenGL 渲染的图像记录到电影文件中。问题出现了,从 OpenGL 帧缓冲区访问像素的唯一方法是使用 glReadPixels,它仅支持 iOS 上的 RGBA 像素格式。但是AVAssetWriter 不支持这种格式。在这里,我可以使用 ARGB 或 BGRA。由于可以忽略 alpha 值,我得出的结论是,将 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 崩溃。如果我不将缓冲区移动一个字节,它就可以完美地工作(但显然视频文件中的颜色错误)。这里有什么问题?
【问题讨论】:
-
你不能改为分配 size+4,将 buffer+4 发送到 glReadPixels 调用,然后将 buffer+3 发送到 AVAssetWriter 吗?这将使 GL 调用保持一致,这可能是 iOS 的要求。
标签: ios opengl-es glreadpixels