我正在使用片段着色器来渲染纹理。我希望着色器的前一次迭代的渲染被下一次使用。这怎么可能?
最佳答案
在片段着色器中重新使用纹理:
要么
- 取消绑定(bind)纹理所附加的当前帧缓冲区对象(绑定(bind)
null
帧缓冲区对象或绑定(bind)另一个帧缓冲区对象),
或
- 从帧缓冲区对象中分离纹理(并附加
null
,使用framebufferTexture2D
附加另一个纹理或改为附加渲染缓冲区)。
然后将纹理绑定(bind)为要在片段着色器中使用的普通纹理(通过着色器代码中的 sampler2D
和 texture2D
)。
要在顶点着色器中重新使用纹理,大致相同,只是这个特性(顶点纹理)是非标准的(并且有一些限制)。检查MAX_VERTEX_TEXTURE_IMAGE_UNITS寻求支持。
如果您有一个需要多次渲染过程的迭代算法,一种典型的方法是在两个纹理 1 和 2 之间切换:在奇数渲染过程中,1 附加到当前帧缓冲区对象,2 作为普通纹理绑定(bind),并且在均匀的渲染过程中,情况恰恰相反。另见 this answer关于是应该在单个帧缓冲区对象中更改纹理附件,还是应该交换整个帧缓冲区对象。
关于javascript - 有没有办法在片段着色器中使用先前渲染的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21362865/