Компиляция вершинного шейдера не удалась - PullRequest
0 голосов
/ 12 октября 2018

Я делаю первые шаги с 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

Что здесь не так - как мне объявить входные переменные в этой версии языка?

1 Ответ

0 голосов
/ 12 октября 2018

В GLSL версии 1.50 добавлены квалификаторы макета ввода, что соответствует OpeneGL версии 3.2

См. Спецификация языка шейдеров OpenGL 1.50;- 4.3.8.1 Спецификаторы формата ввода;страница 37 .

Спецификатор макета ввода состоит из ключевого слова layout, за которым следует layout-qualifier-id-list .
Недостаточно удалить layout-qualifier-id-list в одиночку, вы должны удалить ключевое слово layout тоже:

in vec3 aPos;

Синтаксическая ошибка вызвана тем, что она не является надлежащейсинтаксис, за которым layout непосредственно следует in.


Либо вы должны запросить индекс атрибута по glGetAttribLocation после привязки программы, либо вы должны указать местоположение атрибута по glBindAttribLocation, прежде чем шейдерная программа будет связана.

...