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 System;
using UnityEngine;
namespace Cryville.Crtr.Components { namespace Cryville.Crtr.Components {
public abstract class MeshBase : SkinComponent { public abstract class MeshBase : SkinComponent {
@@ -7,6 +8,7 @@ namespace Cryville.Crtr.Components {
} }
protected MeshWrapper mesh = new MeshWrapper(); protected MeshWrapper mesh = new MeshWrapper();
protected Material[] materials;
short _zindex; short _zindex;
public short ZIndex { public short ZIndex {
@@ -22,9 +24,16 @@ namespace Cryville.Crtr.Components {
} }
protected void UpdateZIndex() { protected void UpdateZIndex() {
if (!mesh.Initialized) return; if (!mesh.Initialized) return;
foreach (var mat in mesh.Renderer.materials) { foreach (var mat in materials) {
mat.renderQueue = _zindex; 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); SubmitProperty("part", new PropOp.Enum<Part>(v => part = v, v => (Part)v), 1);
} }
protected override void OnDestroy() {
mesh.Destroy();
}
public override void Init() { public override void Init() {
Reset(); Reset();
} }
@@ -103,7 +99,6 @@ namespace Cryville.Crtr.Components {
public SpriteInfo body = new SpriteInfo(); public SpriteInfo body = new SpriteInfo();
public SpriteInfo tail = new SpriteInfo(); public SpriteInfo tail = new SpriteInfo();
Material[] mats;
List<Vector3> vertices; List<Vector3> vertices;
List<float> lengths; List<float> lengths;
float sumLength = 0; float sumLength = 0;
@@ -112,23 +107,25 @@ namespace Cryville.Crtr.Components {
base.Init(); base.Init();
mesh.Init(transform); mesh.Init(transform);
mats = mesh.Renderer.materials = new Material[] { mesh.NewMaterial, mesh.NewMaterial, mesh.NewMaterial }; mesh.Renderer.materials = materials = new Material[] {
head.Bind(mats[0]); MeshWrapper.NewMaterial(),
body.Bind(mats[1]); MeshWrapper.NewMaterial(),
tail.Bind(mats[2]); MeshWrapper.NewMaterial(),
};
head.Bind(materials[0]);
body.Bind(materials[1]);
tail.Bind(materials[2]);
UpdateZIndex(); UpdateZIndex();
} }
protected override void OnDestroy() { protected override void OnDestroy() {
base.OnDestroy();
Reset();
foreach (var m in mats) Material.Destroy(m);
if (_shape != null) _shapePool.Return(_shape); if (_shape != null) _shapePool.Return(_shape);
if (vertices != null) { if (vertices != null) {
_ptPool.Return(vertices); _ptPool.Return(vertices);
_lPool.Return(lengths); _lPool.Return(lengths);
} }
base.OnDestroy();
} }
protected override void AppendPointInternal(Vector3 p, Quaternion r) { protected override void AppendPointInternal(Vector3 p, Quaternion r) {

View File

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

View File

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