加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读