2012-06-05 49 views
0

如何確定是否在three.js上的GPU內存上分配了緩衝區?如何知道數據在GPU內存上的分配

我第一次調用renderer.render()時,它會渲染沒有紋理的網格(看起來黑色),這讓我覺得當函數被調用時紋理在GPU內存上還不可用。在5-10次調用之後,紋理出現在屏幕上。

爲什麼這很重要?當視圖需要更新時,我正在觸發渲染功能。如果加載新模型,則渲染函數應等待,直到所有數據都可用於渲染。

如何確保所有數據都準備好在GPU上使用?

僞代碼:

textures = LoadTextures() 
material = CreateMaterial(textures) 
geometry = loader.load("path/to/file") 

if(materialLoaded && geometryLoaded) { 
    needsUpdate = true 
} 

if(needsUpdate) { 
    renderer.render() 
    needsUpdate = false 
} 
+1

從技術上講,只要你完成調用加載函數,它應該準備好了,在OpenGL/WebGL中沒有這樣的加載週期。 – Tim

+0

好的,我認爲在DirectX上有類似的查詢。謝謝。 – frank

回答

0

當image.onload被稱爲時,可以在GPU上使用紋理。我在那裏放置一個標誌來確定給定的圖像(加載爲紋理)是否已加載。

LITEV.Texture = function(src) 
{ 
    [...] 
    this.loaded = false; 
} 

LITEV.Texture.prototype = 
{ 
    load : function(path, callback, callbackError) 
    { 
     image.onload = function() 
     { 
      [...] 
      texture.needsUpdate = true; 
      if (callback) 
      { 
       callback(this); 
      } 
      this.loaded = true; 
      [...] 
     } 
    }, 
    [...] 
} 
1

這似乎是一個事實,即在渲染之前的圖像不完全加載的問題。

+0

是的,他們沒有完全加載。 – frank