问题描述
我正在 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 (将#修改为@)