【问题标题】:OpenGL Compute stage with other stagesOpenGL Compute 阶段与其他阶段
【发布时间】:2020-07-12 07:08:58
【问题描述】:

我想要一个单一的着色器程序,它有一个计算阶段和标准图形阶段(顶点、tess 控制、tess eval、片段)。

不幸的是,如果我将 Compute 阶段附加到程序的其余部分然后链接它,对位置查询的调用,例如 glGetAttribLocation(对于任何阶段的制服/属性)开始返回 -1,表明他们未能找到命名的对象。我还尝试使用 layout(location=N),结果没有绘制任何内容。

如果我将阶段附加到两个不同的着色器程序并一个接一个地使用它们,两者都运行良好(计算着色器写入 VBO,绘图着色器从同一个 VBO 读取),除了我必须切换他们之间。

将计算阶段与标准图形阶段相结合是否有限制?我能找到的所有示例都有两个程序,但我没有找到解释为什么会这样。

【问题讨论】:

    标签: opengl glsl shader


    【解决方案1】:

    OpenGL 主动禁止将包含计算着色器的程序与任何非计算着色器类型链接。当你尝试它时,你应该得到一个链接器错误。

    另外,真的没有理由这样做。您可能从中获得的唯一假设好处是让两组着色器共享统一的值。将它们放在同一个程序中并没有什么好处。

    【讨论】:

    • 由于某种原因,我没有看到链接器错误,但其余部分是有道理的。你有消息来源吗?
    • @LeonFrickenschmidt:OpenGL 规范是我的来源。这是一个 PDF,所以我无法真正将您链接到某个部分或任何内容,但它位于 GL 4.6 对开页 97
    猜你喜欢
    • 2012-10-17
    • 2017-06-17
    • 1970-01-01
    • 1970-01-01
    • 2022-08-09
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多