Использование glfw нередко приводит к тому, что обычные для OpenGL вещи средствами glfw сделать невозможно.
В рамках glfw контекст OpenGL непосредственно объединен с окном операционной системы в типе
GLFWwindow
[
?].
Разделить их или использовать по отдельности уже не получится т.к. glfw не дает такого интерфейса.
Так же, в функцию
glfwCreateWindow
[
?] невозможно передать и дескриптор окна операционной системы если хочется создать дочернее окно в своем.
Это такая ловушка использования glfw. Или пользователь использует glfw полностью с самого начала и мирится с ограничениями, или он отказывается от использования glfw и делает все руками.
Максимум что можно сделать средствами glfw - это создать несколько разных окон, каждому из которых будет сопоставлен его уникальный контекст OpenGL. Но работать с такими окнами придется только и строго в разных потоках, т.к. привязка контекста OpenGL производится только для конкретного потока, в котором для этого контекста и нужно вызывать функции OpenGL. Иными словами, такой подход может означать большие трудности при реализации.
Если присмотреться к сигнатуре
glfwCreateWindow
, то можно заметить последний параметр, который позволяет указать другое окно, ресурсы которого необходимо разделить с новым создаваемым окном. Используя этот параметр можно создать несколько окон с совместным управлением ресурсами, но рисовать в этих окнах все равно можно лишь в разных потоках.
Для решения задачи более гибкого создания окон и рисования в них средствами OpenGL лучше зайти со стороны WGL[
?] и прямой работы с Win32 API. В этом случае можно даже одним контекстом обойтись, привязывая его то к одному окну, то к другому на время отрисовки.
Но если требуется просто добавить у себя элементы интерфейса в свое текущее окно, то лучше и удобнее будет взять imgui или подобную библиотеку. Для этого от glfw можно не отказываться.