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()
.
Я еще не пробовал профилировать два фрагмента, хотя мог бы предположить, что профилирование может осложниться взаимодействием ЦП и ГП, особенно в такой короткий промежуток времени. Время выполнения также может существенно зависеть от размеров задействованных списков отображения и количества выполненных списков отображения.