Как выполнить рендеринг в несколько окон, используя один контекст OpenGL?
Я создал два окна, используя GLFW. Первое окно имеет контекст OpenGL, а второе - нет. Я хочу сделать одну и ту же сцену в обоих окнах, используя один контекст OpenGL. Что-то вроде этого.
glBindVertexArray(vaoId);
// ... tell OpenGL to draw on first window
glClear(GL_COLOR_BUFFER_BIT);
glDrawArrays(...);
// ... swap first window buffers
// ... tell OpenGL to draw on second window
glClear(GL_COLOR_BUFFER_BIT);
glDrawArrays(...);
// ... swap second window buffers
glBindVertexArray(0);
Проблема в том, что я не знаю, как сказать OpenGL рисовать в определенном окне. И я также не знаю, как поменять буферы для конкретного окна. Если это необходимо, я могу использовать Win32 API.
1 ответ
Насколько я знаю, GLFW напрямую не поддерживает это в своем API. Обычно он рассматривает окно и контекст GL как единое целое. Однако с нативными API вы можете делать то, что хотите. Для Windows 32 в Partiuclar, посмотрите на wglMakeCurrent()
, В GLFW вы можете получить требуемый контекст и дескрипторы окон через собственный API доступа GLFW. Обратите внимание, что вы получите только HWND
Таким образом, вам придется использовать вручную GetDC()
чтобы получить контекст устройства окна.
Помните, что переключение контекстов будет означать очистку очереди команд GL, что может отрицательно сказаться на производительности. Смотрите GL_KHR_context_flush_control для более подробной информации.