OpenGL 是 "state machine" 吗?

Is OpenGL a "state machine"?

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

然而,据我了解,计算机科学中的 "state machine" 或 "finite state machine" 被定义为状态(作为节点)和转换(作为有向边)的有向图。

用于描述 OpenGL 的 "state machine" 术语是否与一般计算机科学中的 defined "state machine" 相同。

Many of state variables have continuous value range.

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

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


综上所述,"OpenGL is a state machine" 语句的要点确实与实际的有限状态机毫无关系。该声明通常被说成是提醒:

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

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

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

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