Предварительные сведения

ный в активной странице, после переключения не изменяется. При использовании D3DSWAPEFFECT_FLIP активная страница после переключения изменяется, даже если использовалось копирование данных активной страницы в видимую.

Если заданный эффект не соответствует реальному способу переключения, это приводит к дополнительным потерям времени и видеопамяти. Выбор режима D3DSWAPEFFECTC0PY при аппаратном переключении приводит к тому, что создается вспомогательный буфер, в который копируется активная страница. После переключения страниц содержимое активной страницы заполняется из вспомогательного буфера последним нарисованным кадром. В принципе, восстановление можно организовать без резервного буфера, копируя данные из видимой страницы.

Выбор константы D3DSWAPEFFECTFLIP в оконном режиме потребует от библиотеки создания вспомогательного буфера для предварительного копирования в него видимой страницы. После переключения страниц активная страница заполняется из вспомогательного буфера предыдущим кадром.

Итак, при двойной буферизации рисуется всегда тот кадр, который невидим на экране (в BGI-графике он называется активной страницей). Для отображения подготовленного кадра вызывается функция переключения страниц, но он станет видимым только после прихода очередного кадрового синхроимпульса. Предположим, что в системе с двойной буферизацией переключение страниц вызвано в тот момент, когда только начался прямой ход луча по кадру. Графическая библиотека при помощи записи данных в регистр начального адреса дает команду сделать активную страницу видимой. Но до конца прямого хода луча действительная смена страниц не произойдет. Если при этом сразу же начать стирать (заполнять цветом фона) изображение в новой активной странице, то до конца прямого хода луча экран вместо изображения будет заполнен цветом фона. Поскольку это недопустимо, то выполняется цикл ожидания синхроимпульса, на что может уйти до 50 % процессорного времени.

Графический адаптер может формировать сигнал прерывания по обратному ходу луча, так что теоретически возможно организовать полезное использование времени ожидания, а формирование изображения начинать по сигналу прерывания. Но графические библиотеки не используют эту возможность.


⇐ Предыдущая| |Следующая ⇒