gpt4 book ai didi

c++ - 将 OpenGL 窗口添加到 GTK 构建器中

转载 作者:太空狗 更新时间:2023-10-29 19:46:37 26 4
gpt4 key购买 nike

我正在使用 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 config\n");
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 ),但该方法对我不起作用;以上,以编程方式创建它,总是如此。

您需要 gtkglext/gtkglextmm 用于 GL 绘图区小部件。

关于c++ - 将 OpenGL 窗口添加到 GTK 构建器中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9299187/

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