您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
120 行
3.5 KiB
120 行
3.5 KiB
using Unity.Collections;
|
|
using Unity.Jobs;
|
|
|
|
#if ENABLE_VRM10_BURST
|
|
using Unity.Burst;
|
|
#endif
|
|
|
|
namespace UniVRM10
|
|
{
|
|
/// <summary>
|
|
/// インデックス配列を、オフセットを加えながら複製するJob郡
|
|
/// MEMO: ushortを考慮することをやめればかなりシンプルに書ける
|
|
/// </summary>
|
|
internal struct CopyIndicesJobs
|
|
{
|
|
/// <summary>
|
|
/// unsigned int -> unsigned int
|
|
/// </summary>
|
|
#if ENABLE_VRM10_BURST
|
|
[BurstCompile]
|
|
#endif
|
|
public struct UInt2UInt : IJobParallelFor
|
|
{
|
|
private readonly uint _vertexOffset;
|
|
|
|
[ReadOnly] private readonly NativeSlice<uint> _source;
|
|
[WriteOnly] private NativeSlice<uint> _destination;
|
|
|
|
public UInt2UInt(uint vertexOffset, NativeSlice<uint> source, NativeSlice<uint> destination)
|
|
{
|
|
_vertexOffset = vertexOffset;
|
|
_source = source;
|
|
_destination = destination;
|
|
}
|
|
|
|
public void Execute(int index)
|
|
{
|
|
_destination[index] = _source[index] + _vertexOffset;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// unsigned short -> unsigned int
|
|
/// </summary>
|
|
#if ENABLE_VRM10_BURST
|
|
[BurstCompile]
|
|
#endif
|
|
public struct Ushort2Uint : IJobParallelFor
|
|
{
|
|
private readonly uint _vertexOffset;
|
|
|
|
[ReadOnly] private readonly NativeSlice<ushort> _source;
|
|
[WriteOnly] private NativeSlice<uint> _destination;
|
|
|
|
public Ushort2Uint(uint vertexOffset, NativeSlice<ushort> source, NativeSlice<uint> destination)
|
|
{
|
|
_vertexOffset = vertexOffset;
|
|
_source = source;
|
|
_destination = destination;
|
|
}
|
|
|
|
public void Execute(int index)
|
|
{
|
|
_destination[index] = _source[index] + _vertexOffset;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// unsigned short -> unsigned short
|
|
/// </summary>
|
|
#if ENABLE_VRM10_BURST
|
|
[BurstCompile]
|
|
#endif
|
|
public struct Ushort2Ushort : IJobParallelFor
|
|
{
|
|
private readonly ushort _vertexOffset;
|
|
|
|
[ReadOnly] private readonly NativeSlice<ushort> _source;
|
|
[WriteOnly] private NativeSlice<ushort> _destination;
|
|
|
|
public Ushort2Ushort(ushort vertexOffset, NativeSlice<ushort> source, NativeSlice<ushort> destination)
|
|
{
|
|
_vertexOffset = vertexOffset;
|
|
_source = source;
|
|
_destination = destination;
|
|
}
|
|
|
|
public void Execute(int index)
|
|
{
|
|
_destination[index] = (ushort)(_source[index] + _vertexOffset);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// unsigned int -> unsigned short
|
|
/// </summary>
|
|
#if ENABLE_VRM10_BURST
|
|
[BurstCompile]
|
|
#endif
|
|
public struct Uint2Ushort : IJobParallelFor
|
|
{
|
|
private readonly ushort _vertexOffset;
|
|
|
|
[ReadOnly] private readonly NativeSlice<uint> _source;
|
|
[WriteOnly] private NativeSlice<ushort> _destination;
|
|
|
|
public Uint2Ushort(ushort vertexOffset, NativeSlice<uint> source, NativeSlice<ushort> destination)
|
|
{
|
|
_vertexOffset = vertexOffset;
|
|
_source = source;
|
|
_destination = destination;
|
|
}
|
|
|
|
public void Execute(int index)
|
|
{
|
|
_destination[index] = (ushort)(_source[index] + _vertexOffset);
|
|
}
|
|
}
|
|
}
|
|
}
|