遗留 opengl - enabling/disabling 纹理类型

legacy opengl - enabling/disabling texture types

我分析了以下旧版 opengl 代码:

GLboolean textur2d; 
glIsEnabled(texture2d, GL_TEXTURE_2D);

GLboolean rectangleNV; 
glIsEnabled(rectangleNV, GL_TEXTURE_RECTANGLE_NV);

GLboolean texture3d; 
glIsEnabled(texture3d, GL_TEXTURE_3D);

GLboolean cubeMap; 
glIsEnabled(cubeMap,GL_TEXTURE_CUBE_MAP);

glDisable(GL_TEXTURE_RECTANGLE_NV);
glDisable(GL_TEXTURE_3D);
glDisable(GL_TEXTURE_CUBE_MAP);

glEnable(GL_TEXTURE_2D);
///some drawing

if(!texture2d)
    glDisable(GL_TEXTURE_2D);
if(rectangleNV)
    glEnable(GL_TEXTURE_RECTANGLE_NV);
if(texture3d)
    glEnable(GL_TEXTURE_3D);
if(cubeMap)
    glEnable(GL_TEXTURE_CUBE_MAP)

正如您在绘制纹理 2d 之前看到的那样,其他纹理类型被禁用。在旧版 opengl 中是否有必要?

本代码遵循做客好客、身后自清的原则。由于 OpenGL 是一个状态机,因此可能是从一个地方调用此代码,该位置期望状态机在代码 运行 之后处于与之前相同的状态。

纹理目标有一定的优先级,如果你想使用 2D 纹理,启用 3D、立方体和矩形会干扰它,所以你必须先禁用它们。但是,一旦你完成了,你就恢复了状态。

这是很好的做法,尤其是在库和插件中。