我有一个简单的绘画应用程序,使用我调用update(rect)
的QGLWidget
,传入一个比QGLWidget
的矩形小得多的矩形。我用一个QImage
画进去,然后在paintEvent
中,我画了一部分到QGLWidget
。当我在paintEvent
方法上放置断点并调用event->rect()
或event->region().rects()
时,它会返回QGLWidget
的整个矩形。我本来希望它只返回传递给更新方法的矩形。
因此,在我的iPhone上绘图非常滞后。
这是我的代码:http://pastebin.com/beyyHCPw
如果您滚动到 pastebin 的底部,您将看到我的日志记录代码,我正在记录我绘制(绘制矩形)到哪个矩形,然后哪个矩形在绘制事件中返回(更新矩形)。
QGLWidget 使用双缓冲并且每次都要求您绘制不同的缓冲区,这是意料之中的。
据我所知,脏矩形是一个通常不会在 GL 中使用的概念。
代码的性能问题也可能是,每次在主内存中更改 1024x1536 QImage 的内容后,您都会将 1024x1536 QImage 的内容上传到图形内存。绘制到中间Q(Open)GLFramebufferObject可能是一个改进(尽管iPhone可能不支持使用GL_EXT_framebuffer_blit的快速块传输)。