3

http://www.khronos.org/webgl/wiki/Demo_RepositoryのTexturedBoxデモには、次のコードスニペットがあります。

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です。への参照は外部では不要であり、完了したら自然にスコープ外に出すことができます。imagetextureimageloadImageTexturedoLoadImageTexture

つまり、次のようにします。

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 に答える