Действительно ли необходим текстурный атлас даже для 2D-игры? - PullRequest
1 голос
/ 18 июля 2011

Я слышал, что glBindTexture действительно медленный и его следует избегать, насколько это возможно, но для 2D-плиточной игры OpenGL, написанной на C ++ (около 400 плиток на экране на кадр не более), текстурный атлас действительнонужно?Кроме того, действительно ли затраты на пересчет координат текстуры для каждой плитки действительно меньше, чем затраты на изменение текстур только при необходимости (я рисую плитки ряд за строкой и вызываю glBindTexture, только когда следующая плитка отличается от текущей)?

РЕДАКТИРОВАТЬ: плитки размером 32x32 пикселей, поэтому все они поместятся в один атлас

Ответы [ 2 ]

4 голосов
/ 18 июля 2011

Привязка другой текстуры может быть дешевле, чем вы думаете, в зависимости от вашей схемы использования, если вам повезет немного. Современные графические процессоры имеют более одного набора текстур, между которыми драйвер может переключаться относительно легко (см. Это несколько более длинное объяснение 1004 *). Особенно, если вы переключаетесь между умеренно изменяющимся набором плиток, велики шансы, что это не будет полный срыв.

Однако дело в том, что вы не знаете. Это может быть просто по-другому. Пока вы не знаете, вы должны принять наихудший случай, а не лучший.
Кроме того, страшный конвейер не является единственной вещью, которая, возможно, является дорогой в привязке текстуры. GL должен разыменовать по крайней мере два указателя (с высокой вероятностью пропуска кэша) и выполнять некоторые нетривиальные проверки согласованности объекта и всего состояния визуализации после привязки объекта.
Эти эффекты кэша и проверки согласованности являются проблемой, они являются причиной, по которой nVidia все еще работает над «графикой без привязки». Они называют его «новым узким местом».

Все это , вероятно, не имеет значения для 500 изменений состояния на настольном компьютере, но, как уже указывал Гоз, будет иметь значение для портативного устройства. Если ничего другого (т.е. даже если это не влияет на частоту кадров), это приведет к более быстрому разряду батареи.
Это жаль, потому что это совершенно не нужно, текстурный атлас прост в реализации и не требует никаких дополнительных затрат, а все необходимые вычисления тривиальны (поскольку вы не используете mipmaps).

3 голосов
/ 18 июля 2011

Да, это имеет значение.Хотя то, влияет ли это на частоту кадров, существенно зависит от многих факторов, таких как ваше оборудование или разрешение каждой плитки.В целом, хотя наложение текстур и не наносит вреда, и оно даст лучшую производительность.

Кроме того, поскольку вы, вероятно, не сможете поместить все плитки в один и тот же атлас, было бы гораздо более разумно визуализироватьвсе плитки, которые используют данный текстурный атлас, затем переходят к следующему текстурному атласу и визуализируют все плитки, которые используют этот атлас.Таким образом, вы меняете текстуру только так часто, как есть текстурные атласы на сцене.

Это становится ОЧЕНЬ более важным для таких вещей, как портативные устройства (iOS, Android и т. Д.), Но даже на высокопроизводительных ПК повышение производительности может быть значительным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...