В соответствии с моим пониманием «Включить или не включать» часть Типичные ошибки GLSL это философская причина: шейдеры написаны так, чтобы переопределять фиксированный конвейер, поэтому они не должны полагаться на фиксированные состояния конвейера , Вы должны использовать разные шейдеры для каждой необходимой вам возможности.
Также я думаю, что это может быть выбор дизайна, основанный на том факте, что ветки на GPU стоят дорого, и кто-то должен был подумать, что вы не должны делать такие вещи, как
if (gl_LightSource[0].enabled)
{ ... }
на первом месте.