Проблема с CreateDC и wglMakeCurrent - PullRequest
       18

Проблема с CreateDC и wglMakeCurrent

3 голосов
/ 17 августа 2010


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).

Ответы [ 2 ]

3 голосов
/ 17 августа 2010

У меня есть дремлющая мозговая клетка от чтения Petzold 15 лет назад, которая просто ожилаDC от CreateDC () ограничен.Хорошо для получения информации об устройстве отображения, измерениях и тому подобном.Не хорошо использовать в качестве обычной картины DC.Вам почти наверняка нужен GetDC ().

1 голос
/ 17 августа 2010

Моя текущая процедура инициализации OpenGL 3+ не требует фиктивного окна. Вы можете просто попытаться сделать второй RC и сделать его текущим, используя DC реального окна. Взгляните на OpenGL wiki Tutorial: OpenGL 3.1 Первый треугольник (C ++ / Win)

...