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

Для рисования созданы две текстуры и при помощи метода GetSurfaceLevel ( ), который уже применялся при имитации полупрозрачности, получены интерфейсы к этим текстурам как к поверхностям, в которые возможно проводить рисование:

IDirect3DSurface9 *RenderTarget; IDi rect3DSurface9 *RenderTargetP:

Интерфейсы не входят в цепочку переключения и назначаются на роль поверхности рисования при помощи метода SetRenderTarget( ):

Dev i ce->SetRende rTa rget(0.RenderTa rget): RenderDXO:
Dev i ce->SetRenderTa rget(0.RenderTa rgetP): RenderDXO;

Формирование ракурсов изображения выполняется на этих дополнительных поверхностях. После обновления изображения данные из них копируются в страницы цепочки переключения при помощи метода Device->StretchRect( ). Эту функцию стоит вызывать в тот момент, когда завершено формирование очередного

Формирование стереоизображений

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

Чтобы процесс копирования не конкурировал с переключением страниц, после формирования изображения организуется цикл ожидания начала развертки. Прежде всего при инициализации запрашивается интерфейс IDi rect3DSwapChai n9:

IDirect3DSwapChain9 *pSwapChain;

dDeviсе->GetSwapChain( O.&pSwapChain ); Перед началом процесса копирования каждой страницы организуется ожидание начала прямого хода луча по кадру на основе запроса состояния развертки:


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