Доступ к видеопамяти с помощью mmap (), зная контекст OpenGL и визуальный идентификатор - PullRequest
2 голосов
/ 03 января 2012

возможно ли узнать выделенный диапазон памяти контекста OpenGL? Предположительно, этот диапазон памяти должен быть доступен с помощью mmap () из другого процесса. Может ли этот метод работать, или есть фундаментальные проблемы с ним?

Обновление Мы используем систему GNU / Linux с современной установкой X11 и можем выбрать производителя видеокарты, драйверы которого поддерживают такой прием.

Ответы [ 3 ]

3 голосов
/ 03 января 2012

Ну, есть бесчисленное множество причин, почему это не сработает.

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

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

В-третьих, графические процессоры часто работают с графической памятью. Даже если вы можете использовать mmap для памяти графического процессора (что само по себе маловероятно), вы, вероятно, потеряете много производительности, когда это произойдет. И память GPU тасуется намного больше, чем память CPU.

Вы, похоже, пытаетесь сделать графику на основе IPC. Лучше всего, чтобы графическая система представляла собой собственный процесс, с которым вы общаетесь с помощью методов IPC, а не пыталась общаться с OpenGL через IPC.

0 голосов
/ 03 января 2012

возможно ли узнать диапазон выделенной памяти контекста OpenGL?

Я думаю, что вы запрашиваете доступ к памяти, где контекст OpenGL хранит свои объекты и выходные данные рендеринга.

Нет.Контекст OpenGL является абстрактной конструкцией и имеет свою память на совершенно другой машине и / или архитектуре.

В дополнение к этому нет стандартного или даже общего макета памяти для содержимого контекста OpenGL.Если вас интересует только результат рендеринга, вы можете нажать на устройство кадрового буфера (/dev/fb…), хотя производительность будет ниже, чем просто чтение содержимого кадрового буфера с помощью glReadPixels.То же самое касается касания диапазона памяти PCI, которое практически совпадает с касанием устройства кадрового буфера.

0 голосов
/ 03 января 2012

Зависит от ОС и драйвера. Это возможно с X-сервером . Хотя комбинация X-сервера, драйвера дисплея и openGL означает, что при рисовании он может перемещать память для определенного объекта на карте.

Возможно, проще использовать буфер пикселей / вершин openGL и получить указатель буфера

...