gpt4 book ai didi

memory - 三.JS:纹理mipmaps和webGL的引用

转载 作者:行者123 更新时间:2023-12-04 21:41:57 25 4
gpt4 key购买 nike

我有一个具有大量高质量纹理的模型,并且我努力降低整体内存使用量。我尝试的其中一件事是在将 mipmap 推送到 GPU 后删除它们,以便从公共(public) RAM 中释放纹理数据。这样做时,模型仍会使用曾经上传的 mipmaps 纹理进行渲染。所以这很好,但内 stub 本没有下降。

material.mipmaps.length = 0;

所以我的问题是:

是否有对 ThreeJS 保存的 mipmap 的引用,垃圾收集器无法释放内存。或者是webGL本身引用的纹理,这看起来有点奇怪,因为webGL让我认为纹理总是在专用内存中使用,因此必须被复制。如果 webGL 在 RAM 中保留对原始纹理的引用,那么 webGL 在具有专用图形卡的台式机和具有共享公共(public) RAM 的板载图形卡的笔记本电脑上的行为会有所不同。

如果有人能解释我在threeJS/webGL内部发生了什么以获得纹理引用,那将是非常高兴的。

最佳答案

这是个好问题。

我们下去吧...

所以通常你会dispose()当您希望将纹理从 VRAM 中踢出时。
追踪它的作用可能会给我们带来答案。那么 dispose 有什么作用呢?

https://github.com/mrdoob/three.js/blob/2d59713328c421c3edfc3feda1b116af13140b94/src/textures/Texture.js#L103-L107

好的,所以它调度了一个事件。好的。这是哪里处理的?

https://github.com/mrdoob/three.js/blob/2d59713328c421c3edfc3feda1b116af13140b94/src/renderers/WebGLRenderer.js#L654-L665

啊哈,最后:

https://github.com/mrdoob/three.js/blob/2d59713328c421c3edfc3feda1b116af13140b94/src/renderers/WebGLRenderer.js#L834-L837

这表明我们要离开 THREE.js 并进入原始 WebGL 的世界。
深入研究一下 WebGL 规范 here (第 3.7.1/3.7.2 节)和关于原始 WebGL 的教程 herehere表明 WebGL 在内存中保留了一个引用,但这不是 THREE.js 纹理的公共(public)属性。

现在,为什么它进入 RAM 而不是我不知道的 VRAM ......你是否在具有专用或共享 GPU RAM 的机器上测试了它?

关于memory - 三.JS:纹理mipmaps和webGL的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24171957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com