簡體   English   中英

WebGL 對象是否被垃圾收集?

[英]Are WebGL objects garbage collected?

在 JavaScript memory 中,當我不再對 GC 有任何引用時,我分配的 memory 會被釋放,因為我明白這一點嗎?

WebGL 對象(如緩沖區或紋理)與由gl.bufferData()gl.textureImage2D()分配的 GPU 上的 memory 塊相關聯。

I'm wondering: if I give up my last reference to a WebGLTexture or WebGLBuffer object, does it get garbage collected with its GPU memory block freed by the JavaScript VM automatically?

是的


規格

注意當JS object被銷毀時,底層的GL object會被自動標記為刪除


但是您應該注意到 object 在您放棄最后一個引用時可能不會被破壞,因此調用deleteBuffer仍然是一個好習慣。

從這個答案復制: WebGLTextures 垃圾收集了嗎?

WebGLTexture一詞更改為WebGLObject


是和不是。

是的,它們是垃圾收集的。 但是,只要瀏覽器決定收集它們,就會發生垃圾收集。 從大多數瀏覽器 JavaScript 引擎的 POV 來看, WebGLObject object 是一個很小的 object,它只包含一個int ,所以它沒有簡單的方法知道收集它的任何特殊壓力。 In other words when the GPU runs out of memory the JavaScript garbage collector, which has no connection to the GPU, has no way of knowing that it needs to free these tiny WebGLObject objects in order to free up texture memory. 它只看 CPU memory。

這實際上是一個眾所周知的垃圾回收問題。 非常適合 memory。 這對其他資源來說不是很好。

所以,是的, WebGLObject對象是垃圾收集的,是的,紋理/緩沖區/渲染緩沖區/程序/着色器將被釋放,但實際上,如果你不想用完 memory,你需要自己刪除它們。

當然,如果您刷新頁面或訪問同一選項卡中的新頁面,瀏覽器將全部釋放它們,但您不能指望瀏覽器以任何有用的方式垃圾收集WebGLObject對象(紋理/緩沖區/渲染緩沖區/程序/着色器)方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM