ES 2.0 Multi-Pass和渲染到纹理实现

amb*_*tx1 7 iphone shader opengl-es-2.0

我需要帮助在iPhone上使用OpenGL ES 2.0设置多次渲染.我无法找到一个实现渲染到纹理和多遍着色的示例.

我正在寻找一些实现的指令和示例代码:

  • 第一阶段:渲染到纹理
  • 第二阶段:输入纹理并渲染到屏幕

我引用了Apple的OpenGL ES编程指南,OpenGL着色语言(橙皮书)和O'Reilly的iPhone 3D编程手册.

Orange Book讨论了延迟着色,并为第一遍和第二遍渲染提供了两个着色器程序,但没有提供设置该应用程序的示例代码或显示如何在两个着色器之间传递数据.

问题:

  • 如何渲染纹理?
    • 使用glDrawElements
    • 如何将纹理输入到下一个传递?
  • 如何实现两个着色程序?
  • 如何替换第一次和第二次通过着色程序?
    • 是否需要为每次传球附加,分离和调用"使用"?
  • 如何实现多遍着色?

Jor*_*ers 3

好的,首先:我不是 OpenGL ES 2.0 方面的专家。我也遇到过同样的情况,我想在我的第一个 OpenGL ES 应用程序中进行多通道渲染设置。

我也用过橙皮书。请查看第12 章。帧缓冲区对象 > 示例。第一个示例演示如何使用帧缓冲区渲染纹理,然后将该纹理绘制到屏幕上。

基本上,使用该示例,我创建了一个应用程序,该应用程序使用效果着色器将一些几何图形渲染到纹理,然后将该纹理渲染到屏幕,并使用不同的着色器与其他一些内容分层。

我不确定这是否是最好的方法,但它适合我的目的。我的设置:

  • 我创建了两个帧缓冲区,一个是默认的,一个是屏幕外的。渲染缓冲区也一样
  • 我创建了一个应用程序将渲染到的纹理
  • 我绑定离屏帧缓冲区,并使用 glFramebufferTexture2D 将纹理附加到它

我的渲染:

  • 绑定屏外帧缓冲区。
  • 使用我的第一个着色器程序
  • 画出我的几何图形
  • 绑定默认帧缓冲区
  • 使用我的第二个着色器程序
  • 绘制一个全屏四边形并附加纹理。