我需要创建一个GL_TEXTURE_RECTANGLE_EXT类型的OpenGL纹理,以便我可以使用
outputImageProviderFromTextureWithPixelFormat:pixelsWide:pixelsHigh:name:flipped:releaseCallback:releaseContext:colorSpace:shouldColorMatch
,但我无法弄清楚如何将我的CVImageBufferRef转换为OpenGL纹理。我敢肯定我只是不寻找合适的东西。如何将CVImageBufferRef转换为OpenGL纹理?
当我尝试:
CVImageBufferRef imageBuffer = CVBufferRetain(mCurrentImageBuffer);
GLuint texture = CVOpenGLTextureGetName(imageBuffer);
id provider= [context outputImageProviderFromTextureWithPixelFormat:QCPlugInPixelFormatARGB8
pixelsWide:CVPixelBufferGetWidth(imageBuffer)
pixelsHigh:CVPixelBufferGetHeight(imageBuffer)
name:texture
flipped:NO
releaseCallback:_TextureReleaseCallback
releaseContext:NULL
colorSpace:CVImageBufferGetColorSpace(imageBuffer)
shouldColorMatch:YES];
它告诉我'name'不能为null。我认为这是因为我的imageBuffer是一个像素缓冲区,而不是OpenGL纹理。如何从像素缓冲区创建OpenGL纹理?
答案 0 :(得分:0)
CoreVideo框架中可能存在一些特殊的快速路径,但您始终可以获取原始支持数据并将其提供给glTexImage2D
。这是answered question,其中包括获取原始数据。
编辑:
进一步挖掘,似乎您可以使用CVImageBufferRef
和CVOpenGLTextureGetTarget
简单地使用已与CVOpenGLTextureGetName
关联的OpenGL纹理。这些操作适用于CVOpenGLTextureRef
类型,类型为CVImageBufferRef
。