Есть понятие "материал". Напр вот этот узел (нод, группа) имеет такие-то текстуры, реагирует на источники света так-то и.т.п. Соответственно она должна рисоваться отдельно, для нее должны устанавливаться uniform переменные (или, редко, активироваться свой шейдер). Другой нод может иметь уже другой материал. А свалив всю геометрию в кучу мы только и можем отрендеоить все однообразно.
Ну я примерно так и думал. Если я ничего не путаю, то лучше (если не требуется других видов затенения или еще чего-то), то:
1) Заводится один шейдер для модели (вертексный и фрагментный)
2) Атрибуты и текстура передается в зависимости от параметров материал
3) Вершины передаются в зависимости от текущего узла (и соответственно вызывается и метод отрисовки).
Тогда встает еще один вопрос - если есть, например, альфа блендинг (или что-то где важен порядок отрисовки), то узлы нужно всегда сортировать перед отрисовкой?
В режиме выделения не требуется phong shading (и значит GLSL шейдер выключен)
Не очень понял фразу, что значит шейдер отключен? А как же out fragColor?