核心思想要理解:glFramebufferTexture2D这个函数,意思是把纹理附件附加到帧缓冲,所有渲染命令就会写入到纹理上,filter处理后的效果可以从这个纹理拿到;
注意:glFramebufferTexture2D绑定纹理附件时,先创建一个纹理,创建纹理时要指定一个大小,这个大小还要在渲染时通过glViewport设置一次,GPUImage是在activateFramebuffer时设置了glViewport这个函数;
在iOS上创建纹理有两种方式:
1.通过GLTextureImage2D(),将纹理像素由CPU传到GPU
2.iOS core video提供一种高效缓存机制:通过CVOpenGLESTextureCacheCreateTextureFromImage()
将CVImageBufferRef与纹理共享一块缓存,这种方式要注意的是源或渲染缓冲区纹理应
在渲染完成之前,不能重复使用。这可以通过调用glFlush()来保证。现象就是在GPUImage中假设只有
一个camerafilter,那么在采集大概十几帧后,相机回调代理就不回调了,原因就可能是一直不被渲染,渲染缓冲区纹理被占用完了,渲染缓冲区纹理不能被覆盖重复使用,这时可以执行一次glFlush()。
网友评论