什么是iOS OpenGL ES 2.0屏幕外帧缓冲对象?

时间:2012-09-30 21:12:12

标签: ios opengl-es opengl-es-2.0 framebuffer

在iOS中,很容易将OpenGL ES 2.0渲染到纹理,然后将这些纹理用于后期处理过程或作为后续渲染过程的纹理。这似乎是跨OpenGL实现的一种相当常见的方法。一切都好。

根据Apple的iOS版OpenGL ES编程指南(参见第28和29页),您还可以创建和绘制多个屏幕外帧缓冲对象。他们建议您执行此操作以执行屏幕外图像处理。但是,我无法找到并描述在渲染后如何访问缓冲区以进行图像处理或任何其他目的。

这些屏幕外缓冲区可以与非OpenGL框架一起用于图像处理吗?这些缓冲区可以由CPU读回吗?

有没有人有任何指示或示例?

1 个答案:

答案 0 :(得分:1)

图像处理是屏幕外帧缓冲对象(FBO)的一种可能用途,但还有其他应用。

对于图像处理,您通常会渲染到由纹理支持的FBO。一旦渲染到该纹理,就可以将其拉入图像处理管道的第二阶段,或者将其用作三维场景某些部分的纹理。作为一个例子,我的GPUImage开源框架使用纹理支持的屏幕外FBO应用于传入图像或视频帧的每个过滤阶段。然后下一个阶段拉入该纹理并将过滤后的结果呈现给它自己的纹理支持的FBO。

正如我所说,可以有其他应用程序进行屏幕外渲染。这些包括延迟照明(Apple在2011 WWDC OpenGL ES视频中有相当令人印象深刻的例子)和缓存查找值的计算供以后参考。我使用后者作为我的Molecules应用程序中的优化,以加速环境遮挡光照纹理在原子球体表面上的映射。我不是为每个原子的每个片段执行一组计算,而是为通用球体渲染一次,然后在原子片段着色器中查找结果。