编译顶点着色器程序失败
Compiling vertex shader program fails
我在开始使用 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
这里有什么问题 - 我必须如何在此版本的语言中声明输入变量?
在对应于 OpeneGL 3.2 版的 GLSL 1.50 版中添加了输入布局限定符
参见 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
after the program is linked, or you have to specify the attribute location by glBindAttribLocation
请求属性索引。
我在开始使用 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
这里有什么问题 - 我必须如何在此版本的语言中声明输入变量?
在对应于 OpeneGL 3.2 版的 GLSL 1.50 版中添加了输入布局限定符
参见 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
after the program is linked, or you have to specify the attribute location by glBindAttribLocation
请求属性索引。