2012-05-06 4 views

ответ

17

С OpenGL ES SL 1.0 spec, пункт 4.1.9 Arrays (стр. 24):

Там нет механизма для инициализации массивов в время объявления из шейдера.

Отметьте, что это был умышленно не использовался. Согласно this post, версия 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 
+0

Да, но кажется, что он может это сделать для массивов констант, попробуйте! –

+0

@Stefan Итак, вы можете инициализировать массив const в gl es sl 1.0? –

+0

@Viktor Sehr Я привел спецификации. Не используйте функции, поддерживаемые реализацией, но строго не охвачены. Код может не работать. См. Также комментарий Рето Коради о другом ответе здесь. –

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

+4

Какой графический процессор находится на вашем устройстве? Это похоже на ошибку компилятора шейдера, чтобы это можно было сделать, поскольку спецификация ES 2.0 четко говорит: «Механизм инициализации массивов во время объявления изнутри шейдера отсутствует». Некоторые компиляторы довольно либеральны в отношении возможности ES 3.0 в шейдерах ES 2.0 без сообщений об ошибках. Проблема в том, что тот же самый код будет терпеть неудачу на устройствах с графическими процессорами от разных поставщиков. –

Смежные вопросы