OpenGL是一个"状态机"吗?

Ali*_*iba 2 opengl state-machine automata-theory

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

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

用于描述OpenGL的"状态机"术语是否与通用计算机科学中定义的"状态机"相同.

Nic*_*las 6

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

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

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


总而言之,"OpenGL是状态机"声明的要点实际上与实际的有限状态机无关.该声明通常被称为提醒:

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

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

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

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