GLSL可以同时输出到两个/多个纹理吗?

时间:2010-11-13 04:22:00

标签: textures processing glsl shader

我可以使用着色器读取两个纹理,但是对于输出,似乎只有gl_FragColor。有没有办法从一个着色器渲染到两个不同的纹理?我正在使用Processing和GLGraphics库btw。

3 个答案:

答案 0 :(得分:4)

是的,您可以写入gl_FragData,这是一个输出数组(大小取决于您的实现)。或者对于较新版本的GL,不推荐使用gl_FragColor和gl_FragData,并为片段着色器声明自己的out变量以进行写入。为多个输出缓冲区声明多个这样的out变量。

答案 1 :(得分:0)

我不知道这是否正是您要做的事情,但使用Frame Buffer Objects (FBOs)您可以同时绘制到多个颜色缓冲区。

在着色器中,它仍然就像你在写一个片段一样。也就是说,着色器不知道FBO有多少附件。

答案 2 :(得分:0)

是。我们可以。但请注意,GLSL 4.0不再支持gl_FragData。将位置指定为:

glBindFragDataLocation(programHandle, 0, "FragColor");

.....

我希望你能阅读glsl 4.0着色语言食谱的书。