Создайте контекст GLX в определенной области окна
Вопрос
Я хотел бы создать контекст OpenGL с GLX внутри окна.Однако я не хочу, чтобы он охватывал всю область окна.Вместо этого он должен охватывать только субрегион.
Например, GLUT предоставляет функцию для такого поведения.Кроме того, основные наборы инструментов, такие как GTK + или QT, предоставляют виджеты GL, которые являются только подобластями X Windows.Однако мне нужно работать на низком уровне.
glXMakeCurrent() принимает идентификатор X, который можно нарисовать.Можно ли определить объект рисования как подобласть окна?Или есть другие способы привязать контекст к области окна?
Редактировать:Добавлена потрясающая награда!
Решение 2
Я нашел эту полезную информацию в Справочная страница BSD:
Почти во всех отношениях, которые важны для вас, подокно похоже на окно верхнего уровня.У него есть идентификатор окна;у него есть свой собственный набор обратных вызовов событий;вы можете выполнить рендеринг с ним;вы будете уведомлены о его создании;...
Подокно находится внутри какого-либо другого окна (возможно, окна верхнего уровня, возможно, другого подокна).Из-за этого он обычно взаимодействует только с другими окнами вашего собственного создания, следовательно, он не подчиняется оконному менеджеру.Это основной источник его отличий от окна верхнего уровня:
Поэтому я предполагаю, что виджеты GL в популярных наборах инструментов также фактически действуют как отдельное (подокно) окно.Интересной частью является то, что это прозрачно для оконного менеджера, а следовательно, и для пользователя.
Другие советы
Вы можете использовать glXMakeCurrent() только для рисования X, а не для его подраздела, однако ваше решение простое:перестаньте думать о X window так, как будто это ваше приложение.Каждое X-приложение обычно состоит из 10 или 100 X-окон.Создайте дочернее окно в нужной вам области и нарисуйте в нем.
В качестве альтернативы вы могли бы создать пиксельное изображение, выполнить рендеринг в нем, а затем скопировать в область окна, но это было бы медленнее.