gpt4 book ai didi

javascript - 在一页 session 中可以加载的 WebGL 纹理数量是否有限制?

转载 作者:行者123 更新时间:2023-11-28 01:55:25 24 4
gpt4 key购买 nike

我正在使用glfx.js一个网站的图像效果库,我有一个 Canvas ,然后渲染一张不断被新图像替换的图像,然后对其应用滤镜。

问题是运行几分钟后(加载大约 2300 个不同的纹理后)WebGL 会抛出此错误:

WebGL: INVALID_VALUE: texImage2D: bad image data

我已经将范围缩小到这个函数:

Texture.prototype.loadContentsOf = function(element) {
this.width = element.width || element.videoWidth;
this.height = element.height || element.videoHeight;
gl.bindTexture(gl.TEXTURE_2D, this.id);
gl.texImage2D(gl.TEXTURE_2D, 0, this.format, this.format, this.type, element);
};

在第 2,300 次调用 gl.texImage2D() 后,WebGL 抛出 INVALID_VALUE 错误,然后页面崩溃(Chrome 会发出“噢,啪!”)。

我通过调用以下命令来破坏纹理:

Texture.prototype.destroy = function() {
gl.deleteTexture(this.id);
this.id = null;
};

在一个页面 session 上可以加载的纹理数量是否有限制?我只需要在内存中保留大约 200 个,其他的我在使用后销毁。我销毁纹理后,WebGL 是否不会释放内存?

并澄清这不是图像本身的问题,如果我只是加载相同的图像多次,也会发生此错误。

我正在最新的 Chrome Canary 上对其进行测试。

最佳答案

我发现了问题。它与 WebGL 无关。问题是加载图像时出现内存泄漏。完成它们后,我将纹理设置为 null,而不是 Image 对象。完成后,只需添加 img = null 即可修复问题,Chrome 不再崩溃。

令人困惑的是,Chrome 在尝试加载图像时没有抛出错误,并且 onload 回调被调用得很好,但在尝试使用该图像时它会崩溃。我将在 Chromium 上提交一份错误报告,因为我认为这不是正确的行为(当无法加载图像时应该抛出一些其他错误)。

关于javascript - 在一页 session 中可以加载的 WebGL 纹理数量是否有限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19188974/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com