【发布时间】:2016-07-12 20:36:17
【问题描述】:
我从 [_videoOutput copyPixelBufferForItemTime:[_playerItem currentTime] itemTimeForDisplay:nil] 收到 CVPixelBuffer;我将此像素缓冲区传输到 CVOpenGLESTextureCacheCreateTextureFromImage 函数以创建亮度纹理或铬纹理
// Y-plane
glActiveTexture(GL_TEXTURE0);
err = CVOpenGLESTextureCacheCreateTextureFromImage(kCFAllocatorDefault,_videoTextureCache, pixelBuffer, NULL, GL_TEXTURE_2D, GL_RED_EXT,width, height, GL_RED_EXT, GL_UNSIGNED_BYTE, 0, &outTexture);
if (err) {
NSLog(@"Error at CVOpenGLESTextureCacheCreateTextureFromImage %d", err);
}
当我使用 OpenGLES 2.0 时,它可以工作,但更改为 OpenGLES 3.0,它会失败并打印一些错误,如下所示:
CVOpenGLESTextureCacheCreateTextureFromImage 出错 -6683 创建 IOSurface 图像(纹理)失败
OpenGLES 3.0/2.0 代码:
_context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES3];
if (!_context) {
_context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
if (!_context) {
NSLog(@"Failed to create ES context");
}
_openGLESVer = OpenGLESVersion2;
}
【问题讨论】: