GL_BLEND проблема с рисованием 2D спрайтов на iPad - PullRequest
3 голосов
/ 06 октября 2010

Когда мы рисуем 300 спрайтов на iPad, используя opengl 2.0 с glEnable (GL_BLEND) (который нам нужен, потому что спрайты нуждаются в прозрачности и альфа-смешивании), мы получаем частоту кадров около 40. Но когда мы отключаем смешивание, мы получаем частоту кадровиз 60.

Сейчас (альфа) смешивание действительно так дорого или мы делаем что-то не так?

Спасибо за ваше время, Ричард.

Ответы [ 2 ]

4 голосов
/ 06 октября 2010

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

В тот момент, когда вы начинаете альфа-смешивание, вам сразу нужно прочитать из кадрового буфера и затем записать обратно (Read-Modify-Write или RMW). Фактически, если у вас есть 10 перекрывающихся спрайтов, то их нужно рисовать 10 раз, тогда как, как и в случае с несмешанной системой Z-Buffered (опять же, PowerVR нечетная на этом фронте), вам нужно всего лишь нарисовать ОДИН пиксель. Таким образом, в этом крайнем случае вы сэкономили десятую часть полосы пропускания WRITE, просто не смешивая альфа. И не забывайте, что есть также чтение из буфера кадров, которое должно выполняться для альфа-смешивания.

Как я упоминал, это становится более сложным, когда задействована Z-буферизация. Главным образом, потому что Z-буфер требует чтения, сравнения и, возможно, записи, но используя Z-буферизацию, вы можете отбрасывать пиксели намного раньше в конвейере, что означает, что вы можете сэкономить еще больше времени на обработку. Я полагаю, что в сочетании с системой листов PowerVR все еще используется, и ваша главная задача состоит в том, чтобы потеря пропускной способности RMW из-за альфа-смешения.

1 голос
/ 06 октября 2010

Это действительно так дорого. Требуется чтение-изменение-запись для каждого пикселя. операция модификации имеет вид

fragment * alpha + previous * (1 - alpha)

Подсчитайте количество пикселей, на которых вы это делаете, и вы скоро поймете, что много занимаетесь математикой (и требуете большей пропускной способности памяти). Все зависит от того, насколько велики ваши спрайты, но неудивительно, что вы сильно замедляетесь, когда у вас много оверрейдов.

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