2014-02-13 5 views
1

Я пытаюсь реализовать спрайты в DX11, но я не знаю, как продолжить их текстурирование.Как эффективно текстурировать несколько спрайтов?

Во-первых, может быть несколько спрайтов, каждый из которых использует другую текстуру (атлас). Но так как я не знаю, сколько спрайтов на экране, я не могу использовать Texture2D[x] в моем шейдерном коде.

Итак, я посмотрел на использование Texture2DArray, но тогда мне нужно инициализировать объект D3D11Texture2D как массив текстур. Мне кажется, что это проблема, потому что в один момент спрайты A, B, C могут быть на экране, а в следующий момент спрайты B, C, D находятся на экране. Поэтому мне пришлось бы создать два объекта D3D11Texture2D, оба из которых содержат текстуры B и C. И в любом случае, похоже, что текстуры в массивах должны быть одного размера.

И это абсолютная катастрофа. Итак - есть ли что-то, что мне не хватает в массивах? И каковы мои варианты для этого наиболее эффективным способом? Нужно ли устанавливать одну текстуру, рисовать все спрайты, которые используют эту текстуру, и повторять? Потому что это тоже кажется довольно плохим.

Заранее благодарен!

PS. Я знаю, что это может быть преждевременная оптимизация, но я новичок в DX, и мне очень интересно учиться хорошо кодировать/использовать библиотеку. Поэтому я предпочел бы потратить некоторое время, чем написать плохое решение.

ответ

0

Одна очень распространенная оптимизация при рисовании спрайтов заключается в объединении текстур спрайтов, которые обычно появляются на экране одновременно. Таким образом, вы можете нарисовать их в одном Draw Call (вам просто нужно изменить ваши texcoords).

+0

Да, я думаю, это то, с чем я буду работать. На самом деле, похоже, это не элегантное решение ... или, по крайней мере, я не нахожу его, если он есть. Благодарю. –

Смежные вопросы