在iOS中创建RGB CVOpenGLESTexture

时间:2014-11-25 14:46:59

标签: ios textures opengl-es-2.0 core-video

我正在尝试在iOS中创建 3-channel CVOpenGLESTexture

我可以通过在kCVPixelFormatType_OneComponent8中指定CVPixelBufferCreate()并为GL_LUMINANCE和{{1}指定format来成功创建单通道纹理} internalFormat

同样,我可以通过在CVOpenGLESTextureCacheCreateTextureFromImage()kCVPixelFormatType_32BGRA中为CVPixelBufferCreate()和{GL_RGBA指定format来成功创建 4通道 RGBA纹理{1}}中的{1}}。

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

其他信息
我的设备上CVPixelBufferCreate()支持的FOURCC格式类型reported
CVOpenGLESTextureCacheCreateTextureFromImage() CVPixelFormatDescriptionArrayCreateWithAllPixelFormatTypes() 322416L5655551,{ {1}},L5552vuy2vuf yuvs yuvf40,{{ 1}},L008L0102C08 r408 v408y408,{{1 }},y416BGRAb64ab48rb32ab16gR10kv308v216v210v410r4flgrb4rgg4bgg4gbr4,{ {1}},420v420f411v411f422v422f444v,{{1 }},444fy420f420a2vyL00hL00f2C0h2C0fRGhARGfAw30rw40aw40mx420x422x444,{ {1}}。

有趣的是,其中一些值未在x44p中定义。

当我将xf20xf22)传递给xf44时,它会成功,但xf4p会因error code -6683 x22p而失败。

1 个答案:

答案 0 :(得分:2)

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

当我展示here(再次回答自己)时,可以列出设备上支持的所有四种CC缓冲格式,以及与每种这样的四种CC格式相关联的一堆格式属性。

与此问题相关的标志是:

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

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