-Three.js版本66
- 在Chrome v33中运行(最新)
-WebGL渲染器
我有一个场景,我在其中绘制对象(节点).对象都是我添加到场景中的"根"对象的子对象.用户能够按下按钮并切换要添加/删除的节点子集(不更改/销毁相机).
每次切换后,动画(相机移动)变得越来越慢,表明我有泄漏.我看到了对象内部的任何地方和一些WebGL缓冲区,但我找不到泄漏.
处理场景有什么我可以丢失的吗?
我做以下事情:
当用户按下按钮时:
当用户再次按下按钮时:
感谢任何帮助!
编辑
我其实刚刚发现了这个问题.我的重绘方法再次调用我的动画钩子,所以每种类型都添加了另一个无意义的动画.
如果有其他人有这个问题请确认你只需要你的动画方法
为了帮助任何寻找通用清理的人,我正在做的是:
function doDispose(obj)
{
if (obj !== null)
{
for (var i = 0; i < obj.children.length; i++)
{
doDispose(obj.children[i]);
}
if (obj.geometry)
{
obj.geometry.dispose();
obj.geometry = undefined;
}
if (obj.material)
{
if (obj.material.materials)
{
for (i = 0; i < obj.material.materials.length; i++)
{
obj.material.materials[i].dispose();
}
}
else
{
obj.material.dispose();
}
obj.material = undefined;
}
if (obj.texture)
{
obj.texture.dispose();
obj.texture = undefined;
}
}
obj = undefined;
}
Run Code Online (Sandbox Code Playgroud)
小智 5
这对我来说非常有效,谢谢!
我将其修改为 Three.js 版本 72
function doDispose(obj)
{
if (obj !== null)
{
for (var i = 0; i < obj.children.length; i++)
{
doDispose(obj.children[i]);
}
if (obj.geometry)
{
obj.geometry.dispose();
obj.geometry = undefined;
}
if (obj.material)
{
if (obj.material.map)
{
obj.material.map.dispose();
obj.material.map = undefined;
}
obj.material.dispose();
obj.material = undefined;
}
}
obj = undefined;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2586 次 |
| 最近记录: |