Windows, как визуализировать в память для сканирования видео напрямую? - PullRequest
0 голосов
/ 10 октября 2019

В Windows и при оптимальном использовании OpenGL можно ли выполнить рендеринг непосредственно в память для сканирования видео (порт HDMI видеокарты)? Никакой замены буфера, никакой системы управления окнами - прямой рендеринг в буфер, из которого пиксели копируются в провод. В конечном счете, я хочу реализовать прототип гоночного сканлинга. Но кажется, что по умолчанию способ создания контекста opengl на окнах заключается в создании pixelformatdescriptor и, насколько я понимаю, просто выделяет внеэкранный буфер (с двойной буферизацией, если требуется), содержимое которого затем копируется оконным менеджером и компонуетсяпрежде чем каким-либо образом установить в качестве памяти для сканирования видео.

1 Ответ

1 голос
/ 10 октября 2019

В Windows и оптимально с использованием OpenGL можно ли выполнить рендеринг непосредственно в память для сканирования видео (порт HDMI видеокарты)?

В дни, предшествующие Windows-Vista DWM /Aero вы бы просто создали окно и создать один буферный контекст OpenGL. В те дни клиентские регионы были представлениями памяти фактического буфера сканирования.

Конечно, OpenGL уже тогда не определял никакой связи между тем, когда были выданы команды рисования, и когда или в каком порядке они выполнялись. ;до тех пор, пока «результат выглядит точно так, как если бы все было выполнено в таком порядке», придерживалось правила, любое изменение порядка было честной игрой. Так что уже тогда вы практически не могли использовать OpenGL для гонки луча. И вы не могли бы использовать Direct3D, я мог бы добавить.

Однако вы могли бы использовать DirectDraw в режиме exclusive , который фактически предоставил бы вам прямой доступ ко всему буферу сканирования,таким образом, что вы могли бы на самом деле гонять луч.

Но, учитывая современные графические стеки, даже с этими гонками луч больше не работает, потому что:

Нетзамена буфера, отсутствие системы управления окнами - прямая рендеринг в буфер, из которого пиксели копируются в провод.

Хорошо, если вы можете использовать древнее оборудование, которое действительно работает таким образом. В наши дни это все о цепях обмена. Например, в интегрированной графике Intel текущего поколения, даже в текстовом режиме дисплей даже не обновлялся бы, если бы что-то не качало цепочку обмена.

Конечно, вы все равно можете выполнить обмен во время сканирования в середине кадра,таким образом разрывая рамку. (что является одной из причин того, почему к этой дате двойная буферизация в X.Org обычно разрывает движущиеся изображения (видео)).


В вашем комментарии:

Lookingна гарнитурах VR, например, VIVE, он может работать в «расширенном режиме», когда гарнитура воспринимается как дополнительный монитор, или в «прямом режиме»

В этом прямом режиме нет ничего особенного,Происходят две вещи:

  1. HMD просто скрыт от выбора дисплеев, на которые можно расширить рабочий стол.

  2. Для доступа к дисплеюсоздается графический контекст в прямом режиме (с использованием 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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...