【问题标题】:OpenGL Anti-aliasing using GLEW with WGL使用 GLEW 和 WGL 的 OpenGL 抗锯齿
【发布时间】:2014-08-24 01:41:30
【问题描述】:

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

【问题讨论】:

    标签: c++ opengl glew wgl


    【解决方案1】:

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

    在 Windows 上,您实际上需要做的事情如下:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-07
      • 1970-01-01
      • 2011-02-16
      • 1970-01-01
      • 2011-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多