如何解决如何在 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 举报,一经查实,本站将立刻删除。