netlib.narod.ru< Назад | Оглавление | Далее >

Цепочки переключения и цели визуализации

Так что же происходит в устройстве, которое рисует треугольники? Есть несколько неявных, относящихся к устройству вещей, которые определяют как рисуются объекты. У каждого устройства есть неявная цепочка переключений, а также цель визуализации.

Цепочка переключений (swap chain) — это набор буферов, используемых для управления визуализацией. Есть вторичный буфер (back buffer), где происходит все рисование в цепочке обмена. Когда показ цепочки обмена выполняется в режиме SwapEffect.Flip, данные вторичного буфера «перекидываются» в первичный буфер, откуда видеокарта и читает данные. В то же время третий буфер становится новым вторичным буфером, а предыдущий первичный буфер перемещается в третий буфер (детали показаны на рис. 1.6).


Рис. 1.6. Цепочка переключения вторичных буферов

Рис. 1.6. Цепочка переключения вторичных буферов


Сама операция «переключения» выполняется путем смены места из которого видеокарта читает данные и обмена старого указателя с текущим местоположением вторичного буфера. В DirectX 9 термин «переключение» (flip) обычно используется для указания ситуации, когда обновленный вторичный буфер отображается на экране. В оконном режиме эта операция копирует данные, предполагая, что наше устройство управляет не всем экраном, а лишь небольшой его частью. Тем не менее результат в обоих случаях одинаковый. В полноэкранном режиме при использовании режима SwapEffect.Flip, происходит настоящее переключение; некоторые драйверы также реализуют операцию переключения для режимов SwapEffect.Discard или SwapEffect.Copy.

Если вы создаете цепочку переключений, используя SwapEffect.Copy или SwapEffect.Flip, это гарантирует, что любые операции показа не будут влиять на содержимое вторичного буфера в цепочке переключений. Для этого в случае необходимости среда времени выполнения создает дополнительный скрытый буфер. Я рекомендую вам указывать SwapEffect.Discard, чтобы избежать возможной потери производительности. Данный режим позволяет драйверу самому определить наиболее эффективный метод показа вторичного буфера. Стоит отметить, что при использовании SwapEffect.Discard вы должны обеспечить очистку всего вторичного буфера перед началом новых операций рисования. В режиме отладки среда времени выполнения заполняет вторичный буфер случайными данными, чтобы разработчик видел, не забыл ли он выполнить очистку.

Вторичный буфер в цепочке переключений может использоваться как цель визуализации. По умолчанию, если при создании устройства создается цепочка переключений, то цель визуализации устанавливается на вторичный буфер цепочки переключений. Цель визуализации (render target) — это поверхность, которая хранит изображение, получаемое в результате выполненных операций рисования. Если вы создаете несколько цепочек переключений для обработки различных операций рисования, то должны гарантировать, что цель визуализации вашего устройства будет обновлена заранее. Мы обсудим это более подробно в следующих главах.

ИСПОЛЬЗОВАНИЕ МНОЖЕСТВЕННОЙ ВЫБОРКИ
Необходимо упомянуть, что если вы используете сглаживание (или множественную выборку (multisampling), как оно называется в Direct3D), необходимо использовать метод SwapEffect.Discard. Все другие варианты приведут к сбою.

netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz