Не можете использовать плавающие выражения в константном выражении #if WebSL GLSL? - PullRequest
0 голосов
/ 06 января 2019

В WebGL GLSL я пытаюсь сделать что-то вроде:

#if (2.0 > 3.0)
    // something
#endif

Но это ошибки с:

ОШИБКА: 0:21: «синтаксическая ошибка»: неверное выражение ОШИБКА: 0:21: '2.0': неожиданный токен после условного выражения

В спецификации 1.0 написано :

A константное выражение является одним из

• буквенное значение (например, 5 или true )

Разве не плавающие литеральные значения?

Точно так же я не уверен, почему это не работает, поскольку это переменная const, использующая константное выражение для значения:

const vec3 x = vec3(1.0);
...
#if (x.x > 1.0)
#endif

ОШИБКА: 0:21: 'x': неожиданный токен после условного выражения

ОШИБКА: 0:21: «синтаксическая ошибка»: недопустимое выражение

ОШИБКА: 0:21: '.' : неожиданный токен после условного выражения

1 Ответ

0 голосов
/ 06 января 2019

Ах, из того же документа в разделе препроцессора написано:

Выражения, следующие за #if и #elif, ограничены выражениями, работающими с литеральными целочисленными константами, плюс идентификаторы, используемые определенным оператором.

Вот почему поплавки, length() и т. Д. Не работают.

...