Pull up material disposal to MeshBase.

This commit is contained in:
2023-02-18 14:39:45 +08:00
parent 8910b1f4a0
commit 2a6a33e60c
4 changed files with 21 additions and 17 deletions

View File

@@ -1,4 +1,5 @@
using System;
using UnityEngine;
namespace Cryville.Crtr.Components {
public abstract class MeshBase : SkinComponent {
@@ -7,6 +8,7 @@ namespace Cryville.Crtr.Components {
}
protected MeshWrapper mesh = new MeshWrapper();
protected Material[] materials;
short _zindex;
public short ZIndex {
@@ -22,9 +24,16 @@ namespace Cryville.Crtr.Components {
}
protected void UpdateZIndex() {
if (!mesh.Initialized) return;
foreach (var mat in mesh.Renderer.materials) {
foreach (var mat in materials) {
mat.renderQueue = _zindex;
}
}
protected override void OnDestroy() {
if (materials != null)
foreach (var mat in materials) {
Material.Destroy(mat);
}
mesh.Destroy();
}
}
}

View File

@@ -22,10 +22,6 @@ namespace Cryville.Crtr.Components {
SubmitProperty("part", new PropOp.Enum<Part>(v => part = v, v => (Part)v), 1);
}
protected override void OnDestroy() {
mesh.Destroy();
}
public override void Init() {
Reset();
}
@@ -103,7 +99,6 @@ namespace Cryville.Crtr.Components {
public SpriteInfo body = new SpriteInfo();
public SpriteInfo tail = new SpriteInfo();
Material[] mats;
List<Vector3> vertices;
List<float> lengths;
float sumLength = 0;
@@ -112,23 +107,25 @@ namespace Cryville.Crtr.Components {
base.Init();
mesh.Init(transform);
mats = mesh.Renderer.materials = new Material[] { mesh.NewMaterial, mesh.NewMaterial, mesh.NewMaterial };
head.Bind(mats[0]);
body.Bind(mats[1]);
tail.Bind(mats[2]);
mesh.Renderer.materials = materials = new Material[] {
MeshWrapper.NewMaterial(),
MeshWrapper.NewMaterial(),
MeshWrapper.NewMaterial(),
};
head.Bind(materials[0]);
body.Bind(materials[1]);
tail.Bind(materials[2]);
UpdateZIndex();
}
protected override void OnDestroy() {
base.OnDestroy();
Reset();
foreach (var m in mats) Material.Destroy(m);
if (_shape != null) _shapePool.Return(_shape);
if (vertices != null) {
_ptPool.Return(vertices);
_lPool.Return(lengths);
}
base.OnDestroy();
}
protected override void AppendPointInternal(Vector3 p, Quaternion r) {

View File

@@ -25,10 +25,6 @@ namespace Cryville.Crtr.Components {
}
#pragma warning restore IDE1006
protected override void OnDestroy() {
mesh.Destroy();
}
Vector2 _scale = Vector2.one;
public Vector2 Scale {
get { return _scale; }
@@ -92,6 +88,7 @@ namespace Cryville.Crtr.Components {
protected void InternalInit(string meshName = "quad") {
mesh.Init(transform);
mesh.Renderer.materials = materials = new Material[] { MeshWrapper.NewMaterial() };
mesh.Mesh = GenericResources.Meshes[meshName];
UpdateScale();
UpdateZIndex();

View File

@@ -86,6 +86,7 @@ namespace Cryville.Crtr.Components {
var m = new MeshWrapper();
m.Init(mesh.MeshTransform);
m.Mesh = new Mesh();
m.Renderer.material = MeshWrapper.NewMaterial(); // TODO Destroy or add to `materials`
m.Renderer.material.mainTexture = tex;
meshes.Add(tex, m);
verts.Add(tex, new List<Vector3>());