Как определить 2d-массив в GLSL ES?

Я пробовал этот код.

varying vec2 blurCoordinates[2][2];

Но это приводит к ошибке:

Ошибка компиляции вершинного шейдера. ОШИБКА: 0:10: '[' : Синтаксическая ошибка: синтаксическая ошибка ОШИБКА: 1 ошибка компиляции. Код не сгенерирован.


person Semyon Tikhonenko    schedule 18.11.2015    source источник


Ответы (2)


Как уже отмечалось в ответе genpfault, GLSL с самого начала не поддерживает многомерные массивы.

Расширение GL_ARB_arrays_of_arrays предоставляет функции, которые вам нужны. В версии 4.3 она стала основной функцией OpenGL, поэтому, начиная с GLSL 4.30, вы можете использовать ее, не полагаясь на расширения.

person derhass    schedule 18.11.2015

Никакая директива #version не подразумевает #version 100, где многомерные массивы запрещены:

Раздел 4.1.9, Массивы ( стр. 24):

Переменные одного и того же типа могут быть объединены в массивы путем объявления имени, за которым следуют квадратные скобки ( [ ] ), заключающие в себе размер. Размер массива должен быть интегральным константным выражением (см. Раздел 4.3.3 «Целые константные выражения») больше нуля. Недопустимо индексировать массив целочисленным константным выражением, большим или равным его объявленному размеру. Также незаконно индексировать массив с отрицательным константным выражением. Массивы, объявленные как формальные параметры в объявлении функции, должны указывать размер. Можно объявлять только одномерные массивы. Все основные типы и структуры могут быть объединены в массивы.

Если вы используете #version 320 es, вы можете объявлять массивы массивов:

Раздел 4.1.9, Массивы ( стр. 40):

Переменные одного типа могут быть объединены в массивы путем объявления имени, за которым следуют квадратные скобки ( [ ] ), заключающие в себе необязательный размер. Размер массива, если он присутствует, должен быть постоянным целым выражением (см. раздел 4.3.3 «Постоянные выражения») больше нуля. Тип параметра размера может быть целым числом со знаком или без знака, и выбор типа не влияет на тип результирующего массива. Массивы имеют только одно измерение (одно число внутри «[ ]»), однако массивы массивов могут быть объявлены. Любой тип может быть сформирован в массив.

...

person genpfault    schedule 18.11.2015