Mar*_*her 5 memory textures three.js
我有一个具有大量高质量纹理的模型,我努力保持整体内存使用率下降.我尝试过的一件事是在将mipmap推到GPU后删除它们,以便从公共RAM中重新获取纹理数据.这样做时,模型仍然使用一次上传的mipmaps纹理进行渲染.这很好,但内存根本没有下降.
material.mipmaps.length = 0;
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:
是否有对ThreeJS保留的mipmap的引用,即garbace收集器无法释放内存.或者是webGL本身引用的纹理,这似乎有点奇怪,因为webGL让我觉得纹理总是在专用内存中使用,因此必须复制.如果webGL在RAM中保留对原始纹理的引用,那么webGL在具有专用图形卡的台式机和具有共享公共RAM的板载图形卡的笔记本电脑上的行为会有所不同.
如果有人可以解释我在threeJS/webGL内部进行纹理参考的话会非常高兴.
这是个好问题。
因此,通常dispose()当您希望将纹理从 VRAM 中踢出时,您会需要它。追踪它的作用可能会给我们带来答案。那么dispose有什么作用呢?
好的,它会分派一个事件。好吧。哪里处理的?
啊哈,最后:
这表明我们将离开 THREE.js 并进入原始 WebGL 的世界。深入研究一下这里的WebGL 规范(第 3.7.1 / 3.7.2 节)以及这里和这里的原始 WebGL 教程,显示 WebGL 在内存中保留引用,但这不是 THREE.js 的公共属性质地。
现在,为什么它进入 RAM 而不是 VRAM,我不知道......您是否在具有专用或共享 GPU RAM 的计算机上测试过它?