我有一个带有 2d 和(重复)webgl 上下文的元素,其纹理与 2d 上下文的像素数据相同。
是否可以在不删除 webgl 上下文的情况下从内存中删除 2d 上下文?
(通过clearRect或fillRect清除2d上下文不会将其从内存中删除) (更改宽度/高度会重置 webgl 和 2d 上下文。)
我现在唯一能想到的就是创建一个新的 Canvas ,在临时 Canvas 中绘制一个2d上下文,设置宽度属性(从而清除原始 Canvas ),然后在原始 Canvas 中基于临时 Canvas 2d 上下文。
最佳答案
2d 上下文和 WebGL 上下文不相关,因此简短的回答是“是的,可以从内存中删除 2d 上下文,而不从内存中删除 webgl 上下文”
您还不能在 1 个 Canvas 上拥有 2 个上下文。您可以拥有 2 个上下文,每个上下文都来自不同的 Canvas 。如果您调用 gl.texImage2D(....., some2DCanvas)
将 some2DCanvas
的内容复制到纹理中。它们之间没有任何联系,因为它是副本。
另一方面,不存在“删除二维上下文”这样的事情。您无法显式删除 JavaScript 中的上下文。您所能做的就是停止引用它。例如
function() {
var ctx = document.createElement("canvas").getContext("2d");
}();
这将创建一个由变量 ctx 引用的上下文。因为该变量是函数的本地变量,所以一旦函数退出,该变量就会消失,并且现在不再有对上下文的引用,也不再有对其创建的 Canvas 的引用。因此,浏览器可以随时丢弃 Canvas 和上下文。当这种情况发生时是不确定的。但是,没有任何命令可以明确“删除 2d 上下文”。
关于javascript - < Canvas > : Remove the 2d context from memory without removing the webgl context from memory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26080411/