Да, можно объявить массив униформ в шейдерах GLSL. Просто google "glsl равномерный массив" для некоторых примеров (отредактируйте или посмотрите пример datenwolf). Тем не менее существуют ограничения на то, сколько униформ может быть отправлено на разные видеокарты (по крайней мере, на старших, я не уверен в текущих (хотя, я думаю, все еще будет)).
Если вы решите пойти по пути униформы, я бы предложил использовать однородные буферы. Согласно http://www.opengl.org/wiki/Uniform_Buffer_Object, "Переключение между равномерными привязками буфера обычно быстрее, чем переключение десятков униформ в программу".
Если у вас есть большое количество огней и параметров, вы также можете отправлять данные в виде буферов с плавающей точкой.