C++ 在我的QGraphicsView中使用OpenGL可以加快显示速度吗?

C++ 在我的QGraphicsView中使用OpenGL可以加快显示速度吗?,c++,qt,opengl,C++,Qt,Opengl,我正在使用QGraphicsView,其中包含数百个大型QGraphics站点。QGraphicsSitems本质上是QGraphicsPixmapItems,因为我正在从文件中读取一些原始数据,并将其转换为QImage,然后使用drawImage()画师 问题是,当我开始在我的场景中获取一定数量的这些项目,或者只是一个非常大的项目后,场景的响应变得非常缓慢。如果我移动项目,或尝试放大/缩小项目,等等,场景只需要永远刷新。我希望它更具交互性,而不是在加载所有数据后一直等待场景刷新 OpenGL能

我正在使用QGraphicsView,其中包含数百个大型QGraphics站点。QGraphicsSitems本质上是QGraphicsPixmapItems,因为我正在从文件中读取一些原始数据,并将其转换为QImage,然后使用drawImage()画师

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


OpenGL能帮我吗?我该怎么做呢?创建一个二维矩形并在其上绘制原始数据的纹理?我的所有QGraphicsSiteMs都位于QGraphicsSiteMsGroup中,它们基本上构成了一个大图像。如果我被放大到足以看到我的数百个QGraphics站点,那么瓷砖的大“图像”至少是32000x32000像素。如果我将它们映射为矩形上的纹理,OpenGL甚至可以处理吗?

纹理32000正方形是1Gpixel。使用RGBA颜色,即4GB视频内存

你说你的尺寸比这还要大,那么你有足够的视频内存吗?不要忘记为mipmap级别添加空间


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

幸好它是单波段数据。我想我可以根据用户有多少视频内存来限制用户可以放大的距离?我能想到的唯一替代解决方案是创建详细级别映射,以减少查看更大数据时所需的数据量areas@Derek:放大时,您需要将大拼贴拆分为平铺,并仅渲染屏幕上或紧邻屏幕的拼贴。当用户平移时,希望您有足够的时间在下一条条纹变为可见之前渲染它。离开感兴趣区域的磁贴可以被丢弃或移动到主系统内存中。是的,在缩小时您需要调整细节级别。这就是mipmaps背后的基本思想:存储缩放到不同大小的图像,这样在实时渲染过程中就不必缩放太多。有没有办法使用QPainter自动将细节级别设置为较小的数量,或者我必须让自己的算法准备较低细节的图像?@Derek:我不知道Qt,我给OpenGL的建议,因为你似乎想用它来代替渲染。您几乎可以肯定地找到一个现有的算法,其许可证与您的软件兼容。搜索mipmap生成或图像下采样。似乎我的最佳选择是可能安装第二个GPU-一个用于CUDA,一个用于显示?