コード例 #1
0
        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);
        }
コード例 #2
0
 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));
 }
コード例 #3
0
 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);
 }
コード例 #4
0
        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);
        }
コード例 #5
0
        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>());
        }
コード例 #6
0
        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);
        }
コード例 #7
0
 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));
 }
コード例 #8
0
 internal static unsafe ref T GetDataInSample <T>(ref BlobArray <float> samples, int offset)
     where T : unmanaged
 {
     return(ref *(T *)((float *)samples.GetUnsafePtr() + offset));
 }
コード例 #9
0
 internal static unsafe void SetDataInSample <T>(ref BlobArray <float> samples, int offset, T data)
     where T : unmanaged
 {
     *(T *)((float *)samples.GetUnsafePtr() + offset) = data;
 }
コード例 #10
0
 /// <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));
 }
コード例 #11
0
 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));
 }