Shadow继承自BaseMeshEffect,BaseMeshEffect会在enable,disable的时候引起顶点脏标记,它实现了接口IMeshModifier,接口存在一个重载函数ModifyMesh,BaseMeshEffect自身的ModifyMesh重写了参数为Mesh的,这个函数会在重建的顶点重构阶段调用,调用参数为VertextHelper的ModifyMesh,这个函数在BaseMeshEffect中是抽象的,Shadow重写它,实际上就是遍历顶点信息,拷贝一份偏移过的顶点信息,值得一提的是它用提前预设list的capacity的方式zeroalloc。Shadow面板有三个属性,effectColor、effectDistance和useGraphicAlpha,修改它们都会引起顶点脏标记
//BaseMeshEffect
public virtual void ModifyMesh(Mesh mesh)
{
using (var vh = new VertexHelper(mesh))
{
ModifyMesh(vh);
vh.FillMesh(mesh);
}
}
public abstract void ModifyMesh(VertexHelper vh);
//Shadow
public override void ModifyMesh(VertexHelper vh)
{
if (!IsActive())
return;
var output = ListPool<UIVertex>.Get();
vh.GetUIVertexStream(output);
ApplyShadow(output, effectColor, 0, output.Count, effectDistance.x, effectDistance.y);//这个是将ApplyShadowZeroAlloc封装了一层
vh.Clear();
vh.AddUI