我正在尝试在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)纹理。
我似乎无法找到internalFormat
和CVOpenGLESTextureCacheCreateTextureFromImage()
的正确参数(或其组合),这些参数不会导致其中任何一个失败。
其他信息
我的设备上CVPixelBufferCreate()
支持的FOURCC格式类型reported:
CVOpenGLESTextureCacheCreateTextureFromImage()
, CVPixelFormatDescriptionArrayCreateWithAllPixelFormatTypes()
,32
,24
,16
,L565
,5551
,{ {1}},L555
,2vuy
,2vuf
, yuvs
,yuvf
,40
,{{ 1}},L008
,L010
,2C08
, r408
,v408
,y408
,{{1 }},y416
,BGRA
,b64a
,b48r
,b32a
,b16g
,R10k
,v308
,v216
,v210
,v410
,r4fl
,grb4
,rgg4
,bgg4
,gbr4
,{ {1}},420v
,420f
,411v
,411f
,422v
,422f
,444v
,{{1 }},444f
,y420
,f420
,a2vy
,L00h
,L00f
,2C0h
,2C0f
,RGhA
,RGfA
,w30r
,w40a
,w40m
,x420
,x422
,x444
,{ {1}}。
有趣的是,其中一些值未在x44p
中定义。
当我将xf20
(xf22
)传递给xf44
时,它会成功,但xf4p
会因error code -6683 x22p
而失败。
答案 0 :(得分:2)
回答自己,虽然我会很高兴被证明是错误的并且证明了如何做到这一点。
当我展示here(再次回答自己)时,可以列出设备上支持的所有四种CC缓冲格式,以及与每种这样的四种CC格式相关联的一堆格式属性。
与此问题相关的标志是:
kCVPixelFormatOpenGLESCompatibility
kCVPixelFormatContainsAlpha
:应该是假的; kCVPixelFormatContainsRGB
:注意:仅受__IPHONE_8_0
支持,但并非严格必要; CFSTR("IOSurfaceOpenGLESTextureCompatibility")
,它将验证OpenGL ES纹理是否支持直接像素访问,而不需要(较慢的)glReadPixels()
和glTexImage2D()
。 不幸的是,使用这些标志,似乎目前没有这种RGB / BGR支持的格式。