RenderSystem DX10: moved all type translations to a static class
extended the IRenderSystemCreator interface to obtain available GraphicsAdapters of a render system enumeration of GraphicsAdapters implemented for DirectX 10 RenderSystem enumeration of DisplayModes implemented for DirectX 10 RenderSystem improved GraphicsDeviceManager
This commit is contained in:
parent
536a7d66fc
commit
ded4cb1857
@ -68,6 +68,7 @@
|
||||
<Compile Include="EffectParameter_DX10.cs" />
|
||||
<Compile Include="EffectTechnique_DX10.cs" />
|
||||
<Compile Include="Effect_DX10.cs" />
|
||||
<Compile Include="FormatConverter.cs" />
|
||||
<Compile Include="GraphicsDeviceWindowsDX10.cs" />
|
||||
<Compile Include="IndexBuffer_DX10.cs" />
|
||||
<Compile Include="NativeMethods.cs" />
|
||||
|
@ -140,7 +140,7 @@ namespace ANX.Framework.Windows.DX10
|
||||
{
|
||||
set
|
||||
{
|
||||
BlendOperation alphaBlendOperation = Translate(value);
|
||||
BlendOperation alphaBlendOperation = FormatConverter.Translate(value);
|
||||
|
||||
if (description.AlphaBlendOperation != alphaBlendOperation)
|
||||
{
|
||||
@ -154,7 +154,7 @@ namespace ANX.Framework.Windows.DX10
|
||||
{
|
||||
set
|
||||
{
|
||||
BlendOperation blendOperation = Translate(value);
|
||||
BlendOperation blendOperation = FormatConverter.Translate(value);
|
||||
|
||||
if (description.BlendOperation != blendOperation)
|
||||
{
|
||||
@ -168,7 +168,7 @@ namespace ANX.Framework.Windows.DX10
|
||||
{
|
||||
set
|
||||
{
|
||||
BlendOption destinationAlphaBlend = Translate(value);
|
||||
BlendOption destinationAlphaBlend = FormatConverter.Translate(value);
|
||||
|
||||
if (description.DestinationAlphaBlend != destinationAlphaBlend)
|
||||
{
|
||||
@ -182,7 +182,7 @@ namespace ANX.Framework.Windows.DX10
|
||||
{
|
||||
set
|
||||
{
|
||||
BlendOption destinationBlend = Translate(value);
|
||||
BlendOption destinationBlend = FormatConverter.Translate(value);
|
||||
|
||||
if (description.DestinationBlend != destinationBlend)
|
||||
{
|
||||
@ -196,7 +196,7 @@ namespace ANX.Framework.Windows.DX10
|
||||
{
|
||||
set
|
||||
{
|
||||
ColorWriteMaskFlags renderTargetWriteMask = Translate(value);
|
||||
ColorWriteMaskFlags renderTargetWriteMask = FormatConverter.Translate(value);
|
||||
|
||||
if (description.RenderTargetWriteMask[0] != renderTargetWriteMask)
|
||||
{
|
||||
@ -210,7 +210,7 @@ namespace ANX.Framework.Windows.DX10
|
||||
{
|
||||
set
|
||||
{
|
||||
ColorWriteMaskFlags renderTargetWriteMask = Translate(value);
|
||||
ColorWriteMaskFlags renderTargetWriteMask = FormatConverter.Translate(value);
|
||||
|
||||
if (description.RenderTargetWriteMask[1] != renderTargetWriteMask)
|
||||
{
|
||||
@ -224,7 +224,7 @@ namespace ANX.Framework.Windows.DX10
|
||||
{
|
||||
set
|
||||
{
|
||||
ColorWriteMaskFlags renderTargetWriteMask = Translate(value);
|
||||
ColorWriteMaskFlags renderTargetWriteMask = FormatConverter.Translate(value);
|
||||
|
||||
if (description.RenderTargetWriteMask[2] != renderTargetWriteMask)
|
||||
{
|
||||
@ -238,7 +238,7 @@ namespace ANX.Framework.Windows.DX10
|
||||
{
|
||||
set
|
||||
{
|
||||
ColorWriteMaskFlags renderTargetWriteMask = Translate(value);
|
||||
ColorWriteMaskFlags renderTargetWriteMask = FormatConverter.Translate(value);
|
||||
|
||||
if (description.RenderTargetWriteMask[3] != renderTargetWriteMask)
|
||||
{
|
||||
@ -252,7 +252,7 @@ namespace ANX.Framework.Windows.DX10
|
||||
{
|
||||
set
|
||||
{
|
||||
BlendOption sourceAlphaBlend = Translate(value);
|
||||
BlendOption sourceAlphaBlend = FormatConverter.Translate(value);
|
||||
|
||||
if (description.SourceAlphaBlend != sourceAlphaBlend)
|
||||
{
|
||||
@ -266,7 +266,7 @@ namespace ANX.Framework.Windows.DX10
|
||||
{
|
||||
set
|
||||
{
|
||||
BlendOption sourceBlend = Translate(value);
|
||||
BlendOption sourceBlend = FormatConverter.Translate(value);
|
||||
|
||||
if (description.SourceBlend != sourceBlend)
|
||||
{
|
||||
@ -291,78 +291,5 @@ namespace ANX.Framework.Windows.DX10
|
||||
this.nativeBlendStateDirty = false;
|
||||
}
|
||||
}
|
||||
|
||||
private BlendOperation Translate(BlendFunction blendFunction)
|
||||
{
|
||||
switch (blendFunction)
|
||||
{
|
||||
case BlendFunction.Add:
|
||||
return BlendOperation.Add;
|
||||
case BlendFunction.Max:
|
||||
return BlendOperation.Maximum;
|
||||
case BlendFunction.Min:
|
||||
return BlendOperation.Minimum;
|
||||
case BlendFunction.ReverseSubtract:
|
||||
return BlendOperation.ReverseSubtract;
|
||||
case BlendFunction.Subtract:
|
||||
return BlendOperation.Subtract;
|
||||
}
|
||||
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
private BlendOption Translate(Blend blend)
|
||||
{
|
||||
switch (blend)
|
||||
{
|
||||
case Blend.BlendFactor:
|
||||
return BlendOption.BlendFactor;
|
||||
case Blend.DestinationAlpha:
|
||||
return BlendOption.DestinationAlpha;
|
||||
case Blend.DestinationColor:
|
||||
return BlendOption.DestinationColor;
|
||||
case Blend.InverseBlendFactor:
|
||||
return BlendOption.InverseBlendFactor;
|
||||
case Blend.InverseDestinationAlpha:
|
||||
return BlendOption.InverseDestinationAlpha;
|
||||
case Blend.InverseDestinationColor:
|
||||
return BlendOption.InverseDestinationColor;
|
||||
case Blend.InverseSourceAlpha:
|
||||
return BlendOption.InverseSourceAlpha;
|
||||
case Blend.InverseSourceColor:
|
||||
return BlendOption.InverseSourceColor;
|
||||
case Blend.One:
|
||||
return BlendOption.One;
|
||||
case Blend.SourceAlpha:
|
||||
return BlendOption.SourceAlpha;
|
||||
case Blend.SourceAlphaSaturation:
|
||||
return BlendOption.SourceAlphaSaturate;
|
||||
case Blend.SourceColor:
|
||||
return BlendOption.SourceColor;
|
||||
case Blend.Zero:
|
||||
return BlendOption.Zero;
|
||||
}
|
||||
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
private ColorWriteMaskFlags Translate(ColorWriteChannels colorWriteChannels)
|
||||
{
|
||||
switch (colorWriteChannels)
|
||||
{
|
||||
case ColorWriteChannels.All:
|
||||
return ColorWriteMaskFlags.All;
|
||||
case ColorWriteChannels.Alpha:
|
||||
return ColorWriteMaskFlags.Alpha;
|
||||
case ColorWriteChannels.Blue:
|
||||
return ColorWriteMaskFlags.Blue;
|
||||
case ColorWriteChannels.Green:
|
||||
return ColorWriteMaskFlags.Green;
|
||||
case ColorWriteChannels.Red:
|
||||
return ColorWriteMaskFlags.Red;
|
||||
}
|
||||
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -128,7 +128,7 @@ namespace ANX.Framework.Windows.DX10
|
||||
Height = height,
|
||||
MipLevels = mipCount,
|
||||
ArraySize = mipCount,
|
||||
Format = Translate(surfaceFormat),
|
||||
Format = FormatConverter.Translate(surfaceFormat),
|
||||
SampleDescription = new SharpDX.DXGI.SampleDescription(1, 0),
|
||||
Usage = SharpDX.Direct3D10.ResourceUsage.Dynamic,
|
||||
BindFlags = SharpDX.Direct3D10.BindFlags.ShaderResource,
|
||||
@ -231,21 +231,6 @@ namespace ANX.Framework.Windows.DX10
|
||||
return new SamplerState_DX10();
|
||||
}
|
||||
|
||||
private SharpDX.DXGI.Format Translate(SurfaceFormat surfaceFormat)
|
||||
{
|
||||
switch (surfaceFormat)
|
||||
{
|
||||
case SurfaceFormat.Color:
|
||||
return SharpDX.DXGI.Format.R8G8B8A8_UNorm;
|
||||
case SurfaceFormat.Dxt3:
|
||||
return SharpDX.DXGI.Format.BC2_UNorm;
|
||||
case SurfaceFormat.Dxt5:
|
||||
return SharpDX.DXGI.Format.BC3_UNorm;
|
||||
}
|
||||
|
||||
throw new Exception("can't translate SurfaceFormat: " + surfaceFormat.ToString());
|
||||
}
|
||||
|
||||
private static int FormatSize(SurfaceFormat format)
|
||||
{
|
||||
switch (format)
|
||||
@ -288,5 +273,58 @@ namespace ANX.Framework.Windows.DX10
|
||||
{
|
||||
factory.AddCreator(this);
|
||||
}
|
||||
|
||||
|
||||
public System.Collections.ObjectModel.ReadOnlyCollection<GraphicsAdapter> GetAdapterList()
|
||||
{
|
||||
SharpDX.DXGI.Factory factory = new Factory();
|
||||
|
||||
List<GraphicsAdapter> adapterList = new List<GraphicsAdapter>();
|
||||
DisplayModeCollection displayModeCollection = new DisplayModeCollection();
|
||||
|
||||
for (int i = 0; i < factory.GetAdapterCount(); i++)
|
||||
{
|
||||
using (Adapter adapter = factory.GetAdapter(i))
|
||||
{
|
||||
GraphicsAdapter ga = new GraphicsAdapter();
|
||||
//ga.CurrentDisplayMode = ;
|
||||
//ga.Description = ;
|
||||
ga.DeviceId = adapter.Description.DeviceId;
|
||||
ga.DeviceName = adapter.Description.Description;
|
||||
ga.IsDefaultAdapter = i == 0; //TODO: how to set default adapter?
|
||||
//ga.IsWideScreen = ;
|
||||
//ga.MonitorHandle = ;
|
||||
ga.Revision = adapter.Description.Revision;
|
||||
ga.SubSystemId = adapter.Description.SubsystemId;
|
||||
//ga.SupportedDisplayModes = ;
|
||||
ga.VendorId = adapter.Description.VendorId;
|
||||
|
||||
using (Output adapterOutput = adapter.GetOutput(0))
|
||||
{
|
||||
foreach (ModeDescription modeDescription in adapterOutput.GetDisplayModeList(Format.R8G8B8A8_UNorm, DisplayModeEnumerationFlags.Interlaced))
|
||||
{
|
||||
DisplayMode displayMode = new DisplayMode()
|
||||
{
|
||||
Format = FormatConverter.Translate(modeDescription.Format),
|
||||
Width = modeDescription.Width,
|
||||
Height = modeDescription.Height,
|
||||
AspectRatio = (float)modeDescription.Width / (float)modeDescription.Height,
|
||||
TitleSafeArea = new Rectangle(0, 0, modeDescription.Width, modeDescription.Height), //TODO: calculate this for real
|
||||
};
|
||||
|
||||
displayModeCollection[displayMode.Format] = new DisplayMode[] { displayMode };
|
||||
}
|
||||
}
|
||||
|
||||
ga.SupportedDisplayModes = displayModeCollection;
|
||||
|
||||
adapterList.Add(ga);
|
||||
}
|
||||
}
|
||||
|
||||
factory.Dispose();
|
||||
|
||||
return new System.Collections.ObjectModel.ReadOnlyCollection<GraphicsAdapter>(adapterList);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -63,7 +63,7 @@ namespace ANX.Framework.Windows.DX10
|
||||
{
|
||||
set
|
||||
{
|
||||
SharpDX.Direct3D10.StencilOperation operation = Translate(value);
|
||||
SharpDX.Direct3D10.StencilOperation operation = FormatConverter.Translate(value);
|
||||
|
||||
if (description.BackFace.DepthFailOperation != operation)
|
||||
{
|
||||
@ -77,7 +77,7 @@ namespace ANX.Framework.Windows.DX10
|
||||
{
|
||||
set
|
||||
{
|
||||
SharpDX.Direct3D10.StencilOperation operation = Translate(value);
|
||||
SharpDX.Direct3D10.StencilOperation operation = FormatConverter.Translate(value);
|
||||
|
||||
if (description.BackFace.FailOperation != operation)
|
||||
{
|
||||
@ -91,7 +91,7 @@ namespace ANX.Framework.Windows.DX10
|
||||
{
|
||||
set
|
||||
{
|
||||
SharpDX.Direct3D10.Comparison comparison = Translate(value);
|
||||
SharpDX.Direct3D10.Comparison comparison = FormatConverter.Translate(value);
|
||||
|
||||
if (description.BackFace.Comparison != comparison)
|
||||
{
|
||||
@ -105,7 +105,7 @@ namespace ANX.Framework.Windows.DX10
|
||||
{
|
||||
set
|
||||
{
|
||||
SharpDX.Direct3D10.StencilOperation operation = Translate(value);
|
||||
SharpDX.Direct3D10.StencilOperation operation = FormatConverter.Translate(value);
|
||||
|
||||
if (description.BackFace.PassOperation != operation)
|
||||
{
|
||||
@ -131,7 +131,7 @@ namespace ANX.Framework.Windows.DX10
|
||||
{
|
||||
set
|
||||
{
|
||||
SharpDX.Direct3D10.Comparison comparison = Translate(value);
|
||||
SharpDX.Direct3D10.Comparison comparison = FormatConverter.Translate(value);
|
||||
|
||||
if (description.DepthComparison != comparison)
|
||||
{
|
||||
@ -171,7 +171,7 @@ namespace ANX.Framework.Windows.DX10
|
||||
{
|
||||
set
|
||||
{
|
||||
SharpDX.Direct3D10.StencilOperation operation = Translate(value);
|
||||
SharpDX.Direct3D10.StencilOperation operation = FormatConverter.Translate(value);
|
||||
|
||||
if (description.FrontFace.DepthFailOperation != operation)
|
||||
{
|
||||
@ -197,7 +197,7 @@ namespace ANX.Framework.Windows.DX10
|
||||
{
|
||||
set
|
||||
{
|
||||
SharpDX.Direct3D10.StencilOperation operation = Translate(value);
|
||||
SharpDX.Direct3D10.StencilOperation operation = FormatConverter.Translate(value);
|
||||
|
||||
if (description.FrontFace.FailOperation != operation)
|
||||
{
|
||||
@ -211,7 +211,7 @@ namespace ANX.Framework.Windows.DX10
|
||||
{
|
||||
set
|
||||
{
|
||||
SharpDX.Direct3D10.Comparison comparison = Translate(value);
|
||||
SharpDX.Direct3D10.Comparison comparison = FormatConverter.Translate(value);
|
||||
|
||||
if (description.FrontFace.Comparison != comparison)
|
||||
{
|
||||
@ -238,8 +238,8 @@ namespace ANX.Framework.Windows.DX10
|
||||
public Graphics.StencilOperation StencilPass
|
||||
{
|
||||
set
|
||||
{
|
||||
SharpDX.Direct3D10.StencilOperation operation = Translate(value);
|
||||
{
|
||||
SharpDX.Direct3D10.StencilOperation operation = FormatConverter.Translate(value);
|
||||
|
||||
if (description.FrontFace.PassOperation != operation)
|
||||
{
|
||||
@ -286,56 +286,5 @@ namespace ANX.Framework.Windows.DX10
|
||||
this.nativeDepthStencilStateDirty = false;
|
||||
}
|
||||
}
|
||||
|
||||
private SharpDX.Direct3D10.StencilOperation Translate(ANX.Framework.Graphics.StencilOperation stencilOperation)
|
||||
{
|
||||
switch (stencilOperation)
|
||||
{
|
||||
case Graphics.StencilOperation.Decrement:
|
||||
return StencilOperation.Decrement;
|
||||
case Graphics.StencilOperation.DecrementSaturation:
|
||||
return StencilOperation.DecrementAndClamp;
|
||||
case Graphics.StencilOperation.Increment:
|
||||
return StencilOperation.Increment;
|
||||
case Graphics.StencilOperation.IncrementSaturation:
|
||||
return StencilOperation.IncrementAndClamp;
|
||||
case Graphics.StencilOperation.Invert:
|
||||
return StencilOperation.Invert;
|
||||
case Graphics.StencilOperation.Keep:
|
||||
return StencilOperation.Keep;
|
||||
case Graphics.StencilOperation.Replace:
|
||||
return StencilOperation.Replace;
|
||||
case Graphics.StencilOperation.Zero:
|
||||
return StencilOperation.Zero;
|
||||
}
|
||||
|
||||
throw new NotImplementedException("unknown StencilOperation");
|
||||
}
|
||||
|
||||
private Comparison Translate(ANX.Framework.Graphics.CompareFunction compareFunction)
|
||||
{
|
||||
switch (compareFunction)
|
||||
{
|
||||
case ANX.Framework.Graphics.CompareFunction.Always:
|
||||
return Comparison.Always;
|
||||
case ANX.Framework.Graphics.CompareFunction.Equal:
|
||||
return Comparison.Equal;
|
||||
case ANX.Framework.Graphics.CompareFunction.Greater:
|
||||
return Comparison.Greater;
|
||||
case ANX.Framework.Graphics.CompareFunction.GreaterEqual:
|
||||
return Comparison.GreaterEqual;
|
||||
case ANX.Framework.Graphics.CompareFunction.Less:
|
||||
return Comparison.Less;
|
||||
case ANX.Framework.Graphics.CompareFunction.LessEqual:
|
||||
return Comparison.LessEqual;
|
||||
case ANX.Framework.Graphics.CompareFunction.Never:
|
||||
return Comparison.Never;
|
||||
case ANX.Framework.Graphics.CompareFunction.NotEqual:
|
||||
return Comparison.NotEqual;
|
||||
}
|
||||
|
||||
throw new NotImplementedException("unknown CompareFunction");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
328
ANX.Framework.Windows.DX10/FormatConverter.cs
Normal file
328
ANX.Framework.Windows.DX10/FormatConverter.cs
Normal file
@ -0,0 +1,328 @@
|
||||
#region Using Statements
|
||||
using System;
|
||||
using ANX.Framework.Graphics;
|
||||
using SharpDX.Direct3D10;
|
||||
using SharpDX.Direct3D;
|
||||
using SharpDX.DXGI;
|
||||
|
||||
#endregion // Using Statements
|
||||
|
||||
#region License
|
||||
|
||||
//
|
||||
// This file is part of the ANX.Framework created by the "ANX.Framework developer group".
|
||||
//
|
||||
// This file is released under the Ms-PL license.
|
||||
//
|
||||
//
|
||||
//
|
||||
// Microsoft Public License (Ms-PL)
|
||||
//
|
||||
// This license governs use of the accompanying software. If you use the software, you accept this license.
|
||||
// If you do not accept the license, do not use the software.
|
||||
//
|
||||
// 1.Definitions
|
||||
// The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning
|
||||
// here as under U.S. copyright law.
|
||||
// A "contribution" is the original software, or any additions or changes to the software.
|
||||
// A "contributor" is any person that distributes its contribution under this license.
|
||||
// "Licensed patents" are a contributor's patent claims that read directly on its contribution.
|
||||
//
|
||||
// 2.Grant of Rights
|
||||
// (A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations
|
||||
// in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to
|
||||
// reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution
|
||||
// or any derivative works that you create.
|
||||
// (B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in
|
||||
// section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed
|
||||
// patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution
|
||||
// in the software or derivative works of the contribution in the software.
|
||||
//
|
||||
// 3.Conditions and Limitations
|
||||
// (A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks.
|
||||
// (B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your
|
||||
// patent license from such contributor to the software ends automatically.
|
||||
// (C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution
|
||||
// notices that are present in the software.
|
||||
// (D) If you distribute any portion of the software in source code form, you may do so only under this license by including
|
||||
// a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or
|
||||
// object code form, you may only do so under a license that complies with this license.
|
||||
// (E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees,
|
||||
// or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the
|
||||
// extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a
|
||||
// particular purpose and non-infringement.
|
||||
|
||||
#endregion // License
|
||||
|
||||
namespace ANX.Framework.Windows.DX10
|
||||
{
|
||||
internal class FormatConverter
|
||||
{
|
||||
public static SharpDX.DXGI.Format Translate(SurfaceFormat surfaceFormat)
|
||||
{
|
||||
switch (surfaceFormat)
|
||||
{
|
||||
case SurfaceFormat.Color:
|
||||
return SharpDX.DXGI.Format.R8G8B8A8_UNorm;
|
||||
case SurfaceFormat.Dxt3:
|
||||
return SharpDX.DXGI.Format.BC2_UNorm;
|
||||
case SurfaceFormat.Dxt5:
|
||||
return SharpDX.DXGI.Format.BC3_UNorm;
|
||||
}
|
||||
|
||||
throw new Exception("can't translate SurfaceFormat: " + surfaceFormat.ToString());
|
||||
}
|
||||
|
||||
public static SurfaceFormat Translate(SharpDX.DXGI.Format format)
|
||||
{
|
||||
switch (format)
|
||||
{
|
||||
case SharpDX.DXGI.Format.R8G8B8A8_UNorm:
|
||||
return SurfaceFormat.Color;
|
||||
case SharpDX.DXGI.Format.BC2_UNorm:
|
||||
return SurfaceFormat.Dxt3;
|
||||
case SharpDX.DXGI.Format.BC3_UNorm:
|
||||
return SurfaceFormat.Dxt5;
|
||||
}
|
||||
|
||||
throw new Exception("can't translate Format: " + format.ToString());
|
||||
}
|
||||
|
||||
public static Filter Translate(TextureFilter filter)
|
||||
{
|
||||
switch (filter)
|
||||
{
|
||||
case TextureFilter.Anisotropic:
|
||||
return Filter.Anisotropic;
|
||||
case TextureFilter.Linear:
|
||||
return Filter.MinMagMipLinear;
|
||||
case TextureFilter.LinearMipPoint:
|
||||
return Filter.MinMagMipPoint;
|
||||
case TextureFilter.MinLinearMagPointMipLinear:
|
||||
return Filter.MinLinearMagPointMipLinear;
|
||||
case TextureFilter.MinLinearMagPointMipPoint:
|
||||
return Filter.MinLinearMagMipPoint;
|
||||
case TextureFilter.MinPointMagLinearMipLinear:
|
||||
return Filter.MinPointMagMipLinear;
|
||||
case TextureFilter.MinPointMagLinearMipPoint:
|
||||
return Filter.MinPointMagLinearMipPoint;
|
||||
case TextureFilter.Point:
|
||||
return Filter.MinMagMipPoint;
|
||||
case TextureFilter.PointMipLinear:
|
||||
return Filter.MinMagPointMipLinear;
|
||||
}
|
||||
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public static SharpDX.Direct3D10.TextureAddressMode Translate(ANX.Framework.Graphics.TextureAddressMode addressMode)
|
||||
{
|
||||
switch (addressMode)
|
||||
{
|
||||
case Graphics.TextureAddressMode.Clamp:
|
||||
return SharpDX.Direct3D10.TextureAddressMode.Clamp;
|
||||
case Graphics.TextureAddressMode.Mirror:
|
||||
return SharpDX.Direct3D10.TextureAddressMode.Mirror;
|
||||
case Graphics.TextureAddressMode.Wrap:
|
||||
return SharpDX.Direct3D10.TextureAddressMode.Wrap;
|
||||
}
|
||||
|
||||
return SharpDX.Direct3D10.TextureAddressMode.Clamp;
|
||||
}
|
||||
|
||||
public static PrimitiveTopology Translate(PrimitiveType primitiveType)
|
||||
{
|
||||
switch (primitiveType)
|
||||
{
|
||||
case PrimitiveType.LineList:
|
||||
return PrimitiveTopology.LineList;
|
||||
case PrimitiveType.LineStrip:
|
||||
return PrimitiveTopology.LineStrip;
|
||||
case PrimitiveType.TriangleList:
|
||||
return PrimitiveTopology.TriangleList;
|
||||
case PrimitiveType.TriangleStrip:
|
||||
return PrimitiveTopology.TriangleStrip;
|
||||
default:
|
||||
throw new InvalidOperationException("unknown PrimitiveType: " + primitiveType.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
public static SharpDX.DXGI.Format Translate(IndexElementSize indexElementSize)
|
||||
{
|
||||
switch (indexElementSize)
|
||||
{
|
||||
case IndexElementSize.SixteenBits:
|
||||
return Format.R16_UInt;
|
||||
case IndexElementSize.ThirtyTwoBits:
|
||||
return Format.R32_UInt;
|
||||
default:
|
||||
throw new InvalidOperationException("unknown IndexElementSize: " + indexElementSize.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
public static string Translate(VertexElementUsage usage)
|
||||
{
|
||||
//TODO: map the other Usages
|
||||
if (usage == VertexElementUsage.TextureCoordinate)
|
||||
{
|
||||
return "TEXCOORD";
|
||||
}
|
||||
else
|
||||
{
|
||||
return usage.ToString().ToUpperInvariant();
|
||||
}
|
||||
}
|
||||
|
||||
public static BlendOperation Translate(BlendFunction blendFunction)
|
||||
{
|
||||
switch (blendFunction)
|
||||
{
|
||||
case BlendFunction.Add:
|
||||
return BlendOperation.Add;
|
||||
case BlendFunction.Max:
|
||||
return BlendOperation.Maximum;
|
||||
case BlendFunction.Min:
|
||||
return BlendOperation.Minimum;
|
||||
case BlendFunction.ReverseSubtract:
|
||||
return BlendOperation.ReverseSubtract;
|
||||
case BlendFunction.Subtract:
|
||||
return BlendOperation.Subtract;
|
||||
}
|
||||
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public static BlendOption Translate(Blend blend)
|
||||
{
|
||||
switch (blend)
|
||||
{
|
||||
case Blend.BlendFactor:
|
||||
return BlendOption.BlendFactor;
|
||||
case Blend.DestinationAlpha:
|
||||
return BlendOption.DestinationAlpha;
|
||||
case Blend.DestinationColor:
|
||||
return BlendOption.DestinationColor;
|
||||
case Blend.InverseBlendFactor:
|
||||
return BlendOption.InverseBlendFactor;
|
||||
case Blend.InverseDestinationAlpha:
|
||||
return BlendOption.InverseDestinationAlpha;
|
||||
case Blend.InverseDestinationColor:
|
||||
return BlendOption.InverseDestinationColor;
|
||||
case Blend.InverseSourceAlpha:
|
||||
return BlendOption.InverseSourceAlpha;
|
||||
case Blend.InverseSourceColor:
|
||||
return BlendOption.InverseSourceColor;
|
||||
case Blend.One:
|
||||
return BlendOption.One;
|
||||
case Blend.SourceAlpha:
|
||||
return BlendOption.SourceAlpha;
|
||||
case Blend.SourceAlphaSaturation:
|
||||
return BlendOption.SourceAlphaSaturate;
|
||||
case Blend.SourceColor:
|
||||
return BlendOption.SourceColor;
|
||||
case Blend.Zero:
|
||||
return BlendOption.Zero;
|
||||
}
|
||||
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public static ColorWriteMaskFlags Translate(ColorWriteChannels colorWriteChannels)
|
||||
{
|
||||
switch (colorWriteChannels)
|
||||
{
|
||||
case ColorWriteChannels.All:
|
||||
return ColorWriteMaskFlags.All;
|
||||
case ColorWriteChannels.Alpha:
|
||||
return ColorWriteMaskFlags.Alpha;
|
||||
case ColorWriteChannels.Blue:
|
||||
return ColorWriteMaskFlags.Blue;
|
||||
case ColorWriteChannels.Green:
|
||||
return ColorWriteMaskFlags.Green;
|
||||
case ColorWriteChannels.Red:
|
||||
return ColorWriteMaskFlags.Red;
|
||||
}
|
||||
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public static SharpDX.Direct3D10.StencilOperation Translate(ANX.Framework.Graphics.StencilOperation stencilOperation)
|
||||
{
|
||||
switch (stencilOperation)
|
||||
{
|
||||
case Graphics.StencilOperation.Decrement:
|
||||
return SharpDX.Direct3D10.StencilOperation.Decrement;
|
||||
case Graphics.StencilOperation.DecrementSaturation:
|
||||
return SharpDX.Direct3D10.StencilOperation.DecrementAndClamp;
|
||||
case Graphics.StencilOperation.Increment:
|
||||
return SharpDX.Direct3D10.StencilOperation.Increment;
|
||||
case Graphics.StencilOperation.IncrementSaturation:
|
||||
return SharpDX.Direct3D10.StencilOperation.IncrementAndClamp;
|
||||
case Graphics.StencilOperation.Invert:
|
||||
return SharpDX.Direct3D10.StencilOperation.Invert;
|
||||
case Graphics.StencilOperation.Keep:
|
||||
return SharpDX.Direct3D10.StencilOperation.Keep;
|
||||
case Graphics.StencilOperation.Replace:
|
||||
return SharpDX.Direct3D10.StencilOperation.Replace;
|
||||
case Graphics.StencilOperation.Zero:
|
||||
return SharpDX.Direct3D10.StencilOperation.Zero;
|
||||
}
|
||||
|
||||
throw new NotImplementedException("unknown StencilOperation");
|
||||
}
|
||||
|
||||
public static Comparison Translate(ANX.Framework.Graphics.CompareFunction compareFunction)
|
||||
{
|
||||
switch (compareFunction)
|
||||
{
|
||||
case ANX.Framework.Graphics.CompareFunction.Always:
|
||||
return Comparison.Always;
|
||||
case ANX.Framework.Graphics.CompareFunction.Equal:
|
||||
return Comparison.Equal;
|
||||
case ANX.Framework.Graphics.CompareFunction.Greater:
|
||||
return Comparison.Greater;
|
||||
case ANX.Framework.Graphics.CompareFunction.GreaterEqual:
|
||||
return Comparison.GreaterEqual;
|
||||
case ANX.Framework.Graphics.CompareFunction.Less:
|
||||
return Comparison.Less;
|
||||
case ANX.Framework.Graphics.CompareFunction.LessEqual:
|
||||
return Comparison.LessEqual;
|
||||
case ANX.Framework.Graphics.CompareFunction.Never:
|
||||
return Comparison.Never;
|
||||
case ANX.Framework.Graphics.CompareFunction.NotEqual:
|
||||
return Comparison.NotEqual;
|
||||
}
|
||||
|
||||
throw new NotImplementedException("unknown CompareFunction");
|
||||
}
|
||||
|
||||
public static SharpDX.Direct3D10.CullMode Translate(ANX.Framework.Graphics.CullMode cullMode)
|
||||
{
|
||||
if (cullMode == Graphics.CullMode.CullClockwiseFace)
|
||||
{
|
||||
return SharpDX.Direct3D10.CullMode.Front;
|
||||
}
|
||||
else if (cullMode == Graphics.CullMode.CullCounterClockwiseFace)
|
||||
{
|
||||
return SharpDX.Direct3D10.CullMode.Back;
|
||||
}
|
||||
else
|
||||
{
|
||||
return SharpDX.Direct3D10.CullMode.None;
|
||||
}
|
||||
}
|
||||
|
||||
public static SharpDX.Direct3D10.FillMode Translate(ANX.Framework.Graphics.FillMode fillMode)
|
||||
{
|
||||
if (fillMode == Graphics.FillMode.WireFrame)
|
||||
{
|
||||
return SharpDX.Direct3D10.FillMode.Wireframe;
|
||||
}
|
||||
else
|
||||
{
|
||||
return SharpDX.Direct3D10.FillMode.Solid;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -199,7 +199,7 @@ namespace ANX.Framework.Windows.DX10
|
||||
SetupInputLayout(passSignature);
|
||||
|
||||
// Prepare All the stages
|
||||
device.InputAssembler.PrimitiveTopology = Translate(primitiveType);
|
||||
device.InputAssembler.PrimitiveTopology = FormatConverter.Translate(primitiveType);
|
||||
device.Rasterizer.SetViewports(currentViewport);
|
||||
|
||||
device.OutputMerger.SetTargets(this.renderView);
|
||||
@ -219,7 +219,7 @@ namespace ANX.Framework.Windows.DX10
|
||||
SetupInputLayout(passSignature);
|
||||
|
||||
// Prepare All the stages
|
||||
device.InputAssembler.PrimitiveTopology = Translate(primitiveType);
|
||||
device.InputAssembler.PrimitiveTopology = FormatConverter.Translate(primitiveType);
|
||||
device.Rasterizer.SetViewports(currentViewport);
|
||||
device.OutputMerger.SetTargets(this.renderView);
|
||||
|
||||
@ -243,7 +243,7 @@ namespace ANX.Framework.Windows.DX10
|
||||
|
||||
if (nativeIndexBuffer != null)
|
||||
{
|
||||
device.InputAssembler.SetIndexBuffer(nativeIndexBuffer.NativeBuffer, Translate(indexBuffer.IndexElementSize), 0);
|
||||
device.InputAssembler.SetIndexBuffer(nativeIndexBuffer.NativeBuffer, FormatConverter.Translate(indexBuffer.IndexElementSize), 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -287,48 +287,6 @@ namespace ANX.Framework.Windows.DX10
|
||||
this.currentViewport = new SharpDX.Direct3D10.Viewport(viewport.X, viewport.Y, viewport.Width, viewport.Height, viewport.MinDepth, viewport.MaxDepth);
|
||||
}
|
||||
|
||||
private Filter Translate(TextureFilter filter)
|
||||
{
|
||||
switch (filter)
|
||||
{
|
||||
case TextureFilter.Anisotropic:
|
||||
return Filter.Anisotropic;
|
||||
case TextureFilter.Linear:
|
||||
return Filter.MinMagMipLinear;
|
||||
case TextureFilter.LinearMipPoint:
|
||||
return Filter.MinMagMipPoint;
|
||||
case TextureFilter.MinLinearMagPointMipLinear:
|
||||
return Filter.MinLinearMagPointMipLinear;
|
||||
case TextureFilter.MinLinearMagPointMipPoint:
|
||||
return Filter.MinLinearMagMipPoint;
|
||||
case TextureFilter.MinPointMagLinearMipLinear:
|
||||
return Filter.MinPointMagMipLinear;
|
||||
case TextureFilter.MinPointMagLinearMipPoint:
|
||||
return Filter.MinPointMagLinearMipPoint;
|
||||
case TextureFilter.Point:
|
||||
return Filter.MinMagMipPoint;
|
||||
case TextureFilter.PointMipLinear:
|
||||
return Filter.MinMagPointMipLinear;
|
||||
}
|
||||
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
private SharpDX.Direct3D10.TextureAddressMode Translate(ANX.Framework.Graphics.TextureAddressMode addressMode)
|
||||
{
|
||||
switch (addressMode)
|
||||
{
|
||||
case Graphics.TextureAddressMode.Clamp:
|
||||
return SharpDX.Direct3D10.TextureAddressMode.Clamp;
|
||||
case Graphics.TextureAddressMode.Mirror:
|
||||
return SharpDX.Direct3D10.TextureAddressMode.Mirror;
|
||||
case Graphics.TextureAddressMode.Wrap:
|
||||
return SharpDX.Direct3D10.TextureAddressMode.Wrap;
|
||||
}
|
||||
|
||||
return SharpDX.Direct3D10.TextureAddressMode.Clamp;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This method creates a InputLayout which is needed by DirectX 10 for rendering primitives. The VertexDeclaration of ANX/XNA needs to be mapped
|
||||
/// to the DirectX 10 types. This is what this method is for.
|
||||
@ -350,7 +308,7 @@ namespace ANX.Framework.Windows.DX10
|
||||
|
||||
private InputElement CreateInputElementFromVertexElement(VertexElement vertexElement)
|
||||
{
|
||||
string elementName = Translate(vertexElement.VertexElementUsage);
|
||||
string elementName = FormatConverter.Translate(vertexElement.VertexElementUsage);
|
||||
|
||||
Format elementFormat;
|
||||
switch (vertexElement.VertexElementFormat)
|
||||
@ -373,48 +331,5 @@ namespace ANX.Framework.Windows.DX10
|
||||
|
||||
return new InputElement(elementName, vertexElement.UsageIndex, elementFormat, vertexElement.Offset, 0);
|
||||
}
|
||||
|
||||
private PrimitiveTopology Translate(PrimitiveType primitiveType)
|
||||
{
|
||||
switch (primitiveType)
|
||||
{
|
||||
case PrimitiveType.LineList:
|
||||
return PrimitiveTopology.LineList;
|
||||
case PrimitiveType.LineStrip:
|
||||
return PrimitiveTopology.LineStrip;
|
||||
case PrimitiveType.TriangleList:
|
||||
return PrimitiveTopology.TriangleList;
|
||||
case PrimitiveType.TriangleStrip:
|
||||
return PrimitiveTopology.TriangleStrip;
|
||||
default:
|
||||
throw new InvalidOperationException("unknown PrimitiveType: " + primitiveType.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
private SharpDX.DXGI.Format Translate(IndexElementSize indexElementSize)
|
||||
{
|
||||
switch (indexElementSize)
|
||||
{
|
||||
case IndexElementSize.SixteenBits:
|
||||
return Format.R16_UInt;
|
||||
case IndexElementSize.ThirtyTwoBits:
|
||||
return Format.R32_UInt;
|
||||
default:
|
||||
throw new InvalidOperationException("unknown IndexElementSize: " + indexElementSize.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
private string Translate(VertexElementUsage usage)
|
||||
{
|
||||
//TODO: map the other Usages
|
||||
if (usage == VertexElementUsage.TextureCoordinate)
|
||||
{
|
||||
return "TEXCOORD";
|
||||
}
|
||||
else
|
||||
{
|
||||
return usage.ToString().ToUpperInvariant();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -116,7 +116,7 @@ namespace ANX.Framework.Windows.DX10
|
||||
{
|
||||
set
|
||||
{
|
||||
SharpDX.Direct3D10.CullMode cullMode = Translate(value);
|
||||
SharpDX.Direct3D10.CullMode cullMode = FormatConverter.Translate(value);
|
||||
|
||||
if (description.CullMode != cullMode)
|
||||
{
|
||||
@ -147,7 +147,7 @@ namespace ANX.Framework.Windows.DX10
|
||||
{
|
||||
set
|
||||
{
|
||||
SharpDX.Direct3D10.FillMode fillMode = Translate(value);
|
||||
SharpDX.Direct3D10.FillMode fillMode = FormatConverter.Translate(value);
|
||||
|
||||
if (description.FillMode != fillMode)
|
||||
{
|
||||
@ -208,33 +208,5 @@ namespace ANX.Framework.Windows.DX10
|
||||
this.nativeRasterizerStateDirty = false;
|
||||
}
|
||||
}
|
||||
|
||||
private SharpDX.Direct3D10.CullMode Translate(ANX.Framework.Graphics.CullMode cullMode)
|
||||
{
|
||||
if (cullMode == Graphics.CullMode.CullClockwiseFace)
|
||||
{
|
||||
return SharpDX.Direct3D10.CullMode.Front;
|
||||
}
|
||||
else if (cullMode == Graphics.CullMode.CullCounterClockwiseFace)
|
||||
{
|
||||
return SharpDX.Direct3D10.CullMode.Back;
|
||||
}
|
||||
else
|
||||
{
|
||||
return SharpDX.Direct3D10.CullMode.None;
|
||||
}
|
||||
}
|
||||
|
||||
private SharpDX.Direct3D10.FillMode Translate(ANX.Framework.Graphics.FillMode fillMode)
|
||||
{
|
||||
if (fillMode == Graphics.FillMode.WireFrame)
|
||||
{
|
||||
return SharpDX.Direct3D10.FillMode.Wireframe;
|
||||
}
|
||||
else
|
||||
{
|
||||
return SharpDX.Direct3D10.FillMode.Solid;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -100,7 +100,7 @@ namespace ANX.Framework.Windows.DX10
|
||||
{
|
||||
set
|
||||
{
|
||||
SharpDX.Direct3D10.TextureAddressMode mode = Translate(value);
|
||||
SharpDX.Direct3D10.TextureAddressMode mode = FormatConverter.Translate(value);
|
||||
|
||||
if (description.AddressU != mode)
|
||||
{
|
||||
@ -114,7 +114,7 @@ namespace ANX.Framework.Windows.DX10
|
||||
{
|
||||
set
|
||||
{
|
||||
SharpDX.Direct3D10.TextureAddressMode mode = Translate(value);
|
||||
SharpDX.Direct3D10.TextureAddressMode mode = FormatConverter.Translate(value);
|
||||
|
||||
if (description.AddressV != mode)
|
||||
{
|
||||
@ -128,7 +128,7 @@ namespace ANX.Framework.Windows.DX10
|
||||
{
|
||||
set
|
||||
{
|
||||
SharpDX.Direct3D10.TextureAddressMode mode = Translate(value);
|
||||
SharpDX.Direct3D10.TextureAddressMode mode = FormatConverter.Translate(value);
|
||||
|
||||
if (description.AddressW != mode)
|
||||
{
|
||||
@ -142,7 +142,7 @@ namespace ANX.Framework.Windows.DX10
|
||||
{
|
||||
set
|
||||
{
|
||||
SharpDX.Direct3D10.Filter filter = Translate(value);
|
||||
SharpDX.Direct3D10.Filter filter = FormatConverter.Translate(value);
|
||||
|
||||
if (description.Filter != filter)
|
||||
{
|
||||
@ -212,48 +212,5 @@ namespace ANX.Framework.Windows.DX10
|
||||
this.nativeSamplerStateDirty = false;
|
||||
}
|
||||
}
|
||||
|
||||
private SharpDX.Direct3D10.TextureAddressMode Translate(ANX.Framework.Graphics.TextureAddressMode addressMode)
|
||||
{
|
||||
switch (addressMode)
|
||||
{
|
||||
case Graphics.TextureAddressMode.Clamp:
|
||||
return SharpDX.Direct3D10.TextureAddressMode.Clamp;
|
||||
case Graphics.TextureAddressMode.Mirror:
|
||||
return SharpDX.Direct3D10.TextureAddressMode.Mirror;
|
||||
case Graphics.TextureAddressMode.Wrap:
|
||||
return SharpDX.Direct3D10.TextureAddressMode.Wrap;
|
||||
}
|
||||
|
||||
return SharpDX.Direct3D10.TextureAddressMode.Clamp;
|
||||
}
|
||||
|
||||
private Filter Translate(TextureFilter filter)
|
||||
{
|
||||
switch (filter)
|
||||
{
|
||||
case TextureFilter.Anisotropic:
|
||||
return SharpDX.Direct3D10.Filter.Anisotropic;
|
||||
case TextureFilter.Linear:
|
||||
return SharpDX.Direct3D10.Filter.MinMagMipLinear;
|
||||
case TextureFilter.LinearMipPoint:
|
||||
return SharpDX.Direct3D10.Filter.MinMagMipPoint;
|
||||
case TextureFilter.MinLinearMagPointMipLinear:
|
||||
return SharpDX.Direct3D10.Filter.MinLinearMagPointMipLinear;
|
||||
case TextureFilter.MinLinearMagPointMipPoint:
|
||||
return SharpDX.Direct3D10.Filter.MinLinearMagMipPoint;
|
||||
case TextureFilter.MinPointMagLinearMipLinear:
|
||||
return SharpDX.Direct3D10.Filter.MinPointMagMipLinear;
|
||||
case TextureFilter.MinPointMagLinearMipPoint:
|
||||
return SharpDX.Direct3D10.Filter.MinPointMagLinearMipPoint;
|
||||
case TextureFilter.Point:
|
||||
return SharpDX.Direct3D10.Filter.MinMagMipPoint;
|
||||
case TextureFilter.PointMipLinear:
|
||||
return SharpDX.Direct3D10.Filter.MinMagPointMipLinear;
|
||||
}
|
||||
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -223,5 +223,11 @@ namespace ANX.Framework.Windows.GL3
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
|
||||
public System.Collections.ObjectModel.ReadOnlyCollection<GraphicsAdapter> GetAdapterList()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -56,42 +56,32 @@ namespace ANX.Framework.Graphics
|
||||
{
|
||||
public float AspectRatio
|
||||
{
|
||||
get
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
public SurfaceFormat Format
|
||||
{
|
||||
get
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
public int Height
|
||||
{
|
||||
get
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
public Rectangle TitleSafeArea
|
||||
{
|
||||
get
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
public int Width
|
||||
{
|
||||
get
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
|
@ -56,6 +56,7 @@ namespace ANX.Framework.Graphics
|
||||
{
|
||||
public class DisplayModeCollection : IEnumerable<DisplayMode>, IEnumerable
|
||||
{
|
||||
private List<DisplayMode> displayModes = new List<DisplayMode>();
|
||||
|
||||
public IEnumerator<DisplayMode> GetEnumerator()
|
||||
{
|
||||
@ -71,7 +72,20 @@ namespace ANX.Framework.Graphics
|
||||
{
|
||||
get
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
foreach (DisplayMode mode in displayModes)
|
||||
{
|
||||
if (mode.Format == format)
|
||||
{
|
||||
yield return mode;
|
||||
}
|
||||
}
|
||||
}
|
||||
set
|
||||
{
|
||||
foreach (DisplayMode mode in value)
|
||||
{
|
||||
displayModes.Add(mode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4,6 +4,7 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Collections.ObjectModel;
|
||||
using ANX.Framework.NonXNA;
|
||||
|
||||
#endregion // Using Statements
|
||||
|
||||
@ -58,12 +59,22 @@ namespace ANX.Framework.Graphics
|
||||
{
|
||||
public sealed class GraphicsAdapter
|
||||
{
|
||||
private static List<GraphicsAdapter> adapters;
|
||||
private DisplayModeCollection supportedDisplayModes;
|
||||
|
||||
static GraphicsAdapter()
|
||||
{
|
||||
adapters = new List<GraphicsAdapter>();
|
||||
|
||||
IRenderSystemCreator renderSystemCreator = AddInSystemFactory.Instance.GetCurrentCreator<IRenderSystemCreator>();
|
||||
adapters.AddRange(renderSystemCreator.GetAdapterList());
|
||||
}
|
||||
|
||||
public static ReadOnlyCollection<GraphicsAdapter> Adapters
|
||||
{
|
||||
get
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
return new ReadOnlyCollection<GraphicsAdapter>(adapters);
|
||||
}
|
||||
}
|
||||
|
||||
@ -71,7 +82,8 @@ namespace ANX.Framework.Graphics
|
||||
{
|
||||
get
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
GraphicsAdapter defaultAdapter = adapters.Where(a => a.IsDefaultAdapter).First<GraphicsAdapter>();
|
||||
return defaultAdapter;
|
||||
}
|
||||
}
|
||||
|
||||
@ -105,26 +117,20 @@ namespace ANX.Framework.Graphics
|
||||
|
||||
public int DeviceId
|
||||
{
|
||||
get
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
public string DeviceName
|
||||
{
|
||||
get
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
public bool IsDefaultAdapter
|
||||
{
|
||||
get
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
public bool IsWideScreen
|
||||
@ -145,34 +151,32 @@ namespace ANX.Framework.Graphics
|
||||
|
||||
public int Revision
|
||||
{
|
||||
get
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
public int SubSystemId
|
||||
{
|
||||
get
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
public DisplayModeCollection SupportedDisplayModes
|
||||
{
|
||||
get
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
return this.supportedDisplayModes;
|
||||
}
|
||||
set
|
||||
{
|
||||
this.supportedDisplayModes = value;
|
||||
}
|
||||
}
|
||||
|
||||
public int VendorId
|
||||
{
|
||||
get
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
public bool IsProfileSupported(GraphicsProfile graphicsProfile)
|
||||
|
@ -66,9 +66,14 @@ namespace ANX.Framework.Graphics
|
||||
private BlendState blendState;
|
||||
private RasterizerState rasterizerState;
|
||||
private DepthStencilState depthStencilState;
|
||||
private GraphicsAdapter currentAdapter;
|
||||
private PresentationParameters currentPresentationParameters;
|
||||
|
||||
public GraphicsDevice(PresentationParameters presentationParameters)
|
||||
public GraphicsDevice(GraphicsAdapter adapter, GraphicsProfile graphicsProfile, PresentationParameters presentationParameters)
|
||||
{
|
||||
this.currentAdapter = adapter;
|
||||
this.currentPresentationParameters = presentationParameters;
|
||||
|
||||
this.viewport = new Viewport(0, 0, presentationParameters.BackBufferWidth, presentationParameters.BackBufferHeight);
|
||||
|
||||
nativeDevice = AddInSystemFactory.Instance.GetCurrentCreator<IRenderSystemCreator>().CreateGraphicsDevice(presentationParameters);
|
||||
@ -148,6 +153,21 @@ namespace ANX.Framework.Graphics
|
||||
nativeDevice.SetVertexBuffers(vertexBuffers);
|
||||
}
|
||||
|
||||
public void Reset()
|
||||
{
|
||||
this.Reset(this.currentPresentationParameters, this.currentAdapter);
|
||||
}
|
||||
|
||||
public void Reset(PresentationParameters presentationParameters)
|
||||
{
|
||||
this.Reset(presentationParameters, this.currentAdapter);
|
||||
}
|
||||
|
||||
public void Reset(PresentationParameters presentationParameters, GraphicsAdapter adapter)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
|
@ -61,6 +61,7 @@ namespace ANX.Framework
|
||||
#region Private Members
|
||||
private Game game;
|
||||
private GraphicsDevice graphicsDevice;
|
||||
private DepthFormat depthStencilFormat = DepthFormat.Depth24;
|
||||
|
||||
public static readonly int DefaultBackBufferWidth = 800;
|
||||
public static readonly int DefaultBackBufferHeight = 600; //TODO: this is 480 in the original XNA
|
||||
@ -76,14 +77,45 @@ namespace ANX.Framework
|
||||
|
||||
public GraphicsDeviceManager(Game game)
|
||||
{
|
||||
//TODO: check arguments for null
|
||||
if (game == null)
|
||||
{
|
||||
throw new ArgumentNullException("game");
|
||||
}
|
||||
|
||||
this.game = game;
|
||||
|
||||
//TODO: check for duplicates
|
||||
if (game.Services.GetService(typeof(IGraphicsDeviceManager)) != null)
|
||||
{
|
||||
throw new ArgumentException("The GraphicsDeviceManager was already registered to the game class");
|
||||
}
|
||||
game.Services.AddService(typeof(IGraphicsDeviceManager), this);
|
||||
|
||||
if (game.Services.GetService(typeof(IGraphicsDeviceService)) != null)
|
||||
{
|
||||
throw new ArgumentException("The GraphicsDeviceService was already registered to the game class");
|
||||
}
|
||||
game.Services.AddService(typeof(IGraphicsDeviceService), this);
|
||||
|
||||
game.Window.ClientSizeChanged += new EventHandler<EventArgs>(Window_ClientSizeChanged);
|
||||
game.Window.ScreenDeviceNameChanged += new EventHandler<EventArgs>(Window_ScreenDeviceNameChanged);
|
||||
game.Window.OrientationChanged += new EventHandler<EventArgs>(Window_OrientationChanged);
|
||||
|
||||
//TODO: read graphics profile type from manifest resource stream
|
||||
}
|
||||
|
||||
void Window_OrientationChanged(object sender, EventArgs e)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
void Window_ScreenDeviceNameChanged(object sender, EventArgs e)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
void Window_ClientSizeChanged(object sender, EventArgs e)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public bool BeginDraw()
|
||||
@ -92,6 +124,11 @@ namespace ANX.Framework
|
||||
}
|
||||
|
||||
public void CreateDevice()
|
||||
{
|
||||
ApplyChanges();
|
||||
}
|
||||
|
||||
private void CreateDevice(GraphicsDeviceInformation deviceInformation)
|
||||
{
|
||||
if (this.graphicsDevice != null)
|
||||
{
|
||||
@ -101,11 +138,13 @@ namespace ANX.Framework
|
||||
|
||||
//TODO: validate graphics device
|
||||
|
||||
PresentationParameters presentationParameters = new PresentationParameters();
|
||||
presentationParameters.DeviceWindowHandle = game.Window.Handle;
|
||||
presentationParameters.BackBufferWidth = DefaultBackBufferWidth; //TODO: set real default sizes
|
||||
presentationParameters.BackBufferHeight = DefaultBackBufferHeight;
|
||||
this.graphicsDevice = new GraphicsDevice(presentationParameters);
|
||||
//TODO: this should be set somewhere else
|
||||
deviceInformation.PresentationParameters.DeviceWindowHandle = game.Window.Handle;
|
||||
deviceInformation.PresentationParameters.BackBufferWidth = DefaultBackBufferWidth; //TODO: set real default sizes
|
||||
deviceInformation.PresentationParameters.BackBufferHeight = DefaultBackBufferHeight;
|
||||
this.graphicsDevice = new GraphicsDevice(deviceInformation.Adapter, deviceInformation.GraphicsProfile, deviceInformation.PresentationParameters);
|
||||
|
||||
OnDeviceCreated(this, EventArgs.Empty);
|
||||
|
||||
//TODO: hookup events
|
||||
}
|
||||
@ -117,7 +156,31 @@ namespace ANX.Framework
|
||||
|
||||
public void ApplyChanges()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
GraphicsDeviceInformation graphicsDeviceInformation = FindBestDevice(true);
|
||||
OnPreparingDeviceSettings(this, new PreparingDeviceSettingsEventArgs(graphicsDeviceInformation));
|
||||
|
||||
if (graphicsDevice != null)
|
||||
{
|
||||
if (this.CanResetDevice(graphicsDeviceInformation))
|
||||
{
|
||||
OnDeviceResetting(this, EventArgs.Empty);
|
||||
|
||||
this.graphicsDevice.Reset(graphicsDeviceInformation.PresentationParameters, graphicsDeviceInformation.Adapter);
|
||||
|
||||
OnDeviceReset(this, EventArgs.Empty);
|
||||
}
|
||||
else
|
||||
{
|
||||
graphicsDevice.Dispose();
|
||||
graphicsDevice = null;
|
||||
}
|
||||
}
|
||||
|
||||
if (graphicsDevice == null)
|
||||
{
|
||||
CreateDevice(graphicsDeviceInformation);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void ToggleFullScreen()
|
||||
@ -132,7 +195,8 @@ namespace ANX.Framework
|
||||
|
||||
protected GraphicsDeviceInformation FindBestDevice(bool anySuitableDevice)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
//TODO: implement
|
||||
return new GraphicsDeviceInformation();
|
||||
}
|
||||
|
||||
protected virtual bool CanResetDevice(GraphicsDeviceInformation newDeviceInfo)
|
||||
@ -204,7 +268,10 @@ namespace ANX.Framework
|
||||
|
||||
public DepthFormat PreferredDepthStencilFormat
|
||||
{
|
||||
get { throw new NotImplementedException(); }
|
||||
get
|
||||
{
|
||||
return this.depthStencilFormat;
|
||||
}
|
||||
set { throw new NotImplementedException(); }
|
||||
}
|
||||
|
||||
|
@ -3,6 +3,7 @@ using System;
|
||||
using ANX.Framework.Graphics;
|
||||
using System.IO;
|
||||
using ANX.Framework.NonXNA;
|
||||
using System.Collections.ObjectModel;
|
||||
|
||||
#endregion // Using Statements
|
||||
|
||||
@ -76,5 +77,7 @@ namespace ANX.Framework
|
||||
INativeSamplerState CreateSamplerState();
|
||||
|
||||
byte[] GetShaderByteCode(PreDefinedShader type);
|
||||
|
||||
ReadOnlyCollection<GraphicsAdapter> GetAdapterList();
|
||||
}
|
||||
}
|
||||
|
@ -217,5 +217,11 @@ namespace ANX.RenderSystem.Windows.DX11_1
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
|
||||
public System.Collections.ObjectModel.ReadOnlyCollection<GraphicsAdapter> GetAdapterList()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user