GLSL可以同时输出到两个/多个纹理吗?
我可以让着色器读取两个纹理,但对于输出来说,似乎只有 gl_FragColor。有没有办法从一个着色器渲染到两个不同的纹理?顺便说一句,我正在使用处理和 GLGraphics 库。
I can get a shader to read in two textures but for output it seems there is only gl_FragColor. Is there any way to render to two different textures from one shader? I am using Processing and the GLGraphics library btw.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
是的,您可以写入 gl_FragData,它是一个输出数组(大小取决于您的实现)。或者,对于较新版本的 GL,gl_FragColor 和 gl_FragData 均已弃用,您可以声明自己的
out
变量供片段着色器写入。为多个输出缓冲区声明多个这样的out
变量。Yes, you can write to gl_FragData, which is an array of outputs (size depends on your implementation). Or with newer versions of GL, both gl_FragColor and gl_FragData are deprecated and you declare your own
out
variables for the fragment shader to write to. Declare multiple suchout
vars for multiple output buffers.是的。我们可以。但请注意,GLSL 4.0 不再支持 gl_FragData。指定位置为:
.....
希望您能阅读《glsl 4.0 着色语言cookbook》这本书。
Yes. We can. BUT Notice that gl_FragData is no longer supported in GLSL 4.0. Specify the location as:
.....
I hope you could read the book of glsl 4.0 shading language cookbook.
我不知道这是否正是您想要做的,但是使用 帧缓冲区对象 (FBO) 您可以同时绘制到多个颜色缓冲区。
不过,在着色器中,您仍然就像在编写一个片段一样。也就是说,着色器不知道 FBO 有多少个附件。
I don't know if this is exactly what you're trying to do, but with Frame Buffer Objects (FBOs) you can draw to multiple color buffers simultaneously.
Within the shader, though, it will still just be as if you're writing one fragment. That is, the shader is unaware of how many attachments the FBO has.