Я обновляю приложение, в котором измерение времени представления стимула на экране требует наибольшей точности. В настоящее время он написан с помощью DirectDraw, который давно вышел на пастбище, и там необходимо обновить нашу графическую библиотеку.
Способ измерения времени представления использует обнаружение конца периода вертикальной пустоты. В частности, мне нужно знать с максимально возможной точностью, когда все, что было перевернуто на первичную поверхность (или представлено в цепочке подкачки), на самом деле рисуется экраном. Обнаружение линии сканирования может повысить уверенность в этом измерении, но я мог бы работать только с обнаружением, когда период вертикальной пустой закончился сразу после вызова Flip или Present.
Direct 3D 9 имеет метод IDirect3DDevice9:: GetRasterStatus, который возвращает структуру D3DRASTER_STATUS, которая включает логическое значение InVBlank, которое описывает, находится ли устройство в вертикальную заготовку, а также текущую линию сканирования. DirectDraw имеет аналогичные функции (IDirectDraw:: GetVerticalBlankStatus, а также IDirectDraw:: GetScanLine, которая возвращает DDERR_VERTICALBLANKINPROGRESS во время вертикальной пустоты, может использоваться для обнаружения VB).
Однако я не смог найти подобную функцию в Direct3D11. Кто-нибудь знает, была ли эта функция перемещена или удалена между Direct3D9 и Direct3D11, а если последняя, почему?