多采样是将全屏反混叠 (FSAA)应用于三维应用的一种方法。我需要在我的OpenGL程序中使用多采样,该程序目前嵌入在wxWidgets GUI中。有办法这样做吗?如果您知道实现这一目标的详细步骤,请回复。
我知道如何使用WGL (Win32扩展到OpenGL)启用多采样。但是,由于我的OpenGL程序不是用MFC编写的(而且我希望代码是多平台可移植的),这对我来说不是一个选项。
发布于 2008-08-22 09:13:56
最后,我开始使用我的wxWidgets OpenGL程序进行多采样处理。现在有点乱七八糟,但以下是如何:
wxWidgets目前在他们的稳定版本中没有多重化支持(最新版本是2.8.8)。但是,它可以作为一个补丁,也可以通过他们的每日快照。(后者令人振奋,因为它意味着补丁已经被接受,如果没有问题,应该出现在以后的稳定版本中。)
因此,有两种选择:
我发现第二个选项不那么麻烦,因为我不想尽可能地干扰我的工作安装。如果您不知道如何在Windows上进行修补,请参见这。
至少,对于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的稳定版本中支持它,使这些信息变得无关紧要:-)
https://stackoverflow.com/questions/21560
复制相似问题