public static unsafe bool IsOutsidePlanes(ref BlobArray <float4> planes, float4 localVertex) { const float kEpsilon = CSGConstants.kDistanceEpsilon; var planePtr = (float4 *)planes.GetUnsafePtr(); int n = 0; for (; n + 4 < planes.Length; n += 4) { var distance = new float4(math.dot(planePtr[n + 0], localVertex), math.dot(planePtr[n + 1], localVertex), math.dot(planePtr[n + 2], localVertex), math.dot(planePtr[n + 3], localVertex)); // will be 'false' when distance is NaN or Infinity if (!math.all(distance <= kEpsilon)) { return(true); } } for (; n < planes.Length; n++) { var distance = math.dot(planePtr[n], localVertex); // will be 'false' when distance is NaN or Infinity if (!(distance <= kEpsilon)) { return(true); } } return(false); }
public unsafe static void ClearValues <T>(ref BlobArray <T> array) where T : unmanaged { if (array.Length == 0) { return; } UnsafeUtility.MemSet(array.GetUnsafePtr(), 0, array.Length * sizeof(T)); }
public static void AddRangeNoResize <T>(this NativeList <T> list, ref BlobArray <T> elements, int length) where T : unmanaged { CheckLengthInRange(length, elements.Length); if (length == 0) { return; } list.AddRangeNoResize(elements.GetUnsafePtr(), length); }
public static unsafe BlobBuilderArray <T> Construct <T>(this BlobBuilder builder, ref BlobArray <T> blobArray, ref BlobArray <T> data) where T : unmanaged { var blobBuilderArray = builder.Allocate(ref blobArray, data.Length); if (data.Length > 0) { UnsafeUtility.MemCpy(blobBuilderArray.GetUnsafePtr(), data.GetUnsafePtr(), blobBuilderArray.Length * sizeof(T)); } return(blobBuilderArray); }
public static void CopyFrom <T>(this NativeSlice <T> dstArray, int dstIndex, ref BlobArray <T> srcArray, int srcIndex, int srcCount) where T : unmanaged { CheckLengthInRange(srcCount, srcArray.Length); CheckLengthInRange(srcCount, dstArray.Length); CheckIndexInRangeInc(dstIndex, dstArray.Length - srcCount); CheckIndexInRangeInc(srcIndex, srcArray.Length - srcCount); var srcPtr = (T *)srcArray.GetUnsafePtr() + srcIndex; var dstPtr = (T *)dstArray.GetUnsafePtr() + dstIndex; UnsafeUtility.MemCpy(dstPtr, srcPtr, srcCount * UnsafeUtility.SizeOf <T>()); }
public static unsafe BlobBuilderArray <T> Construct <T>(this BlobBuilder builder, ref BlobArray <T> blobArray, ref BlobArray <T> data, int length) where T : unmanaged { length = math.max(length, 0); var blobBuilderArray = builder.Allocate(ref blobArray, length); if (length > 0) { var srcPtr = data.GetUnsafePtr(); var dstPtr = blobBuilderArray.GetUnsafePtr(); UnsafeUtility.MemCpy(dstPtr, srcPtr, blobBuilderArray.Length * sizeof(T)); } return(blobBuilderArray); }
public static unsafe void CopyFrom <T>(this BlobBuilderArray <T> dstArray, ref BlobArray <T> srcArray) where T : unmanaged { UnsafeUtility.MemCpy(dstArray.GetUnsafePtr(), srcArray.GetUnsafePtr(), srcArray.Length * sizeof(T)); }
internal static unsafe ref T GetDataInSample <T>(ref BlobArray <float> samples, int offset) where T : unmanaged { return(ref *(T *)((float *)samples.GetUnsafePtr() + offset)); }
internal static unsafe void SetDataInSample <T>(ref BlobArray <float> samples, int offset, T data) where T : unmanaged { *(T *)((float *)samples.GetUnsafePtr() + offset) = data; }
/// <summary> /// Converts this BlobString to a standard C# <see cref="string"/>. /// </summary> /// <returns>The C# string.</returns> public new string ToString() { return(new string((char *)Data.GetUnsafePtr(), 0, Data.Length)); }
internal static unsafe uint ComputeHash <T>(ref BlobArray <T> array, uint seed = 0) where T : struct { return(math.hash(array.GetUnsafePtr(), array.Length * UnsafeUtility.SizeOf <T>(), seed)); }