opengl - OpenGL 是 "state machine"吗?

标签 opengl state-machine automata-theory

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

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

用于描述 OpenGL 的“状态机”术语与 defined 的“状态机”相同吗?一般计算机科学。

最佳答案

Many of state variables have continuous value range.

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

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

<小时/>

尽管如此,“OpenGL 是一个状态机”声明的要点实际上与实际的有限状态机没有任何关系。该声明通常是为了提醒:

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

  2. OpenGL 将记住上下文中最后设置的状态,即使您忘记了最后设置的状态。

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

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

关于opengl - OpenGL 是 "state machine"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36512216/

相关文章:

java - Spring 状态机的替代品

computation-theory - 1^3^n 对于 n>=1 图灵机

python - 实现 3X3 棋盘上的走棋 NFA

opengl - 为什么我会在 GLSL 中看到这个 OpenGL 球形映射工件?

c++ - 来自结构数组的平面数组?

python - Python 字典中的反向键(由列表组成)和值

java - 使用状态机解析 wiki 标记

automata-theory - 线性时间逻辑问题(2)

c++ - 如何在WinAPI应用程序中集成OpenGL和GLU?

opengl - DirectDraw Surface - 数据布局