Является ли glCallLists более эффективным, чем вызов списков отображения по одному? - PullRequest
0 голосов
/ 07 июня 2009

glCallLists() - это удобная функция для рендеринга ряда списков отображения, особенно для таких вещей, как рендеринг текста. Мне любопытно - на самом деле более эффективно вызывать glCallLists() или это просто удобная функция? Например, какой из этих двух фрагментов будет быстрее?

const char *str = "this is a test";
// suppose the display lists numbered [displayListBase..displayListBase+255] have
// been initialized with display lists to render each ASCII character

// snippet 1:
glListBase(displayListBase);
glCallLists(strlen(str), GL_UNSIGNED_BYTE, str);

// snippet 2:
const char *s;
for(s = str; *s; s++)
    glCallList(displayListBase + (unsigned char)*s);

Я не пытаюсь преждевременно оптимизировать, мне просто интересно, дает ли glCallLists какие-либо существенные преимущества по сравнению с ручным подходом. Если нет, то почему он существует? OpenGL имеет тенденцию быть очень минималистичным, потому что очень мало вспомогательных функций, которые не являются строго необходимыми; удобные функции, которые существуют do , обычно находятся в пространстве имен glu (утилиты GL), например, gluOrtho2D(), который обеспечивает обертку вокруг glOrtho().

Я еще не пробовал профилировать два фрагмента, хотя мог бы предположить, что профилирование может осложниться взаимодействием ЦП и ГП, особенно в такой короткий промежуток времени. Время выполнения также может существенно зависеть от размеров задействованных списков отображения и количества выполненных списков отображения.

1 Ответ

5 голосов
/ 07 июня 2009

Сравнительный анализ - единственный способ убедиться в этом, поскольку реализации OpenGL различаются. Даже тогда это ответит на вопрос для вашей системы, а не для любой другой системы.

Если у вас есть аппаратная реализация OpenGL, то glCallLists может просто перенести несколько десятков байт на аппаратное обеспечение за один раз, в отличие от множества других отдельных glCallList. Поэтому вполне возможно, что это будет быстрее.

Реализации могут реализовывать glCallLists в программном обеспечении для выполнения именно того, что вы только что описали, что не приведет к чистой прибыли.

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