OpenGL ES 2.0:属性与布局?

Mys*_*ake 6 opengl-es glsl vertex-shader

我在顶点着色器中使用“属性”来定义几个变量,如下所示:

attribute mediump vec4 Position;
attribute lowp vec4 SourceColor;
Run Code Online (Sandbox Code Playgroud)

环顾四周,我发现了一个叫做“布局”的东西,它似乎在做同样的任务。

例如,我认为上述内容可以改写为:

layout(location = 0) in vec4 Position;
layout(location = 1) in vec4 SourceColor;
Run Code Online (Sandbox Code Playgroud)

我以前从未使用过布局,所以我不确定它的工作原理是否相同,但它看起来与我非常相似,而且 wiki 页面并不能特别帮助我区分它们。

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

Col*_*mbo 7

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

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

在 OpenGLES3 中,您仍然可以使用 GLSLES 100,但也可以使用 GLSL ES 300,它看起来像后一篇文章。

除了 GLSL ES 版本,还有许多桌面 GLSL 版本。该文档可能会帮助您了解一些情况。

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