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

And*_*nko 6 opengl qt qml qt-quick

根据这篇文章,有两种主要的方法可以将原始OpenGL渲染成一个应用程序,其UI由QtQuick的场景图管理.简而言之,他们(根据我的理解):

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

这两种方法有哪些优点/缺点?

Mic*_*zyk 5

QQuickWindow::beforeRendering()或者QQuickWindow::afterRendering()信号的问题在于,从他们的插槽完成的所有OpenGL绘图将适当地在渲染的Qt Quick场景之下或之上.如果这对你来说足够好 - 也就是说.你只想绘制一个自定义的OpenGL背景或某种覆盖 - 然后去做吧.

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

一般来说,由于选项1)通常是不充分的,所以你被迫选择2).这是在我所知道的QtQuick场景中使用原始OpenGL的唯一方法.