Ах как часто мелькает что-то типа "надо изменить архитектуру приложения". Но вот когда ее действительно надо менять - так тихо
Представим простейшее рисование с вызовом glDrawElements. Тут проблем нет
- установили первый материал
- отрисовали принадлежащие ему полигоны
- установили второй материал
и.т.д
Получается надо всего лишь иметь N контейнеров полигонов (по одному для каждого материала). А все данные вертексов остаются неизменными.
Ну, естественно, это не проходит. Нужно поддерживать с десяток режимов рисования, а изложенное выше применимо только к парочке из них. Вот хотя бы первый режим "рисовать точки". Тут никаких полигонов не юзается, просто glDrawArrays для вертексов. А теперь выясняется надо-то рисовать не все вертексы, а лишь принадлежащие полигонам с текущим материалом. Следующий режим "рисовать силуэт" - и опять он без полигонов, используются "ребра". И.т.д. В общем, в очередной раз наша оборона не выдержала ударов немецких танковых клиньев
Да, для тех кто далек от OpenGL: для простоты "материал" - просто "цвет", напр одни полигоны красные, др зеленые. В данном случае без разницы что в действительности там сотня параметров.
Тут можно покалякать типа: "вот видите - архитектура не была тщательно продумана! Если бы с самого начала эта возможность была бы учтена...". Не верю. Что-то написать "про запас" нормально, но никто не будет писать то чего пока нет, а может и вообще неизвестно - но вот оно появляется...