Я пытаюсь реализовать спрайты в DX11, но я не знаю, как продолжить их текстурирование.
Во-первых, может быть несколько спрайтов, каждый из которых использует свою текстуру (атлас). Но так как я не знаю, сколько спрайтов на экране, я не могу использовать Texture2D[x]
в моем коде шейдера.
Итак, я посмотрел на использование Texture2DArray
, но тогда я должен инициализировать D3D11Texture2D
Сам объект как массив текстур. Это кажется мне проблемой, потому что в один момент спрайты A, B, C могут быть на экране, а в следующий момент спрайты B, C, D — на экране. Итак, я должен был бы создать два D3D11Texture2D
объекты, содержащие текстуры B и C. И в любом случае, похоже, что текстуры в массивах должны быть одинакового размера.
И это абсолютная катастрофа. Итак — что-то мне не хватает в массивах? И каковы мои варианты сделать это наиболее эффективным способом? Должен ли я установить одну текстуру, нарисовать все спрайты, которые используют эту текстуру, и повторить? Потому что это тоже выглядит довольно плохо.
Заранее спасибо!
PS. Я знаю, что это может быть преждевременной оптимизацией, но я новичок в DX, и мне интересно научиться хорошо кодировать / правильно использовать библиотеку. Поэтому я предпочел бы потратить некоторое время, чем написать плохое решение.
Одна из самых распространенных оптимизаций при рисовании спрайтов — это объединение текстур спрайтов, которые обычно появляются на экране одновременно. Таким образом, вы можете нарисовать их всех в одном Draw Call (вам просто нужно поменять ваши texcoords).
Других решений пока нет …