可以将OpenGL用于我的QGraphicsItems加快在QGraphicsView中的显示速度



我使用的QGraphicsView中有数百个大型QGraphicsItems。QGraphicsItems本质上是QGraphicsPixmapItems,因为我正在从文件中读取一些原始数据,并将其转换为QImage,然后使用drawImage()painter。

问题是,当我开始在场景中获得一定数量的这些项目,或者只有一个非常大的项目后,场景的响应变得非常慢。如果我移动项目,或者尝试放大/缩小它们,等等,场景只需要很长时间才能刷新。我希望它更具互动性,而不是在加载所有数据后一直在现场等待刷新。

OpenGL能帮我吗?我该怎么做?创建一个2D矩形并在上面绘制我的原始数据纹理?我在一个QGraphicsItemGroup中拥有我所有的QGraphicsItem,它们基本上构成了一个大图像。如果我缩小到足以看到我的数百个QGraphicsItems,那么瓷砖的大"图像"至少是32000x3200像素。如果我把它们映射为矩形上的纹理,OpenGL还能处理吗?

32000平方的纹理是1Gpixel。RGBA颜色,相当于4GB的视频内存。

你说你的尺寸甚至不止这些,那么你有足够的视频RAM吗?不要忘记为mipmap级别提供空间。

您可能会通过仔细使用OpenGL来加快速度,但您需要智能地管理纹理,而不是期望OpenGL创建那么大的纹理。

最新更新