Обычный способ сделать это - взять целочисленный параметр (например, uint32_t) и добавить его в GL_TEXTURE0
:
void Texture::UseTexture(uint32_t unit)
{
if(unit >= MaxTextureUnit) {
//Handle invalid texture unit
}
else {
glActiveTexture(GL_TEXTURE0 + unit);
glBindTexture(GL_TEXTURE_2D, textureID);
}
}
Это можно сделать, поскольку документация для glActiveTexture утверждает, что
текстура должна быть одной из GL_TEXTUREi, где 0 <= i <GL_MAX_TEXTURE_UNITS </p>
и что
Это всегдаслучай, когда GL_TEXTUREi = GL_TEXTURE0 + i.
MaxTextureUnit
- максимальное количество текстурных единиц и может быть запрошено с помощью
glGetInteger(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &MaxTextureUnit)
. Это больше похоже на символическое значение, чтобы показать, как
может работать, не стесняйтесь осуществлять обработку ошибок, как вам нравится.