2

OpenGL 通常被描述为“状态机”,因为据我所知,它由可以通过其 API 设置的全局变量组成,并且它们可以更改/定义其行为。例如,可以设置当前颜色或变换矩阵。许多状态变量具有连续的取值范围。

但是,据我了解,计算机科学中的“状态机”或“有限状态机”被定义为状态(作为节点)和转换(作为有向边)的有向图。

用于描述 OpenGL 的“状态机”术语是否与一般计算机科学中定义的“状态机”相同。

4

1 回答 1

6

许多状态变量具有连续的取值范围。

AGLfloat很像常规的float,具有固定的位大小。32 位 IEEE-754 只有 32 位存储。因此,它只能假设 2^32 个不同的值(尽管其中相当多的值将被视为相同或不可比较)。虽然 2^32 很大,但它仍然非常有限

一个 OpenGL 上下文有一组明确的和有限的状态值。每个状态值都可以采用一组有限的离散值。因此,可以将 OpenGL 上下文建模为一个有限状态机,改变状态中的值只是进行状态转换(尽管 OpenGL 对象,特别是程序对象,使这个视图有些复杂)。


话虽如此,“OpenGL 是一个状态机”声明的要点实际上与实际的有限状态机无关。该声明通常用于提醒:

  1. OpenGL会记住上次设置到上下文中的状态,即使您忘记了上次设置的状态。

  2. OpenGL 会记住上次设置到上下文中的状态,即使您忘记了上次设置的状态。

OpenGL 是一个状态机,因为它会记住它的状态。除非您明确执行转换,否则它会保持原来的状态。

基本上,这是一个提醒,要么跟踪当前状态,要么在渲染循环开始时设置所有状态,以确保它是你认为的那样。

于 2016-04-09T03:53:26.633 回答