Окно X из потока OpenGL (glx) в Qt

Я делаю плотную потоковую передачу текстур (несколько потоков живого видео) с OpenGL, используя объекты Puffer Pixel (используя QtOpenGL/QGLWidget здесь не вариант) в Linux.

Поток текстур выполняется отдельным, настраиваемым модулем cpp OpenGL и потоком (полностью отделенным от библиотек Qt)

Тем не менее, я хочу транслироваться в x окон, которые управляются подсистемой Qt (т.е. видео появляется в виджетах)

У меня есть два варианта:

  1. Создайте виджет qt, получите идентификатор окна x для виджета и передайте его в мой пользовательский модуль OpenGL.

    Qt => window_id => пользовательский модуль OpenGL

    В пользовательском модуле OpenGL я затем использую этот window_id с glxMakeCurrent в качестве цели рендеринга.

  2. Создайте окно x в моем модуле OpenGL. Передайте идентификатор окна x в модуль Qt, то есть:

    пользовательский модуль OpenGL => window_id => Qt

    Это "здоровее", потому что я могу создать собственное окно x, имеющее правильные параметры, соответствующие конфигурациям кадрового буфера glx, то есть: glx framebuffer config => visual => colormap => параметры для создания окна X

    Затем "чужое" окно может использоваться в Qt следующим образом (в PyQt):

    q_window =QtGui.QWindow.fromWinId(win_id)
    q_widget =QtWidgets.QWidget.createWindowContainer(q_window,parent=parent)
    

Оба варианта работают в принципе, но..

В (1) через несколько часов система x-window начинает задыхаться.. окна не реагируют и т. Д. Очень странно. Я подозреваю какое-то переполнение сигналов в системе x-window (и, следовательно, в цикле событий qt) ..?

Вариант (2) не страдает от этой проблемы, но, конечно, я потеряю все взаимодействие с окном..! то есть, нет способа получить события щелчка мышью, drag'n'drop и т. д. из пользовательского "q_widget" (см. выше)

Итак, вопросы:

  • В варианте (1), кажется, что-то нездоровое... Я не уверен, что это такое, поскольку он довольно глубоко входит в систему X Window. Любое понимание этого?
  • Как получить события щелчка мыши и т. Д. Из "чужого" окна в подсистему Qt?

0 ответов

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