重点
在 macOS 上,使用 Core Video 和 OpenGL 进行纹理共享时,常用的做法是将 Core Video 的像素缓冲区(CVPixelBuffer)创建为 GL_TEXTURE_RECTANGLE 类型的纹理。
Apple提供的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) {
}