From 6778a039c6bad0a8e2808ac2b83cf25b918a402d Mon Sep 17 00:00:00 2001 From: John Date: Sat, 19 Dec 2015 20:02:10 +0800 Subject: [PATCH] Flickering fix Force it to update both meshes when new triangles need to be pushed. http://esotericsoftware.com/forum/Flickering-and-a-solution-for-it-5299 --- .../Assets/spine-unity/SkeletonRenderer.cs | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/spine-unity/Assets/spine-unity/SkeletonRenderer.cs b/spine-unity/Assets/spine-unity/SkeletonRenderer.cs index de919317e..d348251a9 100644 --- a/spine-unity/Assets/spine-unity/SkeletonRenderer.cs +++ b/spine-unity/Assets/spine-unity/SkeletonRenderer.cs @@ -294,8 +294,12 @@ public class SkeletonRenderer : MonoBehaviour { this.vertices = vertices = new Vector3[vertexCount]; this.colors = new Color32[vertexCount]; this.uvs = new Vector2[vertexCount]; + mesh1.Clear(); mesh2.Clear(); + meshState.stateMesh1.forceUpdate = true; + meshState.stateMesh2.forceUpdate = true; + } else { // Too many vertices, zero the extra. Vector3 zero = Vector3.zero; @@ -502,6 +506,13 @@ public class SkeletonRenderer : MonoBehaviour { mesh.subMeshCount = submeshCount; for (int i = 0; i < submeshCount; ++i) mesh.SetTriangles(submeshes.Items[i].triangles, i); + + // Done updating mesh. Clear the force update state. + if (useMesh1) { + meshState.stateMesh1.forceUpdate = false; + } else { + meshState.stateMesh2.forceUpdate = false; + } } Vector3 meshBoundsExtents = meshBoundsMax - meshBoundsMin; @@ -565,15 +576,16 @@ public class SkeletonRenderer : MonoBehaviour { #endif // Check if any mesh settings were changed + MeshState.SingleMeshState currentMeshState = useMesh1 ? meshState.stateMesh1 : meshState.stateMesh2; + bool mustUpdateMeshStructure = - immutableTriangles != (useMesh1 ? meshState.stateMesh1.immutableTriangles : meshState.stateMesh2.immutableTriangles); + (immutableTriangles != currentMeshState.immutableTriangles) || currentMeshState.forceUpdate; if (mustUpdateMeshStructure) return true; // Check if any attachments were enabled/disabled // or submesh structures has changed - MeshState.SingleMeshState currentMeshState = useMesh1 ? meshState.stateMesh1 : meshState.stateMesh2; ExposedList attachmentsCurrentMesh = currentMeshState.attachments; ExposedList addSubmeshArgumentsCurrentMesh = currentMeshState.addSubmeshArguments; ExposedList attachmentsFlipStateCurrentMesh = currentMeshState.attachmentsFlipState; @@ -734,6 +746,7 @@ public class SkeletonRenderer : MonoBehaviour { public class SingleMeshState { public bool immutableTriangles; + public bool forceUpdate; public readonly ExposedList attachments = new ExposedList(); public readonly ExposedList attachmentsFlipState = new ExposedList(); public readonly ExposedList addSubmeshArguments = new ExposedList();