c – 将OpenGL窗口添加到GTK构建器中
发布时间:2020-12-16 10:21:22 所属栏目:百科 来源:网络整理
导读:我正在使用GTK和OpenGL编写C应用程序.我有一个GTK构建器,它读取 XML文件并自行构建.我需要在其中添加一个“OpenGL窗口区域”.我该怎么做呢? 解决方法 我这样做(gtkmm / C代码)是这样的: #include gtkmm.h#include gtkglmm.hclass GLWidget : public Gtk::G
我正在使用GTK和OpenGL编写C应用程序.我有一个GTK构建器,它读取
XML文件并自行构建.我需要在其中添加一个“OpenGL窗口区域”.我该怎么做呢?
解决方法
我这样做(gtkmm / C代码)是这样的:
#include <gtkmm.h> #include <gtkglmm.h> class GLWidget : public Gtk::GL::DrawingArea { public: GLWidget(Glib::RefPtr<Gdk::GL::Config> glconfig) : Gtk::GL::DrawingArea(glconfig) {} ~GLWidget() {} virtual bool on_expose_event(GdkEventExpose* event); }; bool GLWidget::on_expose_event(GdkEventExpose* event) { Glib::RefPtr<Gdk::GL::Drawable> d = get_gl_drawable(); d->gl_begin(get_gl_context()); // make this as complex as you need glClear(GL_COLOR_BUFFER_BIT); d->swap_buffers(); d->gl_end(); return true; } int main(int argc,char **argv) { Gtk::Main kit(argc,argv); Gtk::GL::init(argc,argv); Glib::RefPtr<Gtk::Builder> builder = Gtk::Builder::create_from_file("ui.glade"); Gtk::Window* mainWindow; Gtk::Alignment* container; builder->get_widget("mainWindow",mainWindow); builder->get_widget("Box",container); if (mainWindow == NULL || container == NULL) { g_critical("Gtk Builder failed to load mainWindow and/or container !n"); return -1; } Glib::RefPtr<Gdk::GL::Config> glconfig; glconfig = Gdk::GL::Config::create(Gdk::GL::MODE_RGBA | Gdk::GL::MODE_DOUBLE); if (!glconfig) glconfig = Gdk::GL::Config::create(Gdk::GL::MODE_RGB); if (!glconfig) { g_critical("Cannot create OpenGL-capable confign"); return -1; } GLWidget drawingArea(glconfig); drawingArea.set_size_request(640,480); drawingArea.show(); container->add(drawingArea); kit.run(*mainWindow); return 0; 即我只是加载一个包含空容器窗口小部件的UI,按名称获取该句柄,然后在代码中创建启用GL的绘图区域并将其添加到空容器中.据说,有可能“加载时间”用普通的Gtk DrawingArea代替GtkGL(见this posting),但这种方法对我不起作用;以上,以编程方式创建它,总是这样做. GL Drawingarea小部件需要gtkglext / gtkglextmm. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |