Создайте контекст GLX в определенной области окна

StackOverflow https://stackoverflow.com/questions/1280963

  •  16-09-2019
  •  | 
  •  

Вопрос

Я хотел бы создать контекст OpenGL с GLX внутри окна.Однако я не хочу, чтобы он охватывал всю область окна.Вместо этого он должен охватывать только субрегион.

Например, GLUT предоставляет функцию для такого поведения.Кроме того, основные наборы инструментов, такие как GTK + или QT, предоставляют виджеты GL, которые являются только подобластями X Windows.Однако мне нужно работать на низком уровне.

glXMakeCurrent() принимает идентификатор X, который можно нарисовать.Можно ли определить объект рисования как подобласть окна?Или есть другие способы привязать контекст к области окна?

Справочник GLX (Синяя книга)

Редактировать:Добавлена потрясающая награда!

Это было полезно?

Решение 2

Я нашел эту полезную информацию в Справочная страница BSD:

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

Подокно находится внутри какого-либо другого окна (возможно, окна верхнего уровня, возможно, другого подокна).Из-за этого он обычно взаимодействует только с другими окнами вашего собственного создания, следовательно, он не подчиняется оконному менеджеру.Это основной источник его отличий от окна верхнего уровня:

Поэтому я предполагаю, что виджеты GL в популярных наборах инструментов также фактически действуют как отдельное (подокно) окно.Интересной частью является то, что это прозрачно для оконного менеджера, а следовательно, и для пользователя.

Другие советы

Вы можете использовать glXMakeCurrent() только для рисования X, а не для его подраздела, однако ваше решение простое:перестаньте думать о X window так, как будто это ваше приложение.Каждое X-приложение обычно состоит из 10 или 100 X-окон.Создайте дочернее окно в нужной вам области и нарисуйте в нем.

В качестве альтернативы вы могли бы создать пиксельное изображение, выполнить рендеринг в нем, а затем скопировать в область окна, но это было бы медленнее.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top