OpenGL ES2:在顶点着色器(iOS)中使用“ layout”关键字时语法错误

时间:2019-12-25 03:00:23

标签: ios objective-c opengl-es glsl shader

我是iPhone OpenGL ES开发的新手。当我尝试使用'layout'关键字指定顶点属性的位置时,编译器会抱怨语法错误。我使用错了吗?还是编译器不支持关键字?我知道还有其他方法可以指定位置,但是我想知道为什么这个方法对我不起作用。
顺便说一句,我正在使用OpenGLES2.0 API。

顶点着色器是:

layout(location = 0) in vec3 position;

void main() {
    gl_Position = vec4(position, 1.0);
}

顶点着色器编译日志:

  
2019-12-25 10:47:48.518110+0800 OpenGLESTest[14556:1063881] compile vertex shader error!
2019-12-25 10:47:48.518284+0800 OpenGLESTest[14556:1063881] compile stage info log 
ERROR: 0:1: 'layout' : syntax error: syntax error

1 个答案:

答案 0 :(得分:0)

在OpenGL ES 2.0和OpenGL ES Shading Language 1.00中,既不支持Layout Qualifiers也不支持关键字in
如果要使用布局限定符,则必须切换到OpenGL ES 3.00和OpenGL ES Shading Language 3.00。参见Khronos OpenGL ES Registry

正确的GLSL ES 1.00顶点着色器(对应于OpenGL ES 2.00):

#version 100

attribute vec3 position;

void main() {
    gl_Position = vec4(position, 1.0);
}