Синхронизация между DWM и окном Direct3D

Что произойдет, если приложение находится в середине рисования в буфер (поверхность d3d), а DWM необходим буфер для перерисовки экрана или наоборот?

Есть ли какой-нибудь механизм синхронизации?

1 ответ

Решение

Цепочки обмена всегда имеют два или более буферов, и в любой конкретный момент времени DWM владеет одним из них. Если новый кадр не Present() Редактируемый приложением к моменту появления v-пробела, DWM перерисовывает последний кадр, используя уже имеющийся буфер. Синхронизация может быть достигнута путем насыщения текущей очереди (после примерно трех вызовов следующий будет блокироваться до v-blank) или путем ручного вызова WaitForVBlank. В Windows 8.1 более надежный механизм доступен с использованием IDXGISwapChain2:: GetFrameLatencyWaitableObject. Нет никакого способа заставить DWM ждать приложения, так как это приведет к зависанию всего пользовательского интерфейса ОС.

Другие вопросы по тегам