旧版opengl-启用/禁用纹理类型

时间:2019-10-04 09:03:01

标签: opengl opengl-compat

我分析了以下遗留的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中是否有必要?

1 个答案:

答案 0 :(得分:2)

此代码遵循成为好客人并清理自己的原则。由于OpenGL是状态机,因此可能是从一个地方开始的,该地方期望状态机在代码运行后与以前一样处于同一状态。

纹理目标有一定的优先级,如果要使用2D纹理,则启用3D,立方体和矩形会对此产生干扰,因此必须首先禁用它们。但是,一旦完成,就可以还原状态。

这是一个好习惯,尤其是在库和插件中。