在gtkmm中持续渲染Gtk::GLArea

问题描述 投票:0回答:2

我遵循了 gtkmm4 + opengl 示例,窗口加载并显示,没有任何错误并渲染一帧,但随后似乎忽略了我的queue_render() 和queue_draw() 调用,如控制台中的打印语句所证明的那样。我也将自动渲染设置为 true。

#include <iostream>
#include <string>

#include <gtkmm.h>
#include <giomm/resource.h>
#define GLEW_STATIC
#include <gl/glew.h>

class TestWindow : public Gtk::Window {
protected:
    Gtk::GLArea mGlArea;

    void onRealize() {
        std::cout << "onRealize()" << std::endl;

        mGlArea.make_current();

        glewExperimental = true;
        if (glewInit() != GLEW_OK) {
            std::cout << "ERROR: Failed to initialize GLEW" << std::endl;
        }

        glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
    }

    void onUnrealize() {

    }

    bool onRender(const Glib::RefPtr<Gdk::GLContext>& context) {
        std::cout << "onRender()" << std::endl;

        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        mGlArea.queue_render();
        mGlArea.queue_draw();
        return true;
    }
public:
    TestWindow() {
        set_title("Window Title");
        set_child(mGlArea);
        mGlArea.set_auto_render(true);
        mGlArea.set_size_request(800, 600);

        mGlArea.set_required_version(4, 0);

        mGlArea.signal_realize().connect(sigc::mem_fun(*this, &TestWindow::onRealize));
        mGlArea.signal_unrealize().connect(sigc::mem_fun(*this, &TestWindow::onUnrealize), false);
        mGlArea.signal_render().connect(sigc::mem_fun(*this, &TestWindow::onRender), false);

        mGlArea.show();
    }
};

int main(int argc, char* argv[]) {
    auto app = Gtk::Application::create("test.gtkmm");

    return app->make_window_and_run<TestWindow>(argc, argv);
}
c++ opengl-4 gtkmm4
2个回答
1
投票

我在 OpenGL 上下文中也面临着 gtkmm-4.0 的问题。不幸的是,我没有做过任何 OpenGL 开发,所以我不太明白发生了什么。

您可能遇到过这个问题:https://gitlab.gnome.org/GNOME/gtk/-/issues/4950。我在我的 NVidia GPU 机器上使用您的代码进行了一些测试,我可以确认

GDK_DEBUG=gl-glx
不会产生错误。

虽然我不知道

glewInit()
不起作用的含义,因为即使删除了init,应用程序仍然运行并设置颜色等。


0
投票

我目前正在研究一个示例。 Gtk::GLArea 没有太多选项。对我来说,它打开了 4.6 核心配置文件上下文(具有调试支持)。还不知道如何配置。

看看这是否适合您。

GitLab 链接

© www.soinside.com 2019 - 2024. All rights reserved.