mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2025-12-21 01:36:02 +08:00
[csharp] Don't mix from uninitialized vertices. See https://github.com/EsotericSoftware/spine-runtimes/issues/1016
This commit is contained in:
parent
f31d98506c
commit
4277027e0d
@ -797,8 +797,6 @@ namespace Spine {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public class DeformTimeline : CurveTimeline {
|
public class DeformTimeline : CurveTimeline {
|
||||||
static float[] zeros = new float[64];
|
|
||||||
|
|
||||||
internal int slotIndex;
|
internal int slotIndex;
|
||||||
internal float[] frames;
|
internal float[] frames;
|
||||||
internal float[][] frameVertices;
|
internal float[][] frameVertices;
|
||||||
@ -831,30 +829,30 @@ namespace Spine {
|
|||||||
if (vertexAttachment == null || !vertexAttachment.ApplyDeform(attachment)) return;
|
if (vertexAttachment == null || !vertexAttachment.ApplyDeform(attachment)) return;
|
||||||
|
|
||||||
var verticesArray = slot.attachmentVertices;
|
var verticesArray = slot.attachmentVertices;
|
||||||
|
if (verticesArray.Count == 0) alpha = 1;
|
||||||
|
|
||||||
float[][] frameVertices = this.frameVertices;
|
float[][] frameVertices = this.frameVertices;
|
||||||
int vertexCount = frameVertices[0].Length;
|
int vertexCount = frameVertices[0].Length;
|
||||||
if (verticesArray.Capacity < vertexCount) verticesArray.Capacity = vertexCount; // verticesArray.SetSize(vertexCount) // Ensure size and preemptively set count.
|
|
||||||
verticesArray.Count = vertexCount;
|
|
||||||
float[] vertices = verticesArray.Items;
|
|
||||||
|
|
||||||
float[] frames = this.frames;
|
float[] frames = this.frames;
|
||||||
|
float[] vertices;
|
||||||
|
|
||||||
if (time < frames[0]) {
|
if (time < frames[0]) {
|
||||||
|
|
||||||
switch (pose) {
|
switch (pose) {
|
||||||
case MixPose.Setup:
|
case MixPose.Setup:
|
||||||
float[] zeroVertices;
|
verticesArray.Clear();
|
||||||
if (vertexAttachment.bones == null) {
|
|
||||||
// Unweighted vertex positions (setup pose).
|
|
||||||
zeroVertices = vertexAttachment.vertices;
|
|
||||||
} else {
|
|
||||||
// Weighted deform offsets (zeros).
|
|
||||||
zeroVertices = DeformTimeline.zeros;
|
|
||||||
if (zeroVertices.Length < vertexCount) DeformTimeline.zeros = zeroVertices = new float[vertexCount];
|
|
||||||
}
|
|
||||||
Array.Copy(zeroVertices, 0, vertices, 0, vertexCount);
|
|
||||||
return;
|
return;
|
||||||
case MixPose.Current:
|
case MixPose.Current:
|
||||||
if (alpha == 1) return;
|
if (alpha == 1) {
|
||||||
|
verticesArray.Clear();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// verticesArray.SetSize(vertexCount) // Ensure size and preemptively set count.
|
||||||
|
if (verticesArray.Capacity < vertexCount) verticesArray.Capacity = vertexCount;
|
||||||
|
verticesArray.Count = vertexCount;
|
||||||
|
vertices = verticesArray.Items;
|
||||||
|
|
||||||
if (vertexAttachment.bones == null) {
|
if (vertexAttachment.bones == null) {
|
||||||
// Unweighted vertex positions.
|
// Unweighted vertex positions.
|
||||||
float[] setupVertices = vertexAttachment.vertices;
|
float[] setupVertices = vertexAttachment.vertices;
|
||||||
@ -873,6 +871,11 @@ namespace Spine {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// verticesArray.SetSize(vertexCount) // Ensure size and preemptively set count.
|
||||||
|
if (verticesArray.Capacity < vertexCount) verticesArray.Capacity = vertexCount;
|
||||||
|
verticesArray.Count = vertexCount;
|
||||||
|
vertices = verticesArray.Items;
|
||||||
|
|
||||||
if (time >= frames[frames.Length - 1]) { // Time is after last frame.
|
if (time >= frames[frames.Length - 1]) { // Time is after last frame.
|
||||||
float[] lastVertices = frameVertices[frames.Length - 1];
|
float[] lastVertices = frameVertices[frames.Length - 1];
|
||||||
if (alpha == 1) {
|
if (alpha == 1) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user