我有一个带有2d和(重复)webgl上下文的元素,其纹理与2d上下文的像素数据相同。
是否可以在不删除webgl上下文的情况下从内存中删除2d上下文?
(通过clearRect清除2d上下文或fillRect不会将其从内存中删除) (更改宽度/高度会重置webgl和2d上下文。)
我现在唯一能想到的就是创建一个新画布,在临时画布上绘制一个2d上下文,设置width属性(从而清除原始画布),然后在原始画布中创建一个基于临时画布2d上下文。
答案 0 :(得分:3)
2d上下文和WebGL上下文无关,所以简短的回答是"是的,可以从内存中删除2d上下文而不从内存中删除webgl上下文"
你还不能在1个画布上拥有2个上下文。您可以从不同的画布中分别拥有2个上下文。如果您调用gl.texImage2D(....., some2DCanvas)
将some2DCanvas
的内容复制到纹理中。他们之间没有联系,因为它是副本。
另一方面,没有"删除2d上下文"。您无法在JavaScript中明确地删除上下文。你所能做的只是停止引用它。例如
function() {
var ctx = document.createElement("canvas").getContext("2d");
}();
这将创建一个由变量ctx
引用的上下文。因为该变量是函数的局部变量,所以一旦函数退出变量就消失了,现在没有对上下文的引用,也没有引用它的画布。因此,只要感觉它,浏览器就可以丢弃画布和上下文。当发生这种情况时未定义。但是,没有明确的命令会删除2d上下文"。