2014-01-24 94 views
0

有沒有辦法獲得WebGL上下文中當前存在的紋理,緩衝區或着色器的計數?如果你看看about:memory,你可以在Firefox中得到的數字。獲取WebGL紋理/緩衝區/着色器計數

enter image description here

我想檢查我的應用程序關閉時,所有這些都是成功刪除。

回答

0

有沒有辦法直接從WebGLRenderingContext獲取信息,但你可以很容易地增加自己的背景類似

var numTextures = 0; 
var originalCreateTextureFn = gl.createTexture; 
var originalDeleteTextureFn = gl.deleteTexture; 
gl.createTexture = function() { 
    ++numTextures; 
    return originalCreateTextureFn.call(gl); 
}; 
gl.deleteTexture = function(texture) { 
    --numTextures; 
    originalDeleteTextureFn.call(gl, texture); 
}; 

你可以寫類似功能的其他資源。

當然,如果你想要完美的話,你可能需要爲每個對象添加一個標誌,以便你試圖刪除某些東西兩次,同時檢查傳入的對象實際上是正確的。類似於

var numTextures = 0; 
var originalCreateTextureFn = gl.createTexture; 
var originalDeleteTextureFn = gl.deleteTexture; 
gl.createTexture = function() { 
    ++numTextures; 
    var texture = originalCreateTextureFn.call(gl); 
    texture.__deleted__ = false; 
}; 
gl.deleteTexture = function(texture) { 
    if (texture && texture instanceof WebGLTexture && !texture.__deleted__) { 
    texture.__deleted__ = true; 
    --numTextures; 
    } 
    originalDeleteTextureFn.call(gl, texture); 
}; 
+0

是否真的沒有辦法與瀏覽器進行通信以檢索此類信息?我的意思是,瀏覽器真的關心這個(因爲它必須),並且沒有辦法獲得這些數據?聽起來不太好。 :/ –

+0

WebGL基本上只是OpenGL ES 2.0,也沒有辦法。看起來像一個非常無用的功能。 U分配資源,以便您可以輕鬆跟蹤它們。爲什麼臃腫的API? – gman

+0

本身並不是API功能,而是集成了瀏覽器。由於瀏覽器已經在做很多事情,並且處理每個JS> webGL調用,跟蹤分配的資源不是更方便嗎?我希望我的意思是有道理的。 –

相關問題