【问题标题】:Can GLSL output to two/multiple textures at the same time?GLSL 可以同时输出到两个/多个纹理吗?
【发布时间】:2013-08-21 15:30:59
【问题描述】:

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

【问题讨论】:

    标签: textures processing glsl shader


    【解决方案1】:

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

    【讨论】:

    • 谢谢。我想看一个代码示例,说明如何在 GLSL 中完成此操作,如果这是正确的术语,可能还有一些主机应用程序的伪代码。
    • 其实我自己想出来的。我只需要在顶部说“改变 vec4 Color1、Color2”等,这似乎会自动链接到我已经传入的纹理数组。然后将这些变量设置为 void main() 中的某个位置。
    • OpenglES 2.0 支持这个吗?
    【解决方案2】:

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

    glBindFragDataLocation(programHandle, 0, "FragColor");
    

    .....

    希望你能读读glsl 4.0 shading language cookbook这本书。

    【讨论】:

    • 我认为明确的位置优于glBindFragDataLocation
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-06
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      • 2011-08-30
      • 1970-01-01
      相关资源
      最近更新 更多