我终于让 Multisampling 与我的 wxWidgets OpenGL 程序一起工作。现在有点乱,但方法如下:
wxWidgets 目前在其稳定版本 中不支持多重采样(目前的最新版本是 2.8.8 )。但是,它可以作为补丁使用,也可以通过他们的每日快照使用。 (后者令人振奋,因为这意味着补丁已被接受,如果没有问题,应该会出现在以后的稳定版本中。)
所以,有两种选择:
从他们的 daily snapshot 下载并构建。
获取 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 的稳定版本中得到支持,从而使这些信息变得无关紧要:-)