2012-06-05 3 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을에서 '로딩 시간'의 그런 conecpt을 프로그래머 없습니다. – Tim

+0

그래, 나는 DirectX의 쿼리와 비슷한 것이 있다고 생각했다. 감사. – frank

답변

0

texture는 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

관련 문제