Из того, что я собираю, glActiveTexture
устанавливает активную "текстурную единицу". Каждый текстурный блок может иметь несколько объектов текстуры (обычно это GL_TEXTURE_1D, 2D, 3D или CUBE_MAP).
Если я правильно понял, вам нужно позвонить glActiveTexture
, чтобы сначала установить блок текстуры (инициализирован на GL_TEXTURE0
), а затем вы привязываете (один или несколько) "объектов текстуры" к этой текстурной единице?
Количество доступных текстурных единиц зависит от системы. Я вижу перечисления до 32 в моей библиотеке. Я предполагаю, что это по существу означает, что у меня может быть меньше предела моего GPU (который, я думаю, 16 8) и 32 текстуры в памяти GPU в любой момент времени? Я предполагаю, что существует дополнительный предел, который не превышает максимальную память GPU (предположительно 1 ГБ).
Я правильно понимаю взаимосвязь между объектами текстуры и текстурными блоками? Пусть говорят, что мне разрешено 16 единиц и 4 цели каждый, значит ли это место для 16 * 4 = 64 целей, или это не работает?
Затем вы обычно хотите загрузить текстуру. Вы можете сделать это через glTexImage2D
. Первый аргумент которого - цель текстуры. Если этот работает как glBufferData
, мы по существу привязываем "handle" / "имя текстуры" к цели текстуры, а затем загружаем данные текстуры в эту цель, и таким образом косвенно связывать его с этим дескриптором.
Как насчет glTexParameter
? Нам нужно связать цель текстуры, а затем снова выбрать ту же цель, что и первый аргумент? Или цель текстуры не должна быть привязана, если у нас есть правильный активный блок текстур?
glGenerateMipmap
также работает с целью... эта цель должна по-прежнему привязываться к имени текстуры для успеха?
Затем, когда мы хотим нарисовать наш объект с текстурой на нем, нужно ли нам выбрать активный блок текстур, а затем цель текстуры? Или мы выбираем блок текстуры, а затем мы можем захватывать данные из любой из 4 целей, связанных с этим устройством? Это та часть, которая меня действительно сбивает с толку.