in binding/SkiaSharp/SKRuntimeEffect.cs [532:588]
public void WriteTo (Span<byte> data)
{
switch (Type) {
// float
case DataType.Float when data.Length == sizeof (float):
fixed (void* v = &floatValue)
new ReadOnlySpan<byte> (v, Size).CopyTo (data);
break;
case DataType.Float:
throw new ArgumentOutOfRangeException (nameof (Type), $"Unknown float data type length: {data.Length}");
// float array
case DataType.FloatArray when data.Length == sizeof (int) * floatArray.Length:
fixed (void* v = floatArray)
new ReadOnlySpan<byte> (v, Size).CopyTo (data);
break;
case DataType.FloatArray:
throw new ArgumentOutOfRangeException (nameof (Type), $"Unknown float array data type length: {data.Length}");
// int
case DataType.Int32 when data.Length == sizeof (int):
fixed (void* v = &intValue)
new ReadOnlySpan<byte> (v, Size).CopyTo (data);
break;
case DataType.Int32:
throw new ArgumentOutOfRangeException (nameof (Type), $"Unknown int data type length: {data.Length}");
// int array
case DataType.Int32Array when data.Length == sizeof (int) * intArray.Length:
fixed (void* v = intArray)
new ReadOnlySpan<byte> (v, Size).CopyTo (data);
break;
case DataType.Int32Array:
throw new ArgumentOutOfRangeException (nameof (Type), $"Unknown int array data type length: {data.Length}");
// colors
case DataType.Color when data.Length == sizeof (float) * 3:
void* vc3 = stackalloc[] { colorValue.Red, colorValue.Green, colorValue.Blue };
new ReadOnlySpan<byte> (vc3, data.Length).CopyTo (data);
break;
case DataType.Color when data.Length == sizeof (float) * 4:
void* vc4 = stackalloc[] { colorValue.Red, colorValue.Green, colorValue.Blue, colorValue.Alpha };
new ReadOnlySpan<byte> (vc4, data.Length).CopyTo (data);
break;
case DataType.Color:
throw new ArgumentOutOfRangeException (nameof (Type), $"Unknown color data type length: {data.Length}");
// empty
case DataType.Empty:
data.Fill (0);
break;
// error
default:
throw new ArgumentOutOfRangeException (nameof (Type), $"Unknown data type: '{Type}'");
}
}