在QT嵌入式Linux版本中,painting是一个纯软件实现,分两步:首先,每个窗口使用QPaintEngine在QWSWindowSurface画图,然后,服务器程序将内存中内容写入显示器中。嵌入式Linux版本QT使用QRasterPaintEngine来实现painting操作,利用QScreen来实现window composition
为了实现加速,嵌入式版本进行如下操作:
1、建立定制显示屏
2、实现定制Raster Paint Engine
3、让Paint Device检测到Paint Engine
4、让Window Surface检测到你的Paint Device
5、建立自己的Window Surface
步骤1:
从QScreen类继承建立定制的screen
重新实现connect() disconnect initDevice() shutdownDevice()函数,这些函数的作用为配置硬件或者获得硬件配置。connect()和disconnect()函数在server和client程序中都调用,而initDevice()和shutdownDevice()函数只在server中调用
一般还需要重新实现blit()函数和solidFill()函数
步骤2:
继承QRasterPaintEngine类实现画图操作
重新实现自己需要的,不需要的不实现
步骤3:
继承QCustomRasterPaintDevice类重新实现paintEngine()函数,此函数返回paint engine的指针。另外重新实现QCustomRasterPaintDevice::memory()函数,此函数返回用于painting的缓存空间指针
没有Memory Buffer的加速
一般QRasterPaintEngine在memory buffer中画图,不过在一些情况下,可能希望不直接使用memory buffer(例如使用显卡)。重新实现QCustomRasterPaintDevice::memory()函数返回0(实际上告知调用者没有buffer),然后,屋里颜色或图片都在paint engine buffer中写。paint engine就会调用QRasterPaintEngine::drawColorSpans()和QRasterPaintEngine::drawBufferSapn()
注意,一般需要调用qFatal()显示错误信息
步骤4:
继承QWSWindowSurface类,重新实现paintDevice()函数
步骤5:
重新实现QScreen的createSurface()函数,此函数建立自己的QWSWindowSurface子类的实例。