首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为wxWidgets OpenGL程序启用多采样?

如何为wxWidgets OpenGL程序启用多采样?
EN

Stack Overflow用户
提问于 2008-08-22 01:16:26
回答 1查看 3.7K关注 0票数 3

多采样是将全屏反混叠 (FSAA)应用于三维应用的一种方法。我需要在我的OpenGL程序中使用多采样,该程序目前嵌入在wxWidgets GUI中。有办法这样做吗?如果您知道实现这一目标的详细步骤,请回复。

我知道如何使用WGL (Win32扩展到OpenGL)启用多采样。但是,由于我的OpenGL程序不是用MFC编写的(而且我希望代码是多平台可移植的),这对我来说不是一个选项。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2008-08-22 09:13:56

最后,我开始使用我的wxWidgets OpenGL程序进行多采样处理。现在有点乱七八糟,但以下是如何:

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

因此,有两种选择:

  1. 从他们的每日快照下载并构建。
  2. 获取用于工作的补丁安装的wxWidgets。

我发现第二个选项不那么麻烦,因为我不想尽可能地干扰我的工作安装。如果您不知道如何在Windows上进行修补,请参见

至少,对于Windows,修补程序将修改以下文件:

代码语言:javascript
复制
$(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构造函数:

代码语言:javascript
复制
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构造函数,将此属性列表作为参数:

代码语言:javascript
复制
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调用:

代码语言:javascript
复制
glEnable(GL_MULTISAMPLE);
glDisable(GL_MULTISAMPLE);

多采样现在应该与wxWidgets OpenGL程序一起工作。希望很快就能在wxWidgets的稳定版本中支持它,使这些信息变得无关紧要:-)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档