OpenGL是一个状态机,尤其是如果你使用固定功能的管线。可以设置它的各种状态(或模式),然后让这些状态一直生效,直到再次修改它们。正如所看到的那样,当前颜色就是一个状态变量。可以把当前颜色设置为白色、红色或其他任何颜色,在此之后绘制的所有物体都将使用这种颜色,直到再次把当前颜色设置为其他颜色。当前颜色只是OpenGL所维护的许多状态变量之一。其他的状态变量还有很多,并且有着各自的用途,例如控制当前视图和投影变换、直线和多边形点画模式、多边形绘图模式、像素包装约定、光照的位置和特征以及被绘制物体的材料属性等。许多表示模式的状态变量可以用glEnable()和glDisable()函数进行启用和禁用。
如果使用可编程的着色器,根据所用的OpenGL版本的不同,着色器所能识别的状态的数量也有所不同。
每个状态变量(或模式)都有一个默认值。在任何时候都可以向系统查询每个状态变量的当前值。一般情况下,可以使用下面这6个函数之一来完成这个任务:glGetBooleanv()、glGetDoublev()、glGetIntegerv()、glGetfloatv()、glGetPointerv()、或glIsEnabled()。具体选择的函数取决于希望返回的结果的数据类型。有些状态变量还有更为特定的查询函数(例如glGetLight*()、glGetError()或glGetPolygonStipple()等)。另外,还可以使用glPushAttrib()、glPushClientAttrib()函数把状态变量的集合保存到一个属性栈中,对它们进行临时的修改,以后再用glPopAttrirb()或glPopClientAttrib()恢复这些值。如果需要对状态变量进行临时修改,就应该使用这些函数,而不是使用任何查询函数,因为前者的效率更高。