是否可以按顺序组合着色器?

时间:2012-06-21 22:09:54

标签: iphone glsl

是否可以在GLSL ES下按顺序组合多个片段着色器?我想使用两个着色器S1和S2,其中S2使用S1输出的几个片段。例如,我想按顺序应用两个卷积,在这种情况下,第二个卷积需要在一堆像素位置访问第一个卷积的输出。

1 个答案:

答案 0 :(得分:1)

是的,但这需要使用两种技术之一。 第一个最简单的称为多次渲染。 在其中,您将S1的结果渲染为纹理,然后从保存S1结果的纹理渲染S2读数。然而,这有点低效,因为它消除了GPU可能存在的一些并行性。因此,通常建议您使用称为pipeling的东西。这有点复杂。

  1. 创建2 * N个纹理,其中N是着色器的数量。这样每个着色器都可以同时具有读取和写入纹理。
  2. 一次渲染每个着色器,从其前面的着色器的读取纹理中读取,并写入写入纹理。
  3. 在每个帧的末尾,交换读取和写入纹理。
  4. 这导致同时计算多次迭代。但是,每次迭代在N次迭代后完成。