使用QOpenGLWidget相对于普通QWidget的优势

3
自Qt 5.4版本以来,引入了QOpenGLWidget以启用OpenGL渲染功能。
除了调用OpenGL API外,QOpenGLWidget还可以用作普通QWidget,在其中使用QPainter。
因此,我想知道,如果我不计划直接调用任何OpenGL API来呈现我的小部件,而只是使用QPainter API,是否仍然有使用QOpenGLWidget而不是QWidget的任何(性能方面)好处?

1
它可能有好处(我还没有看到使用“随意”的QPainter和使用OpenGL API的QGLWidget的高性能,但谁知道呢?)。 但是当你涉及特定于平台+硬件+驱动程序的事物时,你应该三思而后行。 因为您的窗口小部件在每台机器上可能会显示不同,速度可能会更快或更慢,旧设备可能会拒绝新的OpenGL功能,OpenGL可能需要额外的设置来进行网络显示等等。 - ilotXXI
所以实际上没有足够的动机来使用QOpenGLWidget,除非需要进行密集的OpenGL调用,对吗? - Wayee
QOpenGLWidget的目的是在窗口内部创建一个矩形区域,用于渲染OpenGL场景。QOpenGLWidget只会增加一些额外开销,因为它需要成为一个具有窗口ID的特定资源,以便3D驱动程序和操作系统可以直接使用它。 - Velkan
@Wayee 我看不出动机。也许有人能看出来,我不知道。但对我来说,@Velkan 是对的,基本上 QOpenGLWidget 是一个用于使用和显示 OpenGL 场景的窗口。 - ilotXXI
1个回答

3

QOpenGLWidget是一个直接使用QPainter进行绘制的类,它的主要目的之一就是使用OpenGL进行绘制。在QOpenGLWidget上使用QPainter时,Qt会将painter API转换为GL状态设置和绘制调用。如果您具有一些OpenGL背景并使用Qt的调试版本,则可以跟踪源代码,以了解Qt如何翻译您的调用,从而以有效地方式发出painter调用。状态更改很昂贵,因此请确保批处理使用相同笔刷等的操作。绘画由QOpenGL2PaintEngineEx完成。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接