【问题标题】:Compiling vertex shader program fails编译顶点着色器程序失败
【发布时间】:2018-10-12 10:30:35
【问题描述】:

我正在使用 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,所以它首先抱怨“位置”声明。当我删除它时,该行的剩余错误消息

layout in vec3 aPos;

ERROR: 0:2: 'in' : syntax error syntax error

这里出了什么问题 - 我必须如何在这个版本的语言中声明输入变量?

【问题讨论】:

    标签: opengl glsl shader opengl-3


    【解决方案1】:

    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指定属性位置。

    【讨论】:

      猜你喜欢
      • 2015-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多