动态创建Material 导致gfx buffer mem不断增加

  • Creator 版本: 3.8.2

  • 目标平台:chome浏览器

  • 重现方式:new Material() 然后动态设置effect。当节点销毁时,gfx buffer mem没有减少。
    使用次数多了会不断累加

  • 首个报错:


        const material = new Material();
        material.initialize({
                effectAsset: this._effect,
                technique: 1,
                defines: {

                },
                states: {
                    rasterizerState: { cullMode: gfx.CullMode.NONE }
                }
            });

        this.getComponent(MeshRenderer).setSharedMaterial(material, 0);

    protected release(): void {
       const material = this.getComponent(MeshRenderer).getSharedMaterial(0);
        material.destroy();
    }

是不是我用错了, 这个Material要怎么释放?

试一下先 this.getComponent(MeshRenderer).setSharedMaterial(null, 0); 再 material.destroy();

谢谢,我试试

刚开始
image

一段时间后

Material减少了,但是 gfx buffer mem 没有减少

那有可能是没有触发gc、或者是哪里还持有对 Material 的引用导致的。前者目前我没找到主动触发gc的api,后者的话可以排查下代码哈。

还有另外一种可行的方案是用对象池去创建和回收Material,这样应该就不会涨了。