OpenGL сглаживание с использованием GLEW с WGL

Я относительно новичок в OpenGL, и я хотел бы добавить сглаживание в мой проект C ++ Win32.
В настоящее время я получаю контекст устройства в оконной процедуре, когда получено сообщение WM_CREATE, а затем создаю контекст OpenGL, используя дескриптор формата пикселя, например:

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
//...

switch (msg) {
case WM_CREATE:
log("Starting WM_CREATE...");
hDC = GetDC(hWnd);

//Pixel Format
ZeroMemory(&pfd, sizeof(PIXELFORMATDESCRIPTOR));
pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
pfd.nVersion = 1;
pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
pfd.iPixelType = PFD_TYPE_RGBA;
pfd.cColorBits = 32;
pfd.cDepthBits = 24;
pfd.cStencilBits = 8;

format = ChoosePixelFormat(hDC, &pfd);
if (!SetPixelFormat(hDC, format, &pfd)) {
log("Error: Could not set pixel format.");
PostQuitMessage(1);
break;
}
//Create Render Context
hRC = wglCreateContext(hDC);
if (!wglMakeCurrent(hDC, hRC)) {
log("Error: Could not activate render context.");
PostQuitMessage(1);
break;
}

//Initialize GLEW
if (glewInit()) {
log("Error: Could not initialize GLEW.");
PostQuitMessage(1);
break;
}

//Other initialization goes here
//...

break;
//...
}
return 0;
}

Чтобы заставить работать сглаживание, я понимаю, что мне нужно использовать расширение типа WGL_ARB_multisample. Кажется, есть очень мало примеров того, как на самом деле использовать это, особенно с GLEW. Как мне изменить код, чтобы он заработал? Благодарю.

0

Решение

GLEW также поддерживает расширения WGL и glX. Для WGL вам нужно wglew.h заголовочные файлы. Он работает так же, как и для расширений GL: GLEW автоматически получит указатели на функции для расширений wgl с помощью glewInit() вызов.

В Windows вы должны сделать следующее:

  1. Создайте «вспомогательный» контекст GL с (насколько это возможно) теми же атрибутами, что и контекст GL, который вы действительно хотите создать. Обратите внимание, что GL а также Внешний вид WGL будет зависеть от GL-контекста, который вы создаете в Windows.
  2. Используйте вспомогательный контекст GL, чтобы получить указатели Расширения wgl. Вы также должны проверить, если расширения доступны, конечно.
  3. Создайте реальный контекст GL, используя расширения WGL, и
  4. уничтожить вспомогательный контекст.

Сейчас, WGL_ARB_multisample не определяет какие-либо функции расширения wgl сам по себе. Он просто определяет новые атрибуты для wglChoosePixelFormatEXT() от WGL_EXT_pixel_fromat. И это то, что вы должны вызвать на шаге 3, чтобы запросить формат пикселей, поддерживающий мультисэмплинг.

1

Другие решения


По вопросам рекламы [email protected]