mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-03-26 22:49:01 +08:00
[unity] Fixed SkeletonPartsRenderer mesh tangent error. Also fixed another potential size mismatch at mesh normals or tangents vs vertices. Closes #1265.
This commit is contained in:
parent
6ac649a316
commit
009929bbc9
@ -1009,19 +1009,18 @@ namespace Spine.Unity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
int vertexCount = this.vertexBuffer.Count;
|
|
||||||
if (settings.addNormals) {
|
if (settings.addNormals) {
|
||||||
int oldLength = 0;
|
int oldLength = 0;
|
||||||
|
|
||||||
if (normals == null)
|
if (normals == null)
|
||||||
normals = new Vector3[vertexCount];
|
normals = new Vector3[vbiLength];
|
||||||
else
|
else
|
||||||
oldLength = normals.Length;
|
oldLength = normals.Length;
|
||||||
|
|
||||||
if (oldLength < vertexCount) {
|
if (oldLength != vbiLength) {
|
||||||
Array.Resize(ref this.normals, vertexCount);
|
Array.Resize(ref this.normals, vbiLength);
|
||||||
var localNormals = this.normals;
|
var localNormals = this.normals;
|
||||||
for (int i = oldLength; i < vertexCount; i++) localNormals[i] = Vector3.back;
|
for (int i = oldLength; i < vbiLength; i++) localNormals[i] = Vector3.back;
|
||||||
}
|
}
|
||||||
mesh.normals = this.normals;
|
mesh.normals = this.normals;
|
||||||
}
|
}
|
||||||
@ -1029,7 +1028,7 @@ namespace Spine.Unity {
|
|||||||
if (settings.tintBlack) {
|
if (settings.tintBlack) {
|
||||||
if (uv2 != null) {
|
if (uv2 != null) {
|
||||||
// Sometimes, the vertex buffer becomes smaller. We need to trim the size of the tint black buffers to match.
|
// Sometimes, the vertex buffer becomes smaller. We need to trim the size of the tint black buffers to match.
|
||||||
if (vbiLength > uv2.Items.Length) {
|
if (vbiLength != uv2.Items.Length) {
|
||||||
Array.Resize(ref uv2.Items, vbiLength);
|
Array.Resize(ref uv2.Items, vbiLength);
|
||||||
Array.Resize(ref uv3.Items, vbiLength);
|
Array.Resize(ref uv3.Items, vbiLength);
|
||||||
uv2.Count = uv3.Count = vbiLength;
|
uv2.Count = uv3.Count = vbiLength;
|
||||||
@ -1049,7 +1048,7 @@ namespace Spine.Unity {
|
|||||||
var vbi = vertexBuffer.Items;
|
var vbi = vertexBuffer.Items;
|
||||||
var ubi = uvBuffer.Items;
|
var ubi = uvBuffer.Items;
|
||||||
|
|
||||||
MeshGenerator.SolveTangents2DEnsureSize(ref this.tangents, ref this.tempTanBuffer, vertexCount);
|
MeshGenerator.SolveTangents2DEnsureSize(ref this.tangents, ref this.tempTanBuffer, vertexCount, vbi.Length);
|
||||||
for (int i = 0; i < submeshCount; i++) {
|
for (int i = 0; i < submeshCount; i++) {
|
||||||
var submesh = sbi[i].Items;
|
var submesh = sbi[i].Items;
|
||||||
int triangleCount = sbi[i].Count;
|
int triangleCount = sbi[i].Count;
|
||||||
@ -1115,9 +1114,9 @@ namespace Spine.Unity {
|
|||||||
if (uv2 != null) uv2.TrimExcess();
|
if (uv2 != null) uv2.TrimExcess();
|
||||||
if (uv3 != null) uv3.TrimExcess();
|
if (uv3 != null) uv3.TrimExcess();
|
||||||
|
|
||||||
int count = vertexBuffer.Count;
|
int vbiLength = vertexBuffer.Items.Length;
|
||||||
if (normals != null) Array.Resize(ref normals, count);
|
if (normals != null) Array.Resize(ref normals, vbiLength);
|
||||||
if (tangents != null) Array.Resize(ref tangents, count);
|
if (tangents != null) Array.Resize(ref tangents, vbiLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
#region TangentSolver2D
|
#region TangentSolver2D
|
||||||
@ -1127,9 +1126,9 @@ namespace Spine.Unity {
|
|||||||
/// <param name="tangentBuffer">Eventual Vector4[] tangent buffer to assign to Mesh.tangents.</param>
|
/// <param name="tangentBuffer">Eventual Vector4[] tangent buffer to assign to Mesh.tangents.</param>
|
||||||
/// <param name="tempTanBuffer">Temporary Vector2 buffer for calculating directions.</param>
|
/// <param name="tempTanBuffer">Temporary Vector2 buffer for calculating directions.</param>
|
||||||
/// <param name="vertexCount">Number of vertices that require tangents (or the size of the vertex array)</param>
|
/// <param name="vertexCount">Number of vertices that require tangents (or the size of the vertex array)</param>
|
||||||
internal static void SolveTangents2DEnsureSize (ref Vector4[] tangentBuffer, ref Vector2[] tempTanBuffer, int vertexCount) {
|
internal static void SolveTangents2DEnsureSize (ref Vector4[] tangentBuffer, ref Vector2[] tempTanBuffer, int vertexCount, int vertexBufferLength) {
|
||||||
if (tangentBuffer == null || tangentBuffer.Length < vertexCount)
|
if (tangentBuffer == null || tangentBuffer.Length != vertexBufferLength)
|
||||||
tangentBuffer = new Vector4[vertexCount];
|
tangentBuffer = new Vector4[vertexBufferLength];
|
||||||
|
|
||||||
if (tempTanBuffer == null || tempTanBuffer.Length < vertexCount * 2)
|
if (tempTanBuffer == null || tempTanBuffer.Length < vertexCount * 2)
|
||||||
tempTanBuffer = new Vector2[vertexCount * 2]; // two arrays in one.
|
tempTanBuffer = new Vector2[vertexCount * 2]; // two arrays in one.
|
||||||
|
|||||||
@ -116,8 +116,8 @@ namespace Spine.Unity.Modules {
|
|||||||
} else if (buffers.MaterialsChangedInLastUpdate()) {
|
} else if (buffers.MaterialsChangedInLastUpdate()) {
|
||||||
meshRenderer.sharedMaterials = buffers.GetUpdatedSharedMaterialsArray();
|
meshRenderer.sharedMaterials = buffers.GetUpdatedSharedMaterialsArray();
|
||||||
}
|
}
|
||||||
|
meshGenerator.FillLateVertexData(mesh);
|
||||||
}
|
}
|
||||||
meshGenerator.FillLateVertexData(mesh);
|
|
||||||
|
|
||||||
meshFilter.sharedMesh = mesh;
|
meshFilter.sharedMesh = mesh;
|
||||||
smartMesh.instructionUsed.Set(currentInstructions);
|
smartMesh.instructionUsed.Set(currentInstructions);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user