如何知道何时在GPU内存上分配数据

时间:2012-06-05 13:56:50

标签: opengl-es-2.0 gpu webgl three.js

如何确定是否已在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
}

2 个答案:

答案 0 :(得分:1)

这似乎是一个问题,因为在渲染之前图像没有完全加载。

答案 1 :(得分: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;
            [...]
        }
    },
    [...]
}