OpenGL 通常被描述为“状态机”,因为据我所知,它由可以通过其 API 设置的全局变量组成,并且它们可以更改/定义其行为。例如,可以设置当前颜色或变换矩阵。许多状态变量具有连续的取值范围。
但是,据我了解,计算机科学中的“状态机”或“有限状态机”被定义为状态(作为节点)和转换(作为有向边)的有向图。
用于描述 OpenGL 的“状态机”术语是否与一般计算机科学中定义的“状态机”相同。
OpenGL 通常被描述为“状态机”,因为据我所知,它由可以通过其 API 设置的全局变量组成,并且它们可以更改/定义其行为。例如,可以设置当前颜色或变换矩阵。许多状态变量具有连续的取值范围。
但是,据我了解,计算机科学中的“状态机”或“有限状态机”被定义为状态(作为节点)和转换(作为有向边)的有向图。
用于描述 OpenGL 的“状态机”术语是否与一般计算机科学中定义的“状态机”相同。
许多状态变量具有连续的取值范围。
AGLfloat
很像常规的float
,具有固定的位大小。32 位 IEEE-754 只有 32 位存储。因此,它只能假设 2^32 个不同的值(尽管其中相当多的值将被视为相同或不可比较)。虽然 2^32 很大,但它仍然非常有限。
一个 OpenGL 上下文有一组明确的和有限的状态值。每个状态值都可以采用一组有限的离散值。因此,可以将 OpenGL 上下文建模为一个有限状态机,改变状态中的值只是进行状态转换(尽管 OpenGL 对象,特别是程序对象,使这个视图有些复杂)。
话虽如此,“OpenGL 是一个状态机”声明的要点实际上与实际的有限状态机无关。该声明通常用于提醒:
OpenGL会记住上次设置到上下文中的状态,即使您忘记了上次设置的状态。
OpenGL 会记住上次设置到上下文中的状态,即使您忘记了上次设置的状态。
OpenGL 是一个状态机,因为它会记住它的状态。除非您明确执行转换,否则它会保持原来的状态。
基本上,这是一个提醒,要么跟踪当前状态,要么在渲染循环开始时设置所有状态,以确保它是你认为的那样。