gpt4 book ai didi

c++ - 使用 GLEW 和 WGL 的 OpenGL 抗锯齿

转载 作者:行者123 更新时间:2023-11-28 06:43:36 34 4
gpt4 key购买 nike

我对 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。我将如何修改我的代码以使其正常工作?谢谢。

最佳答案

GLEW 还支持 WGL 和 glX 扩展。对于 wgl,您需要 wglew.h 头文件。它的工作方式与 GL 扩展相同:GLEW 将通过 glewInit() 调用自动获取 wgl 扩展的函数指针。

在 Windows 上,您实际需要做的是:

  1. 创建一个“助手”GL 上下文(尽可能)具有与您实际想要创建的 GL 上下文相同的属性。请注意,GL WGL extnesions 将取决于您在 Windows 上创建的 GL 上下文。
  2. 使用助手 GL 上下文获取 wgl 扩展指针。当然,您还应该检查扩展程序是否可用。
  3. 使用 WGL 扩展创建真正的 GL 上下文,并且
  4. 销毁助手上下文。

现在,WGL_ARB_multisample本身不定义任何 wgl 扩展函数。它只是为来自 WGL_EXT_pixel_fromatwglChoosePixelFormatEXT() 定义了新属性.这就是您在第 3 步中必须调用的内容,以请求支持多重采样的像素格式。

关于c++ - 使用 GLEW 和 WGL 的 OpenGL 抗锯齿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25460601/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com