【问题标题】:How to enable multisampling for a wxWidgets OpenGL program?如何为 wxWidgets OpenGL 程序启用多重采样?
【发布时间】:2010-09-06 11:59:24
【问题描述】:

Multisampling 是一种在 3D 应用程序中应用全屏抗锯齿 (FSAA) 的方法。我需要在我的 OpenGL 程序中使用多重采样,该程序目前嵌入在 wxWidgets GUI 中。有没有办法做到这一点?请仅在您知道实现此目的的详细步骤时才回复。

我知道使用 WGL(OpenGL 的 Win32 扩展)启用多重采样。但是,由于我的 OpenGL 程序不是用 MFC 编写的(并且我希望代码能够在多平台上移植),所以这不是我的选择。

【问题讨论】:

    标签: opengl wxwidgets multisampling


    【解决方案1】:

    我终于让 Multisampling 与我的 wxWidgets OpenGL 程序一起工作。现在有点乱,但方法如下:

    wxWidgets 目前在其稳定版本 中不支持多重采样(目前的最新版本是 2.8.8 )。但是,它可以作为补丁使用,也可以通过他们的每日快照使用。 (后者令人振奋,因为这意味着补丁已被接受,如果没有问题,应该会出现在以后的稳定版本中。)

    所以,有两种选择:

    1. 从他们的 daily snapshot 下载并构建。

    2. 获取 patch 以安装您的工作 wxWidgets。

    我发现第二个选项不太麻烦,因为我不想尽可能多地打扰我的工作安装。如果您不知道如何在 Windows 上打补丁,请参阅this

    至少,对于 Windows,补丁会修改以下文件:

    $(WX_WIDGETS_ROOT)/include/wx/glcanvas.h
    $(WX_WIDGETS_ROOT)/include/wx/msw/glcanvas.h
    $(WX_WIDGETS_ROOT)/src/msw/glcanvas.cpp
    

    修补后,重新编译 wxWidgets 库。

    要在您的 wxWidgets OpenGL 程序中启用多重采样,需要对代码进行少量更改。

    需要将属性列表传递给 wxGLCanvas 构造函数:

    int attribList[] = {WX_GL_RGBA,
                        WX_GL_DOUBLEBUFFER,
                        WX_GL_SAMPLE_BUFFERS, GL_TRUE, // Multi-sampling
                        WX_GL_DEPTH_SIZE, 16,
                        0, 0};
    

    如果您已经在使用属性列表,请将带有GL_SAMPLE_BUFFERS, GL_TRUE 的行添加到其中。否则,将此属性列表定义添加到您的代码中。

    然后修改您的 wxGLCanvas 构造函数以将此属性列表作为参数:

    myGLFrame::myGLFrame    // Derived from wxGLCanvas
    (
        wxWindow *parent,
        wxWindowID id,
        const wxPoint& pos,
        const wxSize& size,
        long style,
        const wxString& name
    )
    : wxGLCanvas(parent, (wxGLCanvas*) NULL, id, pos, size, style, name, attribList)
    {
        // ...
    }
    

    wxGLCanvas 元素创建后,默认开启多重采样。要随意禁用或启用它,请使用相关的 OpenGL 调用:

    glEnable(GL_MULTISAMPLE);
    glDisable(GL_MULTISAMPLE);
    

    多重采样现在应该可以与 wxWidgets OpenGL 程序一起使用。希望它很快会在 wxWidgets 的稳定版本中得到支持,从而使这些信息变得无关紧要:-)

    【讨论】:

    • 在 wxWidgets 3.0.2 上,无需打补丁即可工作。谢谢,这解决了我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    相关资源
    最近更新 更多