我终于在我的 wxWidgets OpenGL 程序中实现了多重采样。现在有点混乱,但方法如下:
wxWidgets没有多重采样他们的支持稳定版本现在(目前最新版本是2.8.8)。但是,它可以作为补丁提供,也可以通过他们的每日快照提供。 (后者令人振奋,因为这意味着该补丁已被接受,如果没有问题,应该会出现在以后的稳定版本中。)
所以,有2个选择:
从他们下载并构建每日快照 http://biolpc22.york.ac.uk/pub/Daily_HEAD/.
Get the 用于您工作的 wxWidgets 安装。
我发现第二个选项不太麻烦,因为我不想尽可能地干扰我的工作安装。如果您不知道如何在 Windows 上打补丁,请参阅this https://stackoverflow.com/questions/19611/.
至少,对于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 的稳定版本很快就会支持它,从而使此信息变得无关紧要:-)