PIXELFORMATDESCRIPTOR pfd = { /* otherwise fine for a window with 32-bit color */ };
HDC hDC = CreateDC(TEXT("Display"),NULL,NULL,NULL); // always OK
int ipf = ChoosePixelFormat(hDC,&pfd); // always OK
SetPixelFormat(hDC,ipf,&pfd); // always OK
HGLRC hRC = wglCreateContext(hDC); // always OK
wglMakeCurrent(hDC,hRC); // ! read error: 0xbaadf039 (debug, obviously)
Но с тем же hRC работает следующее:
wglMakeCurrent(hSomeWindowDC,hRC);
Вышеприведенное является частью системы инициализации OpenGL 3.0+ для Windows.
Я пытаюсь избежать создания фиктивного окна для эстетики.
Я никогда не использовал CreateDC раньше, поэтому, возможно, я что-то пропустил.
edit: hSomeWindowDC будет указывать на окно DC с соответствующим форматом пикселей.
Дополнительная информация:
Я хочу создать независимый от окна контекст рендеринга OpenGL.
Из-за выбранного ответа мне кажется, что мне нужно использовать фиктивное окно (на самом деле это не большое дело, просто ручка, чтобы обойти все то же самое).
Почему я хотел бы сделать это: так как можно использовать один и тот же контекст рендеринга для нескольких окон с одинаковым форматом пикселя в одном потоке, можно создать контекст рендеринга (на самом деле, просто контейнер для объектов, связанных с gl ), который не зависит от конкретного окна. Таким образом, можно создать четкое разделение между графикой и инициализацией пользовательского интерфейса.
Цель контекста изначально не для рендеринга (хотя я полагаю, что можно рендерить в текстуры, используя его). Если кто-то хочет изменить содержимое буфера в определенном контексте, сам объект нужного контекста должен быть просто текущим (так как он несет с собой фиктивное окно, это возможно). Рендеринг в окно прост: как следует из вышесказанного, DC окна должен иметь только один и тот же формат пикселей. Просто создайте контекст рендеринга, постоянный ток окна и выполните рендеринг.
Обратите внимание, что на момент написания этой идеи эта идея все еще находилась в стадии тестирования. Я буду обновлять этот пост, если это изменится (или если я могу вспомнить: P).