遗留 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、立方体和矩形会干扰它,所以你必须先禁用它们。但是,一旦你完成了,你就恢复了状态。
这是很好的做法,尤其是在库和插件中。
我分析了以下旧版 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、立方体和矩形会干扰它,所以你必须先禁用它们。但是,一旦你完成了,你就恢复了状态。
这是很好的做法,尤其是在库和插件中。