2013-02-18 154 views
2

我們正在窗口中繪製圖形。我們正在更新曲線每50ms 與從硬件接收的值,如傳感器。 我們需要以圖形格式顯示這些值。所以我們每50ms更新 圖。這給閃爍的問題。 我們在X11中編寫代碼。有沒有辦法避免在X11中使用 圖形繪圖中的閃爍。提前致謝。如何避免使用X11在圖形圖形中閃爍

+0

窗口庫?你是直接畫到屏幕上嗎?如果是這樣,爲什麼不繪製到屏幕外的緩衝區?然後在完成繪製當前50ms'窗口'的曲線時將其噴射到屏幕上。 – enhzflep 2013-02-18 07:16:27

+0

感謝您的建議,但我們已經使用位圖繪製圖形,然後複製到窗口,在這種情況下窗口也會閃爍。我們在子窗口中執行此圖形。我們創建了三個帶有一個根窗口的子窗口。我們在子窗口中繪製圖形。我的疑問是我們是否需要處理事件,但現在我們沒有使用任何事件 – VigneshK 2013-02-19 09:08:16

+0

答案太長以至於無法發表評論 - 請參閱已添加的「答案」 – enhzflep 2013-02-19 09:34:34

回答

1

這裏的關鍵字是雙緩衝。但我不知道x11是否提供了這個開箱即用或者你需要自己實現它,所以我會離開你的谷歌搜索;)

除此之外,你可能會考慮更新頻率較低。或許足夠以250,500或1000毫秒的時間進行更新?這當然取決於你的用例。

1

不客氣。嗯。那麼,在這種情況下,我會檢查將運行它的機器的X-Server設置。我最近得到了一張新的vid卡,發現openGL應用程序運行的幀數更多/秒,但質量很差 - 圖像中可見「撕裂」 - 您可以一直看到最後一幀和當前幀在同一時間。在啓用後,在XServer的設置中等待VSynch,問題消失。不過,這聽起來更像是我以前在MS Windows下遇到的一個問題。在這種特殊情況下,每次我向控件發送新圖像時,窗口都會重新繪製圖像窗口下的窗口/對話框的背景。所以,不是簡單地更換舊圖像,而是在將圖像替換爲圖像(grrr)之前,將圖像清除爲圖像灰色。如果您可以訪問足夠快的屏幕錄製軟件,則可以在運行時對應用程序進行視頻錄製,然後逐幀播放視頻。或者,如果您搜索「禁用窗口背景重繪/刪除X11」或類似內容,您可能會獲得一些牽引力。 :)

猜猜這也取決於你是否使用Gtk +,wxWidgets或只是原始的X11代碼。

+0

我們正在使用原始X11代碼。我們使用XCopyArea將圖像繪製到窗口。我們是否需要在代碼中使用XSync命令?我們需要這樣做。 – VigneshK 2013-02-19 09:41:54

+0

從XCopyArea手冊頁讀取時,我特別感興趣地注意到文本_「如果源矩形的區域被遮擋,並且沒有保留在後臺存儲區中,或者指定了源繪製邊界外的區域,則這些區域不是而是在所有相應的目標區域上發生,這些目標區域或者是可見的,或者是保留在後備存儲區中**如果目標是具有非無背景的窗口,則目標的相應區域將以該背景平鋪** 「_ - 我會檢查目標窗口的背景。 – enhzflep 2013-02-19 10:43:00

+0

謝謝你的回覆。我們在正確的區域使用XCopyArea。在我們的代碼中,我們沒有將背景設置爲none。我試圖將XSetBackgroundPixmap設置爲none,但是我沒有得到正確的輸出,而是整個窗口用前景色繪製。 – VigneshK 2013-02-19 11:04:20