在 Qt 中将原始 OpenGL 渲染成 QML UI 的两种方法的比较

Comparison of two approaches to rendering raw OpenGL into a QML UI in Qt

根据 this 文章,有两种主要方法可以将原始 OpenGL 渲染到 UI 由 QtQuick 的场景图管理的应用程序中。总之就是(据我了解):

这两种方法的advantages/disadvantages是什么?

QQuickWindow::beforeRendering()QQuickWindow::afterRendering() 信号的问题在于,从它们的插槽中完成的所有 OpenGL 绘图都将适当地位于渲染的 Qt Quick 场景的下方或上方。如果这对你来说足够好——即。您只想绘制自定义 OpenGL 背景或某种叠加 — 然后就去做吧。

如果您需要更多,即。使用 OpenGL 渲染放置在场景图中的一些 QtQuick 项目,那么你必须选择第二个选项:将 OpenGL 渲染到一个帧缓冲区对象,该对象用作某些 QtQuick 项目的纹理。 正如您链接到状态的文档文章,它为您提供了更多可能性(使用多个渲染上下文甚至多个渲染线程)但也带来了性能成本。实现起来也比较麻烦

一般来说,选项 1) 通常是不够的,所以你不得不选择 2)。据我所知,这是在 QtQuick 场景中使用原始 OpenGL 的唯一方法。