什么是opengl常数的合适类型名称?

时间:2019-10-27 11:38:47

标签: c++ opengl

当前,在OpenGL c ++中创建纹理函数时,我面临一个问题。制作使用纹理的函数时,必须将纹理与ID绑定,然后才需要设置活动纹理,如下所示:

void Texture::UseTexture()
{
    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, textureID);
}

为了使纹理类更具通用性,我希望在我的useTexture()函数中添加一个参数,以使您可以在其中插入GL_TEXTURE0等常量。是否有任何可用或足够常量的类型名?

1 个答案:

答案 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)进行查询。它更像是一个符号值,用于显示它如何工作,随时随地实现错误处理。