OpenGL计算阶段与其他阶段

Leo*_*idt 4 opengl shader glsl

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

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

如果我将这些阶段附加到两个不同的着色器程序并一个接一个地使用它们,则两者都可以正常工作(计算着色器写入 VBO,绘制着色器从同一 VBO 读取),只是我必须在它们之间进行切换。

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

Nic*_*las 6

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

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

  • @LeonFrickenschmidt:OpenGL 规范是我的来源。这是一个 PDF,所以我无法真正将您链接到某个部分或任何内容,但它位于 GL 4.6,对开页第 97 页 (2认同)