OpenGL是一个"状态机"?

时间:2016-04-09 02:57:33

标签: opengl state-machine automata-theory

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

然而,据我所知,一台"状态机"或者"有限状态机"在计算机科学中被定义为状态(作为节点)和转换(作为有向边)的有向图。

是#34;状态机"用于描述OpenGL的术语与"状态机"相同这是一般计算机科学中的defined

1 个答案:

答案 0 :(得分:6)

  

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

GLfloat与常规float非常相似,具有固定的比特大小。 32位IEEE-754只有32位存储空间。因此,它只能假设2 ^ 32个不同的值(尽管这些值中的相当一部分将被视为相同或无法比拟)。虽然2 ^ 32很大,但它仍然非常有限

OpenGL上下文具有明确且有限的状态值集。并且每个状态值可以采用一组有限的离散值。因此可以将OpenGL上下文建模为有限状态机,在状态中更改值只是简单地进行状态转换(尽管OpenGL对象,特别是程序对象,在某种程度上使这个视图复杂化)。

所有这一切," OpenGL的主要观点是状态机"声明确实没有没有与实际的有限状态机有关。该声明通常被称为提醒:

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

  2. 即使您忘记了上次设置的内容,OpenGL也会记住上次设置的状态。

  3. OpenGL是一个状态机,因为它记住了它的状态。除非您明确执行转换,否则它将保持其所处的状态。

    基本上,它提醒您要么跟踪当前状态,要么只在渲染循环开始时设置所有状态,以确保它符合您的想法。