diff --git a/submodules/LottieMeshSwift/Resources/Shapes.metal b/submodules/LottieMeshSwift/Resources/Shapes.metal index c413401fa8..d042bf25f8 100644 --- a/submodules/LottieMeshSwift/Resources/Shapes.metal +++ b/submodules/LottieMeshSwift/Resources/Shapes.metal @@ -26,10 +26,11 @@ vertex Varyings vertexPassthrough( constant Vertex *verticies[[buffer(0)]], constant float2 &offset[[buffer(1)]], unsigned int vid[[vertex_id]], - constant float4x4 &transformMatrix[[buffer(2)]] + constant float4x4 &transformMatrix[[buffer(2)]], + constant int &indexOffset[[buffer(3)]] ) { Varyings out; - constant Vertex &v = verticies[vid]; + constant Vertex &v = verticies[vid + indexOffset]; float2 viewSize(512.0f, 512.0f); float4 transformedVertex = transformMatrix * float4(v.position, 0.0, 1.0); out.position = float4(screenSpaceToRelative(float2(transformedVertex.x, transformedVertex.y) + offset, viewSize), 0.0, 1.0); diff --git a/submodules/LottieMeshSwift/Sources/MeshAnimation.swift b/submodules/LottieMeshSwift/Sources/MeshAnimation.swift index c44aff3b5c..000af87d75 100644 --- a/submodules/LottieMeshSwift/Sources/MeshAnimation.swift +++ b/submodules/LottieMeshSwift/Sources/MeshAnimation.swift @@ -458,11 +458,7 @@ public final class MeshRenderer: MTKView { let baseVertexIndex = Int32(startVertexIndex) segment.triangles.withUnsafeBytes { triangles in - let trianglesBase = triangles.baseAddress!.assumingMemoryBound(to: Int32.self) - let indexBase = indexData.advanced(by: nextIndexIndex) - for i in 0 ..< triangles.count / 4 { - indexBase[i] = trianglesBase[i] + baseVertexIndex - } + let _ = memcpy(indexData.advanced(by: nextIndexIndex), triangles.baseAddress!, triangles.count) } nextIndexIndex += segment.triangles.count / 4 @@ -527,6 +523,8 @@ public final class MeshRenderer: MTKView { transformBytes[15] = Float(transform.m44) renderEncoder.setVertexBytes(&transformBytes, length: transformBytes.count * 4, index: 2) + var baseVertexIndexBytes: Int32 = Int32(baseVertexIndex) + renderEncoder.setVertexBytes(&baseVertexIndexBytes, length: 4, index: 3) renderEncoder.setVertexBuffer(mesh.vertexBuffer, offset: 0, index: 0) renderEncoder.drawIndexedPrimitives(type: .triangle, indexCount: iCount, indexType: .uint32, indexBuffer: mesh.indexBuffer, indexBufferOffset: iStart * 4)