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



根据本文,有两种主要方法可以将原始OpenGL渲染到应用程序中,否则其UI由QtQuick的场景图管理。 简而言之,它们是(根据我的理解):

  • 在手写代码中调用原始 OpenGL 方法,这些代码通过 QtQuick 公开的一些 API 挂钩到场景图的渲染循环中。
  • 将场景的原始 OpenGL 部分渲染到 QQuickFramebufferObject,该对象被视为场景图中的组件,并且自身呈现为纹理。

这两种方法的优点/缺点是什么?

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

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

通常,由于选项 1) 通常是不够的,因此您被迫使用 2)。这是我所知道的在QtQuick场景中使用原始OpenGL的唯一方法。

相关内容

  • 没有找到相关文章

最新更新