Диспетчер окон OpenGL - многопроцессная компоновка

Я хотел бы разработать простой оконный менеджер, способный объединять результаты нескольких процессов. Моя первая идея состояла в том, чтобы использовать только отдельные потоки для автономных приложений, поэтому я использую только один контекст и делюсь им между основным потоком приложений и менеджера, но со второй мыслью, которая не звучит как хорошая идея, так как любой из сбой потоков прекратит все.

Поэтому я решил, что на самом деле он должен поддерживать выделенные процессы для приложений, но это подводит меня к вопросу о том, как именно я соединяю результаты различных процессов вместе и высокопроизводительным способом. Копирование данных из GPU в CPU для совместного использования в системной памяти просто не вариант. Из параллельного FAQ по OpenGL стало ясно, что использование одного контекста из нескольких процессов невозможно, если только он не является косвенным, что приводит к очень низкой производительности.

Итак, как это делают существующие оконные менеджеры? Естественно, я не ожидаю каких-либо подробностей низкого уровня, только общий обзор концепции.

1 ответ

Решение

Итак, как это делают существующие оконные менеджеры? Естественно, я не ожидаю каких-либо подробностей низкого уровня, только общий обзор концепции.

В X11 есть расширения X11 GLX_ARB_texture_from_pixmap и Render, которые позволяют перемещать окна за пределы экрана и связывать растровые изображения окна X11 как текстуры в OpenGL. Название, как это реализовано, называется AIGLX (ускоренный косвенный GLX), который, несмотря на название, не зависит от косвенного контекста GLX. Косвенный в этом случае означает, что все происходит на сервере дисплея.

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

Это отличается от Wayland, где композиторы общаются с другими процессами напрямую для обмена информацией кадрового буфера. Лично мне модель X11 нравится больше, но это только мое мнение.

Другие вопросы по тегам