歡迎您光臨本站 註冊首頁

GuiLite 3.3 釋出:要靈活擴充套件,還要簡單粗暴

←手機掃碼閱讀     admin @ 2020-05-26 , reply:0

本次更新,解決了:定製多樣化問題,並優化了軟體啟動速度。

定製需求:

隨著開發群的日益壯大,有想法的開發者層出不窮;倒是群主太過正常,顯得跟大家有點格格不入了。大家需求是這樣的:

  1. 我的硬體,沒有framebuffer(這種情況在記憶體較小的微控制器平臺很常見),但我也想用GuiLite畫出漂亮流暢的效果
  2. 我需要一個可以滾動的UI效果,介面上的所有元素(視窗)可以一起上下左右滑動(例如:手機通訊錄)
  3. 我需要一個半透明的視窗,其中視窗的背景是半透明的,文字則是不透明的
  4. 我的硬體有2D加速功能,需要GuiLite給與支援

 軟體方案:

以上任何一個要求都足以推倒原有框架,因為太過底層,一旦修改就是對基礎關鍵部分的手術。如何用最少的程式碼簡單粗暴的解決問題,不傷執行效率,又不傷結構,是對軟體架構的一個重大考驗。我們的方案如下:

  1. 對於有經驗的開發者來說,這已經是舊聞了,不僅被解決了,而且已經廣泛應用在微控制器方案中了;為什麼舊事重提,就是因為它與需求2、3、4有很大的相似性,有必要一起做個總結:從c_surface派生一個類c_surface_no_fb,主要的繪製(渲染)介面沒有變,只是重新實現draw_pixel, fill_rect(過載虛擬函式),讓其透過條用外部的畫點驅動函式,進行具體畫點工作,具體見display.cpp::c_surface_no_fb
  2. 從c_surface派生一個類c_surface_scroll,擴大surface的高度,寬度,使其能夠繪製所有的視窗元素;混動顯示的過程,就是設定x,y座標偏移量的過程,具體見:HelloScroll/UICode/scroll.h 
  3. 從c_surface派生一個類c_surface_transparent,主要的繪製(渲染)介面沒有變,但實現繪製過程中,分析顏色的alpha值,從而達到透明效果(過載虛擬函式),具體見:HelloTransparent/UICode/surface_transparent.h
  4. 從c_surface派生一個類c_surface_2d_acc,重新實現一下draw_pixel,fill_rect介面,在該介面裡面使能硬體2D加速功能

最佳化需求:

  1. Linux版本的例項,看到介面的時間較慢,需要最佳化
  2. STM32版本,由於有呼叫malloc的地方,所以,在heap size不夠的時候會宕機,需要手動設定heap size;該操作有些麻煩,影響移植體驗,建議最佳化

最佳化方案:

  1. 去掉一些不必要的同步操作,改為非同步執行,保證介面第一時間呈現出來
  2. 對例項程式碼進行幾行程式碼調整,用靜態變數代替動態分配

開發者優秀作品展示:

 

(硬體配置:ESP32 + ST7789 + SPI螢幕),由於GIF的原因,畫面不能像真實影片那麼流暢,更好的效果,可以參看qq群檔案。

感謝GuiLite開發群“李子木”同學的分享!雖然這個作品中能看到GuiLite例項的影子,但視覺效果和藝術設計上面,已經完全是暴捶原作的水準了。特別是對SPI螢幕的DMA最佳化,讓畫面超出想象的流暢,絕對是SPI螢幕的最佳化典範。

最後,希望能看到更多優秀的作品,我們會盡力為大家提供一些技術建議,為您的超神之路貢獻綿薄之力。


[admin ]

來源:OsChina
連結:https://www.oschina.net/news/115945/guilite-3-3-released
GuiLite 3.3 釋出:要靈活擴充套件,還要簡單粗暴已經有31次圍觀

http://coctec.com/news/soft/show-post-235695.html