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 回答