SpriteBatch.Begin и SpriteBatch.End - PullRequest
       27

SpriteBatch.Begin и SpriteBatch.End

2 голосов
/ 04 марта 2012

Это вопрос производительности для SpriteBatches в XNA. Если вы хотите начать рисовать в XNA, вы должны использовать spritebatch.Begin (). Так вы указываете кучу вещей, например, используемые шейдеры. Это создает проблему, потому что разные спрайты могут использовать разные шейдеры. Я видел несколько уроков, в которых начало и конец использовались в вызове отрисовки каждого отдельного объекта. Я хотел бы сделать это, потому что я хочу, чтобы каждый спрайт мог использовать свой собственный шейдер. Как я могу сделать это, не вызывая проблем с производительностью?

1 Ответ

4 голосов
/ 04 марта 2012

Если вы собираетесь разрешить каждому спрайту использовать свой собственный шейдер, возможно, некоторые из них будут использовать один и тот же шейдер. Убедитесь, что эти спрайты входят в одну и ту же партию, чтобы получить максимально возможную производительность.

(Это может быть довольно уродливый или довольно сложный код для сортировки ваших объектов по шейдерам и определения момента смены пакетов. Вам просто придется с этим смириться.)

Идея SpriteBatch заключается в том, что он буквально объединяет спрайты перед отправкой их в графический процессор. Для изменения текстуры внутри начального / конечного блока или начала нового начального / конечного блока потребуется новый пакет.

Вы получаете несколько сотен пакетов за кадр.

Подробнее об этом см. этот ответ и, возможно, этот ответ на сайте разработки игры.

...