Паттерны программирования игр
— Паттерны очередности
145
Невероятными умственными усилиями мы находим
решение: мы сделаем
две
сцены, и зрители смогут их ви-
деть одновременно. Но у каждой сцены будет отдельное
освещение. Назовем их сцена А и сцена В. Первое дей-
ствие происходит на сцене А. В это время свет на сцене В
выключен и работники подготавливают ее. Когда пер-
вое действие завершается, мы выключаем свет на сце-
не А и включаем на сцене В. Зрители смотрят туда —
и второе действие начинается без задержки.
В это самое время наши работники перемещают-
ся на сцену А, убирают старые декорации и готовят ее
к
третьему
действию. Как только заканчивает второе
действие, мы снова включаем свет на сцене А. И продол-
жаем подготавливать ту сцену, где выключен свет, для
следующего действия, вплоть до окончания постановки.
При смене действий мы просто переключаем свет с од-
ной сцены на другую. А зрители могут видеть целост-
ную постановку без временных разрывов. И они не ви-
дят происходящего за кулисами.
Вернемся к графике
Точно так же работает двойная буферизация, и этот про-
цесс лежит в основе любой системы рендеринга почти
каждой игры, с которой вам приходилось сталкиваться.
Вместо одного кадрового буфера по факту используется
два
. Один из них представляет текущий кадр, сцену А из
нашего примера — буфер, откуда видеодрайвер произво-
дит считывание. Графический процессор может произво-
дить из него считывание сколько угодно и когда угодно.
В то же время наш код, ответственный за рендеринг,
заполняет
второй
буфер. Это наша сцена В без света.
Когда код заканчивает свою работу, он переключает
свет,
меняя
буферы местами. Таким образом мы сооб-
щаем видеодрайверу: пора считывать из другого буфера.
До тех пор пока смена буферов происходит в последний
момент обновления, мы не столкнемся с эффектом раз-
рыва, так как все изображение появится сразу.
С помощью полупро-
зрачного зеркала при
правильном расположе-
нии сцен мы можем до-
биться того, что зрите-
лям будет казаться,
будто две сцены нахо-
дятся в одном
месте
.
Как только свет пере-
ключится, они увидят
другую сцену, но им
даже не придется куда-
либо переводить взгляд.
Реализацию идеи
оставлю читателям в ка-
честве дополнительного
задания.
Хотя не
все
игры и кон-
соли работают именно
так. Более старые вер-
сии, память которых
ограничена, тщательно
синхронизируют про-
цессы записи и чтения.
Не самая простая задача.
Do'stlaringiz bilan baham: |