С чего начать, если я хочу написать 3D-композитор Wayland (используя OpenGL)?

Поэтому я хотел бы создать компоновщик для wayland, который поддерживает 3D-эффекты для окон (что-то похожее на compiz, но на wayland). Я уже видел этот вопрос: Где сделать Я начинаю, хочу ли я написать компоновщик Wayland?, но единственный ответ указывает на SWC(https://github.com/michaelforney/swc), что в моем случае неприменимо, так как я хочу использовать OpenGL и поскольку SWC не поддерживает 3D. Итак, есть ли какой-нибудь проект/библиотека/книга/туториал/и т. д., где я могу изучить необходимые вещи для написания своего собственного WM на Wayland? Заранее спасибо.


person thefunkyjunky    schedule 26.10.2015    source источник
comment
Это довольно широкий вопрос. Я думаю, вам придется напрямую использовать libwayland и комбинировать его с некоторой магией OpenGL. Поскольку Wayland использует EGL, это возможно.   -  person PatJ    schedule 26.10.2015
comment
Да я так и подозревал. Но как мне создать контекст OpenGL через EGL и как запустить EGL?   -  person thefunkyjunky    schedule 26.10.2015
comment
Я не знаю, но если вы попробуете что-то, не стесняйтесь ответить себе своими результатами (даже если они плохие).   -  person PatJ    schedule 27.10.2015
comment
Вас также может заинтересовать WLC, который упоминается на странице проекта SWC.   -  person eyelash    schedule 22.12.2015
comment
Было бы здорово, если бы была книга, но ее нет. Вам придется потратить время на исходный код. Взгляните на автомобиль.   -  person ybakos    schedule 26.03.2016


Ответы (1)


Единственной целью протокола wayland является связь между клиентом и сервером. Сервер предоставляет клиенту входные события, а клиент предоставляет серверу буфер (который можно сопоставить с текстурой OpenGL). Откуда сервер/композитор получает свои входные события и что он делает с буфером, полностью зависит от композитора.

Таким образом, самому компоновщику нужен источник входных событий и способ отрисовки результата. Вот почему многие компоновщики Wayland имеют несколько серверных частей: они могут работать поверх X11, непосредственно поверх ядра Linux или даже поверх другого сервера Wayland.

Ответ на ваш вопрос действительно зависит от того, где вы хотите запустить свой композитор. Написание компоновщика, работающего поверх X11, может быть самым простым способом начать работу, если вы уже знакомы с тем, как настроить и запустить приложение OpenGL. Если вы хотите запустить свой компоновщик непосредственно поверх ядра Linux, вы, вероятно, захотите изучить evdev и libinput для ввода и DRM/KMS вместе с EGL поверх GBM, чтобы создать контекст OpenGL и отобразить результат на мониторе. Существуют также библиотеки рендеринга (например, evas), которые могут работать непосредственно поверх ядра Linux, но я не знаю, насколько далеко они позволяют вам вводить свой собственный код OpenGL.

После того, как вы решили, где вы хотите запустить свой компоновщик, вы можете начать с простого написания обычного приложения OpenGL, а затем продолжить и интегрировать сервер wayland для отображения и взаимодействия с реальными окнами клиента.

person eyelash    schedule 22.12.2015
comment
И где я могу найти, как интегрировать этот сервер wayland (например, для оконного менеджера x я видел несколько руководств и несколько очень простых оконных менеджеров, которые можно использовать в качестве справочного кода)? - person thefunkyjunky; 22.12.2015
comment
Я только что написал минимальный компоновщик wayland, работающий поверх X11, который может быть полезно. Там действительно не так много руководств или примеров. Вам придется посмотреть исходный код других композиторов. - person eyelash; 22.12.2015
comment
Кажется интересным. Благодарю вас! - person thefunkyjunky; 22.12.2015