DirectX 11 показывает изменения с минимальной задержкой - PullRequest
0 голосов
/ 13 января 2019

Это кажется очень простым вопросом, но после прочтения множества похожих вопросов и документов я все еще не могу найти ответ. У меня есть настольное приложение на Windows 10, которое использует DirectX 11 для генерации контента. Приложение работает со скоростью 60 FPS, моя цель - увидеть изменения, которые я внесу в выходной буфер в следующем кадре - ожидая время между изменением и появлением до 16,6 мс. На самом деле я могу добиться такой задержки только с разрывом кадра. Или без разрыва задержка составляет более 16,6 мс (в среднем около 25 мс).

Что я пробовал:

  1. Создание цепочки подкачки CreateSwapChainForHwnd с DXGI_SWAP_EFFECT_DISCARD (одиночный буфер) и с DXGI_SWAP_EFFECT_FLIP_DISCARD (2 буфера)
  2. Создать цепочку подкачки в полноэкранном режиме или в виде окна
  3. Представьте буферы, используя Present1 с SyncInterval из 0 или 1
  4. Представлено с Present1 с флагом по умолчанию или с DXGI_PRESENT_RESTART
  5. Не ждать до Present1, не ждать IDXGIOutput::WaitForVBlank, не создавать цепочку обмена как DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT и ждать на ожидаемом объекте
  6. Набор IDXGIDevice1::SetMaximumFrameLatency(1) и IDXGISwapChain2::SetMaximumFrameLatency(1)

Я могу поделиться более подробными результатами теста, если это поможет.

...