0

three.jsの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
}
4

2 に答える 2

1

これは、レンダリングする前に画像が完全にロードされていないという事実に問題があるようです。

于 2012-06-05T14:57:34.463 に答える
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;
            [...]
        }
    },
    [...]
} 
于 2012-06-09T14:53:08.807 に答える