gpt4 book ai didi

OpenGL + gtkglextmm + 林间空地

转载 作者:行者123 更新时间:2023-12-01 21:50:55 25 4
gpt4 key购买 nike

当我使用“gtkmm”编程时,有一个小部件“Gtk::DrawingArea”
我可以“手动”对该小部件进行编程(因此编写代码),或者更优雅的方式是使用“glade”用户界面设计器,我可以在其中“以图形方式”执行相同的操作em>.

现在我尝试通过“gtkglextmm”库将 OpenGL 与 gtkmm 连接起来。在该库中,有一个小部件“Gtk::GL::DrawingArea” - 但此小部件“不是”在空地中可用。

那么有什么方法可以使用“glade”(用于“图形用户界面”部分)通过“OpenGL + gtkglextmm”进行编程吗?

谢谢。

最佳答案

首先 libglade 是一个旧库。如果您正在编写新项目,请从 gtk builder 开始.

如您所见here 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);

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);
}

关于OpenGL + gtkglextmm + 林间空地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1904481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com