В Windows и оптимально с использованием OpenGL можно ли выполнить рендеринг непосредственно в память для сканирования видео (порт HDMI видеокарты)?
В дни, предшествующие Windows-Vista DWM /Aero вы бы просто создали окно и создать один буферный контекст OpenGL. В те дни клиентские регионы были представлениями памяти фактического буфера сканирования.
Конечно, OpenGL уже тогда не определял никакой связи между тем, когда были выданы команды рисования, и когда или в каком порядке они выполнялись. ;до тех пор, пока «результат выглядит точно так, как если бы все было выполнено в таком порядке», придерживалось правила, любое изменение порядка было честной игрой. Так что уже тогда вы практически не могли использовать OpenGL для гонки луча. И вы не могли бы использовать Direct3D, я мог бы добавить.
Однако вы могли бы использовать DirectDraw в режиме exclusive , который фактически предоставил бы вам прямой доступ ко всему буферу сканирования,таким образом, что вы могли бы на самом деле гонять луч.
Но, учитывая современные графические стеки, даже с этими гонками луч больше не работает, потому что:
Нетзамена буфера, отсутствие системы управления окнами - прямая рендеринг в буфер, из которого пиксели копируются в провод.
Хорошо, если вы можете использовать древнее оборудование, которое действительно работает таким образом. В наши дни это все о цепях обмена. Например, в интегрированной графике Intel текущего поколения, даже в текстовом режиме дисплей даже не обновлялся бы, если бы что-то не качало цепочку обмена.
Конечно, вы все равно можете выполнить обмен во время сканирования в середине кадра,таким образом разрывая рамку. (что является одной из причин того, почему к этой дате двойная буферизация в X.Org обычно разрывает движущиеся изображения (видео)).
В вашем комментарии:
Lookingна гарнитурах VR, например, VIVE, он может работать в «расширенном режиме», когда гарнитура воспринимается как дополнительный монитор, или в «прямом режиме»
В этом прямом режиме нет ничего особенного,Происходят две вещи:
HMD просто скрыт от выбора дисплеев, на которые можно расширить рабочий стол.
Для доступа к дисплеюсоздается графический контекст в прямом режиме (с использованием DirectX или Vulkan), который в основном работает как полноэкранное окно с цепочкой подкачки.
Vulkan (этот текст относится к более старой версииVulkan, но все еще применяется): https://vulkan.lunarg.com/doc/view/1.0.30.0/linux/vkspec.chunked/ch29s03.html
DRM арендует в Linux: https://keithp.com/blogs/DRM-lease/