<canvas>:从内存中删除2d上下文而不从内存中删除webgl上下文</canvas>

时间:2014-09-28 00:18:07

标签: javascript html5 canvas webgl

我有一个带有2d和(重复)webgl上下文的元素,其纹理与2d上下文的像素数据相同。

是否可以在不删除webgl上下文的情况下从内存中删除2d上下文?

(通过clearRect清除2d上下文或fillRect不会将其从内存中删除) (更改宽度/高度会重置webgl和2d上下文。)

我现在唯一能想到的就是创建一个新画布,在临时画布上绘制一个2d上下文,设置width属性(从而清除原始画布),然后在原始画布中创建一个基于临时画布2d上下文。

1 个答案:

答案 0 :(得分:3)

2d上下文和WebGL上下文无关,所以简短的回答是&#34;是的,可以从内存中删除2d上下文而不从内存中删除webgl上下文&#34;

你还不能在1个画布上拥有2个上下文。您可以从不同的画布中分别拥有2个上下文。如果您调用gl.texImage2D(....., some2DCanvas)some2DCanvas的内容复制到纹理中。他们之间没有联系,因为它是副本。

另一方面,没有&#34;删除2d上下文&#34;。您无法在JavaScript中明确地删除上下文。你所能做的只是停止引用它。例如

function() {
  var ctx = document.createElement("canvas").getContext("2d");
}();

这将创建一个由变量ctx引用的上下文。因为该变量是函数的局部变量,所以一旦函数退出变量就消失了,现在没有对上下文的引用,也没有引用它的画布。因此,只要感觉它,浏览器就可以丢弃画布和上下文。当发生这种情况时未定义。但是,没有明确的命令会删除2d上下文&#34;。