javascript - < Canvas > : Remove the 2d context from memory without removing the webgl context from memory

标签 javascript html canvas webgl

我有一个带有 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/

相关文章:

javascript - 更新 JSON 并刷新​​页面时使用旧版本的 JSON

javascript - 显示复选框中的多个数据

javascript - 如何使 Canvas 达到主体的宽度和高度,同时不拉伸(stretch)或模糊绘图?

java - 使用 Box2D 引擎而非 Javascript 开发 HTML5 canvas

javascript - 为什么不能在 Angular 配置中使用提供程序?

javascript - 当鼠标在框上时停止动画并在鼠标移出时将其动画回来,不起作用

javascript - HTML 表单属性 "name"未在 Firefox 中定义

javascript - 将 Javascript 的 setInterval 函数设置为可变数量——可能吗?

javascript - jQuery 拖放上传...在哪里可以找到?

javascript - 为什么 Canvas 的撤消功能不起作用?