예제 #1
0
 public static void ClearValues <T>(ref ChiselBlobArray <T> array) where T : unmanaged
 {
     if (array.Length == 0)
     {
         return;
     }
     UnsafeUtility.MemSet(array.GetUnsafePtr(), 0, array.Length * sizeof(T));
 }
예제 #2
0
 public override unsafe int GetHashCode()
 {
     unchecked
     {
         return((int)math.hash(
                    new uint3(polygons.Length == 0 ? 0 : math.hash(polygons.GetUnsafePtr(), UnsafeUtility.SizeOf <Polygon>() * polygons.Length),
                              localVertices.Length == 0 ? 0 : math.hash(localVertices.GetUnsafePtr(), UnsafeUtility.SizeOf <float3>() * localVertices.Length),
                              halfEdges.Length == 0 ? 0 : math.hash(halfEdges.GetUnsafePtr(), UnsafeUtility.SizeOf <HalfEdge>() * halfEdges.Length))));
     }
 }
예제 #3
0
        public static ChiselBlobBuilderArray <T> Construct <T>(this ChiselBlobBuilder builder, ref ChiselBlobArray <T> blobArray, ref ChiselBlobArray <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);
        }
예제 #4
0
        public static ChiselBlobBuilderArray <T> Construct <T>(this ChiselBlobBuilder builder, ref ChiselBlobArray <T> blobArray, ref ChiselBlobArray <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);
        }
예제 #5
0
        public static unsafe T2[] ToArray <T1, T2>(ref ChiselBlobArray <T1> array)
            where T1 : unmanaged
            where T2 : unmanaged
        {
            var newArray = new T2[array.Length];

            if (array.Length > 0)
            {
                if (sizeof(T1) != sizeof(T2))
                    throw new InvalidOperationException();
                fixed(T2 *newArrayPtr = &newArray[0])
                {
                    UnsafeUtility.MemCpy(newArrayPtr, array.GetUnsafePtr(), array.Length * sizeof(T2));
                }
            }
            return(newArray);
        }
 public static unsafe uint GetHashCode <T>(ChiselBlobArray <T> value) where T : unmanaged
 {
     return(math.hash(value.GetUnsafePtr(), sizeof(T) * value.Length));
 }