Bar*_*lom 3 javascript garbage-collection webgl
在WebGL中,使用以下命令创建和销毁纹理:
WebGLTexture? createTexture();
void deleteTexture(WebGLTexture? texture);
Run Code Online (Sandbox Code Playgroud)
而在GLES中,您使用数字(地址?)来引用纹理,而在WebGL中有一个WebGLTexture对象.
这是否意味着如果这样的对象超出范围并被垃圾收集,其关联的纹理也将从GPU中删除?如果没有,为什么不呢?
(这是依赖于实现的 - 至少我认为规范没有提到它 - 所以我对主要浏览器感兴趣.)
是的,不是.
是的,它是垃圾收集.但是,只要浏览器决定收集它,就会发生垃圾收集.从大多数浏览器的POV JavaScript引擎来看,WebGLTexture对象是一个很小的对象,int它只包含一个,所以它没有简单的方法来知道收集它的任何特殊压力.换句话说,当OpenGL内存不足时,没有与OpenGL连接的JavaScript垃圾收集器无法知道它需要释放这些微小的WebGLTexture对象以释放纹理内存.它只关注CPU内存.
这实际上是众所周知的垃圾收集问题.这对记忆很有好处.对其他资源来说并不是那么好.
所以,是的,WebGLTextures垃圾收集,是的,纹理将被释放,但实际上你需要自己删除它们,如果你不想耗尽内存.
当然,如果您刷新页面或访问同一选项卡中的新页面,浏览器将释放它们,但您无法WebGLTextures以任何有用的方式依靠浏览器进行垃圾收集(或任何其他WebGL资源).
| 归档时间: |
|
| 查看次数: |
677 次 |
| 最近记录: |