GPUImage只有一个camerafilter相机不回调

核心思想要理解:glFramebufferTexture2D这个函数,意思是把纹理附件附加到帧缓冲,所有渲染命令就会写入到纹理上,filter处理后的效果可以从这个纹理拿到;

注意:glFramebufferTexture2D绑定纹理附件时,先创建一个纹理,创建纹理时要指定一个大小,这个大小还要在渲染时通过glViewport设置一次,GPUImage是在activateFramebuffer时设置了glViewport这个函数;

在iOS上创建纹理有两种方式:

1.通过GLTextureImage2D(),将纹理像素由CPU传到GPU

2.iOS core video提供一种高效缓存机制:通过CVOpenGLESTextureCacheCreateTextureFromImage()

将CVImageBufferRef与纹理共享一块缓存,这种方式要注意的是源或渲染缓冲区纹理应

在渲染完成之前,不能重复使用。这可以通过调用glFlush()来保证。现象就是在GPUImage中假设只有

一个camerafilter,那么在采集大概十几帧后,相机回调代理就不回调了,原因就可能是一直不被渲染,渲染缓冲区纹理被占用完了,渲染缓冲区纹理不能被覆盖重复使用,这时可以执行一次glFlush()。

你可能感兴趣的:(GPUImage只有一个camerafilter相机不回调)