#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. Ни один из них, похоже, не поддерживает сглаживание.