在iOS中创建RGB CVOpenGLESTexture



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

我可以通过在CVPixelBufferCreate()中指定kCVPixelFormatType_OneComponent8来成功创建单通道纹理,并在CVOpenGLESTextureCacheCreateTextureFromImage()中为formatinternalFormat指定GL_LUMINANCE

同样,我可以通过在CVPixelBufferCreate()中指定kCVPixelFormatType_32BGRACVOpenGLESTextureCacheCreateTextureFromImage()formatinternalFormat GL_RGBA来成功创建 4 通道 RGBA 纹理。

我需要创建具有可访问像素的 3 通道、24 位、RGB(或 BGR)纹理。
我似乎找不到正确的参数(或其组合)来CVPixelBufferCreate()CVOpenGLESTextureCacheCreateTextureFromImage()不会导致它们中的任何一个失败。

附加信息
我的设备上CVPixelFormatDescriptionArrayCreateWithAllPixelFormatTypes()报告的支持的 FOURCC 格式类型:
32 24 16L5655551L5552vuy2vufyuvsyuvf40 L008L010 2C08r408v408y408y416 BGRA b64ab48rb32ab16gR10kv308v216v210v410r4flgrb4rgg4bgg4gbr4420v420f411v411f422v422f444v444fy420f420a2vyL00hL00f2C0h2C0fRGhARGfAw30rw40aw40mx420x422x444x44pxf20xf22xf44xf4px22pxf2pb3a8

有趣的是,其中一些值未在 CVPixelBuffer.h 中定义。

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

回答我自己,尽管我很高兴被证明是错误的并展示了如何做到这一点。

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

与此问题相关的标志是:

  • kCVPixelFormatOpenGLESCompatibility
  • kCVPixelFormatContainsAlpha:应为假;
  • kCVPixelFormatContainsRGB : 注意:仅从__IPHONE_8_0支持,但不是绝对必要的;
  • 使用调试器,我发现了另一个有用的密钥:CFSTR("IOSurfaceOpenGLESTextureCompatibility")它将验证OpenGL ES纹理是否支持直接像素访问,而无需(较慢的)glReadPixels()glTexImage2D()

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

相关内容

  • 没有找到相关文章

最新更新