3

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上发帖,但到目前为止没有答案。

4

1 回答 1

3
ctx.deleteTexture(spiritTexture);

那应该释放gpu上的纹理。

关于图像,您应该只进行修改loadImageTexture,使其不存储imagetexture. 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;
}
于 2011-01-24T00:35:57.843 回答