GLSL #version дает синтаксическую ошибку (LWJGL на Mac) - PullRequest
8 голосов
/ 17 декабря 2011

Указание версии GLSL приводит к синтаксической ошибке при использовании LWJGL.Я не пытался воспроизвести эту проблему за пределами LWJGL.Это происходит на нескольких компьютерах Mac под управлением Lion.

Я заставил работать как вершинные, так и фрагментные шейдеры без использования #version.Но я собираюсь использовать функцию texture, которая, похоже, требует директивы #version.

Вот самый простой пример с ошибками:

#version 120

void main() {
  gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
}

Компиляция этого фрагментного шейдера и вызовglGetShaderInfoLog выдает эту ошибку:

ERROR: 0:1: '' : syntax error #version

Замена 120 на что-либо еще, например 110, также выдает ошибку.Любопытно, что если я использую 130 или выше, это выдает ту же ошибку, а также жалобу на версию, не поддерживаемую beig.(Я знаю, что в моей системе нет GLSL 1.3, но все же странно, что эта ошибка отображается, когда компилятор действует так, как будто он не понимает тег версии.)

Я на Mac сATI Radeon HD 4670. GL_VERSION - это 2.1 ATI-7.12.9, а GL_SHADING_LANGUAGE_VERSION - это 1.20.

. Учитывая это, я не вижу никаких причин, по которым GLSL 1.20 должен быть недоступен.И мне действительно странно, что говорят, что #version - синтаксическая ошибка, а не что-то о неподдерживаемой версии GLSL.

Ответы [ 2 ]

17 голосов
/ 17 декабря 2011

Решено! Это не имеет ничего общего с OpenGL. Мой код для чтения файлов сбрасывал все разрывы строк. Это было хорошо в теле шейдера, у которого были точки с запятой. Но директива препроцессора не имеет точки с запятой, чтобы защитить ее от этой ошибки.

Так что для тех, у кого есть эта проблема, убедитесь, что код, который вы фактически передаете glShaderSource, все еще имеет разрывы строк.

1 голос
/ 17 декабря 2011

И вершина, и фрагментный шейдер должны иметь одинаковую версию.Поэтому, если вы добавите #version 120 к фрагментному шейдеру, вам также следует добавить его и в вершинный шейдер.Но немного странно, что это сообщается как синтаксическая ошибка.Может быть, есть другая ошибка, но оба они обязательно должны иметь одинаковый тег версии.

РЕДАКТИРОВАТЬ: Также имейте в виду, что тег версии должен быть первой строкой исходного кода шейдерапереводы строк и комментарии должны быть в порядке по спецификации, но кто знает, что думают водители).

...