当 Javascript 对象(在本例中,表示要绘制的形状)超出范围时(在它超出范围之前),我想清理一些相关数据(在本例中,从 GPU 中删除 webgl 纹理)垃圾收集。所以我一直在寻找类似 finalize()
或 destroy ()
的东西,当 Javascript 对象在垃圾收集之前丢失其最后一个引用时,我可以使用它来删除 webgl 纹理。
我浏览了网络和stackoverflow,几乎相信Javascript没有这个功能,但我不敢相信......如何在没有finalize
et的情况下实现这个效果.al.?
最佳答案
我意识到这已经晚了六年,但 Google 搜索中仍然出现这个问题 - WebGL 规范似乎确实表明,当相应的 WebGLBuffer
时,显卡上的缓冲区和纹理将自动销毁> 或 WebGLTexture
被破坏。例如,参见the documentation for deleteBuffer
:
If buffer was generated by a different WebGLRenderingContext than this one, generates an INVALID_OPERATION error.
Mark for deletion the buffer object contained in the passed WebGLBuffer, as if by calling glDeleteBuffers. If the object has already been marked for deletion, the call has no effect. Note that underlying GL object will be automatically marked for deletion when the JS object is destroyed, however this method allows authors to mark an object for deletion early.
关于javascript - 在 JavaScript 中对对象进行垃圾收集之前进行清理 - 如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20097071/