Я склонен полагать, что это зависит от конкретного применения.И да, так как было бы более эффективно, скажем, запустить 100 программ, в каждой из которых может быть по 2-16 форм;может быть лучше иметь компромисс между двумя.Я склонен думать, что, скажем, 10-20 программ для ваших самых распространенных методов затенения будет достаточно или даже несколько.Например, вы можете захотеть иметь одну программу / шейдер для выполнения всех ваших рельефных карт, одну для всех эффектов тумана, одну для отражения, одну для преломления.
Теперь, выходя за рамки вашего вопроса, я думаю, что это также относится и к этому, одна вещь, которую нужно включить в ваш движок, это настройка класса BatchProcess & BatchManager, чтобы уменьшить количество вызовов CPU - GPU по шине, так какэто также оказалось бы эффективным.Я не думаю, что существует 1 подходящее решение для вашего вопроса, так как я считаю, что это будет зависеть от конкретного приложения, так же как и установление отношения между тем, сколько пакетов (сегментов) вершин (примитивов) будет иметь ваш движок, и скольковершины каждая из этих партий будет содержать.
Чтобы попытаться прояснить ситуацию: в одной игре может быть 4 контейнера или партии, в которых каждая партия может содержать до 10 000 вершин, которые должны считаться заполненными до того, как BatchManager решит очистить эту корзину, отправив всете вершины на видеокарту для конвейера рендеринга, которые нужно обработать и нарисовать, когда в другой игре может быть 10 блоков с 5000 вершин, или в другой игре может быть 8 блоков с 12,0000 вершин.
Так что может быть компромисс между попыткой объединить их в соответствии с вашими потребностями.Если у вас есть 1 программа с сотнями униформ;Одной программой легче управлять внутри конвейера, но шейдеры будут слишком громоздкими для чтения и управления.С другой стороны, иметь шейдеры с очень небольшим количеством униформ довольно легко для чтения и управления, но с сотнями программ управлять процессором немного сложнее, чем связывать и отправлять их для правильной визуализации.Лично я бы попытался найти золотую середину, чтобы у меня было достаточно программ для выполнения каждой конкретной задачи, которая абсолютно уникальна, например, создание плотности тумана на одной и объемное отображение теней на другой, где у каждой программы достаточно всего лишь униформ для выполнения.требуемые расчеты.
Следующим шагом будет проведение некоторого контрольного теста, чтобы увидеть, где ваша эффективность и ваши накладные расходы сбалансированы, чтобы внести соответствующие корректировки.