如何确定是否已在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
}
答案 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;
[...]
}
},
[...]
}