Это кажется очень простым вопросом, но после прочтения множества похожих вопросов и документов я все еще не могу найти ответ. У меня есть настольное приложение на Windows 10, которое использует DirectX 11 для генерации контента. Приложение работает со скоростью 60 FPS, моя цель - увидеть изменения, которые я внесу в выходной буфер в следующем кадре - ожидая время между изменением и появлением до 16,6 мс. На самом деле я могу добиться такой задержки только с разрывом кадра. Или без разрыва задержка составляет более 16,6 мс (в среднем около 25 мс).
Что я пробовал:
- Создание цепочки подкачки
CreateSwapChainForHwnd
с DXGI_SWAP_EFFECT_DISCARD
(одиночный буфер) и с DXGI_SWAP_EFFECT_FLIP_DISCARD
(2 буфера)
- Создать цепочку подкачки в полноэкранном режиме или в виде окна
- Представьте буферы, используя
Present1
с SyncInterval
из 0 или 1
- Представлено с
Present1
с флагом по умолчанию или с DXGI_PRESENT_RESTART
- Не ждать до
Present1
, не ждать IDXGIOutput::WaitForVBlank
, не создавать цепочку обмена как DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT
и ждать на ожидаемом объекте
- Набор
IDXGIDevice1::SetMaximumFrameLatency(1)
и IDXGISwapChain2::SetMaximumFrameLatency(1)
Я могу поделиться более подробными результатами теста, если это поможет.