当我用"gtkmm“编程时,有一个小部件"Gtk::DrawingArea".。
我可以“手工”编写这个小部件(所以编写代码),或者更优雅的方法是使用"glade“用户界面设计器,在这里我可以做同样的”图形化“。
现在,我正试图通过"gtkglextmm“库将OpenGL与gtkmm连接起来。在这个库中,有一个小部件"Gtk::GL::DrawingArea" --但是这个小部件“不是”在glade中可用。
那么,是否有任何方法使用"OpenGL + gtkglextmm“使用"glade”(用于“图形用户界面”部分)进行编程?
谢谢。
发布于 2009-12-15 00:41:12
首先,林荫大道是一个古老的图书馆。如果您正在编写新项目,请使用gtk建造商开始。
如您所见,这里 gtkmm提供了简单的方法来创建自己的小部件,并在glade工具中看到它们(几乎)。您只需将普通的DrawinArea小部件插入窗口,然后告诉gtk将您的派生类放在这里。
以下是大家一起讨论的问题:
设置gtk-生成器:
refBuilder = Gtk::Builder::create_from_file(ui_file);
GlDrawingArea*glArea = NULL;
refBuilder->get_widget_derived("drawing_gl",glArea);
Opengl DrawingArea类:
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绘图区域:
// 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);
}
https://stackoverflow.com/questions/1904481
复制相似问题