如何确定是否已在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
}发布于 2012-06-09 22:53:09
当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-05 22:57:34
这似乎是一个问题,因为图像在渲染之前没有完全加载。
https://stackoverflow.com/questions/10898678
复制相似问题