2010-04-28 49 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會得到你想要的?