From e3d55943b67a50fdbe888f0f0406674340fbe02a Mon Sep 17 00:00:00 2001 From: amamagi Date: Fri, 27 May 2022 20:45:31 +0900 Subject: [PATCH] fix reconstruct method --- .../System/FastSpringBoneBufferCombiner.cs | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneBufferCombiner.cs b/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneBufferCombiner.cs index 287802cea..cf15a9609 100644 --- a/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneBufferCombiner.cs +++ b/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneBufferCombiner.cs @@ -27,6 +27,7 @@ namespace UniVRM10.FastSpringBones.System private readonly LinkedList _buffers = new LinkedList(); private FastSpringBoneBuffer[] _batchedBuffers; + private int[] _batchedBufferLogicSizes; private bool _isDirty; @@ -71,13 +72,15 @@ namespace UniVRM10.FastSpringBones.System private void SaveToSourceBuffer() { if (_batchedBuffers == null) return; - + var logicsIndex = 0; - foreach (var buffer in _batchedBuffers) + for (var i = 0; i < _batchedBuffers.Length; ++i) { - if(buffer.IsDisposed) continue; - var length = buffer.Logics.Length; - NativeArray.Copy(_logics, logicsIndex, buffer.Logics, 0, length); + var length = _batchedBufferLogicSizes[i]; + if (!_batchedBuffers[i].IsDisposed) + { + NativeArray.Copy(_logics, logicsIndex, _batchedBuffers[i].Logics, 0, length); + } logicsIndex += length; } } @@ -92,7 +95,7 @@ namespace UniVRM10.FastSpringBones.System Profiler.BeginSample("FastSpringBone.ReconstructBuffers.SaveToSourceBuffer"); SaveToSourceBuffer(); Profiler.EndSample(); - + Profiler.BeginSample("FastSpringBone.ReconstructBuffers.DisposeBuffers"); DisposeAllBuffers(); Profiler.EndSample(); @@ -104,8 +107,10 @@ namespace UniVRM10.FastSpringBones.System Profiler.BeginSample("FastSpringBone.ReconstructBuffers.CopyToBatchedBuffers"); _batchedBuffers = _buffers.ToArray(); + _batchedBufferLogicSizes = _buffers.Select(buffer => buffer.Logics.Length).ToArray(); Profiler.EndSample(); - + + // バッファを数える Profiler.BeginSample("FastSpringBone.ReconstructBuffers.CountBufferSize"); foreach (var buffer in _buffers) { @@ -150,14 +155,12 @@ namespace UniVRM10.FastSpringBones.System DestSprings = new NativeSlice(_springs, springsOffset, buffer.Springs.Length), CollidersOffset = collidersOffset, LogicsOffset = logicsOffset, - TransformOffset = transformOffset }.Schedule(buffer.Springs.Length, 1, handle); handle = new LoadCollidersJob() { SrcColliders = buffer.Colliders, DestColliders = - new NativeSlice(_colliders, collidersOffset, buffer.Colliders.Length), - TransformOffset = transformOffset + new NativeSlice(_colliders, collidersOffset, buffer.Colliders.Length) }.Schedule(buffer.Colliders.Length, 1, handle); handle = new OffsetLogicsJob() { @@ -232,16 +235,15 @@ namespace UniVRM10.FastSpringBones.System { [ReadOnly] public NativeArray SrcSprings; [WriteOnly] public NativeSlice DestSprings; + public int CollidersOffset; public int LogicsOffset; - public int TransformOffset; public void Execute(int index) { var spring = SrcSprings[index]; spring.colliderSpan.startIndex += CollidersOffset; spring.logicSpan.startIndex += LogicsOffset; - if (spring.centerTransformIndex >= 0) spring.centerTransformIndex += TransformOffset; DestSprings[index] = spring; } } @@ -253,12 +255,10 @@ namespace UniVRM10.FastSpringBones.System { [ReadOnly] public NativeArray SrcColliders; [WriteOnly] public NativeSlice DestColliders; - public int TransformOffset; public void Execute(int index) { var collider = SrcColliders[index]; - collider.transformIndex += TransformOffset; DestColliders[index] = collider; } } @@ -283,4 +283,4 @@ namespace UniVRM10.FastSpringBones.System } } } -} \ No newline at end of file +}