2016-11-14 36 views
2

我正在構建一個three.js應用程序,其中我必須動態生成多個紋理(也可能稍後重新生成(更新))。現在我分配一個專用的屏幕外的每個這樣的紋理繪圖畫布,這樣分配的:如何有效地重用畫布幾個基於畫布的THREE.Texture

canvas = document.createElement('canvas'); 
canvasContext = canvas.getContext('2d'); 
mainTexture = new THREE.Texture(canvas); 

然後,當我需要更新的質感,我使用Canvas API渲染的東西在畫布上,然後調用

mainTexture.needsUpdate = true; 

這會導致紋理在將來某個時間從畫布上重新加載其內容。任何我需要的畫布渲染圖像我已經預加載和緩存,以便在渲染時不會造成更多延遲。

這個過程在更新週期後會導致抽搐一段時間,顯然是由於延遲加載和/或浪費了多個畫布浪費了不必要的大量內存(這只是一種預感;我不知道內存如何被分配的html5畫布管理)。

所以我的問題是,如何更有效地做到這一點?因爲如果我要同時更新幾個紋理,那麼我不能使用單個畫布,但由於紋理的延遲加載特性,它們的更新會覆蓋之前完成的更新。有沒有辦法強制紋理同步立即從畫布中重新加載?是否存在另一個可行的策略,不要有多個畫布?

TY,

馬蒂

回答