QGLWidget更新(rect)总是绘制整个rect

时间:2015-01-09 23:52:23

标签: ios macos performance qt qt5

我有一个简单的绘画应用程序使用QGLWidget,我打电话给update(rect),传入的矩形比QGLWidget的矩形小得多。我使用QImage绘制,然后在paintEvent中,我将其中一部分绘制到QGLWidget。当我在paintEvent方法上设置断点并调用event->rect()event->region().rects()时,它会返回QGLWidget的整个矩形。我原以为它只返回传递给update方法的rect。

因此,在我的iPhone上绘图是非常滞后的。

这是我的代码:http://pastebin.com/beyyHCPw

如果你滚动到pastebin的底部,你会看到我记录的日志代码,我正在记录哪个rect我绘制(绘制rect)到之后哪个rect返回paint事件(update rect)。

1 个答案:

答案 0 :(得分:0)

我认为如果QGLWidget使用双缓冲并且每次都要求您在不同的缓冲区中绘制,这是预期的。

据我所知,Dirty rects是一个通常不用GL的概念。

您的代码的性能问题也可能是您在每次在主内存中更改后将其绘制到图形内存时将其上传到图形内存。绘制到中间Q(Open)GLFramebufferObject可能是一种改进(尽管iPhone上可能不支持使用GL_EXT_framebuffer_blit进行快速blitting)。