Накладные расходы на glDrawArrays против glMultiDrawArrays - PullRequest
0 голосов
/ 16 февраля 2019

Может кто-нибудь сказать, что именно вызывает издержки цикла нескольких вызовов glDrawArrays без изменений состояния по одному вызову glMultiDrawArrays?Мол, почему этот

for (int i = 0; i < num_objects; i++) {
    glDrawArrays(GL_TRIANGLES,
                 object[n]->first_vertex,
                 object[n]->vertex_count);
}

предположительно дороже, чем один вызов glMultiDrawArrays?

1 Ответ

0 голосов
/ 16 февраля 2019

Вы, вероятно, поверили в это из-за того, что читали где-то об «сокращении вызовов отрисовки» или что-то в этом роде.И это правда: меньше вызовов отрисовки лучше, чем больше вызовов отрисовки с точки зрения производительности.

Однако, когда дело доходит до OpenGL, проблема заключается не в «вызовах отрисовки».Это изменения состояния , которые вы выполняете между вызовами отрисовки, что делает отрисовку медленной.Если вы на самом деле не меняете состояние с одного розыгрыша на другой, то на самом деле они довольно быстрые.

Теперь последовательные розыгрыши, вероятно, будут не такими быстрыми, как мульти-розыгрыш.Но это потому, что каждый раз, когда вы выполняете вызов отрисовки, реализация должна задавать вопрос: «Изменил ли пользователь какое-либо состояние рендеринга?»Теперь, хорошая реализация, вероятно, установит немного где-нибудь в каждой функции изменения состояния, так что эта проверка сводится к простой проверке логического значения.Но это все еще нужно сделать для каждого розыгрыша.Multidraw делает эту проверку только один раз.

Но это, как правило, тривиальная разница в производительности.

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