首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >OpenGL + gtkglextmm + glade

OpenGL + gtkglextmm + glade
EN

Stack Overflow用户
提问于 2009-12-15 00:24:06
回答 1查看 3.4K关注 0票数 2

当我用"gtkmm“编程时,有一个小部件"Gtk::DrawingArea".。

我可以“手工”编写这个小部件(所以编写代码),或者更优雅的方法是使用"glade“用户界面设计器,在这里我可以做同样的”图形化“。

现在,我正试图通过"gtkglextmm“库将OpenGL与gtkmm连接起来。在这个库中,有一个小部件"Gtk::GL::DrawingArea" --但是这个小部件“不是”在glade中可用。

那么,是否有任何方法使用"OpenGL + gtkglextmm“使用"glade”(用于“图形用户界面”部分)进行编程?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-12-15 00:41:12

首先,林荫大道是一个古老的图书馆。如果您正在编写新项目,请使用gtk建造商开始。

如您所见,这里 gtkmm提供了简单的方法来创建自己的小部件,并在glade工具中看到它们(几乎)。您只需将普通的DrawinArea小部件插入窗口,然后告诉gtk将您的派生类放在这里。

以下是大家一起讨论的问题:

设置gtk-生成器:

代码语言:javascript
运行
复制
refBuilder = Gtk::Builder::create_from_file(ui_file);

GlDrawingArea*glArea = NULL;
refBuilder->get_widget_derived("drawing_gl",glArea);

Opengl DrawingArea类:

代码语言:javascript
运行
复制
 class GlDrawingArea : public Gtk::DrawingArea ,
                       public Gtk::GL::Widget<GlDrawingArea>
 {                   
 public:             
         GlDrawingArea(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>& builder);
         virtual ~GlDrawingArea();
 protected:          
         void on_realize();
         bool on_expose_event(GdkEventExpose* event);
         bool on_configure_event(GdkEventConfigure* event);          
 private:
         Glib::RefPtr<Gtk::Builder> refBuilder;
 };

构建opengl绘图区域:

代码语言:javascript
运行
复制
// GlDrawingArea:
GlDrawingArea::GlDrawingArea(BaseObjectType*cobject, const Glib::RefPtr<Gtk::Builder>& builder)
        : Gtk::DrawingArea(cobject),
          refBuilder(builder),
          screen_tex(0)
{                                                                                               
        //
        // Configure OpenGL-capable visual.
        //
        Glib::RefPtr<Gdk::GL::Config> glconfig;

        // Try double-buffered visual
        glconfig = Gdk::GL::Config::create(Gdk::GL::MODE_RGB    |
                                           Gdk::GL::MODE_DEPTH  |
                                           Gdk::GL::MODE_DOUBLE);
        if (!glconfig) {
                std::cerr << "*** Cannot find the double-buffered visual.\n"
                          << "*** Trying single-buffered visual.\n";

                // Try single-buffered visual
                glconfig = Gdk::GL::Config::create(Gdk::GL::MODE_RGB |Gdk::GL::MODE_DEPTH);
                if (!glconfig) {
                        std::cerr << "*** Cannot find any OpenGL-capable visual.\n";
                        std::exit(1);
                }
        }

        // print frame buffer attributes.
        GLConfigUtil::examine_gl_attrib(glconfig);

        //
        // Set OpenGL-capability to the widget.
        //
        set_gl_capability(glconfig);
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1904481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档