glGenTextures
и glGenBuffers
не создают никаких объектов или буферов, они просто помечают имена объектов как используемые.Это означает, что они резервируют имена объектов.
В то время как glGenTextures
резервирует имена текстур, glGenBuffers
резервирует имена буферов, но имена, возвращаемые glGenTextures
, могут совпадать с именами, возвращаемыми glGenBuffers
.
glGenTextures
просто гарантирует, что возвращаемые имена не используются для текстур.
glGenBuffers
гарантирует, что возвращаемые имена не используются для буферов.
Обратите внимание, что буферный объект и объект текстуры могут иметь одно и то же значение, но есть 2 совершенно разных объекта.Имя, которое возвращается glGenBuffers
, не помечается как использованное (или зарезервированное) для используемого в качестве объекта текстуры, но оно зарезервировано для использования в качестве объекта буфера.
OpenGL ES 3.2 Спецификация -8.1. Объекты текстуры;страница 140
Команда
void GenTextures( sizei n, uint *textures );
возвращает n
ранее неиспользуемых имен текстур в текстурах.Эти имена помечены как использованные для целей GenTextures
только , но они приобретают текстурное состояние и размерность только при первом связывании, как если бы они не использовались.
Спецификация OpenGL ES 3.2 - 6 буферных объектов;стр. 50
Команда
void GenBuffers( sizei n, uint *buffers );
возвращает n
ранее неиспользуемых имен объектов буфера в буферах.Эти имена помечены как использованные для целей GenBuffers
только , но они приобретают состояние буфера только тогда, когда они впервые связаны с BindBuffer
(см. Ниже), как если бы они не использовались.
Обратите внимание, что спецификация OpenGL ES здесь отличается от (основной) спецификации профиля ядра OpenGL.В (настольном) профиле ядра OpenGL недопустимо передавать значение в glBindTexture
, которое не было возвращено glGenTexture
.
См. Спецификация профиля ядра API OpenGL 4.6 - 8.1 Текстурные объекты;стр. 180
Привязка осуществляется путем вызова
void BindTexture( enum target, uint texture );
[...]
Ошибки
[...]
Ошибка INVALID_OPERATION
генерируется, если текстура не равна нулю или имя возвращено из предыдущего вызова GenTextures
, или если такое имя с тех пор было удалено.