OpenGL ES 2.0:属性与布局?

OpenGL ES 2.0: Attribute vs Layout?

我在顶点着色器中使用 'attribute' 来定义几个变量,如下所示:

attribute mediump vec4 Position;
attribute lowp vec4 SourceColor;

环顾四周,我发现了一个名为 'layout' 的东西,它似乎在执行相同的任务。

例如我认为上面可以重写为:

layout(location = 0) in vec4 Position;
layout(location = 1) in vec4 SourceColor;

我以前从未使用过布局,所以我不确定它是否同样有效,但它看起来和我很相似,而且 wiki 页面并没有特别帮助我区分它们。

有人可以解释一下属性和布局之间的区别吗?

您看到的是不同版本的 GLSL。

在 OpenGLES2 中,您唯一可用的 GLSL 版本是 GLSL ES 100。这看起来像是您 post编辑的第一个代码块。

在 OpenGLES3 中你仍然可以使用 GLSLES 100,但也可以使用 GLSL ES 300,看起来像后者 post。

除了 GLSL ES 版本之外,还有许多桌面 GLSL 版本。这 doc 可能会帮助您了解一些方位。

TLDR - 您的第一个代码片段是旧方法,第二个代码片段是新方法。使用 OpenGLES 2,您唯一的选择就是旧方法。