В настоящее время я изучаю, как создавать шейдеры в 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? И если да, то разве это не более эффективно и легко в реализации, чем другие методы, о которых я читал, например, использование другой версии шейдера для другого количества источников света?
Я знаю, что это может быть глупый вопрос, но я новичок и не могу найти причину, по которой это не должно работать.