Цепочка обмена
В компьютерной графике цепочка подкачки (также swapchain ) — это серия виртуальных буферов кадров, используемых видеокартой и графическим API для стабилизации частоты кадров , уменьшения заиканий и ряда других целей. Из-за этих преимуществ многие графические API требуют использования цепочки подкачки. Цепочка подкачки обычно существует в графической памяти , но может существовать и в системной памяти. Цепочка обмена с двумя буферами — это двойной буфер .
Функция
[ редактировать ]В каждой цепочке обмена имеется как минимум два буфера. Первый кадровый буфер, экранный буфер, представляет собой буфер, который отображается на выходе видеокарты . Остальные буферы известны как обратные буферы. Каждый раз, когда отображается новый кадр , первый обратный буфер в цепочке подкачки занимает место экранного буфера, это называется презентацией или подкачкой . С предыдущим экранным буфером и другими обратными буферами (если они существуют) можно выполнить множество других действий. Экранный буфер можно просто перезаписать или вернуть в конец цепочки подкачки для дальнейшей обработки. Предпринятое действие определяется клиентским приложением и зависит от API.
Директ3D
[ редактировать ]Microsoft Direct3D реализует класс SwapChain. Каждому хост-устройству назначена по крайней мере одна цепочка подкачки, а другие могут быть созданы клиентским приложением. [1] API предоставляет три метода обмена: копирование, удаление и переворот. Когда SwapChain настроен на переворот, экранный буфер копируется в последний обратный буфер, затем все существующие обратные буферы копируются вперед по цепочке. Когда копирование установлено, каждый обратный буфер копируется вперед, но экранный буфер не переносится в последний буфер, оставляя его неизменным. Переворот не работает, когда имеется только один обратный буфер, поскольку экранный буфер копируется поверх единственного обратного буфера, прежде чем его можно будет представить. В режиме сброса драйвер выбирает лучший метод. [2]
Сравнение с тройной буферизацией
[ редактировать ]Вне контекста Direct3D тройная буферизация относится к методу, позволяющему приложению выполнять отрисовку в зависимости от того, какой задний буфер был обновлен последним. Это позволяет приложению всегда продолжать рендеринг, независимо от скорости отрисовки кадров приложением или скорости отправки кадров на дисплей. Тройная буферизация может привести к тому, что кадр будет отброшен без отображения, если два или более новых кадров полностью визуализируются за время, необходимое для отправки одного кадра на дисплей. Напротив, цепочки подкачки Direct3D представляют собой строгую очередь «первым пришел — первым вышел» , поэтому каждый кадр, нарисованный приложением, будет отображаться, даже если доступны новые кадры. Direct3D не реализует новейшую стратегию замены буферов, а в документации Microsoft цепочка замены Direct3D из трех буферов называется «тройной буферизацией». Тройная буферизация, описанная выше, лучше подходит для интерактивных целей, таких как игры, но цепочки подкачки Direct3D, состоящие из более чем трех буферов, могут быть лучше для таких задач, как представление кадров видео, для которых требуется время. декодирование каждого кадра может быть очень переменным. [3]
Ссылки
[ редактировать ]- ^ «Класс SwapChain» . Майкрософт . Проверено 30 октября 2009 г.
- ^ «Цепочки обмена» . neXe . Проверено 16 мая 2015 г.
- ^ «Тройная буферизация: почему нам это нравится» . АнандТех . Проверено 27 мая 2014 г.