Я ищу некоторую информацию о рендеринге дочерних окон, в частности о взаимодействии OpenGL с GDI. Проблема, которая у меня есть, заключается в том, что в основном у меня есть два окна, во-первых, главные окна создаются в qt, а внутри qt размещается дочернее окно, которое использует средство визуализации OpenGL.
Теперь я хотел разместить наложение поверх моего окна OpenGL, поэтому я использую его для наложения окна OpenGL. Проблема, с которой я столкнулся, заключается в том, что при визуализации с помощью OpenGL графика, сгенерированная OpenGL, кажется, затемняет графическую область, включая и эффективно отменяет графику, составленную с помощью qt.
На изображении ниже синяя область - это наложение qt, на этом изображении я использую GDI (BeginPaint / EndPaint), поэтому окна, кажется, взаимодействуют нормально. То есть порядок окон кажется правильным, клиентский регион правильный. В тот момент, когда я начинаю рендерить с помощью Opengl, синяя область заменяется тем, что рендерит OpenGL.
То, что я сделал, я в основном создал для создания наложения. Я создал второй безрамочный, самый верхний QMainWindow
, и как только платформа HWND была инициализирована, я переродил его. В основном я меняю новый родительский элемент окна, чтобы он был тем же родителем моего окна OpenGL.
Я полагал, что это будет делать то, что каждое окно рисуется отдельно, и диспетчер композиции рабочего стола будет создавать окончательную композицию и в основном избегает печально известного проблема с воздушным пространством, задокументированная Microsoft в их платформе WPF.
Я хотел бы знать, что может вызвать эти проблемы? На данный момент мне не хватает понимания, почему после рендеринга с помощью OpenGL пиксели наложения qt затемняются, хотя в иерархии окон должно быть сказано, чтобы они были скомпонованы. Что я мог сделать, чтобы достичь того, чего хочу?