При применении нескольких текстур к сетке, например, для рельефного отображения, я обычно привязываю текстуры к первым нескольким фиксированным текстурным блокам, например: diffuse = unit 0, bump = unit 1, specular = unit 2, затем продолжаю использовать их для каждого разные сетки с разными текстурами. Но мне всегда было интересно, почему glActiveTexture
поддерживается так много текстурных блоков (в предыдущей ссылке написано, по крайней мере, 80).
Мне пришло в голову, что одним из возможных способов управления текстурами является привязка различных текстур к каждой доступной единице и оставление их включенными, просто обновляя унифицированный индекс сэмплера. Это должно улучшить рендеринг перф, уменьшив количество текстурных переключателей. Если у вас меньше текстур, чем максимальное количество текстурных блоков, вам никогда не придется отвязывать текстуру.
Это стандартная практика для приложений OpenGL в реальном времени (я полагаю, это также относится к D3D)? И есть ли какие-то неочевидные последствия для производительности при использовании этого подхода? Возможно, накладные расходы памяти?