问题描述:
我有一个2d元素和一个(重复)webgl上下文,其纹理与2d上下文的像素数据相同。<canvas>:从内存中删除2d上下文而无需从内存中删除webgl上下文
是否可以从内存中删除2d上下文而无需删除webgl上下文?
(清除经由clearRect或fillRect二维上下文将不会从存储器中删除它) (改变宽度/高度复位两者WebGL和2D的上下文。)
我现在可以想到的唯一事情是创建一个新的画布,在临时画布中绘制2d上下文,设置width属性(从而清除原始画布),然后根据临时画布2d上下文在原始画布中创建纹理。
答
2D背景和WebGL上下文无关所以短期的回答是“是的,这是可以从内存中删除2D背景的,但不从内存WebGL的背景下”
你不能有1 2个上下文画布(还)。您可以在不同的画布上分别创建两个上下文。如果您拨打gl.texImage2D(....., some2DCanvas)
将some2DCanvas
的内容复制到纹理中。他们之间没有任何联系,因为它是一个副本。
另一方面,没有“删除2D上下文”这样的事情。你不能明确地摆脱JavaScript中的上下文。你所能做的就是停止引用它。例如
function() {
var ctx = document.createElement("canvas").getContext("2d");
}();
这创建了一个由变量ctx
引用的上下文。因为该变量是函数的本地变量,所以只要函数退出,变量就消失了,现在没有对上下文的引用,也没有对其创建的画布的引用。因此,只要感觉像这样,浏览器就可以放弃画布和上下文。发生这种情况时未定义。但是,没有命令会明确地“删除2d上下文”。
为什么你需要从内存中删除它? – Scimonster 2014-09-28 05:52:57
我需要减少我游戏所花费的内存量...... – Agamemnus 2014-09-28 15:03:37
它不能改变绑定到context2D的画布的宽度/高度,而是改变绑定到webGL的另一个画布的宽度/高度。答案是设置宽度/高度为0 – GameAlchemist 2014-09-28 18:48:41