当前,在OpenGL c ++中创建纹理函数时,我面临一个问题。制作使用纹理的函数时,必须将纹理与ID绑定,然后才需要设置活动纹理,如下所示:
void Texture::UseTexture()
{
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, textureID);
}
为了使纹理类更具通用性,我希望在我的useTexture()函数中添加一个参数,以使您可以在其中插入GL_TEXTURE0等常量。是否有任何可用或足够常量的类型名?
答案 0 :(得分:1)
通常的做法是采用整数参数(例如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);
}
}
之所以可以这样做是因为documentation for glActiveTexture指出
纹理必须是GL_TEXTUREi之一,其中0 <= i
那
总是GL_TEXTUREi = GL_TEXTURE0 + i。
MaxTextureUnit
是纹理单元的最大数量,可以使用glGetInteger(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &MaxTextureUnit)
进行查询。它更像是一个符号值,用于显示它如何工作,随时随地实现错误处理。