2014-11-14 7 views
0

Если я устанавливаю интервал представления в Direct3D9 на D3DPRESENT_INTERVAL_ONE, когда я вызываю Present, он ждет, пока монитор не обновится. Он всегда ждет правильную сумму и (предположительно) не использует спин-блокировку.Как работает интервал презентации D3D9?

Я хотел бы иметь возможность делать то же самое «ожидание», которое присутствует в Direct3D9, однако я не хочу использовать Direct3D. Как точно ждать vsync совершенно без использования спин-блокировки? Можно ли запрограммировать ожидание без Direct3D?

ответ

1

Синхронизация с вертикальным обратным трактом обрабатывается драйвером в зависимости от устройства. Не исключено, что существует некоторая реализация, просто оживленная, опросив какой-либо регистр устройства, пока не обнаружит начало интервала обратного хода. Альтернативой будет спать, ожидая прерывания устройства, которое освобождает процессор для других задач, но увеличивает задержку из-за необходимых переходов режима ядра/режима пользователя. Также возможно, чтобы драйвер реализовал гибридный подход, оценив время возврата, спящий на бит меньше, чем это, а затем ожидание.

Я не знаю, какая из этих трех возможных реализаций типична, но это не имеет большого значения. Windows не предоставляет никаких независимых для устройства средств для приложения Windows для синхронизации с виртуальным обратным каналом вне DirectX (и я думаю, OpenGL). В отличие от драйвера видеокарты, приложения не имеют прямого доступа к аппаратным средствам, поэтому не могут считывать регистры устройства и не запрашивать или обрабатывать прерывания.

Смежные вопросы