Pet*_*ike 2 opengl glade gtkmm
当我用"gtkmm"编程时,有一个小部件"Gtk :: DrawingArea".
我可以"手动"编程那个小部件(所以编写代码)或更优雅的方式是使用"glade"用户界面设计器,在那里我可以"图形化"地做同样的事情.
现在我试图通过"gtkglextmm"库将OpenGL与gtkmm连接起来.在该库中,有一个小部件"Gtk :: GL :: DrawingArea" - 但这个小部件" 不在"空地中可用.
那么有没有办法使用"glade"(对于"图形用户界面"部分)使用"OpenGL + gtkglextmm"进行编程?
谢谢.
首先,libglade是一个旧库.如果您正在使用gtk builder编写新项目.
正如你在这里看到的那样, gtkmm提供了一种简单的方法来创建你自己的小部件并在glade工具中看到它们(差不多).您只需将简单的DrawinArea小部件插入窗口,然后告诉gtk-builder将您的派生类放入此处.
这是所有在一起:
设置gtk-builder:
refBuilder = Gtk::Builder::create_from_file(ui_file);
GlDrawingArea*glArea = NULL;
refBuilder->get_widget_derived("drawing_gl",glArea);
Run Code Online (Sandbox Code Playgroud)
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;
};
Run Code Online (Sandbox Code Playgroud)
构建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);
}
Run Code Online (Sandbox Code Playgroud)