有没有办法获取WebGL上下文的当前现有纹理,缓冲区或着色器的计数?就像你在about:memory
中看到的数字一样。
我想在应用程序关闭时检查是否所有这些都已成功删除。
答案 0 :(得分: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);
};