2010-04-28 44 views
0

这里是一个场景,我将要求绘画的一系列操作,如何优化组合图形操作?

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中实现这种优化。

这种类型的绘图/绘画优化是否受任何库支持?

+0

您是否正在重新实现QPainter.fillRect函数? Qt已经有了多种实际执行绘图的方法。这个问题真的很难理解 – 2010-04-28 09:47:02

+0

@HHarald Scheirich:为便于理解而修改的问题 – SunnyShah 2010-04-28 09:55:19

+1

您的问题的答案是'不'。 – ypnos 2010-04-28 10:01:19

回答

2

总之,没有。然而,离屏渲染通常很快,Qt为你缓冲了部件。 Painting to QImage or QPixmap也可以在非GUI线程中完成,因此您可以多线程绘制。 QPixmaps也具有QPixmapCache的优势。

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


但是,您应该剖析这段代码,看看它是否真的获得了什么。过早的微观优化通常会导致浪费。

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

1

您可以随时将复杂的场景绘制到QPixmap中,然后只在绘画发生时将该像素映射到位图上。当然,当场景改变时(例如它被改变大小,改变其中某个状态等等),它需要被更新。

+1

不回答问题。 – ypnos 2010-04-28 13:07:13

1

如果你正在寻找显示列表渲染优化,特别是你的例子中的遮挡测试,那么我不认为Qt本身提供了这样的功能。

您可能想看看OpenGL是否具备此功能。如果是这样,那么可能绘制到QGLWidget会得到你想要的?