protected override JobHandle StartGeneration(MeshData meshData, JobHandle dependOn) { int rowNum = Mathf.CeilToInt(SplineCache.Distance / TransformStepDistance); var transforms = new NativeArray <PointTransform>(rowNum, Allocator.TempJob, NativeArrayOptions.UninitializedMemory); AddTemp(transforms); if (ScaleValues != null) { var scales = new NativeArray <float2>(transforms.Length, Allocator.TempJob, NativeArrayOptions.UninitializedMemory); AddTemp(scales); FillScales(scales, TransformStepDistance, ScaleValues); dependOn = ApplyScales.Schedule(meshData.Vertices, scales, TransformStepDistance, DefApplyScalesInnerBatchCount, dependOn); } if (RotationValues != null) { var rotations = CalcRotations(rowNum, TransformStepDistance, RotationValues); AddTemp(rotations); dependOn = GenerateRotatedTransforms.Schedule(SplineCache, transforms, rotations, TransformStepDistance, GenerateTransformsInnerBatchCount, dependOn); } else { dependOn = GenerateTransforms.Schedule(SplineCache, transforms, TransformStepDistance, GenerateTransformsInnerBatchCount, dependOn); } if (LerpValues == null) { dependOn = ApplyTransforms.Schedule(meshData.Vertices, transforms, TransformStepDistance, ApplyTransformsInnerBatchCount, dependOn); } else { if (LerpValues.Length <= ApplyLerpedTransformsLimited.MaxLerpValueCount) { dependOn = ApplyLerpedTransformsLimited.Schedule(meshData.Vertices, transforms, LerpValues, TransformStepDistance, ApplyTransformsInnerBatchCount, dependOn); } else { var lerpArray = new NativeArray <LerpValue>(LerpValues, Allocator.TempJob); AddTemp(lerpArray); dependOn = ApplyLerpedTransforms.Schedule(meshData.Vertices, transforms, lerpArray, TransformStepDistance, ApplyTransformsInnerBatchCount, dependOn); } } return(dependOn); }
public static JobHandle Schedule(NativeArray <float3> vertices, NativeArray <PointTransform> transforms, LerpValue[] lerpValues, float transfromStepDistance, int innerBatchCount, JobHandle dependOn) { if (lerpValues.Length > 4) { Debug.LogWarning("ApplyLerpedTransformsLimited can't handle more than four values!"); } var applyTransforms = new ApplyLerpedTransformsLimited { transfromStepDistance = transfromStepDistance, lerpValue0 = GetOrDefault(0, lerpValues), lerpValue1 = GetOrDefault(1, lerpValues), lerpValue2 = GetOrDefault(2, lerpValues), lerpValue3 = GetOrDefault(3, lerpValues), transforms = transforms, vertices = vertices, }; return(applyTransforms.Schedule(vertices.Length, innerBatchCount, dependOn)); }