Почему glGenLists возвращает значение напрямую, в то время как glGenTextures использует ссылочный параметр? - PullRequest
4 голосов
/ 21 мая 2011

Может быть, это немного OCD, но мне кажется досадным, что в OpenGL glGenLists возвращает идентификатор списков напрямую, в то время как glGenTextures использует параметр ссылки для обратной связи с идентификатором.

GLuint glGenLists(GLsizei range);

void glGenTextures(GLsizei n, GLuint * textures);

Есть ли веская причина этого несоответствия?

Ответы [ 2 ]

3 голосов
/ 21 мая 2011

Кристиан Рау затрагивает правильную тему.

Причиной, по которой glGenLists гарантирует упорядочение возвращаемого значения, является рисование строк. Модель использования хотела, чтобы glListBase + glCallLists позволял простой

// ascii model
// init
asciiBase = glGenLists(128);
// usage
glListBase(asciiBase);
glCallList(strlen(string), GL_UNSIGNED_BYTE, string);

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

В качестве дополнительного лакомства обратите внимание, что все вызовы glGen * являются необязательными. Ничто не мешает вам делать:

glBindTexture(GL_TEXTURE_2D, 5);
// never called glGenTextures to get that 5!!!
2 голосов
/ 21 мая 2011

Я думаю, что возвращение glGenLists больше похоже на пережиток прошлого.Причина, по которой glGenTextures использует указатель, заключается в том, что вы можете получить более одного имени текстуры.Но для glGenLists это не обязательно, так как идентификаторы n списков, генерируемые одним вызовом glGenLists (n), гарантированно будут иметь последовательные значения, так что вы можете эффективно использовать glCallLists и glListBase.Таким образом, вам нужно знать только первое значение.

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

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