Команда GLSL break

В настоящее время я изучаю, как создавать шейдеры в GLSL для игрового движка, над которым я работаю, и у меня есть вопрос относительно языка, который меня озадачивает. Я узнал, что в версиях шейдеров ниже 3.0 вы не можете использовать универсальные переменные в состоянии цикла. Например, следующий код не будет работать в версиях шейдеров старше 3.0.

for (int i = 0; i < uNumLights; i++)
{
   ...............
}

Но нельзя ли заменить его циклом с фиксированным количеством итераций, но содержащий условный оператор, который прервет цикл, если в данном случае i больше, чем uNumLights ?. Пример:

for (int i = 0; i < MAX_LIGHTS; i++)
{
    if(i >= uNumLights)
        break;
    ..............
}

Разве это не эквивалент? Должен ли последний работать в старых версиях GLSL? И если да, то разве это не более эффективно и легко в реализации, чем другие методы, о которых я читал, например, использование другой версии шейдера для другого количества источников света?
Я знаю, что это может быть глупый вопрос, но я новичок и не могу найти причину, по которой это не должно работать.

6
задан Colin Dumitru 18 October 2013 в 06:57
поделиться