Как включить сглаживание в Gtk ::GLArea?

#c #opengl #antialiasing #gtkmm

#c #opengl #сглаживание #gtkmm

Вопрос:

Я делаю некоторые OpenGL в Gtk :: GLArea, и я хотел бы включить сглаживание с МНОЖЕСТВЕННОЙ ДИСКРЕТИЗАЦИЕЙ.

В документах говорится:

Рендеринг с мультисэмплингом состоит из двух частей:

  • Выделение цели рендеринга с несколькими выборками (window или 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>amp; /*context*/) {
  glClearColor(0, 0, 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(amp;on_realize);
  gl_area.signal_render().connect(amp;on_render);
  window.add(gl_area);
  gl_area.show();
  app->run(window);
}
 

Я ожидал, что будет Gtk::GLArea::set_enable_multisampling(bool), который я мог бы вызвать из on_realize . Я проверил Gtk::Window и Gdk ::GLContext. Ни один из них, похоже, не поддерживает сглаживание.