Memory Three.JS:纹理贴图和webGL的参考

Memory Three.JS:纹理贴图和webGL的参考,memory,three.js,textures,Memory,Three.js,Textures,我有一个拥有大量高质量纹理的模型,我努力降低整体内存使用率。我尝试过的一件事是,在mipmap被推送到GPU后移除它们,以便从公共RAM中重新放置纹理数据。执行此操作时,模型仍使用一次上载的mipmaps纹理进行渲染。这很好,但是记忆一点也没有下降 material.mipmaps.length = 0; 所以我的问题是: 是否有对ThreeJS保存的Mipmap的引用,garbace收集器无法释放内存。或者是webGL本身引用的纹理,这似乎有点奇怪,因为webGL让我认为纹理总是在专用内存中

我有一个拥有大量高质量纹理的模型,我努力降低整体内存使用率。我尝试过的一件事是,在mipmap被推送到GPU后移除它们,以便从公共RAM中重新放置纹理数据。执行此操作时,模型仍使用一次上载的mipmaps纹理进行渲染。这很好,但是记忆一点也没有下降

material.mipmaps.length = 0;
所以我的问题是:

是否有对ThreeJS保存的Mipmap的引用,garbace收集器无法释放内存。或者是webGL本身引用的纹理,这似乎有点奇怪,因为webGL让我认为纹理总是在专用内存中使用,因此必须复制。如果webGL在RAM中保留对原始纹理的引用,webGL在带有专用图形卡的台式机和带有共享公共RAM的板载图形卡的笔记本电脑上的行为会有所不同吗


如果有人能解释一下纹理参考的3JS/webGL的内部情况,我会非常高兴的。

这是个好问题

我们下去吧。。。 因此,当您希望将纹理从VRAM中踢出时,通常会
dispose()。
追踪它的作用可能会给我们一个答案。那么dispose做什么呢

好的,所以它发送了一个事件。好吧那是在哪里处理的

啊哈,所以最后:

这意味着我们将离开THREE.js,进入原始WebGL的世界。 在WebGL规范(第3.7.1/3.7.2节)和关于原始WebGL的教程中挖掘一点,并显示WebGL在内存中保留一个引用,但这不是THREE.js纹理的公共属性

现在,为什么这会进入RAM而不是VRAM我不知道。。。您是否在带有专用或共享GPU RAM的机器上测试过