如何将CVImageBufferRef转换为OpenGL纹理

时间:2011-11-19 14:58:45

标签: objective-c image opengl textures

我需要创建一个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纹理?

1 个答案:

答案 0 :(得分:0)

CoreVideo框架中可能存在一些特殊的快速路径,但您始终可以获取原始支持数据并将其提供给glTexImage2D。这是answered question,其中包括获取原始数据。

编辑:

进一步挖掘,似乎您可以使用CVImageBufferRefCVOpenGLTextureGetTarget简单地使用已与CVOpenGLTextureGetName关联的OpenGL纹理。这些操作适用于CVOpenGLTextureRef类型,类型为CVImageBufferRef