核心思想要理解:glFramebufferTexture2D這個(gè)函數(shù),意思是把紋理附件附加到幀緩沖,所有渲染命令就會(huì)寫入到紋理上,filter處理后的效果可以從這個(gè)紋理拿到;
注意:glFramebufferTexture2D綁定紋理附件時(shí),先創(chuàng)建一個(gè)紋理,創(chuàng)建紋理時(shí)要指定一個(gè)大小,這個(gè)大小還要在渲染時(shí)通過glViewport設(shè)置一次,GPUImage是在activateFramebuffer時(shí)設(shè)置了glViewport這個(gè)函數(shù);
在iOS上創(chuàng)建紋理有兩種方式:
1.通過GLTextureImage2D(),將紋理像素由CPU傳到GPU
2.iOS core video提供一種高效緩存機(jī)制:通過CVOpenGLESTextureCacheCreateTextureFromImage()
將CVImageBufferRef與紋理共享一塊緩存,這種方式要注意的是源或渲染緩沖區(qū)紋理應(yīng)
在渲染完成之前,不能重復(fù)使用。這可以通過調(diào)用glFlush()來保證?,F(xiàn)象就是在GPUImage中假設(shè)只有
一個(gè)camerafilter,那么在采集大概十幾幀后,相機(jī)回調(diào)代理就不回調(diào)了,原因就可能是一直不被渲染,渲染緩沖區(qū)紋理被占用完了,渲染緩沖區(qū)紋理不能被覆蓋重復(fù)使用,這時(shí)可以執(zhí)行一次glFlush()。