Ответ 1
http://www.khronos.org/registry/webgl/specs/latest/#DYNAMIC_INDEXING_OF_ARRAYS "WebGL позволяет динамически индексировать с постоянными выражениями, индексами циклов или комбинацией. Единственное исключение - для равномерного доступа в вершинных шейдерах, которые можно индексировать с помощью любого выражения".
Вы попробовали? Если это не сработало, есть несколько вариантов.
Если у вас есть небольшое количество значений, if-else может работать нормально. AFAIK равномерные значения будут загружаться в регистры в любом случае, поэтому выполнение дюжины циклов математики на них не заставит ваш шейдер намного медленнее.
Для большого количества значений текстуры - лучший выбор.