http://www.khronos.org/webgl/wiki/Demo_Repository上的Textured Box演示版包含以下代码段:
function loadImageTexture(ctx, url)
{
var texture = ctx.createTexture(); // allocate texture
texture.image = new Image();
texture.image.onload = function()
{ doLoadImageTexture(ctx, texture.image, texture) }
texture.image.src = url;
return texture;
}
function doLoadImageTexture(ctx, image, texture)
{
ctx.bindTexture(ctx.TEXTURE_2D, texture);
ctx.texImage2D(ctx.TEXTURE_2D, 0, ctx.RGBA, ctx.RGBA, ctx.UNSIGNED_BYTE, image); // loaded the image
...
}
...
var spiritTexture = loadImageTexture(gl, "resources/spirit.jpg");
...
如何释放已分配/加载的纹理以避免(图形)内存泄漏?
以下代码是否会释放加载/分配的纹理和图像?
spiritTexture = null;
提前感谢您的帮助。
注意:2010年12月23日在http://www.khronos.org/message_boards/viewtopic.php?f=43&t=3367上发帖,但到目前为止还没有答案。
答案 0 :(得分:3)
ctx.deleteTexture(spiritTexture);
那应该释放gpu上的纹理。
关于图片,您只需修改loadImageTexture
,以便它不会在image
内存储texture
。在image
之外不需要loadImageTexture
的引用,当doLoadImageTexture
完成时,您可以自然地超出范围。
即。使它像:
function loadImageTexture(ctx, url)
{
var texture = ctx.createTexture(); // allocate texture
var image = new Image();
image.onload = function() { doLoadImageTexture(ctx, image, texture) }
image.src = url;
return texture;
}