Несколько окон в OpenGL?

Если вы используете GLUT, вы opengl можете использовать вызовы multi-window glutSetWindow() / glutGetWindow() для opengl выбора правильного окна (после opengl их создания с помощью glutCreateSubWindow()). Однако opengl иногда GLUT может оказаться multi-window неподходящим инструментом opengl для работы.

Если вы работаете multi-window в Windows, вам следует изучить multi-window функции wglMakeCurrent() и multi-window wglCreateContext(). В OS opengl X есть aglSetCurrentContext() и multi-window так далее, а X11 требует multi-window glXMakeCurrent().

Эти функции multi-window активируют текущий контекст opengl OpenGL, в котором вы можете multi-window выполнить рендеринг. Каждая multi-window библиотека для конкретной opengl платформы имеет собственные multi-window способы создания окна и привязки opengl к нему контекста OpenGL.

В opengl Windows после приобретения multi-window HWND и HDC для окна (после opengl вызова CreateWindow и GetDC). Обычно opengl вы делаете что-то вроде этого, чтобы multi-window настроить OpenGL:

GLuint l_PixelFormat = 0;

// some pixel format descriptor that I generally use:
static PIXELFORMATDESCRIPTOR l_Pfd = { sizeof(PIXELFORMATDESCRIPTOR), 1, 
    PFD_DRAW_TO_WINDOW + PFD_SUPPORT_OPENGL + PFD_DOUBLEBUFFER, 
    PFD_TYPE_RGBA, m_BitsPerPixel, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 16, 0, 0, PFD_MAIN_PLANE, 0, 0, 0, 0};

if(!(l_PixelFormat = ChoosePixelFormat(m_hDC, &l_Pfd))){
    throw std::runtime_error("No matching pixel format descriptor");
}

if(!SetPixelFormat(m_hDC, l_PixelFormat, &l_Pfd)){
    throw std::runtime_error("Can't set the pixel format");
}

if(!(m_hRC = wglCreateContext(m_hDC))){
    throw std::runtime_error("Can't create rendering context");
}

wglMakeCurrent(m_hDC, m_hRC);

Вы используете opengl этот код для создания нескольких multi-window окон и привязки к нему OpenGL, затем multi-window каждый раз, когда вы хотите multi-window рисовать в определенном окне, вы opengl должны вызывать wglMakeCurrent multi-window перед, что вы делаете что-либо opengl и передаете параметры соответствующее opengl этому окну.

В качестве примечания: OpenGL opengl позволяет вам обмениваться opengl определенными данными между multi-window разными контекстами, однако multi-window согласно спецификации данные, которыми multi-window вы можете поделиться, довольно multi-window ограничены. Однако большинство opengl операционных систем позволяют opengl передавать больше данных, чем opengl указано в спецификации.

opengl

multi-window

2022-07-08T17:20:20+00:00