Files
LuaCsForBarotraumaEP/Libraries/MonoGame.Framework/Src/MonoGame.Framework/Windows/SharpDXHelper.cs
2019-06-25 16:00:44 +03:00

185 lines
6.8 KiB
C#

// MonoGame - Copyright (C) The MonoGame Team
// This file is subject to the terms and conditions defined in
// file 'LICENSE.txt', which is part of this source code package.
namespace Microsoft.Xna.Framework
{
using System;
using Graphics;
using SharpDX.Mathematics.Interop;
static internal class SharpDXHelper
{
static public SharpDX.DXGI.SwapEffect ToSwapEffect(PresentInterval presentInterval)
{
SharpDX.DXGI.SwapEffect effect;
switch (presentInterval)
{
case PresentInterval.One:
case PresentInterval.Two:
default:
#if WINDOWS_UAP
effect = SharpDX.DXGI.SwapEffect.FlipSequential;
#else
effect = SharpDX.DXGI.SwapEffect.Discard;
#endif
break;
case PresentInterval.Immediate:
effect = SharpDX.DXGI.SwapEffect.Sequential;
break;
}
//if (present.RenderTargetUsage != RenderTargetUsage.PreserveContents && present.MultiSampleCount == 0)
//effect = SharpDX.DXGI.SwapEffect.Discard;
return effect;
}
static public SharpDX.DXGI.Format ToFormat(DepthFormat format)
{
switch (format)
{
default:
case DepthFormat.None:
return SharpDX.DXGI.Format.Unknown;
case DepthFormat.Depth16:
return SharpDX.DXGI.Format.D16_UNorm;
case DepthFormat.Depth24:
case DepthFormat.Depth24Stencil8:
return SharpDX.DXGI.Format.D24_UNorm_S8_UInt;
}
}
static public SharpDX.DXGI.Format ToFormat(SurfaceFormat format)
{
switch (format)
{
case SurfaceFormat.Color:
default:
return SharpDX.DXGI.Format.R8G8B8A8_UNorm;
case SurfaceFormat.Bgr565:
return SharpDX.DXGI.Format.B5G6R5_UNorm;
case SurfaceFormat.Bgra5551:
return SharpDX.DXGI.Format.B5G5R5A1_UNorm;
case SurfaceFormat.Bgra4444:
#if WINDOWS_UAP
return SharpDX.DXGI.Format.B4G4R4A4_UNorm;
#else
return (SharpDX.DXGI.Format)115;
#endif
case SurfaceFormat.Dxt1:
return SharpDX.DXGI.Format.BC1_UNorm;
case SurfaceFormat.Dxt3:
return SharpDX.DXGI.Format.BC2_UNorm;
case SurfaceFormat.Dxt5:
return SharpDX.DXGI.Format.BC3_UNorm;
case SurfaceFormat.NormalizedByte2:
return SharpDX.DXGI.Format.R8G8_SNorm;
case SurfaceFormat.NormalizedByte4:
return SharpDX.DXGI.Format.R8G8B8A8_SNorm;
case SurfaceFormat.Rgba1010102:
return SharpDX.DXGI.Format.R10G10B10A2_UNorm;
case SurfaceFormat.Rg32:
return SharpDX.DXGI.Format.R16G16_UNorm;
case SurfaceFormat.Rgba64:
return SharpDX.DXGI.Format.R16G16B16A16_UNorm;
case SurfaceFormat.Alpha8:
return SharpDX.DXGI.Format.A8_UNorm;
case SurfaceFormat.Single:
return SharpDX.DXGI.Format.R32_Float;
case SurfaceFormat.HalfSingle:
return SharpDX.DXGI.Format.R16_Float;
case SurfaceFormat.HalfVector2:
return SharpDX.DXGI.Format.R16G16_Float;
case SurfaceFormat.Vector2:
return SharpDX.DXGI.Format.R32G32_Float;
case SurfaceFormat.Vector4:
return SharpDX.DXGI.Format.R32G32B32A32_Float;
case SurfaceFormat.HalfVector4:
return SharpDX.DXGI.Format.R16G16B16A16_Float;
case SurfaceFormat.HdrBlendable:
// TODO: This needs to check the graphics device and
// return the best hdr blendable format for the device.
return SharpDX.DXGI.Format.R16G16B16A16_Float;
case SurfaceFormat.Bgr32:
return SharpDX.DXGI.Format.B8G8R8X8_UNorm;
case SurfaceFormat.Bgra32:
return SharpDX.DXGI.Format.B8G8R8A8_UNorm;
case SurfaceFormat.ColorSRgb:
return SharpDX.DXGI.Format.R8G8B8A8_UNorm_SRgb;
case SurfaceFormat.Bgr32SRgb:
return SharpDX.DXGI.Format.B8G8R8X8_UNorm_SRgb;
case SurfaceFormat.Bgra32SRgb:
return SharpDX.DXGI.Format.B8G8R8A8_UNorm_SRgb;
case SurfaceFormat.Dxt1SRgb:
return SharpDX.DXGI.Format.BC1_UNorm_SRgb;
case SurfaceFormat.Dxt3SRgb:
return SharpDX.DXGI.Format.BC2_UNorm_SRgb;
case SurfaceFormat.Dxt5SRgb:
return SharpDX.DXGI.Format.BC3_UNorm_SRgb;
}
}
static public RawVector2 ToVector2(this Vector2 vec)
{
return new RawVector2(vec.X, vec.Y);
}
static public RawVector3 ToVector3(this Vector3 vec)
{
return new RawVector3(vec.X, vec.Y, vec.Z);
}
static public RawVector4 ToVector4(this Vector4 vec)
{
return new RawVector4(vec.X, vec.Y, vec.Z, vec.W);
}
static public RawColor4 ToColor4(this Color color)
{
return new RawColor4(color.R / 255.0f, color.G / 255.0f, color.B / 255.0f, color.A / 255.0f);
}
static public SharpDX.Direct3D11.Comparison ToComparison(this CompareFunction compare)
{
switch (compare)
{
case CompareFunction.Always:
return SharpDX.Direct3D11.Comparison.Always;
case CompareFunction.Equal:
return SharpDX.Direct3D11.Comparison.Equal;
case CompareFunction.Greater:
return SharpDX.Direct3D11.Comparison.Greater;
case CompareFunction.GreaterEqual:
return SharpDX.Direct3D11.Comparison.GreaterEqual;
case CompareFunction.Less:
return SharpDX.Direct3D11.Comparison.Less;
case CompareFunction.LessEqual:
return SharpDX.Direct3D11.Comparison.LessEqual;
case CompareFunction.Never:
return SharpDX.Direct3D11.Comparison.Never;
case CompareFunction.NotEqual:
return SharpDX.Direct3D11.Comparison.NotEqual;
default:
throw new ArgumentException("Invalid comparison!");
}
}
}
}