ios opengl渲染到纹理get"纹理内部格式不是纹理可过滤的"错误

时间:2016-11-03 10:02:43

标签: ios video opengl-es avassetwriter render-to-texture

我尝试在ios上使用opengl es 2.0渲染相机捕获的帧,然后使用AVAssetWriter将帧写入视频文件。

所以我从CVPixelBufferRef创建了AVAssetWriterInputPixelBufferAdaptor并使用关注代码从CVOpenGLESTextureRef创建了CVPixelBufferRef

CVReturn err = CVOpenGLESTextureCacheCreateTextureFromImage(kCFAllocatorDefault,
                                                                   mRenderTextureCache,
                                                                   mOutputPixelBuffer,
                                                                   NULL,
                                                                   GL_TEXTURE_2D,
                                                                   GL_RGBA,
                                                                   mOutputDimensions.width,
                                                                   mOutputDimensions.height,
                                                                   GL_BGRA,
                                                                   GL_UNSIGNED_BYTE,
                                                                   0,
                                                                   &mOutputTexture);
if (err != kCVReturnSuccess || !mOutputTexture)
{
    NSLog(@"Error at CVOpenGLESTextureCacheCreateTextureFromImage with output texture %d", err);
}

glBindTexture(CVOpenGLESTextureGetTarget(mOutputTexture), CVOpenGLESTextureGetName(mOutputTexture));
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

然后我将这个纹理绑定到帧缓冲区的颜色附件。

但是当我渲染并捕获GPU帧时,我总是得到一个opengl错误,说我的帧缓冲区'颜色附件的内部格式不是纹理可过滤的。 enter image description here

那么代码有什么问题?我是否设置了纹理的内部格式错误?

奇怪的是结果视频是正确的。

而且,我注意到它对渲染缓冲区的渲染有点缓慢渲染,是否由此opengl错误引起?

0 个答案:

没有答案