Является ли OpenGL "конечным автоматом"?

OpenGL обычно описывается как "конечный автомат", потому что, насколько я знаю, он состоит из глобальных переменных, которые могут быть установлены через его API, и они изменяют / определяют его поведение. Например, можно установить текущий цвет или матрицу преобразования. Многие из переменных состояния имеют непрерывный диапазон значений.

Однако, насколько я понимаю, "конечный автомат" или "конечный автомат" в информатике определяется как ориентированный граф состояний (как узлы) и переходов (как направленные ребра).

Является ли термин "конечный автомат", используемый для описания OpenGL, таким же, как термин "конечный автомат", который определен в общей компьютерной науке.

1 ответ

Решение

Многие из переменных состояния имеют непрерывный диапазон значений.

GLfloat, как обычный float, имеет фиксированный размер в битах. 32-разрядный IEEE-754 имеет только 32-разрядное хранилище. Следовательно, он может принимать только 2^32 различных значения (хотя довольно многие из этих значений будут считаться идентичными или несопоставимыми). И хотя 2^32 велико, оно все еще очень конечно.

Контекст OpenGL имеет четко определенный и конечный набор значений состояний. И каждое значение состояния может принимать конечный набор дискретных значений. Таким образом, можно смоделировать контекст OpenGL как конечный автомат с изменением значений в состоянии, просто делая переходы состояния (хотя объекты OpenGL, особенно программные объекты, несколько усложняют это представление).


Все это, как говорится, суть утверждения "OpenGL - это конечный автомат" на самом деле не имеет ничего общего с фактическим конечным автоматом. Заявление обычно упоминается как напоминание о том, что:

  1. OpenGL запомнит состояние, которое в последний раз было задано в контексте, даже если вы забыли, что устанавливали в последний раз.

  2. OpenGL запомнит состояние, которое в последний раз было задано в контексте, даже если вы забыли, что устанавливали в последний раз.

OpenGL является конечным автоматом, потому что он запоминает свое состояние. Если вы явно не выполните переход, он останется в том состоянии, в котором он был.

По сути, это напоминание, чтобы либо отслеживать текущее состояние, либо просто установить все состояние в начале цикла рендеринга, чтобы убедиться, что это то, что вы думаете.

Другие вопросы по тегам