Как определить постоянный массив в 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

Ответ 1

Из OpenGL ES SL 1.0 spec, пункт 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

Ответ 2

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).