获取WebGL纹理/缓冲区/着色器计数

时间:2014-01-24 10:52:22

标签: javascript html5 webgl

有没有办法获取WebGL上下文的当前现有纹理,缓冲区或着色器的计数?就像你在about:memory中看到的数字一样。

enter image description here

我想在应用程序关闭时检查是否所有这些都已成功删除。

1 个答案:

答案 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);
};