天天看點

QT圖形驅動加速器

在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子類的執行個體。

下一篇: LR腳本錄制

繼續閱讀