#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) using Unity.Jobs; using Unity.Mathematics; namespace Obi { public class BurstPathSmootherRenderSystem : ObiPathSmootherRenderSystem { public BurstPathSmootherRenderSystem(ObiSolver solver) : base(solver) { } public override void Render() { using (m_RenderMarker.Auto()) { base.Render(); // generate raw frames using parallel transport var parallelTransportJob = new ParallelTransportJob { pathFrames = rawFrames.AsNativeArray(), frameOffsets = rawFrameOffsets.AsNativeArray(), particleIndices = particleIndices.AsNativeArray(), renderablePositions = m_Solver.renderablePositions.AsNativeArray(), renderableOrientations = m_Solver.renderableOrientations.AsNativeArray(), principalRadii = m_Solver.principalRadii.AsNativeArray(), colors = m_Solver.colors.AsNativeArray(), pathData = pathData.AsNativeArray() }; var handle = parallelTransportJob.Schedule(rawFrameOffsets.count, 4); // throw away unneeded frames using decimation var decimationJob = new DecimateChunksJob { inputFrames = rawFrames.AsNativeArray(), inputFrameOffsets = rawFrameOffsets.AsNativeArray(), outputFrameCounts = decimatedFrameCounts.AsNativeArray(), pathData = pathData.AsNativeArray() }; handle = decimationJob.Schedule(rawFrameOffsets.count, 4, handle); // smooth chunks: var chaikinJob = new ChaikinSmoothChunksJob() { inputFrames = rawFrames.AsNativeArray(), inputFrameOffsets = rawFrameOffsets.AsNativeArray(), inputFrameCounts = decimatedFrameCounts.AsNativeArray(), outputFrames = smoothFrames.AsNativeArray(), outputFrameOffsets = smoothFrameOffsets.AsNativeArray(), outputFrameCounts = smoothFrameCounts.AsNativeArray(), pathData = pathData.AsNativeArray() }; chaikinJob.Schedule(rawFrameOffsets.count, 4, handle).Complete(); } } } } #endif