Mac中OpenGL如何使用CVPixelBuffer

549 阅读1分钟

重点

在 macOS 上,使用 Core Video 和 OpenGL 进行纹理共享时,常用的做法是将 Core Video 的像素缓冲区(CVPixelBuffer)创建为 GL_TEXTURE_RECTANGLE 类型的纹理。

Apple提供的Demo

Demo下载地址

官方文档地址

CVPixelBuffer在Mac中使用方式:For macOS, Create an OpenGL Texture from the Pixel Buffer

验证

CVOpenGLTextureRef textureRef = nullptr;
CVReturn cvResult =  CVOpenGLTextureCacheCreateTextureFromImage(kCFAllocatorDefault,
                                                        g_context->m_coreVideoTextureCache,
                                                        pixelBuffer,
                                                        nullptr,
                                                        &textureRef);
if (!textureRef || cvResult != kCVReturnSuccess) {
    LOGE("CVOpenGLTextureCacheCreateTextureFromImage %d", cvResult);
}
GLuint texture = CVOpenGLTextureGetName(textureRef);
GLenum target = CVOpenGLTextureGetTarget(textureRef);
// 判断类型
if (target == GL_TEXTURE_RECTANGLE) {

} else if (target == GL_TEXTURE_2D) {

}