Где находится BNF для языка шейдеров, используемого в WebGL?

Мне не удается найти точную спецификацию грамматики для языка шейдеров WebGL2. Я вижу упоминания о том, что он «основан» на версии 3 языка шейдеров Open GL, но это явно не совсем так, поскольку в версии Open GL отсутствуют ключевые слова. Где точный синтаксис языка шейдеров, указанный для текущей версии WebGL, поддерживаемой в современных браузерах?

Например, эта спецификация специально запрещает ключевое слово "атрибут", который используется в вершинных шейдерах WebGL. Где указана правильная грамматика BNF?


person Aaron Watters    schedule 31.12.2019    source источник
comment
WebGL поддерживает разные версии GLSL, поэтому вы определяете, какую версию хотите использовать, используя #version. Какую версию вы там указали?   -  person t.niese    schedule 01.01.2020
comment
где я могу найти спецификацию грамматики для любой последней поддерживаемой версии?   -  person Aaron Watters    schedule 01.01.2020
comment
GLSL 3.00 ES поддерживается, и если вы определяете его как таковой с помощью #version 300 es, вы используете in и out вместо attribute и varying. Я задал вопрос, чтобы выяснить, в какой конфигурации вы можете использовать GLSL 3 ES, и в то же время вам разрешено использовать attribute. Зная, что я могу объяснить вам, почему это так, я спрашиваю, какую версию вы указали в шейдере.   -  person t.niese    schedule 01.01.2020
comment
OpenGL ES Shading Language 3.00 Specification, соответствующий OpenGL ES 3.0 и WebGL 2.0   -  person Rabbid76    schedule 01.01.2020


Ответы (1)


Спецификация для WebGL2 указывает на спецификации для GLSL ES 3.0, который содержит грамматику из раздела 9.

Спецификация WebGL2 также указывает на спецификацию для WebGL1, которая указывает на спецификация для GLSL ES 1.0, которая также Грамматика встречается в разделе 9.

person gman    schedule 02.01.2020
comment
Благодарю. Я был сбит с толку, потому что все примеры glsl для webgl, которые я видел, включают ключевые слова attribute и varying, и они были опущены в glsl 3 в пользу in и out, хотя в спецификации утверждается, что код, написанный для более старой версии, должен работать для версии 3 без изменений. - person Aaron Watters; 02.01.2020
comment
код действительно работает without modification. вы должны поместить #version 300 es в верхней части шейдера, чтобы включить GLSL ES 3.0. Если вы не добавите эту модификацию, если вы просто оставите шейдеры 1.0 без изменений, они будут скомпилированы как GLES ES 1.0 с varying и attribute - person gman; 02.01.2020