using Unity.Collections; using Unity.Jobs; #if ENABLE_VRM10_BURST using Unity.Burst; #endif namespace UniVRM10 { /// /// インデックス配列を、オフセットを加えながら複製するJob郡 /// MEMO: ushortを考慮することをやめればかなりシンプルに書ける /// internal struct CopyIndicesJobs { /// /// unsigned int -> unsigned int /// #if ENABLE_VRM10_BURST [BurstCompile] #endif public struct UInt2UInt : IJobParallelFor { private readonly uint _vertexOffset; [ReadOnly] private readonly NativeSlice _source; [WriteOnly] private NativeSlice _destination; public UInt2UInt(uint vertexOffset, NativeSlice source, NativeSlice destination) { _vertexOffset = vertexOffset; _source = source; _destination = destination; } public void Execute(int index) { _destination[index] = _source[index] + _vertexOffset; } } /// /// unsigned short -> unsigned int /// #if ENABLE_VRM10_BURST [BurstCompile] #endif public struct Ushort2Uint : IJobParallelFor { private readonly uint _vertexOffset; [ReadOnly] private readonly NativeSlice _source; [WriteOnly] private NativeSlice _destination; public Ushort2Uint(uint vertexOffset, NativeSlice source, NativeSlice destination) { _vertexOffset = vertexOffset; _source = source; _destination = destination; } public void Execute(int index) { _destination[index] = _source[index] + _vertexOffset; } } /// /// unsigned short -> unsigned short /// #if ENABLE_VRM10_BURST [BurstCompile] #endif public struct Ushort2Ushort : IJobParallelFor { private readonly ushort _vertexOffset; [ReadOnly] private readonly NativeSlice _source; [WriteOnly] private NativeSlice _destination; public Ushort2Ushort(ushort vertexOffset, NativeSlice source, NativeSlice destination) { _vertexOffset = vertexOffset; _source = source; _destination = destination; } public void Execute(int index) { _destination[index] = (ushort)(_source[index] + _vertexOffset); } } /// /// unsigned int -> unsigned short /// #if ENABLE_VRM10_BURST [BurstCompile] #endif public struct Uint2Ushort : IJobParallelFor { private readonly ushort _vertexOffset; [ReadOnly] private readonly NativeSlice _source; [WriteOnly] private NativeSlice _destination; public Uint2Ushort(ushort vertexOffset, NativeSlice source, NativeSlice destination) { _vertexOffset = vertexOffset; _source = source; _destination = destination; } public void Execute(int index) { _destination[index] = (ushort)(_source[index] + _vertexOffset); } } } }