背鍋的項目出現的問題及更改方法

前幾年背鍋的那個項目,打擊了我的信心,

爲啥那麼卡,確實是架構的問題。當時開了線程池沒錯,但是沒有異步加載資源,都在渲染的那幀去加載的。

通過我這兩年對引擎架構的整合,直到上週解決了這個問題。

有幾點,

第一,渲染要多線程渲染,當時的那個渲染是在主線程渲染。多線程渲染時,需要個事件。將  窗口與OpenGL 上下文綁定後,setevent ,在主線程等待這個事件,確保主線程繼續執行。

第二,加載瓦片數據時異步加載,開四個線程,用信號量。通過瓦片名稱生成紋理,要求的瓦片名稱是生產者,生成紋理數據是消費者。這裏需要一個監控者模式,在獲取要求的瓦片數據時加鎖,寫入要更新的數據數組中,在渲染時,也要加鎖,
第三,預處理時,用四叉樹或八叉樹處理瓦片及其他模型。

第四,在cpu 端,要用攝像機六棱錐過濾掉不在視野內的物體,可以通過物體包圍盒與六棱錐相交判斷,不能只等着osg去過濾。
第五,對於頻繁訪問內存的數據,不要用 STL ,而是直接開緩存,最好內存池。

 

 


以前的項目,架構師已經脫離代碼很多年,所以掌握不了細節了,所以這個鍋我背了。需要細摳,做個好的架構不只是加載個動態鏈接庫,懂幾個設計模式那麼簡單

發佈了654 篇原創文章 · 獲贊 17 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章