如何在 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...