【发布时间】:2020-01-30 10:21:45
【问题描述】:
基本上我需要在内存中加载一个大小正好为 16K 的 4 色 tilemap,以每秒 3 次的速度对其中 2 个图块进行动画处理,然后将一些图块渲染到一个相当小的盒子中,我会说也许在 QML/Qt Quick 中显示大约 100 像素宽和 80 像素高(非常粗略地来自内存),我可能会使用 scale 属性在 QML 中将其放大
无论如何,我对如何做到这一点有点不知所措,但我认为 C++ 是最好的选择,这对我来说很好,在研究之后我发现有 2 个主要选项,QQuickItem 和 QQuickPaintedItem .
现在我知道 QQuickPaintedItem 更旧且更慢,因为它首先在 CPU 中绘制,然后再复制到视频卡,因此它不是最佳解决方案。最推荐的选项是 QQuickItem,它使用 OpenGL 在图形卡上呈现。
但我不需要过分的东西,我的意思是我在这里处理 ~100 x 80 像素,没有线条或形状操作,没有着色器,没有这些。这只是一堆像素,所以我想知道使用 QQuickPaintedItem 是否会更好。
但是对于所有这些我不知道可能有另一种解决方案,在这种情况下我很乐意听到它,也许有一个更简单的方法来解决所有这些问题。
任何帮助解决这个问题都会很棒,在此先感谢。
【问题讨论】:
-
您的意思是
QSGNode而不是QQuickItem,因为QQuickPaintedItem继承自QQuickItem。或许this post可以帮到你一点? -
我认为您应该先尝试使用
QQuickPaintedItem,然后使用setRenderTarget(FramebufferObject)。这对于您的用例应该足够了。 -
其实我现在正在研究 QPixmap 或 QImage。我的意思是一旦我将它渲染到内存中它就不会改变,这是我认为 OpenGL 可能有点矫枉过正的另一个原因。问题是我不知道我是否可以使用 QPixmap 为这两个图块设置动画,或者我是否能够轻松提取图块。 -- 我真正需要的是内存中的图块(很少更改),我从这些图块构建第二个非常小的图像并将其发送到 Qt Quick。所以无论如何我可以这样做,但 Qt Quick 只会接收完成的图像(C++ 处理其余的并让它们都在内存中处于活动状态)
标签: c++ qt qml qtquick2 qquickitem