在iOS中创buildRGB CVOpenGLESTexture

我正在尝试在iOS中创build一个3通道的 CVOpenGLESTexture

通过在CVPixelBufferCreate()kCVPixelFormatType_OneComponent8中为CVPixelBufferCreate() formatinternalFormat指定kCVPixelFormatType_OneComponent8 ,我可以成功创build单通道纹理。

同样,通过在CVPixelBufferCreate()指定kCVPixelFormatType_32BGRACVPixelBufferCreate() GL_RGBA formatinternalFormat format ,我可以成功创build4通道 RGBA纹理。

我需要创build具有可访问像素的3通道 24位RGB(或BGR)纹理。
我似乎无法find正确的参数(或其组合)到CVPixelBufferCreate()CVOpenGLESTextureCacheCreateTextureFromImage()不会导致他们之一失败。

附加信息
在我的设备上由CVPixelFormatDescriptionArrayCreateWithAllPixelFormatTypes() 报告支持的FOURCC格式types:
2C08r408v408y408y416BGRAb64ab48rb32ab16gR10kv308v216v210v410r4flgrb4rgg4bgg4gbr4420v420f411v422v422f444v444fy420f420a2vyL00hL00f2C0h2C0fRGhARGfAw30rw40aw40mx420x422x444x44pxf20xf22xf44xf4px22pxf2pb3a8

有趣的是,一些这些值没有在CVPixelBuffer.h定义。

当我将kCVPixelFormatType_24RGB24 == 0x18 )传递给CVPixelBufferCreate()成功时,但是CVOpenGLESTextureCacheCreateTextureFromImage()失败, 错误代码为-6683 : kCVReturnPixelBufferNotOpenGLCompatible

回答自己,虽然我会很高兴被certificate是错误的,并表明如何做到这一点。

正如我在这里展示的(再次回答我自己),可以列出设备上支持的所有四个CC缓冲区格式,以及与每个这种四CC格式关联的一组格式属性。

这个问题的标志是:

  • kCVPixelFormatOpenGLESCompatibility
  • kCVPixelFormatContainsAlpha :应该是false;
  • kCVPixelFormatContainsRGB :注意:仅支持__IPHONE_8_0 ,但不是绝对必要的;
  • 使用debugging器,我发现另一个有用的关键: CFSTR("IOSurfaceOpenGLESTextureCompatibility")将validationOpenGL ES纹理支持直接像素访问,而不需要(较慢)的glReadPixels()glTexImage2D()

不幸的是,使用这些标志,似乎目前没有这样的RGB / BGR支持的格式。