Стоимость вызова webgl bufferSubData против стоимости передачи байтов - PullRequest
0 голосов
/ 03 января 2019

У меня есть буфер массива. Части буфера должны быть изменены, и части не должны быть изменены. Если части буфера, которые должны быть изменены, являются последующими, то обращение к bufferSubData в пределах той части, которая должна быть изменена, более эффективно, чем обновление всего буфера, включая изменение байтов, которые не нужно менять. Проблема заключается в том, что байты, которые нужно изменить, находятся далеко друг от друга в буфере, а многие байты между ними не нуждаются в изменении. Лучше сделать два вызова bufferSubData для каждого чанка, который нуждается в обновлении, или лучше просто сделать один вызов, который также излишне обновляет промежуточные? Насколько затратным является вызов bufferSubData по сравнению с обновлением еще одного байта данных?

1 Ответ

0 голосов
/ 11 января 2019

Предполагая, что bufferSubData направляется к исходному glBufferSubData, предоставленному драйвером, лучше всего его вообще избегать.Известно, что он очень медленный в некоторых драйверах мобильных графических процессоров.См. эту страницу для справки (поиск по glBufferSubData).Я столкнулся с крайне медленной glBufferSubData медлительностью в совсем недавних мобильных графических процессорах, используемых на устройствах Android (Mali, PowerVR, Adreno).Интересно, что не на графических процессорах PowerVR, используемых с iOS, что явно указывает на проблему с программным обеспечением.Практический подход, который, кажется, работает хорошо везде - замена всего буфера на glBufferData один раз за кадр (или как можно меньшее количество раз, объединяя данные для нескольких вызовов отрисовки).

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