2017-02-01 9 views
1

В шейдере (с использованием OpenGL ES 2.0) Я хочу иметь массив с динамическим размером.Динамический массив униформ (GLSL OpenGL ES 2.0)

я могу объявить массив с фиксированным размером:

uniform vec2 vertexPositions[4]; 

Но теперь я хочу, чтобы установить размер динамической количеству точек, которые я буду проходить.

Я думал о замене строки в источнике шейдера перед ее компиляцией, но я должен ее скомпилировать каждый раз, когда я рисую другой элемент. Это, по-видимому, интенсивность процессора.

ответ

1

Типичным подходом было бы размер однородного массива до максимального количества элементов, которые вы ожидаете использовать, а затем обновите только его подмножество, которое вы фактически используете. Затем вы можете передать эффективный размер массива в виде отдельной формы.

uniform vec2 arr[MAX_SIZE]; 
uniform int arr_size; 
+0

Я так же думал об этом решении, но я думал, что он может быть слишком голоден? –

+0

Он также генерирует исключение при компиляции шейдера: 'ошибка C1307: не константное выражение для размера массива' –

+0

Правильно, вам понадобится максимальный объем памяти в любом случае - вы ничего не сохраняете, только используя его для части кадра. –