将 OpenGL 应用程序与 Qt 集成?

Posted

技术标签:

【中文标题】将 OpenGL 应用程序与 Qt 集成?【英文标题】:Integrating OpenGL application with Qt? 【发布时间】:2013-10-29 18:42:01 【问题描述】:

我是使用 OpenGL 的新手,不知道 gl 上下文和这样的工作是如何工作的,所以请多多包涵。我有一个使用 OpenGL for Linux 用 C++ 编写的应用程序,我希望能够在我的机器上以全屏模式继续运行,然后我想在 Qt 中创建另一个应用程序以在同一个窗口顶部呈现另一个应用程序是渲染到。我还希望能够将数据从 OpenGL 应用程序发送到 Qt 应用程序并返回。

我如何才能完成这些任务,是否建议将应用程序分开,或者让 Qt 包装其他应用程序的 gl 上下文更容易?

我找到了一些可能有帮助的链接,但目前这些链接超出了我的想象,我需要一些指导:

Share OpenGL frame buffer / render buffer between two applications QT integration with openGL Integrate Qt into prewritten Application/Framwork

【问题讨论】:

【参考方案1】:

如果您想共享由 OpenGL 操作的纹理、vbo 等...,则必须在同一个应用程序中创建每个上下文。

否则,如果你想将其他数据发送给其他应用程序,这是一个IPC案例,你可以阅读http://en.wikipedia.org/wiki/Inter-process_communication

【讨论】:

【参考方案2】:

我不知道如何在 Linux 上使用两个应用程序。 在 Windows 上,我知道这实际上是不可能的,因为您将在屏幕底部拥有 Windows 栏,并且您必须强制 QT 窗口保持在所有内容之上。这不是很实用,但如果只有这两个应用程序正在运行,它可能会这样做。

另一种使用两个应用程序的解决方案是在无边框无标题栏窗口中运行 OpenGL,并设置为屏幕分辨率的大小。但是您仍然需要管理第二个应用程序窗口以保持在第一个应用程序窗口之上,这仍然不切实际。

因此,从您所绘制的上下文来看,最好的解决方案似乎是只创建一个应用程序。使用 QT,您可以在其上渲染一些 OpenGL 和一些 QWidget。甚至可以在 OpenGL 之上拥有一个 QGraphicsView 并使用 QML。但是,如果使用过多的透明度,可能会导致性能不佳。

【讨论】:

以上是关于将 OpenGL 应用程序与 Qt 集成?的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL代码适用于GLFW,但不适用于Qt OpenGL

QT和OpenGL如何正确集成并显示纹理

qt:在一个 gui 窗口中包含 opencv 和 opengl 子窗口

将 Crashpad 与 Windows Qt 应用程序集成

与 GLUT 和 OpenGL 集成的 Cocoa 框架

将 Qt GUI 嵌入到现有的 OpenGL 程序中