Optimize GC for sprite update.
This commit is contained in:
@@ -127,15 +127,15 @@ namespace Cryville.Crtr.Components {
|
|||||||
UpdateScale();
|
UpdateScale();
|
||||||
UpdateZIndex();
|
UpdateZIndex();
|
||||||
}
|
}
|
||||||
|
readonly Vector2[] _uvs = new Vector2[4];
|
||||||
protected virtual void UpdateUV() {
|
protected virtual void UpdateUV() {
|
||||||
var frame = CurrentFrame;
|
var frame = CurrentFrame;
|
||||||
if (SpriteInfo.IsNullOrEmpty(frame)) return;
|
if (SpriteInfo.IsNullOrEmpty(frame)) return;
|
||||||
Vector2[] muv = OriginalUV;
|
Vector2[] muv = OriginalUV;
|
||||||
Vector2[] uv = new Vector2[muv.Length];
|
for (int i = 0; i < _uvs.Length; i++) {
|
||||||
for (int i = 0; i < uv.Length; i++) {
|
_uvs[i] = frame.Frame.GetUV(muv[i]);
|
||||||
uv[i] = frame.Frame.GetUV(muv[i]);
|
|
||||||
}
|
}
|
||||||
mesh.Mesh.uv = uv;
|
mesh.Mesh.uv = _uvs;
|
||||||
}
|
}
|
||||||
|
|
||||||
float _opacity = 1;
|
float _opacity = 1;
|
||||||
|
|||||||
@@ -44,27 +44,26 @@ namespace Cryville.Crtr.Components {
|
|||||||
UpdateUV();
|
UpdateUV();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
readonly Vector2[] _uvs = new Vector2[8];
|
||||||
|
readonly Vector3[] _verts = new Vector3[8];
|
||||||
protected override void UpdateUV() {
|
protected override void UpdateUV() {
|
||||||
var frame = CurrentFrame;
|
var frame = CurrentFrame;
|
||||||
if (SpriteInfo.IsNullOrEmpty(frame)) return;
|
if (SpriteInfo.IsNullOrEmpty(frame)) return;
|
||||||
|
|
||||||
Vector2[] muv = OriginalUV;
|
Vector2[] muv = OriginalUV;
|
||||||
Vector2[] uv = new Vector2[muv.Length];
|
|
||||||
|
|
||||||
var or = frame.Ratio;
|
var or = frame.Ratio;
|
||||||
var sr = Scale.x / Scale.y;
|
var sr = Scale.x / Scale.y;
|
||||||
var b = new Vector2(
|
var rr = or / sr;
|
||||||
(or / sr) * _border.x,
|
var b1 = rr * _border.x;
|
||||||
1 - (or / sr) * (1 - _border.y)
|
var b2 = 1 - rr * (1 - _border.y);
|
||||||
);
|
|
||||||
Vector3[] vert = mesh.Mesh.vertices;
|
|
||||||
|
|
||||||
for (int i = 0; i < muv.Length; i++) {
|
for (int i = 0; i < muv.Length; i++) {
|
||||||
float x; float bx;
|
float x; float bx;
|
||||||
switch ((int)muv[i].x) {
|
switch ((int)muv[i].x) {
|
||||||
case 0: x = 0; bx = 0; break;
|
case 0: x = 0; bx = 0; break;
|
||||||
case 1: x = _border.x; bx = b.x; break;
|
case 1: x = _border.x; bx = b1; break;
|
||||||
case 2: x = _border.y; bx = b.y; break;
|
case 2: x = _border.y; bx = b2; break;
|
||||||
case 3: x = 1; bx = 1; break;
|
case 3: x = 1; bx = 1; break;
|
||||||
default: throw new NotSupportedException("Built-in resource corrupted");
|
default: throw new NotSupportedException("Built-in resource corrupted");
|
||||||
}
|
}
|
||||||
@@ -74,12 +73,12 @@ namespace Cryville.Crtr.Components {
|
|||||||
case 3: y = 1; break;
|
case 3: y = 1; break;
|
||||||
default: throw new NotSupportedException("Built-in resource corrupted");
|
default: throw new NotSupportedException("Built-in resource corrupted");
|
||||||
}
|
}
|
||||||
uv[i] = frame.Frame.GetUV(x, y);
|
_uvs[i] = frame.Frame.GetUV(x, y);
|
||||||
bx -= 0.5f; y -= 0.5f;
|
bx -= 0.5f; y -= 0.5f;
|
||||||
vert[i] = new Vector3(bx, 0, y);
|
_verts[i] = new Vector3(bx, 0, y);
|
||||||
}
|
}
|
||||||
mesh.Mesh.uv = uv;
|
mesh.Mesh.uv = _uvs;
|
||||||
mesh.Mesh.vertices = vert;
|
mesh.Mesh.vertices = _verts;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Init() {
|
public override void Init() {
|
||||||
|
|||||||
Reference in New Issue
Block a user