我收到來自[_videoOutput copyPixelBufferForItemTime:[_ playerItem currentTime] itemTimeForDisplay:nil]的CVPixelBuffer;我這個pixelbuffer轉移到CVOpenGLESTextureCacheCreateTextureFromImage函數來創建亮度紋理或鍍鉻質感OpenGLES 3 Error at CVOpenGLESTextureCacheCreateTextureFromImage -6683
// 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;
}
什麼是核心視頻中的yuv420sp常量? –