1

在 iOS 中,很容易将 OpenGL ES 2.0 渲染设置为纹理,然后将这些纹理用于后期处理通道或用作后续渲染通道的纹理。这似乎是跨 OpenGL 实现的一种相当普遍的方法。都好。

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

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

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

4

1 回答 1

1

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

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

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

于 2012-10-01T15:06:44.013 回答