То, что вы пытаетесь сделать, невозможно. Размер массива должен быть целой константой.
Соответствующая часть в спецификации:
Язык затенения OpenGL, версия 4.60 - 4.1.9. Массивы
[...] Если в объявлении указан размер массива, это должно быть целочисленное константное выражение [...]
Если вам нужен буфер с переменным размером, вы должны использовать объект буфера хранилища шейдеров . В SSBO самая нижняя переменная в определении блока может иметь размер переменной.
В качестве альтернативы вы можете создать единый массив с определенным максимальным количеством элементов и просто использовать его часть. Например:
#define MAX_LIGHTS 8
uniforn float numOfLights;
uniform vec3 lightPosition[MAX_LIGHTS];
Обратите внимание, также возможно создать другую программу шейдера для разного количества источников света. Если количество источников света не изменяется динамически, это может быть правильным решением.