В настоящее время я внедряю кроссплатформенный игровой движок 3D на C ++. На данный момент я поддерживаю только windows, но этот вопрос касается только Direct3D 11. Я хочу объединить двухмерные четырехугольники вместе, чтобы повысить производительность. Я могу группировать цветные квадраты вместе с довольно хорошей скоростью (10000 квадратов за 1,0-1,6 мс), но я не знаю, как реализовать текстурированное группирование.
Я думал привязать глобальный массив текстур и передать индекс в массиве для каждой вершины. По какой-то причине, похоже, нет возможности создать такой массив текстур с элементами разного размера. Использование постоянных массивов (HLSL: «Texture2D [32]») также не работает, потому что они могут индексироваться только литералами, а не переменными. Я также изучал создание экземпляров, но не понимаю, как можно передавать текстуры в буфер.
Есть ли способ сделать то, о чем я прошу? Я знаю, что это возможно в OpenGL, поэтому я не могу представить, что это невозможно в Direct3D 11.
Заранее спасибо!
Обновление:
У меня есть уведомления об этом в hlsl шейдерная модель 5.1, индексирование динамического c поддерживается через функцию NonUniformResourceIndex. Однако эта шейдерная модель доступна только в Direct3D 12.
Я нашел временное исправление, в котором я объединяю все квадраты, используя одну и ту же текстуру. Это по-прежнему приводит к большему количеству вызовов отрисовки, чем хотелось бы, но это возможно.