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

Другие вопросы по тегам