using NativeEngine; using System.Runtime.CompilerServices; namespace Sandbox; internal static partial class SandboxEngineExtensions { internal static RenderMultisampleType ToEngine( this MultisampleAmount self ) { switch ( self ) { case MultisampleAmount.MultisampleNone: return RenderMultisampleType.RENDER_MULTISAMPLE_NONE; case MultisampleAmount.Multisample2x: return RenderMultisampleType.RENDER_MULTISAMPLE_2X; case MultisampleAmount.Multisample4x: return RenderMultisampleType.RENDER_MULTISAMPLE_4X; case MultisampleAmount.Multisample6x: return RenderMultisampleType.RENDER_MULTISAMPLE_6X; case MultisampleAmount.Multisample8x: return RenderMultisampleType.RENDER_MULTISAMPLE_8X; case MultisampleAmount.Multisample16x: return RenderMultisampleType.RENDER_MULTISAMPLE_16X; default: return RenderService.GetMultisampleType(); // Fall back to what the main swapchain is using } } internal static MultisampleAmount FromEngine( this RenderMultisampleType self ) { switch ( self ) { case RenderMultisampleType.RENDER_MULTISAMPLE_NONE: return MultisampleAmount.MultisampleNone; case RenderMultisampleType.RENDER_MULTISAMPLE_2X: return MultisampleAmount.Multisample2x; case RenderMultisampleType.RENDER_MULTISAMPLE_4X: return MultisampleAmount.Multisample4x; case RenderMultisampleType.RENDER_MULTISAMPLE_6X: return MultisampleAmount.Multisample6x; case RenderMultisampleType.RENDER_MULTISAMPLE_8X: return MultisampleAmount.Multisample8x; case RenderMultisampleType.RENDER_MULTISAMPLE_16X: return MultisampleAmount.Multisample16x; default: throw new System.Exception( "Unknown multisample amount" ); } } /// /// Convert to a FloatSpan, which allows easy SIMD/AVX2 instructions /// [MethodImpl( MethodImplOptions.AggressiveInlining )] public static FloatSpan AsFloatSpan( this Span span ) => new FloatSpan( span ); }