关于opengl管理纹理对象的问题

蓝宝书上生成三个mip贴图的代码如下:
for(iLoop = 0; iLoop < TEXTURE-COUNT; iLoop++)
{
// Bind to next texture object
glBindTexture(GL_TEXTURE_2D, textures[iLoop]);

    // Load texture, set filter and wrap modes
    pBytes = gltReadTGABits(szTextureFiles[iLoop],&iWidth, &iHeight,
                          &iComponents, &eFormat);

    // Load texture, set filter and wrap modes
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
    glTexImage2D(GL_TEXTURE_2D, 0, iComponents, iWidth, iHeight, 0, eFormat, GL_UNSIGNED_BYTE, pBytes);
    glGenerateMipmap(GL_TEXTURE_2D);
    // Don't need original texture data any more
    free(pBytes);
    }
            示例代码通过不断的调用 glBindTexture(GL_TEXTURE_2D, textures[i])来使用这三个纹理对像。我想知道这三个纹理对象是如何管理的。是在GL_TEXTURE_2D这个变量中分别储存多个纹理,并通过纹理对象名来调用的吗?

1个回答

纹理数据都被保存在显存中,内存中那个unint类型的texture[i]其实就是纹理对象的索引,或者说编号。要使用某个纹理时,就通过编号找到对应的纹理,即通过glBindTextre函数绑定纹理
GL_TEXTURE_2D不是变量,而是常量,在头文件里边你可以看到这个常量的宏,根据这个常量来确定要绑定纹理的类型。纹理有好几种的,有1D,2D,3D,代表纹理类型分别为GL_TEXTURE_1D、GL_TEXTURE_2D、GL_TEXTURE_3D。这些常量不会保存纹理数据,仅仅是告诉函数将要绑定什么类型的纹理。
所有的纹理数据都在显卡中,所以一旦纹理创建完毕,你可以放心地删除内存中的照片。你要选择纹理,只能通过索引,也就是你定义那个texture[i]

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问