有没有办法在片段着色器中使用先前渲染的结果?

时间:2014-01-26 11:36:07

标签: javascript glsl webgl shader fragment-shader

我正在使用片段着色器渲染到纹理。我希望下一个着色器使用着色器的前一次迭代的渲染。怎么可能?

1 个答案:

答案 0 :(得分:3)

要在片段着色器中重复使用纹理:

或者

  • 取消绑定纹理附加到的当前帧缓冲区对象(绑定null帧缓冲区对象或绑定另一个帧缓冲区对象)

  • 从framebuffer对象中分离纹理(并附加null,附加另一个纹理framebufferTexture2D或附加渲染缓冲区)。

然后将纹理绑定为要在片段着色器中使用的普通纹理(通过着色器代码中的sampler2Dtexture2D)。

要在顶点着色器中重复使用纹理,它大致相同,只是此要素(顶点纹理)是非标准的(并且有一些限制)。检查MAX_VERTEX_TEXTURE_IMAGE_UNITS以获取支持。

如果你有一个需要多次渲染过程的迭代算法,一种典型的方法是在两个纹理1和2之间切换:在奇数渲染过程中,1附加到当前帧缓冲对象,2被绑定为普通纹理,在甚至渲染过程中,情况正好相反。另请参阅this answer关于是否应在单个帧缓冲对象中更改纹理附件,或者应替换整个帧缓冲对象。