2016-01-06 17 views
3

我知道如何使用输入/输出变量和变量。我完全知道使用输入/输出变量更好,因为它没有折旧。为什么GLSL变化为输入/输出?

这是一件很小的事情,但我不明白他们为什么改变了这一点。以前我可以将代码放在一个着色器中,将其复制并粘贴到另一个着色器中,并且没问题。现在我必须将其粘贴到另一个中,并将所有内容更改为“out”(而不是“in”)。

我并不介意这样做,我只是很好奇进出变量是否有优势,如果没有,Khronos团队为什么改变它。

回答

4

由于不再有two shader stages而被更改。 OpenGL 3.2引入了几何着色器,这是Vertex和Fragment着色器之间的可选阶段。它从VS的输入中提取输出给FS。

所以......当你只有一个关键字时你会怎么做?您无法将VS和FS中的接口变量复制并粘贴到同一个GS中。您需要某种方式来指定命名变量是从VS输入还是从FS输出。不,你不能只是说一个变量是

另外,请注意GS中的nature of the input variables。他们排列。因此,您不能将VS varying定义复制到GS中;无论如何,你必须改变它们。

还应该注意的是,除了几何着色器之外,他们还添加了input/output interface blocks,它将一个标题下的多个接口变量组合在一起。有了这些,您不必更改几个in/out对;你只需改变一个。

+0

谢谢,这是一个非常好的答案。我从来没有使用任何东西,只有顶点和片段着色器。所以谢谢你,我可能会去检查一下。 :d – nedb