微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Gtk::GLArea 中启用抗锯齿?

如何解决如何在 Gtk::GLArea 中启用抗锯齿?

我正在 Gtk::GLArea 中做一些 OpenGL,我想启用 MULTISAMPLING 抗锯齿。

docs 说:

使用多重采样渲染有两个部分:

  • 分配多样本渲染目标(窗口或 FBO),以及
  • 启用多样本光栅化(即 glEnable( GL_MULTISAMPLE ))

虽然第二步在所有渲染目标类型和平台上都已标准化,但第一步仅适用于 FBO(因为它完全在 GL 内部)。渲染到窗口时,分配方法取决于使用中的特定于平台的 GL 集成层(例如 WGL、GLX、AGL 等)。 gluT 为其中一些提供了一个包装器,因此您不必关心。

以下部分描述了如何为各种渲染目标类型和平台执行 MSAA 渲染目标分配 (#1)。

我已经完成了第 2 部分。我该如何做第 1 部分?一些伪代码来说明我在哪里:

#include <gtkmm/application.h>

void on_realize() {
  gl_area.make_current();
  if (GLenum res = glewInit(); res != GLEW_OK) {
    std::cerr << glewGetErrorString(res) << std::endl;
    exit(1);
  }
}

bool on_render(const Glib::RefPtr<Gdk::GLContext>& /*context*/) {
  glClearColor(0,1);
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glEnable(GL_MULTISAMPLE_ARB);  // I've tried GL_MULTISAMPLE as well.
  // Draw
}

main() {
  Glib::RefPtr<Gtk::Application> app = Gtk::Application::create();
  Gtk::Window window;
  Gtk::GLArea gl_area;
  gl_area.signal_realize().connect(&on_realize);
  gl_area.signal_render().connect(&on_render);
  window.add(gl_area);
  gl_area.show();
  app->run(window);
}

我期待有一个 Gtk::GLArea::set_enable_multisampling(bool) 可以从 on_realize 调用。我已经检查过 Gtk::Window 和 Gdk::GLContext。两者似乎都没有抗锯齿意识。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。