Как определить константный массив в GLSL (OpenGL ES 2.0)?
Я просто хочу сохранить массив весов, который необходим для каждого расчета фрагмента.
Это:
float weights[5] = float[5](3.4, 4.2, 5.0, 5.2, 1.1);
Просто бросает это:
ERROR: 0:30: ']' : syntax error syntax error
ERROR: 0:30: ';' : syntax error syntax error
2 ответа
Решение
Из спецификации OpenGL ES SL 1.0, параграф 4.1.9 Arrays
(стр. 24):
Не существует механизма для инициализации массивов во время объявления из шейдера.
Обратите внимание, что это было намеренно исключено. Согласно этому сообщению, версия OpenGL ES SL для OpenGL ES 2 основана на OpenGL SL 1.2. Этот же параграф (стр. 20) содержит:
Массивы могут иметь инициализаторы, сформированные из конструкторов массива:
float a[5] = float[5](3.4, 4.2, 5.0, 5.2, 1.1); float a[5] = float[](3.4, 4.2, 5.0, 5.2, 1.1); // same thing
precision highp float;
const float a[5] = float[5](3.4, 4.2, 5.0, 5.2, 1.1);
Работает с версией Android KitKat (OpenGL ES 2.0).