我正在使用OpenGL的第一步,偶然发现了我的顶点着色器程序中的一个问题:
#version 330 core
layout (location = 0) in vec3 aPos;
uniform mat4 inputTransform;
void main()
{
gl_Position = inputTransform * vec4(aPos, 1.0);
}
编译并运行良好,但是当我将第一行更改为
时#version 130 core
因为我必须最大程度地使用OpenGL 3.0,所以它首先抱怨“ location”语句。当我删除它时,该行的其余错误消息
layout in vec3 aPos;
是
ERROR: 0:2: 'in' : syntax error syntax error
这是怎么回事-我必须如何在此版本的语言中声明输入变量?
答案 0 :(得分:3)
输入布局限定符已添加到GLSL 1.50版中,与OpeneGL 3.2版相对应
请参见OpenGL Shading Language 1.50 Specification; - 4.3.8.1 Input Layout Qualifiers; page 37。
输入布局限定符由关键字layout
组成,后跟 layout-qualifier-id-list 。
仅仅删除 layout-qualifier-id-list 是不够的,您还必须删除关键字layout
:
in vec3 aPos;
语法错误是由于以下事实引起的:它不是正确的语法,layout
之后紧跟in
。
或者在链接程序之后必须通过glGetAttribLocation
来请求属性索引,或者必须在链接着色器程序之前通过glBindAttribLocation
来指定属性位置。