0

如何将绘制到帧缓冲区的数据传递给新的 openGL 程序或纹理?

我现在正在做的用例:

  • 从 UIImage 创建纹理
  • uniform sampler2D通过将其绑定为 aGL_TEXTURE_2D并处理它来传递它
  • 切换程序并在图像顶部渲染例如小插图
  • 切换程序并在其上渲染各种图形

这一切都很好。问题是,从这里开始,我想使用额外的 OpenGL 着色器来处理上述所有内容。例如亮度/对比度过滤器。不仅适用于图像,还适用于所有添加的图形和小插图。添加后,我想将其传递给其他可选程序等。

但是这是怎么做到的呢?我知道我可以将其作为纹理缓存读回或使用 glReadPixels() 并创建一个新纹理以传递,但肯定有更好、更有效的方法吗?一个完全使用 GPU 内存的?

4

2 回答 2

1

您要做的是将某些内容直接渲染到纹理中,而不是显示帧缓冲区。反过来,这正是帧缓冲区对象 (FBO)的用途。一个 FBO 代表一个完整的帧缓冲区及其所有子缓冲区(如多个颜色缓冲区、深度缓冲区、模板缓冲区或这些缓冲区的子集),但具有附加自定义数据容器(如渲染缓冲区或纹理)作为单独的功能缓冲区,从而直接渲染到您控制的某些 GPU 内存区域。有关这些的教程,请参见此处此处以获取更多“官方”和完整信息(尽管后者也可能讨论 ES 中不存在的现代桌面 GL 版本的功能),或此处此处获取更多与 ES 相关的信息(不过,这与桌面 GL 应该没有太大区别)

于 2013-05-15T10:40:30.303 回答
0

您需要使用帧缓冲区对象,它允许您渲染到默认帧缓冲区以外的渲染目标,例如 2D 纹理。

这里有一些网站,您可以在其中阅读更多关于它们的信息:

于 2013-05-15T10:40:39.947 回答