Pull up material disposal to MeshBase.
This commit is contained in:
@@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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>());
|
||||||
|
|||||||
Reference in New Issue
Block a user