Возможно ли, чтобы атрибут вершины был массивом в GLSL-ES 2.0? - PullRequest
8 голосов
/ 22 ноября 2011

В GLSL-ES можно иметь массивы.Например, GLSL ES Specification дает следующий пример унифицированной переменной, которая является массивом:

uniform vec4 lightPosition[4];

Возможно ли иметь атрибуты вершин, которые являются массивами?Другими словами, является ли следующее законным в соответствии со спецификацией?

attribute vec4 foo[3];  // three vec4s per vertex

Упоминается ли ответ (да или нет) где-либо в спецификации GLSL ES?(Я не могу найти его, но я не прочитал каждую строку спецификации.)

Кроме того, если это допустимо, как инициализировать такой атрибут с помощью API OpenGL ES 2.0?(Предполагается, что будет использоваться glVertexAttribPointer, каково расположение вершин / массив-элементов / вектор-элементов?)

1 Ответ

10 голосов
/ 22 ноября 2011

В спецификации GLSL ES 2.0 указано, что атрибуты не могут быть объявлены как массивы.

В настольном GL вы можете иметь массивы атрибутов. Когда атрибуту назначается индекс атрибута (либо с glBindAttribLocation, либо автоматически с помощью связанного шейдера), он получает последовательные атрибуты, начиная с того, который вы запрашивали, если вы использовали glBindAttribLocation. Таким образом, если бы foo было дано местоположение 5, foo[0] было бы 5, foo[1] было бы 6, а foo[2] было бы 7.

Если есть какое-либо расширение ES 2.0, позволяющее использовать массивы атрибутов, оно, вероятно, будет работать следующим образом.

...