如何优化组合图形操作?

时间:2010-04-28 09:36:27

标签: qt rendering

这是一个场景,我将要求绘画的一系列操作,

QPainter p(this);

1)。 p.fillRect(0,0,320,240,RED_COLOR)

2)p.drawLine(0,0,100,100,BLUE_COLOR)

3)p.fillRect(0,0,320,240,YELLOW_COLOR)

现在我希望画家不要先绘制第一个FillRect函数。 它不应该画线。 它应该只执行最后一次操作。

有没有办法在Qt中实现这种优化。

任何库都支持这种类型的绘图/绘画优化吗?

3 个答案:

答案 0 :(得分:2)

简而言之,没有。但是,屏幕外渲染通常很快,并且Qt双缓冲小部件可供您使用。 Painting to QImage or QPixmap也可以在非GUI线程中完成,因此您可以对绘画进行多线程处理。 QPixmaps还具有QPixmapCache的优势。

您可以根据绘制命令的创建方式自行进行优化。如果您在开始时知道所有命令,则可以使用一堆形状,如果堆栈顶部包含在最后创建的形状中,则不要绘制它。


但是,您应该对此部分代码进行分析,以确定它是否真正获得了任何收益。过早的微观优化通常会导致浪费精力。

我会从屏幕外渲染开始(如果可能的话,多线程),如果真的太慢,请尝试其他步骤。但是,在大多数情况下,标准涂料方法将足够快。

答案 1 :(得分:1)

您始终可以将复杂场景绘制到QPixmap中,然后在绘制时只将像素图blit。当然,它需要在场景发生变化时进行更新(例如,调整大小,改变状态等等)。

答案 2 :(得分:1)

如果您正在寻找显示列表渲染优化,特别是在您的示例中进行遮挡测试,那么我认为Qt本身并不提供此类功能。

您可能想知道OpenGL是否具有此功能。如果是这样,那么绘制到QGLWidget可能会得到你想要的东西吗?