gpt4 book ai didi

Direct3D 场景之上的 QtQuick 2.0 场景

转载 作者:行者123 更新时间:2023-12-03 00:52:17 24 4
gpt4 key购买 nike

很长一段时间以来,我一直在尝试提出一种将 QtQuick 2.0 场景与 Direct3D 场景结合在一起的解决方案,但并不是很成功。我的目标是让 Direct3D 引擎以合理的速度(60 FPS?)运行,并在上面运行 QML UI。两者都可以在 150-200 FPS 下单独运行。但当被迫在一个窗口内合作时,一切都会变得疯狂。我研究了几种方法,但似乎都不够:

解决方案 A:将 Direct3D 场景渲染为纹理,使用 QImage 和 QQuickPaintedItem 进行可视化

  • 这个解决方案效果很好,而且根据网络上其他人的说法,它似乎是首选解决方案。然而它非常慢。我无法在全高清模式下获得超过 18-20 FPS 的帧率。瓶颈显然在于每帧从 GPU (D3D) 到 CPU (QImage) 再返回到 GPU (QML 渲染器) 的纹理传输链。尤其是 QML 端的 CPU->GPU 处理速度太慢了!

解决方案B:将QtQuick场景渲染到FBO中,然后使用Direct3D纹理

  • 这基本上是之前的解决方案。当 UI 不需要更新时,速度会好一些。一旦开始动画,一切都会再次下降到 18-20 FPS。 QOpenGLFramebufferObject::toImage() 显然需要时间。在两侧实现纹理/FBO 双缓冲来减少停顿并没有真正的帮助。

解决方案 C:在具有 Direct3D 场景的 QWidget 顶部启用透明度的 QQuickView

  • 这种方法也不太幸运。似乎只有当 QQuickView 在它自己的窗口中时透明度才起作用。一旦我将它放在同一窗口内的 D3D QWidget 之上,它立即停止工作并变得完全不透明。有人也试图在那里做类似的事情:http://qt-project.org/forums/viewthread/5484 ,但我对这个解决方案一点运气都没有。也许始终将两个完全分离的窗口(主 D3D 窗口 + 无框透明 QML 窗口)放在一起可以解决问题,但这听起来很愚蠢。

解决方案 X:修改 ANGLE 库并尝试使用我的 Direct3D 渲染器提取和共享 D3D 设备上下文

  • 尚未尝试过此操作,请尽可能避免任何库修改。这是否是一个明智的选择?

我明显的问题是:我做错了什么吗?首选的解决方案是什么? A、B、C、X 或者完全不同的东西?有人能指出我正确的方向吗?

TL;DR: 在 Direct3D 场景之上渲染 QML 场景的最快方法是什么?

最佳答案

听起来您理想地希望将解决方案 X 与自己编写一个 DirectX QPA 插件混合起来。

http://qt-project.org/wiki/Qt-Platform-Abstraction

我敢打赌,如果你开源这样的努力,你会交很多 friend !!

关于Direct3D 场景之上的 QtQuick 2.0 场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21700649/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com