diff --git a/ANX.Framework.sln b/ANX.Framework.sln
index d3da0b2e..6f80e5a6 100644
--- a/ANX.Framework.sln
+++ b/ANX.Framework.sln
@@ -117,6 +117,17 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ANX.RenderSystem.Windows.Me
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RecordingSample", "RecordingSample\RecordingSample\RecordingSample.csproj", "{160150D5-38E6-482D-97F5-2624F322A854}"
EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DX11", "DX11", "{6285F3EF-07DB-49C9-8CDE-A9092789FE4F}"
+ ProjectSection(SolutionItems) = preProject
+ shader\DX11\AlphaTest.fx = shader\DX11\AlphaTest.fx
+ shader\DX11\BasicEffect.fx = shader\DX11\BasicEffect.fx
+ shader\DX11\build.xml = shader\DX11\build.xml
+ shader\DX11\DualTexture.fx = shader\DX11\DualTexture.fx
+ shader\DX11\EnvironmentMap.fx = shader\DX11\EnvironmentMap.fx
+ shader\DX11\Skinned.fx = shader\DX11\Skinned.fx
+ shader\DX11\SpriteBatch.fx = shader\DX11\SpriteBatch.fx
+ EndProjectSection
+EndProject
Global
GlobalSection(SubversionScc) = preSolution
Svn-Managed = True
@@ -442,5 +453,6 @@ Global
{CCB4679D-11AF-4EC6-AAA4-36619FCE70FA} = {60824BDB-AC8A-42ED-9B79-111FB44669FF}
{E4FFD875-95FC-48F2-8B6D-8483D0B71666} = {60824BDB-AC8A-42ED-9B79-111FB44669FF}
{BD648BB8-EF28-453C-B4F5-EE3C93EB4DAF} = {60824BDB-AC8A-42ED-9B79-111FB44669FF}
+ {6285F3EF-07DB-49C9-8CDE-A9092789FE4F} = {60824BDB-AC8A-42ED-9B79-111FB44669FF}
EndGlobalSection
EndGlobal
diff --git a/RenderSystems/ANX.Framework.Windows.DX10/DepthStencilState_DX10.cs b/RenderSystems/ANX.Framework.Windows.DX10/DepthStencilState_DX10.cs
index 376d4e9c..bef0ca79 100644
--- a/RenderSystems/ANX.Framework.Windows.DX10/DepthStencilState_DX10.cs
+++ b/RenderSystems/ANX.Framework.Windows.DX10/DepthStencilState_DX10.cs
@@ -1,9 +1,61 @@
-using System;
+#region Using Statements
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
-using ANX.Framework.NonXNA;
using SharpDX.Direct3D10;
+using ANX.Framework.Graphics;
+using ANX.Framework.NonXNA;
+using ANX.Framework;
+
+#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
{
diff --git a/RenderSystems/ANX.RenderSystem.Windows.DX11/ANX.RenderSystem.Windows.DX11.csproj b/RenderSystems/ANX.RenderSystem.Windows.DX11/ANX.RenderSystem.Windows.DX11.csproj
index 9b2296b6..5274e18d 100644
--- a/RenderSystems/ANX.RenderSystem.Windows.DX11/ANX.RenderSystem.Windows.DX11.csproj
+++ b/RenderSystems/ANX.RenderSystem.Windows.DX11/ANX.RenderSystem.Windows.DX11.csproj
@@ -65,18 +65,35 @@
..\..\lib\SharpDX\Bin\SharpDX.DXGI.dll
+
+
+
+
+
+
+
+
+
Metadata.resx
True
True
+
+
+
+
+
+
+
+
diff --git a/RenderSystems/ANX.RenderSystem.Windows.DX11/BlendState_DX11.cs b/RenderSystems/ANX.RenderSystem.Windows.DX11/BlendState_DX11.cs
new file mode 100644
index 00000000..0ebad3bc
--- /dev/null
+++ b/RenderSystems/ANX.RenderSystem.Windows.DX11/BlendState_DX11.cs
@@ -0,0 +1,327 @@
+#region Using Statements
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using SharpDX.Direct3D11;
+using ANX.Framework.Graphics;
+using ANX.Framework.NonXNA;
+using ANX.Framework;
+
+#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.RenderSystem.Windows.DX11
+{
+ public class BlendState_DX11 : INativeBlendState
+ {
+ #region Private Members
+ private BlendStateDescription blendStateDescription;
+ private SharpDX.Direct3D11.BlendState nativeBlendState;
+ private bool nativeBlendStateDirty;
+ private SharpDX.Color4 blendFactor;
+ private int multiSampleMask;
+ private bool bound;
+
+ #endregion // Private Members
+
+ public BlendState_DX11()
+ {
+ for (int i = 0; i < blendStateDescription.RenderTarget.Length; i++)
+ {
+ blendStateDescription.RenderTarget[i] = new RenderTargetBlendDescription();
+ blendStateDescription.IndependentBlendEnable = true;
+ }
+
+ nativeBlendStateDirty = true;
+ }
+
+ public void Apply(GraphicsDevice graphics)
+ {
+ GraphicsDeviceWindowsDX11 gdx11 = graphics.NativeDevice as GraphicsDeviceWindowsDX11;
+ SharpDX.Direct3D11.DeviceContext context = gdx11.NativeDevice;
+
+ UpdateNativeBlendState(context.Device);
+ this.bound = true;
+
+ context.OutputMerger.SetBlendState(nativeBlendState, this.blendFactor, this.multiSampleMask);
+ }
+
+ public void Release()
+ {
+ this.bound = false;
+ }
+
+ public void Dispose()
+ {
+ if (this.nativeBlendState != null)
+ {
+ this.nativeBlendState.Dispose();
+ this.nativeBlendState = null;
+ }
+ }
+
+ public bool IsBound
+ {
+ get
+ {
+ return this.bound;
+ }
+ }
+
+ public Color BlendFactor
+ {
+ set
+ {
+ const float colorConvert = 1f / 255f;
+
+ blendFactor.Red = value.R * colorConvert;
+ blendFactor.Green = value.G * colorConvert;
+ blendFactor.Blue = value.B * colorConvert;
+ blendFactor.Alpha = value.A * colorConvert;
+ }
+ }
+
+ public int MultiSampleMask
+ {
+ set
+ {
+ this.multiSampleMask = value;
+ }
+ }
+
+ public BlendFunction AlphaBlendFunction
+ {
+ set
+ {
+ BlendOperation alphaBlendOperation = FormatConverter.Translate(value);
+
+ for (int i = 0; i < blendStateDescription.RenderTarget.Length; i++)
+ {
+ if (blendStateDescription.RenderTarget[i].AlphaBlendOperation != alphaBlendOperation)
+ {
+ nativeBlendStateDirty = true;
+ blendStateDescription.RenderTarget[i].AlphaBlendOperation = alphaBlendOperation;
+ }
+
+ }
+ }
+ }
+
+ public BlendFunction ColorBlendFunction
+ {
+ set
+ {
+ BlendOperation blendOperation = FormatConverter.Translate(value);
+
+ for (int i = 0; i < blendStateDescription.RenderTarget.Length; i++)
+ {
+ if (blendStateDescription.RenderTarget[i].BlendOperation != blendOperation)
+ {
+ nativeBlendStateDirty = true;
+ blendStateDescription.RenderTarget[i].BlendOperation = blendOperation;
+ }
+
+ }
+ }
+ }
+
+ public Blend AlphaDestinationBlend
+ {
+ set
+ {
+ BlendOption destinationAlphaBlend = FormatConverter.Translate(value);
+
+ for (int i = 0; i < blendStateDescription.RenderTarget.Length; i++)
+ {
+ if (blendStateDescription.RenderTarget[i].DestinationAlphaBlend != destinationAlphaBlend)
+ {
+ nativeBlendStateDirty = true;
+ blendStateDescription.RenderTarget[i].DestinationAlphaBlend = destinationAlphaBlend;
+ }
+
+ }
+ }
+ }
+
+ public Blend ColorDestinationBlend
+ {
+ set
+ {
+ BlendOption destinationBlend = FormatConverter.Translate(value);
+
+ for (int i = 0; i < blendStateDescription.RenderTarget.Length; i++)
+ {
+ if (blendStateDescription.RenderTarget[i].DestinationBlend != destinationBlend)
+ {
+ nativeBlendStateDirty = true;
+ blendStateDescription.RenderTarget[i].DestinationBlend = destinationBlend;
+ }
+
+ }
+ }
+ }
+
+ public ColorWriteChannels ColorWriteChannels
+ {
+ set
+ {
+ ColorWriteMaskFlags renderTargetWriteMask = FormatConverter.Translate(value);
+
+ //TODO: range check
+
+ if (blendStateDescription.RenderTarget[0].RenderTargetWriteMask != renderTargetWriteMask)
+ {
+ nativeBlendStateDirty = true;
+ blendStateDescription.RenderTarget[0].RenderTargetWriteMask = renderTargetWriteMask;
+ }
+ }
+ }
+
+ public ColorWriteChannels ColorWriteChannels1
+ {
+ set
+ {
+ ColorWriteMaskFlags renderTargetWriteMask = FormatConverter.Translate(value);
+
+ //TODO: range check
+
+ if (blendStateDescription.RenderTarget[1].RenderTargetWriteMask != renderTargetWriteMask)
+ {
+ nativeBlendStateDirty = true;
+ blendStateDescription.RenderTarget[1].RenderTargetWriteMask = renderTargetWriteMask;
+ }
+ }
+ }
+
+ public ColorWriteChannels ColorWriteChannels2
+ {
+ set
+ {
+ ColorWriteMaskFlags renderTargetWriteMask = FormatConverter.Translate(value);
+
+ //TODO: range check
+
+ if (blendStateDescription.RenderTarget[2].RenderTargetWriteMask != renderTargetWriteMask)
+ {
+ nativeBlendStateDirty = true;
+ blendStateDescription.RenderTarget[2].RenderTargetWriteMask = renderTargetWriteMask;
+ }
+ }
+ }
+
+ public ColorWriteChannels ColorWriteChannels3
+ {
+ set
+ {
+ ColorWriteMaskFlags renderTargetWriteMask = FormatConverter.Translate(value);
+
+ //TODO: range check
+
+ if (blendStateDescription.RenderTarget[3].RenderTargetWriteMask != renderTargetWriteMask)
+ {
+ nativeBlendStateDirty = true;
+ blendStateDescription.RenderTarget[3].RenderTargetWriteMask = renderTargetWriteMask;
+ }
+ }
+ }
+
+ public Blend AlphaSourceBlend
+ {
+ set
+ {
+ BlendOption sourceAlphaBlend = FormatConverter.Translate(value);
+
+ for (int i = 0; i < blendStateDescription.RenderTarget.Length; i++)
+ {
+ if (blendStateDescription.RenderTarget[i].SourceAlphaBlend != sourceAlphaBlend)
+ {
+ nativeBlendStateDirty = true;
+ blendStateDescription.RenderTarget[i].SourceAlphaBlend = sourceAlphaBlend;
+ }
+
+ }
+ }
+ }
+
+ public Blend ColorSourceBlend
+ {
+ set
+ {
+ BlendOption sourceBlend = FormatConverter.Translate(value);
+
+ for (int i = 0; i < blendStateDescription.RenderTarget.Length; i++)
+ {
+ if (blendStateDescription.RenderTarget[i].SourceBlend != sourceBlend)
+ {
+ nativeBlendStateDirty = true;
+ blendStateDescription.RenderTarget[i].SourceBlend = sourceBlend;
+ }
+
+ }
+ }
+ }
+
+ private void UpdateNativeBlendState(SharpDX.Direct3D11.Device device)
+ {
+ if (this.nativeBlendStateDirty == true || this.nativeBlendState == null)
+ {
+ if (this.nativeBlendState != null)
+ {
+ this.nativeBlendState.Dispose();
+ this.nativeBlendState = null;
+ }
+
+ this.nativeBlendState = new SharpDX.Direct3D11.BlendState(device, ref this.blendStateDescription);
+
+ this.nativeBlendStateDirty = false;
+ }
+ }
+ }
+}
diff --git a/RenderSystems/ANX.RenderSystem.Windows.DX11/Creator.cs b/RenderSystems/ANX.RenderSystem.Windows.DX11/Creator.cs
index 795377ae..6b6aef25 100644
--- a/RenderSystems/ANX.RenderSystem.Windows.DX11/Creator.cs
+++ b/RenderSystems/ANX.RenderSystem.Windows.DX11/Creator.cs
@@ -7,6 +7,8 @@ using ANX.Framework.Graphics;
using System.IO;
using ANX.Framework.NonXNA;
using System.Runtime.InteropServices;
+using SharpDX.DXGI;
+using ANX.Framework.NonXNA.RenderSystem;
using ANX.Framework;
#endregion // Using Statements
@@ -62,17 +64,16 @@ namespace ANX.RenderSystem.Windows.DX11
{
public class Creator : IRenderSystemCreator
{
-
- public void RegisterCreator(AddInSystemFactory factory)
- {
- factory.AddCreator(this);
- }
-
public string Name
{
get { return "DirectX11"; }
}
+ public int Priority
+ {
+ get { return 5; }
+ }
+
public bool IsSupported
{
get
@@ -82,173 +83,122 @@ namespace ANX.RenderSystem.Windows.DX11
}
}
- public int Priority
- {
- get { return int.MaxValue; }
- }
-
public GameHost CreateGameHost(Game game)
{
AddInSystemFactory.Instance.PreventRenderSystemChange();
-
- throw new NotImplementedException();
- //return new WindowsGameHost(game);
+ return new WindowsGameHost(game);
}
public INativeGraphicsDevice CreateGraphicsDevice(PresentationParameters presentationParameters)
{
AddInSystemFactory.Instance.PreventRenderSystemChange();
-
- throw new NotImplementedException();
- //return new GraphicsDeviceWindowsDX11_1(presentationParameters);
+ return new GraphicsDeviceWindowsDX11(presentationParameters);
}
public INativeBuffer CreateIndexBuffer(GraphicsDevice graphics, IndexElementSize size, int indexCount, BufferUsage usage)
{
AddInSystemFactory.Instance.PreventRenderSystemChange();
-
- throw new NotImplementedException();
- //return new IndexBuffer_DX 11(graphics, size, indexCount, usage);
+ return new IndexBuffer_DX11(graphics, size, indexCount, usage);
}
public INativeBuffer CreateVertexBuffer(GraphicsDevice graphics, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage)
{
AddInSystemFactory.Instance.PreventRenderSystemChange();
-
return new VertexBuffer_DX11(graphics, vertexDeclaration, vertexCount, usage);
}
- public INativeEffect CreateEffect(GraphicsDevice graphics, Effect effect, Stream vertexShaderByteCode, Stream pixelShaderByteCode)
+ public INativeEffect CreateEffect(GraphicsDevice graphics, ANX.Framework.Graphics.Effect managedEffect, Stream vertexShaderByteCode, Stream pixelShaderByteCode)
{
AddInSystemFactory.Instance.PreventRenderSystemChange();
- throw new NotImplementedException();
- //return new Effect_DX11(graphics, vertexShaderByteCode, pixelShaderByteCode);
+ Effect_DX11 effect = new Effect_DX11(graphics, managedEffect, vertexShaderByteCode, pixelShaderByteCode);
+
+ return effect;
}
- public INativeEffect CreateEffect(GraphicsDevice graphics, Effect effect, System.IO.Stream byteCode)
+ public INativeEffect CreateEffect(GraphicsDevice graphics, ANX.Framework.Graphics.Effect managedEffect, System.IO.Stream byteCode)
{
AddInSystemFactory.Instance.PreventRenderSystemChange();
- throw new NotImplementedException();
- //return new Effect_DX11(graphics, byteCode);
+ Effect_DX11 effect = new Effect_DX11(graphics, managedEffect, byteCode);
+
+ return effect;
}
public Texture2D CreateTexture(GraphicsDevice graphics, string fileName)
{
AddInSystemFactory.Instance.PreventRenderSystemChange();
- throw new NotImplementedException();
- }
-
- public Texture2D CreateTexture(GraphicsDevice graphics, SurfaceFormat surfaceFormat, int width, int height, int mipCount, byte[] colorData)
- {
- AddInSystemFactory.Instance.PreventRenderSystemChange();
-
+ //TODO: implement
throw new NotImplementedException();
-/*
- if (mipCount > 1)
- {
- throw new Exception("creating textures with mip map not yet implemented");
- }
+ //GraphicsDeviceWindowsDX10 graphicsDX10 = graphics.NativeDevice as GraphicsDeviceWindowsDX10;
+ //SharpDX.Direct3D10.Texture2D nativeTexture = SharpDX.Direct3D10.Texture2D.FromFile(graphicsDX10.NativeDevice, fileName);
+ //Texture2D_DX10 texture = new Texture2D_DX10(graphics, nativeTexture.Description.Width, nativeTexture.Description.Height, FormatConverter.Translate(nativeTexture.Description.Format), nativeTexture.Description.MipLevels);
+ //texture.NativeTexture = nativeTexture;
- GraphicsDeviceWindowsDX10 graphicsDX10 = graphics.NativeDevice as GraphicsDeviceWindowsDX10;
- SharpDX.Direct3D10.Device device = graphicsDX10.NativeDevice;
- Texture2D_DX10 texture = new Texture2D_DX10(graphics, width, height);
-
- SharpDX.Direct3D10.Texture2DDescription description = new SharpDX.Direct3D10.Texture2DDescription()
- {
- Width = width,
- Height = height,
- MipLevels = mipCount,
- ArraySize = mipCount,
- Format = SharpDX.DXGI.Format.R8G8B8A8_UNorm,
- SampleDescription = new SharpDX.DXGI.SampleDescription(1, 0),
- Usage = SharpDX.Direct3D10.ResourceUsage.Dynamic,
- BindFlags = SharpDX.Direct3D10.BindFlags.ShaderResource,
- CpuAccessFlags = SharpDX.Direct3D10.CpuAccessFlags.Write,
- };
- texture.NativeTexture = new SharpDX.Direct3D10.Texture2D(graphicsDX10.NativeDevice, description);
-
- // description of texture formats of DX10: http://msdn.microsoft.com/en-us/library/bb694531(v=VS.85).aspx
- // more helpfull information on DX10 textures: http://msdn.microsoft.com/en-us/library/windows/desktop/bb205131(v=vs.85).aspx
-
- if (surfaceFormat == SurfaceFormat.Color)
- {
- int subresource = SharpDX.Direct3D10.Texture2D.CalculateSubresourceIndex(0, 0, 1);
- SharpDX.DataRectangle rectangle = texture.NativeTexture.Map(subresource, SharpDX.Direct3D10.MapMode.WriteDiscard, SharpDX.Direct3D10.MapFlags.None);
- int rowPitch = rectangle.Pitch;
-
- unsafe
- {
- byte* pTexels = (byte*)rectangle.DataPointer;
- int srcIndex = 0;
-
- for (int row = 0; row < height; row++)
- {
- int rowStart = row * rowPitch;
-
- for (int col = 0; col < width; col++)
- {
- int colStart = col * 4;
- pTexels[rowStart + colStart + 0] = colorData[srcIndex++];
- pTexels[rowStart + colStart + 1] = colorData[srcIndex++];
- pTexels[rowStart + colStart + 2] = colorData[srcIndex++];
- pTexels[rowStart + colStart + 3] = colorData[srcIndex++];
- }
- }
- }
-
- texture.NativeTexture.Unmap(subresource);
- }
- else
- {
- throw new Exception(string.Format("creating textures of format {0} not yet implemented...", surfaceFormat.ToString()));
- }
-
- return texture;
-*/
+ //return texture;
}
-
public INativeBlendState CreateBlendState()
{
AddInSystemFactory.Instance.PreventRenderSystemChange();
-
- throw new NotImplementedException();
+ return new BlendState_DX11();
}
-
public INativeRasterizerState CreateRasterizerState()
{
AddInSystemFactory.Instance.PreventRenderSystemChange();
-
- throw new NotImplementedException();
+ return new RasterizerState_DX11();
}
-
public INativeDepthStencilState CreateDepthStencilState()
{
AddInSystemFactory.Instance.PreventRenderSystemChange();
-
- throw new NotImplementedException();
+ return new DepthStencilState_DX11();
}
-
public INativeSamplerState CreateSamplerState()
{
AddInSystemFactory.Instance.PreventRenderSystemChange();
-
- throw new NotImplementedException();
+ return new SamplerState_DX11();
}
-
public byte[] GetShaderByteCode(PreDefinedShader type)
{
AddInSystemFactory.Instance.PreventRenderSystemChange();
- throw new NotImplementedException();
+ if (type == PreDefinedShader.SpriteBatch)
+ {
+ return ShaderByteCode.SpriteBatchByteCode;
+ }
+ else if (type == PreDefinedShader.AlphaTestEffect)
+ {
+ return ShaderByteCode.AlphaTestEffectByteCode;
+ }
+ else if (type == PreDefinedShader.BasicEffect)
+ {
+ return ShaderByteCode.BasicEffectByteCode;
+ }
+ else if (type == PreDefinedShader.DualTextureEffect)
+ {
+ return ShaderByteCode.DualTextureEffectByteCode;
+ }
+ else if (type == PreDefinedShader.EnvironmentMapEffect)
+ {
+ return ShaderByteCode.EnvironmentMapEffectByteCode;
+ }
+ else if (type == PreDefinedShader.SkinnedEffect)
+ {
+ return ShaderByteCode.SkinnedEffectByteCode;
+ }
+
+ throw new NotImplementedException("ByteCode for '" + type.ToString() + "' is not yet available");
+ }
+
+ public void RegisterCreator(AddInSystemFactory factory)
+ {
+ factory.AddCreator(this);
}
@@ -256,21 +206,68 @@ namespace ANX.RenderSystem.Windows.DX11
{
AddInSystemFactory.Instance.PreventRenderSystemChange();
- throw new NotImplementedException();
+ SharpDX.DXGI.Factory factory = new Factory();
+
+ List adapterList = new List();
+ 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(adapterList);
}
-
- public Framework.NonXNA.RenderSystem.INativeTexture2D CreateTexture(GraphicsDevice graphics, SurfaceFormat surfaceFormat, int width, int height, int mipCount)
- {
- throw new NotImplementedException();
- }
-
-
- public Framework.NonXNA.RenderSystem.INativeRenderTarget2D CreateRenderTarget(GraphicsDevice graphics, int width, int height, bool mipMap, SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount, RenderTargetUsage usage)
+ public INativeTexture2D CreateTexture(GraphicsDevice graphics, SurfaceFormat surfaceFormat, int width, int height, int mipCount)
{
AddInSystemFactory.Instance.PreventRenderSystemChange();
- throw new NotImplementedException();
+ return new Texture2D_DX11(graphics, width, height, surfaceFormat, mipCount);
+ }
+
+ public INativeRenderTarget2D CreateRenderTarget(GraphicsDevice graphics, int width, int height, bool mipMap, SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount, RenderTargetUsage usage)
+ {
+ AddInSystemFactory.Instance.PreventRenderSystemChange();
+
+ return new RenderTarget2D_DX11(graphics, width, height, mipMap, preferredFormat, preferredDepthFormat, preferredMultiSampleCount, usage);
}
}
}
diff --git a/RenderSystems/ANX.RenderSystem.Windows.DX11/DepthStencilState_DX11.cs b/RenderSystems/ANX.RenderSystem.Windows.DX11/DepthStencilState_DX11.cs
new file mode 100644
index 00000000..f42e1f69
--- /dev/null
+++ b/RenderSystems/ANX.RenderSystem.Windows.DX11/DepthStencilState_DX11.cs
@@ -0,0 +1,342 @@
+#region Using Statements
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using SharpDX.Direct3D11;
+using ANX.Framework.Graphics;
+using ANX.Framework.NonXNA;
+using ANX.Framework;
+
+#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.RenderSystem.Windows.DX11
+{
+ public class DepthStencilState_DX11 : INativeDepthStencilState
+ {
+ #region Private Members
+ private DepthStencilStateDescription description;
+ private SharpDX.Direct3D11.DepthStencilState nativeDepthStencilState;
+ private bool nativeDepthStencilStateDirty;
+ private bool bound;
+
+ private int referenceStencil;
+
+ #endregion // Private Members
+
+ public DepthStencilState_DX11()
+ {
+ this.description = new DepthStencilStateDescription();
+
+ this.nativeDepthStencilStateDirty = true;
+ }
+
+ public void Apply(ANX.Framework.Graphics.GraphicsDevice graphicsDevice)
+ {
+ GraphicsDeviceWindowsDX11 gdx11 = graphicsDevice.NativeDevice as GraphicsDeviceWindowsDX11;
+ DeviceContext context = gdx11.NativeDevice;
+
+ UpdateNativeDepthStencilState(context.Device);
+ this.bound = true;
+
+ context.OutputMerger.SetDepthStencilState(nativeDepthStencilState, this.referenceStencil);
+ }
+
+ public void Release()
+ {
+ this.bound = false;
+ }
+
+ public void Dispose()
+ {
+ if (this.nativeDepthStencilState != null)
+ {
+ this.nativeDepthStencilState.Dispose();
+ this.nativeDepthStencilState = null;
+ }
+ }
+
+ public bool IsBound
+ {
+ get
+ {
+ return this.bound;
+ }
+ }
+
+ public ANX.Framework.Graphics.StencilOperation CounterClockwiseStencilDepthBufferFail
+ {
+ set
+ {
+ SharpDX.Direct3D11.StencilOperation operation = FormatConverter.Translate(value);
+
+ if (description.BackFace.DepthFailOperation != operation)
+ {
+ description.BackFace.DepthFailOperation = operation;
+ nativeDepthStencilStateDirty = true;
+ }
+ }
+ }
+
+ public ANX.Framework.Graphics.StencilOperation CounterClockwiseStencilFail
+ {
+ set
+ {
+ SharpDX.Direct3D11.StencilOperation operation = FormatConverter.Translate(value);
+
+ if (description.BackFace.FailOperation != operation)
+ {
+ description.BackFace.FailOperation = operation;
+ nativeDepthStencilStateDirty = true;
+ }
+ }
+ }
+
+ public ANX.Framework.Graphics.CompareFunction CounterClockwiseStencilFunction
+ {
+ set
+ {
+ SharpDX.Direct3D11.Comparison comparison = FormatConverter.Translate(value);
+
+ if (description.BackFace.Comparison != comparison)
+ {
+ description.BackFace.Comparison = comparison;
+ nativeDepthStencilStateDirty = true;
+ }
+ }
+ }
+
+ public ANX.Framework.Graphics.StencilOperation CounterClockwiseStencilPass
+ {
+ set
+ {
+ SharpDX.Direct3D11.StencilOperation operation = FormatConverter.Translate(value);
+
+ if (description.BackFace.PassOperation != operation)
+ {
+ description.BackFace.PassOperation = operation;
+ nativeDepthStencilStateDirty = true;
+ }
+ }
+ }
+
+ public bool DepthBufferEnable
+ {
+ set
+ {
+ if (description.IsDepthEnabled != value)
+ {
+ description.IsDepthEnabled = value;
+ nativeDepthStencilStateDirty = true;
+ }
+ }
+ }
+
+ public ANX.Framework.Graphics.CompareFunction DepthBufferFunction
+ {
+ set
+ {
+ SharpDX.Direct3D11.Comparison comparison = FormatConverter.Translate(value);
+
+ if (description.DepthComparison != comparison)
+ {
+ description.DepthComparison = comparison;
+ nativeDepthStencilStateDirty = true;
+ }
+ }
+ }
+
+ public bool DepthBufferWriteEnable
+ {
+ set
+ {
+ DepthWriteMask writeMask = value ? DepthWriteMask.All : DepthWriteMask.Zero;
+
+ if (description.DepthWriteMask != writeMask)
+ {
+ description.DepthWriteMask = writeMask;
+ nativeDepthStencilStateDirty = true;
+ }
+ }
+ }
+
+ public int ReferenceStencil
+ {
+ set
+ {
+ if (this.referenceStencil != value)
+ {
+ this.referenceStencil = value;
+ this.nativeDepthStencilStateDirty = true;
+ }
+ }
+ }
+
+ public ANX.Framework.Graphics.StencilOperation StencilDepthBufferFail
+ {
+ set
+ {
+ SharpDX.Direct3D11.StencilOperation operation = FormatConverter.Translate(value);
+
+ if (description.FrontFace.DepthFailOperation != operation)
+ {
+ description.FrontFace.DepthFailOperation = operation;
+ nativeDepthStencilStateDirty = true;
+ }
+ }
+ }
+
+ public bool StencilEnable
+ {
+ set
+ {
+ if (description.IsStencilEnabled != value)
+ {
+ description.IsStencilEnabled = value;
+ nativeDepthStencilStateDirty = true;
+ }
+ }
+ }
+
+ public ANX.Framework.Graphics.StencilOperation StencilFail
+ {
+ set
+ {
+ SharpDX.Direct3D11.StencilOperation operation = FormatConverter.Translate(value);
+
+ if (description.FrontFace.FailOperation != operation)
+ {
+ description.FrontFace.FailOperation = operation;
+ nativeDepthStencilStateDirty = true;
+ }
+ }
+ }
+
+ public ANX.Framework.Graphics.CompareFunction StencilFunction
+ {
+ set
+ {
+ SharpDX.Direct3D11.Comparison comparison = FormatConverter.Translate(value);
+
+ if (description.FrontFace.Comparison != comparison)
+ {
+ description.FrontFace.Comparison = comparison;
+ nativeDepthStencilStateDirty = true;
+ }
+ }
+ }
+
+ public int StencilMask
+ {
+ set
+ {
+ byte stencilMask = (byte)value; //TODO: check range
+
+ if (description.StencilReadMask != stencilMask)
+ {
+ description.StencilReadMask = stencilMask;
+ nativeDepthStencilStateDirty = true;
+ }
+ }
+ }
+
+ public ANX.Framework.Graphics.StencilOperation StencilPass
+ {
+ set
+ {
+ SharpDX.Direct3D11.StencilOperation operation = FormatConverter.Translate(value);
+
+ if (description.FrontFace.PassOperation != operation)
+ {
+ description.FrontFace.PassOperation = operation;
+ nativeDepthStencilStateDirty = true;
+ }
+ }
+ }
+
+ public int StencilWriteMask
+ {
+ set
+ {
+ byte stencilWriteMask = (byte)value; //TODO: check range
+
+ if (description.StencilWriteMask != stencilWriteMask)
+ {
+ description.StencilWriteMask = stencilWriteMask;
+ nativeDepthStencilStateDirty = true;
+ }
+ }
+ }
+
+ public bool TwoSidedStencilMode
+ {
+ set
+ {
+ //TODO: check if we really need this. in xna this enables only counter clockwise stencil operations
+ }
+ }
+
+ private void UpdateNativeDepthStencilState(Device device)
+ {
+ if (this.nativeDepthStencilStateDirty == true || this.nativeDepthStencilState == null)
+ {
+ if (this.nativeDepthStencilState != null)
+ {
+ this.nativeDepthStencilState.Dispose();
+ this.nativeDepthStencilState = null;
+ }
+
+ this.nativeDepthStencilState = new SharpDX.Direct3D11.DepthStencilState(device, ref this.description);
+
+ this.nativeDepthStencilStateDirty = false;
+ }
+ }
+ }
+}
diff --git a/RenderSystems/ANX.RenderSystem.Windows.DX11/EffectParameter_DX11.cs b/RenderSystems/ANX.RenderSystem.Windows.DX11/EffectParameter_DX11.cs
new file mode 100644
index 00000000..24054de2
--- /dev/null
+++ b/RenderSystems/ANX.RenderSystem.Windows.DX11/EffectParameter_DX11.cs
@@ -0,0 +1,202 @@
+#region Using Statements
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using ANX.Framework.NonXNA;
+using SharpDX.Direct3D11;
+using ANX.Framework.Graphics;
+using ANX.Framework.NonXNA.RenderSystem;
+using ANX.Framework;
+
+#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.RenderSystem.Windows.DX11
+{
+ public class EffectParameter_DX11 : INativeEffectParameter
+ {
+ private EffectVariable nativeEffectVariable;
+
+ public EffectVariable NativeParameter
+ {
+ get
+ {
+ return this.nativeEffectVariable;
+ }
+ internal set
+ {
+ this.nativeEffectVariable = value;
+ }
+ }
+
+ public void SetValue(bool value)
+ {
+ nativeEffectVariable.AsScalar().Set(value);
+ }
+
+ public void SetValue(bool[] value)
+ {
+ nativeEffectVariable.AsScalar().Set(value);
+ }
+
+ public void SetValue(int value)
+ {
+ nativeEffectVariable.AsScalar().Set(value);
+ }
+
+ public void SetValue(int[] value)
+ {
+ nativeEffectVariable.AsScalar().Set(value);
+ }
+
+ public void SetValue(Matrix value)
+ {
+ SharpDX.Matrix m = new SharpDX.Matrix(value.M11, value.M12, value.M13, value.M14, value.M21, value.M22, value.M23, value.M24, value.M31, value.M32, value.M33, value.M34, value.M41, value.M42, value.M43, value.M44);
+ nativeEffectVariable.AsMatrix().SetMatrix(m);
+ }
+
+ public void SetValue(Matrix[] value)
+ {
+ int count = value.Length;
+ SharpDX.Matrix[] m = new SharpDX.Matrix[count];
+ Matrix anxMatrix;
+ for (int i = 0; i < count; i++)
+ {
+ anxMatrix = value[i];
+ m[i] = new SharpDX.Matrix(anxMatrix.M11, anxMatrix.M12, anxMatrix.M13, anxMatrix.M14,
+ anxMatrix.M21, anxMatrix.M22, anxMatrix.M23, anxMatrix.M24,
+ anxMatrix.M31, anxMatrix.M32, anxMatrix.M33, anxMatrix.M34,
+ anxMatrix.M41, anxMatrix.M42, anxMatrix.M43, anxMatrix.M44);
+ }
+
+ nativeEffectVariable.AsMatrix().SetMatrix(m);
+ }
+
+ public void SetValue(Quaternion value)
+ {
+ SharpDX.Vector4 q = new SharpDX.Vector4(value.X, value.Y, value.Z, value.W);
+ nativeEffectVariable.AsVector().Set(q);
+ }
+
+ public void SetValue(Quaternion[] value)
+ {
+ int count = value.Length;
+ SharpDX.Vector4[] q = new SharpDX.Vector4[count];
+ for (int i = 0; i < count; i++)
+ {
+ q[i] = new SharpDX.Vector4(value[i].X, value[i].Y, value[i].Z, value[i].W);
+ }
+ nativeEffectVariable.AsVector().Set(q);
+ }
+
+ public void SetValue(float value)
+ {
+ nativeEffectVariable.AsScalar().Set(value);
+ }
+
+ public void SetValue(float[] value)
+ {
+ nativeEffectVariable.AsScalar().Set(value);
+ }
+
+ public void SetValue(Vector2 value)
+ {
+ SharpDX.Vector2 v = new SharpDX.Vector2(value.X, value.Y);
+ nativeEffectVariable.AsVector().Set(v);
+ }
+
+ public void SetValue(Vector2[] value)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void SetValue(Vector3 value)
+ {
+ SharpDX.Vector3 v = new SharpDX.Vector3(value.X, value.Y, value.Z);
+ nativeEffectVariable.AsVector().Set(v);
+ }
+
+ public void SetValue(Vector3[] value)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void SetValue(Vector4 value)
+ {
+ SharpDX.Vector4 v = new SharpDX.Vector4(value.X, value.Y, value.Z, value.W);
+ nativeEffectVariable.AsVector().Set(v);
+ }
+
+ public void SetValue(Vector4[] value)
+ {
+ int count = value.Length;
+ SharpDX.Vector4[] q = new SharpDX.Vector4[count];
+ for (int i = 0; i < count; i++)
+ {
+ q[i] = new SharpDX.Vector4(value[i].X, value[i].Y, value[i].Z, value[i].W);
+ }
+ nativeEffectVariable.AsVector().Set(q);
+ }
+
+ public void SetValue(Texture value)
+ {
+ Texture2D_DX11 tex = value.NativeTexture as Texture2D_DX11;
+ nativeEffectVariable.AsShaderResource().SetResource(tex.NativeShaderResourceView);
+ }
+
+ public string Name
+ {
+ get
+ {
+ return nativeEffectVariable.Description.Name;
+ }
+ }
+ }
+}
diff --git a/RenderSystems/ANX.RenderSystem.Windows.DX11/EffectPass_DX11.cs b/RenderSystems/ANX.RenderSystem.Windows.DX11/EffectPass_DX11.cs
new file mode 100644
index 00000000..fef02819
--- /dev/null
+++ b/RenderSystems/ANX.RenderSystem.Windows.DX11/EffectPass_DX11.cs
@@ -0,0 +1,84 @@
+#region Using Statements
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using ANX.Framework.NonXNA;
+using SharpDX.Direct3D11;
+
+#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.RenderSystem.Windows.DX11
+{
+ public class EffectPass_DX11 : INativeEffectPass
+ {
+ private EffectPass nativePass;
+
+ public EffectPass NativePass
+ {
+ get
+ {
+ return this.nativePass;
+ }
+ internal set
+ {
+ this.nativePass = value;
+ }
+ }
+
+ public string Name
+ {
+ get
+ {
+ return nativePass.Description.Name;
+ }
+ }
+ }
+}
diff --git a/RenderSystems/ANX.RenderSystem.Windows.DX11/EffectTechnique_DX11.cs b/RenderSystems/ANX.RenderSystem.Windows.DX11/EffectTechnique_DX11.cs
new file mode 100644
index 00000000..65a8fd0f
--- /dev/null
+++ b/RenderSystems/ANX.RenderSystem.Windows.DX11/EffectTechnique_DX11.cs
@@ -0,0 +1,112 @@
+#region Using Statements
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using ANX.Framework.NonXNA;
+using SharpDX.Direct3D11;
+
+#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.RenderSystem.Windows.DX11
+{
+ public class EffectTechnique_DX11 : INativeEffectTechnique
+ {
+ private EffectTechnique nativeTechnique;
+ private ANX.Framework.Graphics.Effect parentEffect;
+
+ internal EffectTechnique_DX11(ANX.Framework.Graphics.Effect parentEffect)
+ {
+ if (parentEffect == null)
+ {
+ throw new ArgumentNullException("parentEffect");
+ }
+
+ this.parentEffect = parentEffect;
+ }
+
+ public EffectTechnique NativeTechnique
+ {
+ get
+ {
+ return this.nativeTechnique;
+ }
+ internal set
+ {
+ this.nativeTechnique = value;
+ }
+ }
+
+ public string Name
+ {
+ get
+ {
+ return nativeTechnique.Description.Name;
+ }
+ }
+
+
+ public IEnumerable Passes
+ {
+ get
+ {
+ for (int i = 0; i < nativeTechnique.Description.PassCount; i++)
+ {
+ EffectPass_DX11 passDx11 = new EffectPass_DX11();
+ passDx11.NativePass = nativeTechnique.GetPassByIndex(i);
+
+ ANX.Framework.Graphics.EffectPass pass = new ANX.Framework.Graphics.EffectPass(this.parentEffect);
+
+ yield return pass;
+ }
+ }
+ }
+ }
+}
diff --git a/RenderSystems/ANX.RenderSystem.Windows.DX11/Effect_DX11.cs b/RenderSystems/ANX.RenderSystem.Windows.DX11/Effect_DX11.cs
index b38cd071..932099b9 100644
--- a/RenderSystems/ANX.RenderSystem.Windows.DX11/Effect_DX11.cs
+++ b/RenderSystems/ANX.RenderSystem.Windows.DX11/Effect_DX11.cs
@@ -66,12 +66,18 @@ namespace ANX.RenderSystem.Windows.DX11
private ShaderBytecode vertexShaderByteCode;
private VertexShader vertexShader;
private PixelShader pixelShader;
-
+ private ANX.Framework.Graphics.Effect managedEffect;
private ShaderBytecode effectByteCode;
private SharpDX.Direct3D11.Effect nativeEffect;
- public Effect_DX11(GraphicsDevice device, Stream vertexShaderByteCode, Stream pixelShaderByteCode)
+ public Effect_DX11(GraphicsDevice device, ANX.Framework.Graphics.Effect managedEffect, Stream vertexShaderByteCode, Stream pixelShaderByteCode)
{
+ if (this.managedEffect == null)
+ {
+ throw new ArgumentNullException("managedEffect");
+ }
+ this.managedEffect = managedEffect;
+
if (vertexShaderByteCode.CanSeek)
{
vertexShaderByteCode.Seek(0, SeekOrigin.Begin);
@@ -87,14 +93,20 @@ namespace ANX.RenderSystem.Windows.DX11
this.pixelShader = new PixelShader((SharpDX.Direct3D11.Device)device.NativeDevice, this.pixelShaderByteCode);
}
- public Effect_DX11(GraphicsDevice device, Stream effectByteCode)
+ public Effect_DX11(GraphicsDevice device, ANX.Framework.Graphics.Effect managedEffect, Stream effectByteCode)
{
+ if (managedEffect == null)
+ {
+ throw new ArgumentNullException("managedEffect");
+ }
+ this.managedEffect = managedEffect;
+
if (effectByteCode.CanSeek)
{
effectByteCode.Seek(0, SeekOrigin.Begin);
}
this.effectByteCode = ShaderBytecode.FromStream(effectByteCode);
- this.nativeEffect = new SharpDX.Direct3D11.Effect(((GraphicsDeviceWindowsDX11)device.NativeDevice).NativeDevice, this.effectByteCode);
+ this.nativeEffect = new SharpDX.Direct3D11.Effect(((GraphicsDeviceWindowsDX11)device.NativeDevice).NativeDevice.Device, this.effectByteCode);
}
public void Apply(GraphicsDevice graphicsDevice)
@@ -209,20 +221,17 @@ namespace ANX.RenderSystem.Windows.DX11
public IEnumerable Techniques
{
- get
+ get
{
- throw new NotImplementedException();
+ for (int i = 0; i < nativeEffect.Description.TechniqueCount; i++)
+ {
+ EffectTechnique_DX11 teqDx11 = new EffectTechnique_DX11(this.managedEffect);
+ teqDx11.NativeTechnique = nativeEffect.GetTechniqueByIndex(i);
- //for (int i = 0; i < nativeEffect.Description.TechniqueCount; i++)
- //{
- // EffectTechnique_DX11 teqDx11 = new EffectTechnique_DX11();
- // teqDx10.NativeTechnique = nativeEffect.GetTechniqueByIndex(i);
+ ANX.Framework.Graphics.EffectTechnique teq = new ANX.Framework.Graphics.EffectTechnique(this.managedEffect, teqDx11);
- // ANX.Framework.Graphics.EffectTechnique teq = new ANX.Framework.Graphics.EffectTechnique();
- // teq.NativeTechnique = teqDx11;
-
- // yield return teq;
- //}
+ yield return teq;
+ }
}
}
@@ -230,18 +239,16 @@ namespace ANX.RenderSystem.Windows.DX11
{
get
{
- throw new NotImplementedException();
+ for (int i = 0; i < nativeEffect.Description.GlobalVariableCount; i++)
+ {
+ EffectParameter_DX11 parDx11 = new EffectParameter_DX11();
+ parDx11.NativeParameter = nativeEffect.GetVariableByIndex(i);
- //for (int i = 0; i < nativeEffect.Description.GlobalVariableCount; i++)
- //{
- // EffectParameter_DX10 parDx10 = new EffectParameter_DX10();
- // parDx10.NativeParameter = nativeEffect.GetVariableByIndex(i);
+ ANX.Framework.Graphics.EffectParameter par = new ANX.Framework.Graphics.EffectParameter();
+ par.NativeParameter = parDx11;
- // Graphics.EffectParameter par = new Graphics.EffectParameter();
- // par.NativeParameter = parDx10;
-
- // yield return par;
- //}
+ yield return par;
+ }
}
}
}
diff --git a/RenderSystems/ANX.RenderSystem.Windows.DX11/FormatConverter.cs b/RenderSystems/ANX.RenderSystem.Windows.DX11/FormatConverter.cs
new file mode 100644
index 00000000..007f10f4
--- /dev/null
+++ b/RenderSystems/ANX.RenderSystem.Windows.DX11/FormatConverter.cs
@@ -0,0 +1,387 @@
+#region Using Statements
+using System;
+using ANX.Framework.Graphics;
+using SharpDX.Direct3D11;
+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.RenderSystem.Windows.DX11
+{
+ internal class FormatConverter
+ {
+
+ public static int FormatSize(SurfaceFormat format)
+ {
+ switch (format)
+ {
+ case SurfaceFormat.Vector4:
+ return 16;
+ //case SurfaceFormat.Vector3:
+ // return 12;
+ case SurfaceFormat.Vector2:
+ return 8;
+ case SurfaceFormat.Single:
+ case SurfaceFormat.Color:
+ //case SurfaceFormat.RGBA1010102:
+ //case SurfaceFormat.RG32:
+ return 4;
+ //case SurfaceFormat.BGR565:
+ //case SurfaceFormat.BGRA5551:
+ // return 2;
+ case SurfaceFormat.Dxt1:
+ case SurfaceFormat.Dxt3:
+ case SurfaceFormat.Dxt5:
+ case SurfaceFormat.Alpha8:
+ return 1;
+ default:
+ throw new ArgumentException("Invalid format");
+ }
+ }
+
+ 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 Format Translate(ANX.Framework.Graphics.DepthFormat depthFormat)
+ {
+ switch (depthFormat)
+ {
+ case DepthFormat.Depth16:
+ return Format.D16_UNorm;
+ case DepthFormat.Depth24:
+ //TODO: no DirectX10 24Bit depth format???
+ case DepthFormat.Depth24Stencil8:
+ return Format.D24_UNorm_S8_UInt;
+ case DepthFormat.None:
+ return Format.Unknown;
+ }
+
+ throw new Exception("can't translate DepthFormat: " + depthFormat.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.Direct3D11.TextureAddressMode Translate(ANX.Framework.Graphics.TextureAddressMode addressMode)
+ {
+ switch (addressMode)
+ {
+ case ANX.Framework.Graphics.TextureAddressMode.Clamp:
+ return SharpDX.Direct3D11.TextureAddressMode.Clamp;
+ case ANX.Framework.Graphics.TextureAddressMode.Mirror:
+ return SharpDX.Direct3D11.TextureAddressMode.Mirror;
+ case ANX.Framework.Graphics.TextureAddressMode.Wrap:
+ return SharpDX.Direct3D11.TextureAddressMode.Wrap;
+ }
+
+ return SharpDX.Direct3D11.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)
+ {
+ ColorWriteMaskFlags mask = 0;
+
+ if ((colorWriteChannels & ColorWriteChannels.All) == ColorWriteChannels.All)
+ {
+ mask |= ColorWriteMaskFlags.All;
+ }
+
+ if ((colorWriteChannels & ColorWriteChannels.Alpha) == ColorWriteChannels.Alpha)
+ {
+ mask |= ColorWriteMaskFlags.Alpha;
+ }
+
+ if ((colorWriteChannels & ColorWriteChannels.Blue) == ColorWriteChannels.Blue)
+ {
+ mask |= ColorWriteMaskFlags.Blue;
+ }
+
+ if ((colorWriteChannels & ColorWriteChannels.Green) == ColorWriteChannels.Green)
+ {
+ mask |= ColorWriteMaskFlags.Green;
+ }
+
+ if ((colorWriteChannels & ColorWriteChannels.Red) == ColorWriteChannels.Red)
+ {
+ mask |= ColorWriteMaskFlags.Red;
+ }
+
+ return mask;
+ }
+
+ public static SharpDX.Direct3D11.StencilOperation Translate(ANX.Framework.Graphics.StencilOperation stencilOperation)
+ {
+ switch (stencilOperation)
+ {
+ case ANX.Framework.Graphics.StencilOperation.Decrement:
+ return SharpDX.Direct3D11.StencilOperation.Decrement;
+ case ANX.Framework.Graphics.StencilOperation.DecrementSaturation:
+ return SharpDX.Direct3D11.StencilOperation.DecrementAndClamp;
+ case ANX.Framework.Graphics.StencilOperation.Increment:
+ return SharpDX.Direct3D11.StencilOperation.Increment;
+ case ANX.Framework.Graphics.StencilOperation.IncrementSaturation:
+ return SharpDX.Direct3D11.StencilOperation.IncrementAndClamp;
+ case ANX.Framework.Graphics.StencilOperation.Invert:
+ return SharpDX.Direct3D11.StencilOperation.Invert;
+ case ANX.Framework.Graphics.StencilOperation.Keep:
+ return SharpDX.Direct3D11.StencilOperation.Keep;
+ case ANX.Framework.Graphics.StencilOperation.Replace:
+ return SharpDX.Direct3D11.StencilOperation.Replace;
+ case ANX.Framework.Graphics.StencilOperation.Zero:
+ return SharpDX.Direct3D11.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.Direct3D11.CullMode Translate(ANX.Framework.Graphics.CullMode cullMode)
+ {
+ if (cullMode == ANX.Framework.Graphics.CullMode.CullClockwiseFace)
+ {
+ return SharpDX.Direct3D11.CullMode.Front;
+ }
+ else if (cullMode == ANX.Framework.Graphics.CullMode.CullCounterClockwiseFace)
+ {
+ return SharpDX.Direct3D11.CullMode.Back;
+ }
+ else
+ {
+ return SharpDX.Direct3D11.CullMode.None;
+ }
+ }
+
+ public static SharpDX.Direct3D11.FillMode Translate(ANX.Framework.Graphics.FillMode fillMode)
+ {
+ if (fillMode == ANX.Framework.Graphics.FillMode.WireFrame)
+ {
+ return SharpDX.Direct3D11.FillMode.Wireframe;
+ }
+ else
+ {
+ return SharpDX.Direct3D11.FillMode.Solid;
+ }
+ }
+
+ }
+}
diff --git a/RenderSystems/ANX.RenderSystem.Windows.DX11/GraphicsDeviceWindowsDX11.cs b/RenderSystems/ANX.RenderSystem.Windows.DX11/GraphicsDeviceWindowsDX11.cs
index 03860877..e855e881 100644
--- a/RenderSystems/ANX.RenderSystem.Windows.DX11/GraphicsDeviceWindowsDX11.cs
+++ b/RenderSystems/ANX.RenderSystem.Windows.DX11/GraphicsDeviceWindowsDX11.cs
@@ -6,11 +6,10 @@ using System.Text;
using SharpDX;
using SharpDX.DXGI;
using SharpDX.Direct3D;
-using ANX.Framework.NonXNA;
-using ANX.Framework.Graphics;
-using SharpDX.Direct3D11;
-using ANX.Framework;
using SharpDX.D3DCompiler;
+using ANX.Framework.NonXNA;
+using SharpDX.Direct3D11;
+using ANX.Framework.Graphics;
#endregion // Using Statements
@@ -63,27 +62,67 @@ using SharpDX.D3DCompiler;
using Device = SharpDX.Direct3D11.Device;
using Buffer = SharpDX.Direct3D11.Buffer;
+using System.Runtime.InteropServices;
+using ANX.Framework;
namespace ANX.RenderSystem.Windows.DX11
{
public class GraphicsDeviceWindowsDX11 : INativeGraphicsDevice
- {
- private Device device;
- private SwapChain swapChain;
+ {
+ #region Constants
+ private const float ColorMultiplier = 1f / 255f;
+ #endregion
+
+ #region Interop
+ [DllImport("user32.dll")]
+ private static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int width, int height, uint uFlags);
+
+ [DllImport("user32.dll")]
+ [return: MarshalAs(UnmanagedType.Bool)]
+ static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);
+
+ [DllImport("user32.dll")]
+ [return: MarshalAs(UnmanagedType.Bool)]
+ static extern bool GetClientRect(IntPtr hWnd, out RECT lpRect);
+
+ [StructLayout(LayoutKind.Sequential)]
+ public struct RECT
+ {
+ public int Left; // x position of upper-left corner
+ public int Top; // y position of upper-left corner
+ public int Right; // x position of lower-right corner
+ public int Bottom; // y position of lower-right corner
+ }
+
+ #endregion
+
+ #region Private Members
+ private DeviceContext deviceContext;
+ private SwapChain swapChain;
private RenderTargetView renderView;
+ private RenderTargetView renderTargetView;
+ private DepthStencilView depthStencilView;
+ private SharpDX.Direct3D11.Texture2D depthStencilBuffer;
private SharpDX.Direct3D11.Texture2D backBuffer;
internal Effect_DX11 currentEffect;
private VertexBuffer currentVertexBuffer;
private IndexBuffer currentIndexBuffer;
private SharpDX.Direct3D11.Viewport currentViewport;
+ private uint lastClearColor;
+ private SharpDX.Color4 clearColor;
+ private bool vSyncEnabled;
+
+ #endregion // Private Members
public GraphicsDeviceWindowsDX11(PresentationParameters presentationParameters)
{
+ this.vSyncEnabled = true;
+
// SwapChain description
var desc = new SwapChainDescription()
{
BufferCount = 1,
- ModeDescription = new ModeDescription(presentationParameters.BackBufferWidth, presentationParameters.BackBufferHeight, new Rational(60, 1), Format.R8G8B8A8_UNorm),
+ ModeDescription = new ModeDescription(presentationParameters.BackBufferWidth, presentationParameters.BackBufferHeight, new Rational(60, 1), FormatConverter.Translate(presentationParameters.BackBufferFormat)),
IsWindowed = true,
OutputHandle = presentationParameters.DeviceWindowHandle,
SampleDescription = new SampleDescription(1, 0),
@@ -92,40 +131,222 @@ namespace ANX.RenderSystem.Windows.DX11
};
// Create Device and SwapChain
+ Device dxDevice;
#if DIRECTX_DEBUG_LAYER
// http://msdn.microsoft.com/en-us/library/windows/desktop/bb205068(v=vs.85).aspx
- Device.CreateWithSwapChain(SharpDX.Direct3D10.DriverType.Hardware, DeviceCreationFlags.Debug, desc, out device, out swapChain);
+ Device.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.Debug, desc, out dxDevice, out swapChain);
#else
- Device.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.None, desc, out device, out swapChain);
+ Device.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.None, desc, out dxDevice, out swapChain);
#endif
+ this.deviceContext = new DeviceContext(dxDevice);
// Ignore all windows events
Factory factory = swapChain.GetParent();
factory.MakeWindowAssociation(presentationParameters.DeviceWindowHandle, WindowAssociationFlags.IgnoreAll);
+ ResizeRenderWindow(presentationParameters);
+
// New RenderTargetView from the backbuffer
backBuffer = SharpDX.Direct3D11.Texture2D.FromSwapChain(swapChain, 0);
- renderView = new RenderTargetView(device, backBuffer);
+ renderView = new RenderTargetView(deviceContext.Device, backBuffer);
currentViewport = new SharpDX.Direct3D11.Viewport(0, 0, presentationParameters.BackBufferWidth, presentationParameters.BackBufferHeight);
+
+ //
+ // create the depth stencil buffer
+ //
+ Format depthFormat = FormatConverter.Translate(presentationParameters.DepthStencilFormat);
+ if (depthFormat != Format.Unknown)
+ {
+ CreateDepthStencilBuffer(depthFormat);
+ }
}
+ private void CreateDepthStencilBuffer(Format depthFormat)
+ {
+ if (this.depthStencilBuffer != null &&
+ this.depthStencilBuffer.Description.Format == depthFormat &&
+ this.depthStencilBuffer.Description.Width == this.backBuffer.Description.Width &&
+ this.depthStencilBuffer.Description.Height == this.backBuffer.Description.Height)
+ {
+ // a DepthStencilBuffer with the right format and the right size already exists -> nothing to do
+ return;
+ }
+
+ if (this.depthStencilView != null)
+ {
+ this.depthStencilView.Dispose();
+ this.depthStencilView = null;
+ }
+
+ if (this.depthStencilBuffer != null)
+ {
+ this.depthStencilBuffer.Dispose();
+ this.depthStencilBuffer = null;
+ }
+
+ if (depthFormat == Format.Unknown)
+ {
+ // no DepthStencilBuffer to create... Old one was disposed already...
+ return;
+ }
+
+ DepthStencilViewDescription depthStencilViewDesc = new DepthStencilViewDescription()
+ {
+ Format = depthFormat,
+ };
+
+ Texture2DDescription depthStencilTextureDesc = new Texture2DDescription()
+ {
+ Width = this.backBuffer.Description.Width,
+ Height = this.backBuffer.Description.Height,
+ MipLevels = 1,
+ ArraySize = 1,
+ Format = depthFormat,
+ SampleDescription = new SampleDescription(1, 0),
+ Usage = ResourceUsage.Default,
+ BindFlags = BindFlags.DepthStencil,
+ CpuAccessFlags = CpuAccessFlags.None,
+ OptionFlags = ResourceOptionFlags.None
+ };
+ this.depthStencilBuffer = new SharpDX.Direct3D11.Texture2D(deviceContext.Device, depthStencilTextureDesc);
+
+ this.depthStencilView = new DepthStencilView(deviceContext.Device, this.depthStencilBuffer);
+
+ Clear(ClearOptions.DepthBuffer | ClearOptions.Stencil, ANX.Framework.Vector4.Zero, 1.0f, 0); //TODO: this workaround is working but maybe not the best solution to issue #472
+ }
+
+ #region Clear
public void Clear(ref Color color)
{
- throw new NotImplementedException();
- //device.ClearRenderTargetView(renderView, new SharpDX.Color4(color.A / 255f, color.R / 255f, color.G / 255f, color.B / 255f));
+ uint newClearColor = color.PackedValue;
+ if (lastClearColor != newClearColor)
+ {
+ lastClearColor = newClearColor;
+ clearColor.Red = color.R * ColorMultiplier;
+ clearColor.Green = color.G * ColorMultiplier;
+ clearColor.Blue = color.B * ColorMultiplier;
+ clearColor.Alpha = color.A * ColorMultiplier;
+ }
+
+ this.deviceContext.ClearRenderTargetView(this.renderTargetView != null ? this.renderTargetView : this.renderView, this.clearColor);
}
+ public void Clear(ClearOptions options, ANX.Framework.Vector4 color, float depth, int stencil)
+ {
+ if ((options & ClearOptions.Target) == ClearOptions.Target)
+ {
+ // Clear a RenderTarget (or BackBuffer)
+
+ this.clearColor.Red = color.X;
+ this.clearColor.Green = color.Y;
+ this.clearColor.Blue = color.Z;
+ this.clearColor.Alpha = color.W;
+ this.lastClearColor = 0;
+
+ this.deviceContext.ClearRenderTargetView(this.renderTargetView != null ? this.renderTargetView : this.renderView, this.clearColor);
+ }
+
+ if (this.depthStencilView != null)
+ {
+ if ((options | ClearOptions.Stencil | ClearOptions.DepthBuffer) == options)
+ {
+ // Clear the stencil buffer
+ deviceContext.ClearDepthStencilView(this.depthStencilView, DepthStencilClearFlags.Depth | DepthStencilClearFlags.Stencil, depth, (byte)stencil);
+ }
+ else if ((options | ClearOptions.Stencil) == options)
+ {
+ deviceContext.ClearDepthStencilView(this.depthStencilView, DepthStencilClearFlags.Stencil, depth, (byte)stencil);
+ }
+ else
+ {
+ deviceContext.ClearDepthStencilView(this.depthStencilView, DepthStencilClearFlags.Depth, depth, (byte)stencil);
+ }
+ }
+ }
+
+ #endregion
+
+ #region Present
public void Present()
{
- swapChain.Present(0, PresentFlags.None);
+ swapChain.Present(this.vSyncEnabled ? 1 : 0, PresentFlags.None);
}
- internal Device NativeDevice
+ #endregion // Present
+
+ #region DrawPrimitives & DrawIndexedPrimitives
+ public void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices, int startIndex, int primitiveCount)
+ {
+ SharpDX.Direct3D11.EffectPass pass; SharpDX.Direct3D11.EffectTechnique technique; ShaderBytecode passSignature;
+ SetupEffectForDraw(out pass, out technique, out passSignature);
+
+ SetupInputLayout(passSignature);
+
+ // Prepare All the stages
+ deviceContext.InputAssembler.PrimitiveTopology = FormatConverter.Translate(primitiveType);
+ deviceContext.Rasterizer.SetViewports(currentViewport);
+
+ deviceContext.OutputMerger.SetTargets(this.depthStencilView, this.renderView);
+
+ for (int i = 0; i < technique.Description.PassCount; ++i)
+ {
+ pass.Apply(deviceContext);
+ deviceContext.DrawIndexed(CalculateVertexCount(primitiveType, primitiveCount), startIndex, baseVertex);
+ }
+ }
+
+ public void DrawPrimitives(PrimitiveType primitiveType, int vertexOffset, int primitiveCount)
+ {
+ SharpDX.Direct3D11.EffectPass pass; SharpDX.Direct3D11.EffectTechnique technique; ShaderBytecode passSignature;
+ SetupEffectForDraw(out pass, out technique, out passSignature);
+
+ SetupInputLayout(passSignature);
+
+ // Prepare All the stages
+ deviceContext.InputAssembler.PrimitiveTopology = FormatConverter.Translate(primitiveType);
+ deviceContext.Rasterizer.SetViewports(currentViewport);
+
+ deviceContext.OutputMerger.SetTargets(this.depthStencilView, this.renderView);
+
+ for (int i = 0; i < technique.Description.PassCount; ++i)
+ {
+ pass.Apply(deviceContext);
+ deviceContext.Draw(primitiveCount, vertexOffset);
+ }
+ }
+
+ #endregion // DrawPrimitives & DrawIndexedPrimitives
+
+ #region DrawInstancedPrimitives
+ public void DrawInstancedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices, int startIndex, int primitiveCount, int instanceCount)
+ {
+ throw new NotImplementedException();
+ }
+
+ #endregion // DrawInstancedPrimitives
+
+ #region DrawUserIndexedPrimitives
+ public void DrawUserIndexedPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, Array indexData, int indexOffset, int primitiveCount, VertexDeclaration vertexDeclaration, IndexElementSize indexFormat) where T : struct, IVertexType
+ {
+ throw new NotImplementedException();
+ }
+
+ #endregion // DrawUserIndexedPrimitives
+
+ #region DrawUserPrimitives
+ public void DrawUserPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int primitiveCount, VertexDeclaration vertexDeclaration) where T : struct, IVertexType
+ {
+ throw new NotImplementedException();
+ }
+
+ #endregion // DrawUserPrimitives
+
+ internal DeviceContext NativeDevice
{
get
{
- return this.device;
+ return this.deviceContext;
}
}
@@ -147,11 +368,9 @@ namespace ANX.RenderSystem.Windows.DX11
// get the VertexDeclaration from current VertexBuffer to create input layout for the input assembler
//TODO: check for null and throw exception
VertexDeclaration vertexDeclaration = currentVertexBuffer.VertexDeclaration;
- var layout = CreateInputLayout(device, passSignature, vertexDeclaration);
+ var layout = CreateInputLayout(deviceContext.Device, passSignature, vertexDeclaration);
- throw new NotImplementedException();
-
- //device.InputAssembler.InputLayout = layout;
+ deviceContext.InputAssembler.InputLayout = layout;
}
private int CalculateVertexCount(PrimitiveType type, int primitiveCount)
@@ -178,49 +397,6 @@ namespace ANX.RenderSystem.Windows.DX11
}
}
- public void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices, int startIndex, int primitiveCount)
- {
- SharpDX.Direct3D11.EffectPass pass; SharpDX.Direct3D11.EffectTechnique technique; ShaderBytecode passSignature;
- SetupEffectForDraw(out pass, out technique, out passSignature);
-
- SetupInputLayout(passSignature);
-
- throw new NotImplementedException();
-
- // Prepare All the stages
- //device.InputAssembler.PrimitiveTopology = Translate(primitiveType);
- //device.Rasterizer.SetViewports(currentViewport);
-
- //device.OutputMerger.SetTargets(this.renderView);
-
- //for (int i = 0; i < technique.Description.PassCount; ++i)
- //{
- // pass.Apply();
- // device.DrawIndexed(CalculateVertexCount(primitiveType, primitiveCount), startIndex, baseVertex);
- //}
- }
-
- public void DrawPrimitives(PrimitiveType primitiveType, int vertexOffset, int primitiveCount)
- {
- SharpDX.Direct3D11.EffectPass pass; SharpDX.Direct3D11.EffectTechnique technique; ShaderBytecode passSignature;
- SetupEffectForDraw(out pass, out technique, out passSignature);
-
- SetupInputLayout(passSignature);
-
- throw new NotImplementedException();
-
- // Prepare All the stages
- //device.InputAssembler.PrimitiveTopology = Translate(primitiveType);
- //device.Rasterizer.SetViewports(currentViewport);
- //device.OutputMerger.SetTargets(this.renderView);
-
- //for (int i = 0; i < technique.Description.PassCount; ++i)
- //{
- // pass.Apply();
- // device.Draw(primitiveCount, vertexOffset);
- //}
- }
-
public void SetIndexBuffer(IndexBuffer indexBuffer)
{
if (indexBuffer == null)
@@ -230,23 +406,44 @@ namespace ANX.RenderSystem.Windows.DX11
this.currentIndexBuffer = indexBuffer;
- throw new NotImplementedException();
+ IndexBuffer_DX11 nativeIndexBuffer = indexBuffer.NativeIndexBuffer as IndexBuffer_DX11;
- //IndexBuffer_DX11 nativeIndexBuffer = indexBuffer.NativeIndexBuffer as IndexBuffer_DX11;
-
- //if (nativeIndexBuffer != null)
- //{
- // device.InputAssembler.SetIndexBuffer(nativeIndexBuffer.NativeBuffer, Translate(indexBuffer.IndexElementSize), 0);
- //}
- //else
- //{
- // throw new Exception("couldn't fetch native DirectX11.1 IndexBuffer");
- //}
+ if (nativeIndexBuffer != null)
+ {
+ deviceContext.InputAssembler.SetIndexBuffer(nativeIndexBuffer.NativeBuffer, FormatConverter.Translate(indexBuffer.IndexElementSize), 0);
+ }
+ else
+ {
+ throw new Exception("couldn't fetch native DirectX10 IndexBuffer");
+ }
}
public void SetVertexBuffers(ANX.Framework.Graphics.VertexBufferBinding[] vertexBuffers)
{
- throw new NotImplementedException();
+ if (vertexBuffers == null)
+ {
+ throw new ArgumentNullException("vertexBuffers");
+ }
+
+ this.currentVertexBuffer = vertexBuffers[0].VertexBuffer; //TODO: hmmmmm, not nice :-)
+
+ SharpDX.Direct3D11.VertexBufferBinding[] nativeVertexBufferBindings = new SharpDX.Direct3D11.VertexBufferBinding[vertexBuffers.Length];
+ for (int i = 0; i < vertexBuffers.Length; i++)
+ {
+ ANX.Framework.Graphics.VertexBufferBinding anxVertexBufferBinding = vertexBuffers[i];
+ VertexBuffer_DX11 nativeVertexBuffer = anxVertexBufferBinding.VertexBuffer.NativeVertexBuffer as VertexBuffer_DX11;
+
+ if (nativeVertexBuffer != null)
+ {
+ nativeVertexBufferBindings[i] = new SharpDX.Direct3D11.VertexBufferBinding(nativeVertexBuffer.NativeBuffer, anxVertexBufferBinding.VertexBuffer.VertexDeclaration.VertexStride, anxVertexBufferBinding.VertexOffset);
+ }
+ else
+ {
+ throw new Exception("couldn't fetch native DirectX10 VertexBuffer");
+ }
+ }
+
+ deviceContext.InputAssembler.SetVertexBuffers(0, nativeVertexBufferBindings);
}
public void SetViewport(ANX.Framework.Graphics.Viewport viewport)
@@ -254,126 +451,6 @@ namespace ANX.RenderSystem.Windows.DX11
this.currentViewport = new SharpDX.Direct3D11.Viewport(viewport.X, viewport.Y, viewport.Width, viewport.Height, viewport.MinDepth, viewport.MaxDepth);
}
- public void ApplyStateObject(ANX.Framework.Graphics.BlendState blendState)
- {
- throw new NotImplementedException();
-
- //BlendStateDescription description = new BlendStateDescription();
- //description.AlphaBlendOperation = Translate(blendState.AlphaBlendFunction);
- //description.BlendOperation = Translate(blendState.ColorBlendFunction);
- //description.DestinationAlphaBlend = Translate(blendState.AlphaDestinationBlend);
- //description.DestinationBlend = Translate(blendState.ColorDestinationBlend);
-
- //for (int i = 0; i < 4; i++)
- //{
- // description.IsBlendEnabled[i] = true;
- //}
-
- //description.RenderTargetWriteMask[0] = Translate(blendState.ColorWriteChannels);
- //description.RenderTargetWriteMask[1] = Translate(blendState.ColorWriteChannels1);
- //description.RenderTargetWriteMask[2] = Translate(blendState.ColorWriteChannels2);
- //description.RenderTargetWriteMask[3] = Translate(blendState.ColorWriteChannels3);
-
- //description.SourceAlphaBlend = Translate(blendState.AlphaSourceBlend);
- //description.SourceBlend = Translate(blendState.ColorSourceBlend);
-
- //SharpDX.Direct3D11.BlendState nativeBlendState = new SharpDX.Direct3D11.BlendState(device, description);
-
- //Vector4 tempVector = blendState.BlendFactor.ToVector4();
- //SharpDX.Color4 blendFactor = new Color4(tempVector.X, tempVector.Y, tempVector.Z, tempVector.W);
- //device.OutputMerger.SetBlendState(nativeBlendState, blendFactor, blendState.MultiSampleMask);
- }
-
- public void ApplyStateObject(ANX.Framework.Graphics.RasterizerState rasterizerState)
- {
- RasterizerStateDescription description = new RasterizerStateDescription();
- description.CullMode = Translate(rasterizerState.CullMode);
- description.DepthBias = (int)rasterizerState.DepthBias; //TODO: this looks wrong!!!
- description.IsScissorEnabled = rasterizerState.ScissorTestEnable;
- description.SlopeScaledDepthBias = rasterizerState.SlopeScaleDepthBias;
- description.IsMultisampleEnabled = rasterizerState.MultiSampleAntiAlias;
- description.FillMode = Translate(rasterizerState.FillMode);
-
- description.IsAntialiasedLineEnabled = false; //TODO: this should be ok
-
- SharpDX.Direct3D11.RasterizerState nativeRasterizerState = new SharpDX.Direct3D11.RasterizerState(device, description);
-
- //device.Rasterizer.State = nativeRasterizerState;
- throw new NotImplementedException();
- }
-
- public void ApplyStateObject(ANX.Framework.Graphics.DepthStencilState depthStencilState)
- {
- DepthStencilStateDescription description = new DepthStencilStateDescription();
- description.IsStencilEnabled = depthStencilState.StencilEnable;
- description.IsDepthEnabled = depthStencilState.DepthBufferEnable;
- description.DepthComparison = Translate(depthStencilState.DepthBufferFunction);
-
- //TODO: more to implement
-
- SharpDX.Direct3D11.DepthStencilState nativeDepthStencilState = new SharpDX.Direct3D11.DepthStencilState(device, description);
- //device.OutputMerger.SetDepthStencilState(nativeDepthStencilState, depthStencilState.ReferenceStencil);
- throw new NotImplementedException();
- }
-
- public void ApplyStateObject(int slot, ANX.Framework.Graphics.SamplerState samplerState)
- {
- SamplerStateDescription description = new SamplerStateDescription();
- description.AddressU = Translate(samplerState.AddressU);
- description.AddressV = Translate(samplerState.AddressV);
- description.AddressW = Translate(samplerState.AddressW);
- description.Filter = Translate(samplerState.Filter);
- description.MaximumAnisotropy = samplerState.MaxAnisotropy;
- description.MaximumLod = samplerState.MaxMipLevel; //TODO: is this correct?
- description.MipLodBias = samplerState.MipMapLevelOfDetailBias;
-
- SharpDX.Direct3D11.SamplerState nativeSamplerState = new SharpDX.Direct3D11.SamplerState(device, description);
- //device.PixelShader.SetSampler(slot, nativeSamplerState);
- throw new NotImplementedException();
- }
-
- 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.Direct3D11.TextureAddressMode Translate(ANX.Framework.Graphics.TextureAddressMode addressMode)
- {
- switch (addressMode)
- {
- case ANX.Framework.Graphics.TextureAddressMode.Clamp:
- return SharpDX.Direct3D11.TextureAddressMode.Clamp;
- case ANX.Framework.Graphics.TextureAddressMode.Mirror:
- return SharpDX.Direct3D11.TextureAddressMode.Mirror;
- case ANX.Framework.Graphics.TextureAddressMode.Wrap:
- return SharpDX.Direct3D11.TextureAddressMode.Wrap;
- }
-
- return SharpDX.Direct3D11.TextureAddressMode.Clamp;
- }
-
///
/// 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.
@@ -395,7 +472,7 @@ namespace ANX.RenderSystem.Windows.DX11
private InputElement CreateInputElementFromVertexElement(VertexElement vertexElement)
{
- string elementName = Translate(vertexElement.VertexElementUsage);
+ string elementName = FormatConverter.Translate(vertexElement.VertexElementUsage);
Format elementFormat;
switch (vertexElement.VertexElementFormat)
@@ -419,182 +496,46 @@ namespace ANX.RenderSystem.Windows.DX11
return new InputElement(elementName, vertexElement.UsageIndex, elementFormat, vertexElement.Offset, 0);
}
- private PrimitiveTopology Translate(PrimitiveType primitiveType)
+ public void SetRenderTargets(params RenderTargetBinding[] renderTargets)
{
- switch (primitiveType)
+ if (renderTargets == null)
{
- 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());
- }
- }
+ // reset the RenderTarget to backbuffer
+ if (renderTargetView != null)
+ {
+ renderTargetView.Dispose();
+ renderTargetView = null;
+ }
- 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";
+ deviceContext.OutputMerger.SetRenderTargets(1, new RenderTargetView[] { this.renderView }, this.depthStencilView);
+ deviceContext.OutputMerger.SetTargets(this.depthStencilView, this.renderView);
}
else
{
- return usage.ToString().ToUpperInvariant();
+ if (renderTargets.Length == 1)
+ {
+ RenderTarget2D renderTarget = renderTargets[0].RenderTarget as RenderTarget2D;
+ RenderTarget2D_DX11 nativeRenderTarget = renderTarget.NativeRenderTarget as RenderTarget2D_DX11;
+ if (renderTarget != null)
+ {
+ if (renderTargetView != null)
+ {
+ renderTargetView.Dispose();
+ renderTargetView = null;
+ }
+ this.renderTargetView = new RenderTargetView(deviceContext.Device, ((Texture2D_DX11)nativeRenderTarget).NativeShaderResourceView.Resource);
+ DepthStencilView depthStencilView = null;
+ deviceContext.OutputMerger.SetRenderTargets(1, new RenderTargetView[] { this.renderTargetView }, depthStencilView);
+ }
+ }
+ else
+ {
+ throw new NotImplementedException("handling of multiple RenderTargets are not yet implemented");
+ }
}
}
- 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;
- }
-
- return 0;
- }
-
- 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;
- }
-
- return BlendOption.One;
- }
-
- 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;
- }
-
- return BlendOperation.Add;
- }
-
- private SharpDX.Direct3D11.FillMode Translate(ANX.Framework.Graphics.FillMode fillMode)
- {
- if (fillMode == ANX.Framework.Graphics.FillMode.WireFrame)
- {
- return SharpDX.Direct3D11.FillMode.Wireframe;
- }
- else
- {
- return SharpDX.Direct3D11.FillMode.Solid;
- }
- }
-
- private SharpDX.Direct3D11.CullMode Translate(ANX.Framework.Graphics.CullMode cullMode)
- {
- if (cullMode == ANX.Framework.Graphics.CullMode.CullClockwiseFace)
- {
- return SharpDX.Direct3D11.CullMode.Front;
- }
- else if (cullMode == ANX.Framework.Graphics.CullMode.CullCounterClockwiseFace)
- {
- return SharpDX.Direct3D11.CullMode.Back;
- }
- else
- {
- return SharpDX.Direct3D11.CullMode.None;
- }
- }
-
- private Comparison Translate(CompareFunction compareFunction)
- {
- switch (compareFunction)
- {
- case CompareFunction.Always:
- return Comparison.Always;
- case CompareFunction.Equal:
- return Comparison.Equal;
- case CompareFunction.Greater:
- return Comparison.Greater;
- case CompareFunction.GreaterEqual:
- return Comparison.GreaterEqual;
- case CompareFunction.Less:
- return Comparison.Less;
- case CompareFunction.LessEqual:
- return Comparison.LessEqual;
- case CompareFunction.Never:
- return Comparison.Never;
- case CompareFunction.NotEqual:
- return Comparison.NotEqual;
- }
-
- return Comparison.Always;
- }
-
- public void SetRenderTargets(params Framework.Graphics.RenderTargetBinding[] renderTargets)
- {
- throw new NotImplementedException();
- }
-
-
- public void GetBackBufferData(Framework.Rectangle? rect, T[] data, int startIndex, int elementCount) where T : struct
+ public void GetBackBufferData(ANX.Framework.Rectangle? rect, T[] data, int startIndex, int elementCount) where T : struct
{
throw new NotImplementedException();
}
@@ -609,49 +550,91 @@ namespace ANX.RenderSystem.Windows.DX11
throw new NotImplementedException();
}
-
- public void Clear(Framework.Graphics.ClearOptions options, Framework.Vector4 color, float depth, int stencil)
+ public void ResizeBuffers(PresentationParameters presentationParameters)
{
- throw new NotImplementedException();
+ if (swapChain != null)
+ {
+ renderView.Dispose();
+ backBuffer.Dispose();
+
+ //TODO: handle format
+
+ swapChain.ResizeBuffers(swapChain.Description.BufferCount, presentationParameters.BackBufferWidth, presentationParameters.BackBufferHeight, Format.R8G8B8A8_UNorm, (int)swapChain.Description.Flags);
+
+ backBuffer = SharpDX.Direct3D11.Texture2D.FromSwapChain(swapChain, 0);
+ renderView = new RenderTargetView(deviceContext.Device, backBuffer);
+
+ currentViewport = new SharpDX.Direct3D11.Viewport(0, 0, presentationParameters.BackBufferWidth, presentationParameters.BackBufferHeight);
+
+ //
+ // create the depth stencil buffer
+ //
+ Format depthFormat = FormatConverter.Translate(presentationParameters.DepthStencilFormat);
+ if (depthFormat != Format.Unknown)
+ {
+ CreateDepthStencilBuffer(depthFormat);
+ }
+ }
+
+ ResizeRenderWindow(presentationParameters);
}
- public void DrawInstancedPrimitives(Framework.Graphics.PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices, int startIndex, int primitiveCount, int instanceCount)
+ private void ResizeRenderWindow(PresentationParameters presentationParameters)
{
- throw new NotImplementedException();
+ RECT windowRect;
+ RECT clientRect;
+ if (GetWindowRect(presentationParameters.DeviceWindowHandle, out windowRect) &&
+ GetClientRect(presentationParameters.DeviceWindowHandle, out clientRect))
+ {
+ int width = presentationParameters.BackBufferWidth + ((windowRect.Right - windowRect.Left) - clientRect.Right);
+ int height = presentationParameters.BackBufferHeight + ((windowRect.Bottom - windowRect.Top) - clientRect.Bottom);
+
+ SetWindowPos(presentationParameters.DeviceWindowHandle, IntPtr.Zero, windowRect.Left, windowRect.Top, width, height, 0);
+ }
}
- public void DrawUserIndexedPrimitives(Framework.Graphics.PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, Array indexData, int indexOffset, int primitiveCount, Framework.Graphics.VertexDeclaration vertexDeclaration, Framework.Graphics.IndexElementSize indexFormat) where T : struct, Framework.Graphics.IVertexType
- {
- throw new NotImplementedException();
- }
-
- public void DrawUserPrimitives(Framework.Graphics.PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int primitiveCount, Framework.Graphics.VertexDeclaration vertexDeclaration) where T : struct, Framework.Graphics.IVertexType
- {
- throw new NotImplementedException();
- }
-
-
- public void ResizeBuffers(Framework.Graphics.PresentationParameters presentationParameters)
- {
- throw new NotImplementedException();
- }
-
-
public bool VSync
{
get
{
- throw new NotImplementedException();
+ return this.vSyncEnabled;
}
set
{
- throw new NotImplementedException();
+ this.vSyncEnabled = value;
}
}
public void Dispose()
{
- //TODO: implement
+ if (renderTargetView != null)
+ {
+ renderTargetView.Dispose();
+ renderTargetView = null;
+ }
+
+ if (swapChain != null)
+ {
+ renderView.Dispose();
+ renderView = null;
+
+ backBuffer.Dispose();
+ backBuffer = null;
+
+ swapChain.Dispose();
+ swapChain = null;
+ }
+
+ if (this.depthStencilView != null)
+ {
+ this.depthStencilBuffer.Dispose();
+ this.depthStencilBuffer = null;
+
+ this.depthStencilView.Dispose();
+ this.depthStencilView = null;
+ }
+
+ //TODO: dispose everything else
}
}
}
diff --git a/RenderSystems/ANX.RenderSystem.Windows.DX11/IndexBuffer_DX11.cs b/RenderSystems/ANX.RenderSystem.Windows.DX11/IndexBuffer_DX11.cs
new file mode 100644
index 00000000..6f2ce43a
--- /dev/null
+++ b/RenderSystems/ANX.RenderSystem.Windows.DX11/IndexBuffer_DX11.cs
@@ -0,0 +1,155 @@
+#region Using Statements
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using ANX.Framework.NonXNA;
+using SharpDX.Direct3D11;
+using ANX.Framework.Graphics;
+using System.Runtime.InteropServices;
+
+#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.RenderSystem.Windows.DX11
+{
+ public class IndexBuffer_DX11 : INativeBuffer, IDisposable
+ {
+ private SharpDX.Direct3D11.Buffer buffer;
+ private IndexElementSize size;
+
+ public IndexBuffer_DX11(GraphicsDevice graphics, IndexElementSize size, int indexCount, BufferUsage usage)
+ {
+ this.size = size;
+
+ //TODO: translate and use usage
+
+ GraphicsDeviceWindowsDX11 gd11 = graphics.NativeDevice as GraphicsDeviceWindowsDX11;
+ SharpDX.Direct3D11.DeviceContext context = gd11 != null ? gd11.NativeDevice as SharpDX.Direct3D11.DeviceContext : null;
+
+ if (context != null)
+ {
+ BufferDescription description = new BufferDescription()
+ {
+ Usage = ResourceUsage.Dynamic,
+ SizeInBytes = (size == IndexElementSize.SixteenBits ? 2 : 4) * indexCount,
+ BindFlags = BindFlags.IndexBuffer,
+ CpuAccessFlags = CpuAccessFlags.Write,
+ OptionFlags = ResourceOptionFlags.None
+ };
+
+ this.buffer = new SharpDX.Direct3D11.Buffer(context.Device, description);
+ //this.buffer.Unmap();
+ }
+ }
+
+ public void SetData(GraphicsDevice graphicsDevice, T[] data) where T : struct
+ {
+ SetData(graphicsDevice, data, 0, data.Length);
+ }
+
+ public void SetData(GraphicsDevice graphicsDevice, int offsetInBytes, T[] data, int startIndex, int elementCount) where T : struct
+ {
+ if (startIndex > 0 || elementCount < data.Length)
+ {
+ throw new NotImplementedException("currently starIndex and elementCount of SetData are not implemented");
+ }
+
+ GraphicsDeviceWindowsDX11 dx11GraphicsDevice = graphicsDevice.NativeDevice as GraphicsDeviceWindowsDX11;
+ DeviceContext context = dx11GraphicsDevice.NativeDevice;
+
+ //TODO: check offsetInBytes parameter for bounds etc.
+
+ GCHandle pinnedArray = GCHandle.Alloc(data, GCHandleType.Pinned);
+ IntPtr dataPointer = pinnedArray.AddrOfPinnedObject();
+
+ int dataLength = Marshal.SizeOf(typeof(T)) * data.Length;
+
+ unsafe
+ {
+ using (var vData = new SharpDX.DataStream(dataPointer, dataLength, true, false))
+ {
+ if (offsetInBytes > 0)
+ {
+ vData.Seek(offsetInBytes / (size == IndexElementSize.SixteenBits ? 2 : 4), System.IO.SeekOrigin.Begin);
+ }
+
+ SharpDX.DataStream stream;
+ SharpDX.DataBox box = context.MapSubresource(this.buffer, MapMode.WriteDiscard, MapFlags.None, out stream);
+ vData.CopyTo(stream);
+ context.UnmapSubresource(this.buffer, 0);
+ }
+ }
+
+ pinnedArray.Free();
+ }
+
+ public void SetData(GraphicsDevice graphicsDevice, T[] data, int startIndex, int elementCount) where T : struct
+ {
+ SetData(graphicsDevice, 0, data, startIndex, elementCount);
+ }
+
+ public SharpDX.Direct3D11.Buffer NativeBuffer
+ {
+ get
+ {
+ return this.buffer;
+ }
+ }
+
+ public void Dispose()
+ {
+ if (this.buffer != null)
+ {
+ buffer.Dispose();
+ buffer = null;
+ }
+ }
+ }
+}
diff --git a/RenderSystems/ANX.RenderSystem.Windows.DX11/NativeMethods.cs b/RenderSystems/ANX.RenderSystem.Windows.DX11/NativeMethods.cs
new file mode 100644
index 00000000..fc47bb72
--- /dev/null
+++ b/RenderSystems/ANX.RenderSystem.Windows.DX11/NativeMethods.cs
@@ -0,0 +1,120 @@
+#region Using Statements
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Runtime.InteropServices;
+using System.Security;
+using System.Drawing;
+
+#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.RenderSystem.Windows.DX11
+{
+ internal sealed class NativeMethods
+ {
+ [SuppressUnmanagedCodeSecurity, DllImport("user32.dll", CharSet = CharSet.Auto)]
+ internal static extern bool PeekMessage(out Message msg, IntPtr hWnd, uint messageFilterMin, uint messageFilterMax, uint flags);
+
+ // Nested Types
+ [StructLayout(LayoutKind.Sequential)]
+ public struct Message
+ {
+ public IntPtr hWnd;
+ public NativeMethods.WindowMessage msg;
+ public IntPtr wParam;
+ public IntPtr lParam;
+ public uint time;
+ public Point p;
+ }
+
+ internal enum WindowMessage : uint
+ {
+ ActivateApplication = 0x1c,
+ Character = 0x102,
+ Close = 0x10,
+ Destroy = 2,
+ EnterMenuLoop = 0x211,
+ EnterSizeMove = 0x231,
+ ExitMenuLoop = 530,
+ ExitSizeMove = 0x232,
+ GetMinMax = 0x24,
+ KeyDown = 0x100,
+ KeyUp = 0x101,
+ LeftButtonDoubleClick = 0x203,
+ LeftButtonDown = 0x201,
+ LeftButtonUp = 0x202,
+ MiddleButtonDoubleClick = 0x209,
+ MiddleButtonDown = 0x207,
+ MiddleButtonUp = 520,
+ MouseFirst = 0x201,
+ MouseLast = 0x20d,
+ MouseMove = 0x200,
+ MouseWheel = 0x20a,
+ NonClientHitTest = 0x84,
+ Paint = 15,
+ PowerBroadcast = 0x218,
+ Quit = 0x12,
+ RightButtonDoubleClick = 0x206,
+ RightButtonDown = 0x204,
+ RightButtonUp = 0x205,
+ SetCursor = 0x20,
+ Size = 5,
+ SystemCharacter = 0x106,
+ SystemCommand = 0x112,
+ SystemKeyDown = 260,
+ SystemKeyUp = 0x105,
+ XButtonDoubleClick = 0x20d,
+ XButtonDown = 0x20b,
+ XButtonUp = 0x20c
+ }
+
+ }
+}
diff --git a/RenderSystems/ANX.RenderSystem.Windows.DX11/Properties/AssemblyInfo.cs b/RenderSystems/ANX.RenderSystem.Windows.DX11/Properties/AssemblyInfo.cs
index cffaef81..2cb0c827 100644
--- a/RenderSystems/ANX.RenderSystem.Windows.DX11/Properties/AssemblyInfo.cs
+++ b/RenderSystems/ANX.RenderSystem.Windows.DX11/Properties/AssemblyInfo.cs
@@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
// Buildnummer
// Revision
//
-[assembly: AssemblyVersion("0.1.3.0")]
-[assembly: AssemblyFileVersion("0.1.3.0")]
+[assembly: AssemblyVersion("0.7.0.0")]
+[assembly: AssemblyFileVersion("0.7.0.0")]
diff --git a/RenderSystems/ANX.RenderSystem.Windows.DX11/RasterizerState_DX11.cs b/RenderSystems/ANX.RenderSystem.Windows.DX11/RasterizerState_DX11.cs
new file mode 100644
index 00000000..490d8bdc
--- /dev/null
+++ b/RenderSystems/ANX.RenderSystem.Windows.DX11/RasterizerState_DX11.cs
@@ -0,0 +1,212 @@
+#region Using Statements
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using SharpDX.Direct3D11;
+using ANX.Framework.Graphics;
+using ANX.Framework.NonXNA;
+
+#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.RenderSystem.Windows.DX11
+{
+ public class RasterizerState_DX11 : INativeRasterizerState
+ {
+ #region Private Members
+ private RasterizerStateDescription description;
+ private SharpDX.Direct3D11.RasterizerState nativeRasterizerState;
+ private bool nativeRasterizerStateDirty;
+ private bool bound;
+
+ private const int intMaxOver16 = int.MaxValue / 16;
+
+ #endregion // Private Members
+
+ public RasterizerState_DX11()
+ {
+ this.description = new RasterizerStateDescription();
+
+ this.description.IsAntialiasedLineEnabled = false;
+
+ this.nativeRasterizerStateDirty = true;
+ }
+
+ public void Apply(ANX.Framework.Graphics.GraphicsDevice graphicsDevice)
+ {
+ GraphicsDeviceWindowsDX11 gdx11 = graphicsDevice.NativeDevice as GraphicsDeviceWindowsDX11;
+ DeviceContext context = gdx11.NativeDevice;
+
+ UpdateNativeRasterizerState(context.Device);
+ this.bound = true;
+
+ context.Rasterizer.State = this.nativeRasterizerState;
+ }
+
+ public void Release()
+ {
+ this.bound = false;
+ }
+
+ public void Dispose()
+ {
+ if (this.nativeRasterizerState != null)
+ {
+ this.nativeRasterizerState.Dispose();
+ this.nativeRasterizerState = null;
+ }
+ }
+
+ public bool IsBound
+ {
+ get
+ {
+ return this.bound;
+ }
+ }
+
+ public ANX.Framework.Graphics.CullMode CullMode
+ {
+ set
+ {
+ SharpDX.Direct3D11.CullMode cullMode = FormatConverter.Translate(value);
+
+ if (description.CullMode != cullMode)
+ {
+ nativeRasterizerStateDirty = true;
+ description.CullMode = cullMode;
+ }
+ }
+ }
+
+ public float DepthBias
+ {
+ set
+ {
+ // XNA uses a float value in the range of 0f..16f as value
+ // DirectX 10 uses a INT value
+
+ int depthBiasValue = (int)(value * intMaxOver16);
+
+ if (description.DepthBias != depthBiasValue)
+ {
+ nativeRasterizerStateDirty = true;
+ description.DepthBias = depthBiasValue;
+ }
+ }
+ }
+
+ public ANX.Framework.Graphics.FillMode FillMode
+ {
+ set
+ {
+ SharpDX.Direct3D11.FillMode fillMode = FormatConverter.Translate(value);
+
+ if (description.FillMode != fillMode)
+ {
+ nativeRasterizerStateDirty = true;
+ description.FillMode = fillMode;
+ }
+ }
+ }
+
+ public bool MultiSampleAntiAlias
+ {
+ set
+ {
+ if (description.IsMultisampleEnabled != value)
+ {
+ nativeRasterizerStateDirty = true;
+ description.IsMultisampleEnabled = value;
+ }
+ }
+ }
+
+ public bool ScissorTestEnable
+ {
+ set
+ {
+ if (description.IsScissorEnabled != value)
+ {
+ nativeRasterizerStateDirty = true;
+ description.IsScissorEnabled = value;
+ }
+ }
+ }
+
+ public float SlopeScaleDepthBias
+ {
+ set
+ {
+ if (description.SlopeScaledDepthBias != value)
+ {
+ nativeRasterizerStateDirty = true;
+ description.SlopeScaledDepthBias = value;
+ }
+ }
+ }
+
+ private void UpdateNativeRasterizerState(Device device)
+ {
+ if (this.nativeRasterizerStateDirty == true || this.nativeRasterizerState == null)
+ {
+ if (this.nativeRasterizerState != null)
+ {
+ this.nativeRasterizerState.Dispose();
+ this.nativeRasterizerState = null;
+ }
+
+ this.nativeRasterizerState = new SharpDX.Direct3D11.RasterizerState(device, ref this.description);
+
+ this.nativeRasterizerStateDirty = false;
+ }
+ }
+ }
+}
diff --git a/RenderSystems/ANX.RenderSystem.Windows.DX11/RenderTarget2D_DX11.cs b/RenderSystems/ANX.RenderSystem.Windows.DX11/RenderTarget2D_DX11.cs
new file mode 100644
index 00000000..62a7db96
--- /dev/null
+++ b/RenderSystems/ANX.RenderSystem.Windows.DX11/RenderTarget2D_DX11.cs
@@ -0,0 +1,103 @@
+#region Using Statements
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using ANX.Framework.Graphics;
+using ANX.Framework.NonXNA.RenderSystem;
+using SharpDX.Direct3D11;
+
+#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.RenderSystem.Windows.DX11
+{
+ public class RenderTarget2D_DX11 : Texture2D_DX11, INativeRenderTarget2D, INativeTexture2D
+ {
+ #region Private Members
+
+ #endregion // Private Members
+
+ public RenderTarget2D_DX11(GraphicsDevice graphics, int width, int height, bool mipMap, SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount, RenderTargetUsage usage)
+ : base(graphics)
+ {
+ if (mipMap)
+ {
+ throw new NotImplementedException("creating RenderTargets with mip map not yet implemented");
+ }
+
+ this.surfaceFormat = surfaceFormat;
+
+ GraphicsDeviceWindowsDX11 graphicsDX11 = graphicsDevice.NativeDevice as GraphicsDeviceWindowsDX11;
+ SharpDX.Direct3D11.DeviceContext device = graphicsDX11.NativeDevice;
+
+ SharpDX.Direct3D11.Texture2DDescription description = new SharpDX.Direct3D11.Texture2DDescription()
+ {
+ Width = width,
+ Height = height,
+ MipLevels = 1,
+ ArraySize = 1,
+ Format = FormatConverter.Translate(preferredFormat),
+ SampleDescription = new SharpDX.DXGI.SampleDescription(1, 0),
+ Usage = SharpDX.Direct3D11.ResourceUsage.Default,
+ BindFlags = SharpDX.Direct3D11.BindFlags.ShaderResource | SharpDX.Direct3D11.BindFlags.RenderTarget,
+ CpuAccessFlags = SharpDX.Direct3D11.CpuAccessFlags.None,
+ OptionFlags = SharpDX.Direct3D11.ResourceOptionFlags.None,
+ };
+ this.nativeTexture = new SharpDX.Direct3D11.Texture2D(graphicsDX11.NativeDevice.Device, description);
+ this.nativeShaderResourceView = new SharpDX.Direct3D11.ShaderResourceView(graphicsDX11.NativeDevice.Device, this.nativeTexture);
+
+ // description of texture formats of DX10: http://msdn.microsoft.com/en-us/library/bb694531(v=VS.85).aspx
+ // more helpfull information on DX10 textures: http://msdn.microsoft.com/en-us/library/windows/desktop/bb205131(v=vs.85).aspx
+
+ this.formatSize = FormatConverter.FormatSize(surfaceFormat);
+ }
+
+ }
+}
diff --git a/RenderSystems/ANX.RenderSystem.Windows.DX11/SamplerState_DX11.cs b/RenderSystems/ANX.RenderSystem.Windows.DX11/SamplerState_DX11.cs
new file mode 100644
index 00000000..b44b19ed
--- /dev/null
+++ b/RenderSystems/ANX.RenderSystem.Windows.DX11/SamplerState_DX11.cs
@@ -0,0 +1,216 @@
+#region Using Statements
+using System;
+using ANX.Framework.Graphics;
+using ANX.Framework.NonXNA;
+using SharpDX.Direct3D11;
+
+#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.RenderSystem.Windows.DX11
+{
+ public class SamplerState_DX11 : INativeSamplerState
+ {
+ #region Private Members
+ private SamplerStateDescription description;
+ private SharpDX.Direct3D11.SamplerState nativeSamplerState;
+ private bool nativeSamplerStateDirty;
+ private bool bound;
+
+ #endregion // Private Members
+
+ public SamplerState_DX11()
+ {
+ this.description = new SamplerStateDescription();
+
+ this.nativeSamplerStateDirty = true;
+ }
+
+ public void Apply(GraphicsDevice graphicsDevice, int index)
+ {
+ GraphicsDeviceWindowsDX11 gdx11 = graphicsDevice.NativeDevice as GraphicsDeviceWindowsDX11;
+ DeviceContext context = gdx11.NativeDevice;
+
+ UpdateNativeSamplerState(context.Device);
+ this.bound = true;
+
+ context.PixelShader.SetSampler(index, this.nativeSamplerState);
+ }
+
+ public void Release()
+ {
+ this.bound = false;
+ }
+
+ public bool IsBound
+ {
+ get
+ {
+ return this.bound;
+ }
+ }
+
+ public ANX.Framework.Graphics.TextureAddressMode AddressU
+ {
+ set
+ {
+ SharpDX.Direct3D11.TextureAddressMode mode = FormatConverter.Translate(value);
+
+ if (description.AddressU != mode)
+ {
+ description.AddressU = mode;
+ nativeSamplerStateDirty = true;
+ }
+ }
+ }
+
+ public ANX.Framework.Graphics.TextureAddressMode AddressV
+ {
+ set
+ {
+ SharpDX.Direct3D11.TextureAddressMode mode = FormatConverter.Translate(value);
+
+ if (description.AddressV != mode)
+ {
+ description.AddressV = mode;
+ nativeSamplerStateDirty = true;
+ }
+ }
+ }
+
+ public ANX.Framework.Graphics.TextureAddressMode AddressW
+ {
+ set
+ {
+ SharpDX.Direct3D11.TextureAddressMode mode = FormatConverter.Translate(value);
+
+ if (description.AddressW != mode)
+ {
+ description.AddressW = mode;
+ nativeSamplerStateDirty = true;
+ }
+ }
+ }
+
+ public TextureFilter Filter
+ {
+ set
+ {
+ SharpDX.Direct3D11.Filter filter = FormatConverter.Translate(value);
+
+ if (description.Filter != filter)
+ {
+ description.Filter = filter;
+ nativeSamplerStateDirty = true;
+ }
+ }
+ }
+
+ public int MaxAnisotropy
+ {
+ set
+ {
+ if (description.MaximumAnisotropy != value)
+ {
+ description.MaximumAnisotropy = value;
+ nativeSamplerStateDirty = true;
+ }
+ }
+ }
+
+ public int MaxMipLevel
+ {
+ set
+ {
+ if (description.MaximumLod != value)
+ {
+ description.MaximumLod = value;
+ nativeSamplerStateDirty = true;
+ }
+ }
+ }
+
+ public float MipMapLevelOfDetailBias
+ {
+ set
+ {
+ if (description.MipLodBias != value)
+ {
+ description.MipLodBias = value;
+ nativeSamplerStateDirty = true;
+ }
+ }
+ }
+
+ public void Dispose()
+ {
+ if (this.nativeSamplerState != null)
+ {
+ this.nativeSamplerState.Dispose();
+ this.nativeSamplerState = null;
+ }
+ }
+
+ private void UpdateNativeSamplerState(Device device)
+ {
+ if (this.nativeSamplerStateDirty == true || this.nativeSamplerState == null)
+ {
+ if (this.nativeSamplerState != null)
+ {
+ this.nativeSamplerState.Dispose();
+ this.nativeSamplerState = null;
+ }
+
+ this.nativeSamplerState = new SharpDX.Direct3D11.SamplerState(device, ref this.description);
+
+ this.nativeSamplerStateDirty = false;
+ }
+ }
+ }
+}
diff --git a/RenderSystems/ANX.RenderSystem.Windows.DX11/ShaderByteCode.cs b/RenderSystems/ANX.RenderSystem.Windows.DX11/ShaderByteCode.cs
new file mode 100644
index 00000000..d702cea2
--- /dev/null
+++ b/RenderSystems/ANX.RenderSystem.Windows.DX11/ShaderByteCode.cs
@@ -0,0 +1,217 @@
+#region Using Statements
+using System;
+#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.RenderSystem.Windows.DX11
+{
+ internal static class ShaderByteCode
+ {
+ #region SpriteBatchShader
+ internal static byte[] SpriteBatchByteCode = new byte[]
+ {
+ 068,
+ 088, 066, 067, 025, 110, 120, 179, 245, 124, 038, 142, 158, 241, 235, 093, 024, 198, 181, 194, 001,
+ 000, 000, 000, 128, 001, 000, 000, 001, 000, 000, 000, 036, 000, 000, 000, 070, 088, 049, 048, 084,
+ 001, 000, 000, 001, 016, 255, 254, 001, 000, 000, 000, 001, 000, 000, 000, 002, 000, 000, 000, 000,
+ 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 168, 000, 000, 000, 000,
+ 000, 000, 000, 001, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 001,
+ 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000,
+ 000, 000, 000, 036, 071, 108, 111, 098, 097, 108, 115, 000, 102, 108, 111, 097, 116, 052, 120, 052,
+ 000, 013, 000, 000, 000, 001, 000, 000, 000, 000, 000, 000, 000, 064, 000, 000, 000, 064, 000, 000,
+ 000, 064, 000, 000, 000, 011, 100, 000, 000, 077, 097, 116, 114, 105, 120, 084, 114, 097, 110, 115,
+ 102, 111, 114, 109, 000, 084, 101, 120, 116, 117, 114, 101, 050, 068, 000, 066, 000, 000, 000, 002,
+ 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 012,
+ 000, 000, 000, 084, 101, 120, 116, 117, 114, 101, 000, 083, 097, 109, 112, 108, 101, 114, 083, 116,
+ 097, 116, 101, 000, 112, 000, 000, 000, 002, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000,
+ 000, 000, 000, 000, 000, 000, 000, 000, 021, 000, 000, 000, 084, 101, 120, 116, 117, 114, 101, 083,
+ 097, 109, 112, 108, 101, 114, 000, 004, 000, 000, 000, 064, 000, 000, 000, 000, 000, 000, 000, 001,
+ 000, 000, 000, 255, 255, 255, 255, 000, 000, 000, 000, 050, 000, 000, 000, 022, 000, 000, 000, 000,
+ 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 104,
+ 000, 000, 000, 076, 000, 000, 000, 000, 000, 000, 000, 255, 255, 255, 255, 000, 000, 000, 000, 153,
+ 000, 000, 000, 125, 000, 000, 000, 000, 000, 000, 000, 255, 255, 255, 255, 000, 000, 000, 000, 000,
+ 000, 000, 000
+ };
+ #endregion //SpriteBatchShader
+
+ #region AlphaTestEffectShader
+ internal static byte[] AlphaTestEffectByteCode = new byte[]
+ {
+ 068,
+ 088, 066, 067, 025, 110, 120, 179, 245, 124, 038, 142, 158, 241, 235, 093, 024, 198, 181, 194, 001,
+ 000, 000, 000, 128, 001, 000, 000, 001, 000, 000, 000, 036, 000, 000, 000, 070, 088, 049, 048, 084,
+ 001, 000, 000, 001, 016, 255, 254, 001, 000, 000, 000, 001, 000, 000, 000, 002, 000, 000, 000, 000,
+ 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 168, 000, 000, 000, 000,
+ 000, 000, 000, 001, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 001,
+ 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000,
+ 000, 000, 000, 036, 071, 108, 111, 098, 097, 108, 115, 000, 102, 108, 111, 097, 116, 052, 120, 052,
+ 000, 013, 000, 000, 000, 001, 000, 000, 000, 000, 000, 000, 000, 064, 000, 000, 000, 064, 000, 000,
+ 000, 064, 000, 000, 000, 011, 100, 000, 000, 077, 097, 116, 114, 105, 120, 084, 114, 097, 110, 115,
+ 102, 111, 114, 109, 000, 084, 101, 120, 116, 117, 114, 101, 050, 068, 000, 066, 000, 000, 000, 002,
+ 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 012,
+ 000, 000, 000, 084, 101, 120, 116, 117, 114, 101, 000, 083, 097, 109, 112, 108, 101, 114, 083, 116,
+ 097, 116, 101, 000, 112, 000, 000, 000, 002, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000,
+ 000, 000, 000, 000, 000, 000, 000, 000, 021, 000, 000, 000, 084, 101, 120, 116, 117, 114, 101, 083,
+ 097, 109, 112, 108, 101, 114, 000, 004, 000, 000, 000, 064, 000, 000, 000, 000, 000, 000, 000, 001,
+ 000, 000, 000, 255, 255, 255, 255, 000, 000, 000, 000, 050, 000, 000, 000, 022, 000, 000, 000, 000,
+ 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 104,
+ 000, 000, 000, 076, 000, 000, 000, 000, 000, 000, 000, 255, 255, 255, 255, 000, 000, 000, 000, 153,
+ 000, 000, 000, 125, 000, 000, 000, 000, 000, 000, 000, 255, 255, 255, 255, 000, 000, 000, 000, 000,
+ 000, 000, 000
+ };
+ #endregion //AlphaTestEffectShader
+
+ #region BasicEffectShader
+ internal static byte[] BasicEffectByteCode = new byte[]
+ {
+ 068,
+ 088, 066, 067, 025, 110, 120, 179, 245, 124, 038, 142, 158, 241, 235, 093, 024, 198, 181, 194, 001,
+ 000, 000, 000, 128, 001, 000, 000, 001, 000, 000, 000, 036, 000, 000, 000, 070, 088, 049, 048, 084,
+ 001, 000, 000, 001, 016, 255, 254, 001, 000, 000, 000, 001, 000, 000, 000, 002, 000, 000, 000, 000,
+ 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 168, 000, 000, 000, 000,
+ 000, 000, 000, 001, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 001,
+ 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000,
+ 000, 000, 000, 036, 071, 108, 111, 098, 097, 108, 115, 000, 102, 108, 111, 097, 116, 052, 120, 052,
+ 000, 013, 000, 000, 000, 001, 000, 000, 000, 000, 000, 000, 000, 064, 000, 000, 000, 064, 000, 000,
+ 000, 064, 000, 000, 000, 011, 100, 000, 000, 077, 097, 116, 114, 105, 120, 084, 114, 097, 110, 115,
+ 102, 111, 114, 109, 000, 084, 101, 120, 116, 117, 114, 101, 050, 068, 000, 066, 000, 000, 000, 002,
+ 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 012,
+ 000, 000, 000, 084, 101, 120, 116, 117, 114, 101, 000, 083, 097, 109, 112, 108, 101, 114, 083, 116,
+ 097, 116, 101, 000, 112, 000, 000, 000, 002, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000,
+ 000, 000, 000, 000, 000, 000, 000, 000, 021, 000, 000, 000, 084, 101, 120, 116, 117, 114, 101, 083,
+ 097, 109, 112, 108, 101, 114, 000, 004, 000, 000, 000, 064, 000, 000, 000, 000, 000, 000, 000, 001,
+ 000, 000, 000, 255, 255, 255, 255, 000, 000, 000, 000, 050, 000, 000, 000, 022, 000, 000, 000, 000,
+ 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 104,
+ 000, 000, 000, 076, 000, 000, 000, 000, 000, 000, 000, 255, 255, 255, 255, 000, 000, 000, 000, 153,
+ 000, 000, 000, 125, 000, 000, 000, 000, 000, 000, 000, 255, 255, 255, 255, 000, 000, 000, 000, 000,
+ 000, 000, 000
+ };
+ #endregion //BasicEffectShader
+
+ #region DualTextureEffectShader
+ internal static byte[] DualTextureEffectByteCode = new byte[]
+ {
+ 068,
+ 088, 066, 067, 025, 110, 120, 179, 245, 124, 038, 142, 158, 241, 235, 093, 024, 198, 181, 194, 001,
+ 000, 000, 000, 128, 001, 000, 000, 001, 000, 000, 000, 036, 000, 000, 000, 070, 088, 049, 048, 084,
+ 001, 000, 000, 001, 016, 255, 254, 001, 000, 000, 000, 001, 000, 000, 000, 002, 000, 000, 000, 000,
+ 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 168, 000, 000, 000, 000,
+ 000, 000, 000, 001, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 001,
+ 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000,
+ 000, 000, 000, 036, 071, 108, 111, 098, 097, 108, 115, 000, 102, 108, 111, 097, 116, 052, 120, 052,
+ 000, 013, 000, 000, 000, 001, 000, 000, 000, 000, 000, 000, 000, 064, 000, 000, 000, 064, 000, 000,
+ 000, 064, 000, 000, 000, 011, 100, 000, 000, 077, 097, 116, 114, 105, 120, 084, 114, 097, 110, 115,
+ 102, 111, 114, 109, 000, 084, 101, 120, 116, 117, 114, 101, 050, 068, 000, 066, 000, 000, 000, 002,
+ 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 012,
+ 000, 000, 000, 084, 101, 120, 116, 117, 114, 101, 000, 083, 097, 109, 112, 108, 101, 114, 083, 116,
+ 097, 116, 101, 000, 112, 000, 000, 000, 002, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000,
+ 000, 000, 000, 000, 000, 000, 000, 000, 021, 000, 000, 000, 084, 101, 120, 116, 117, 114, 101, 083,
+ 097, 109, 112, 108, 101, 114, 000, 004, 000, 000, 000, 064, 000, 000, 000, 000, 000, 000, 000, 001,
+ 000, 000, 000, 255, 255, 255, 255, 000, 000, 000, 000, 050, 000, 000, 000, 022, 000, 000, 000, 000,
+ 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 104,
+ 000, 000, 000, 076, 000, 000, 000, 000, 000, 000, 000, 255, 255, 255, 255, 000, 000, 000, 000, 153,
+ 000, 000, 000, 125, 000, 000, 000, 000, 000, 000, 000, 255, 255, 255, 255, 000, 000, 000, 000, 000,
+ 000, 000, 000
+ };
+ #endregion //DualTextureEffectShader
+
+ #region EnvironmentMapEffectShader
+ internal static byte[] EnvironmentMapEffectByteCode = new byte[]
+ {
+ 068,
+ 088, 066, 067, 025, 110, 120, 179, 245, 124, 038, 142, 158, 241, 235, 093, 024, 198, 181, 194, 001,
+ 000, 000, 000, 128, 001, 000, 000, 001, 000, 000, 000, 036, 000, 000, 000, 070, 088, 049, 048, 084,
+ 001, 000, 000, 001, 016, 255, 254, 001, 000, 000, 000, 001, 000, 000, 000, 002, 000, 000, 000, 000,
+ 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 168, 000, 000, 000, 000,
+ 000, 000, 000, 001, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 001,
+ 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000,
+ 000, 000, 000, 036, 071, 108, 111, 098, 097, 108, 115, 000, 102, 108, 111, 097, 116, 052, 120, 052,
+ 000, 013, 000, 000, 000, 001, 000, 000, 000, 000, 000, 000, 000, 064, 000, 000, 000, 064, 000, 000,
+ 000, 064, 000, 000, 000, 011, 100, 000, 000, 077, 097, 116, 114, 105, 120, 084, 114, 097, 110, 115,
+ 102, 111, 114, 109, 000, 084, 101, 120, 116, 117, 114, 101, 050, 068, 000, 066, 000, 000, 000, 002,
+ 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 012,
+ 000, 000, 000, 084, 101, 120, 116, 117, 114, 101, 000, 083, 097, 109, 112, 108, 101, 114, 083, 116,
+ 097, 116, 101, 000, 112, 000, 000, 000, 002, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000,
+ 000, 000, 000, 000, 000, 000, 000, 000, 021, 000, 000, 000, 084, 101, 120, 116, 117, 114, 101, 083,
+ 097, 109, 112, 108, 101, 114, 000, 004, 000, 000, 000, 064, 000, 000, 000, 000, 000, 000, 000, 001,
+ 000, 000, 000, 255, 255, 255, 255, 000, 000, 000, 000, 050, 000, 000, 000, 022, 000, 000, 000, 000,
+ 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 104,
+ 000, 000, 000, 076, 000, 000, 000, 000, 000, 000, 000, 255, 255, 255, 255, 000, 000, 000, 000, 153,
+ 000, 000, 000, 125, 000, 000, 000, 000, 000, 000, 000, 255, 255, 255, 255, 000, 000, 000, 000, 000,
+ 000, 000, 000
+ };
+ #endregion //EnvironmentMapEffectShader
+
+ #region SkinnedEffectShader
+ internal static byte[] SkinnedEffectByteCode = new byte[]
+ {
+ 068,
+ 088, 066, 067, 025, 110, 120, 179, 245, 124, 038, 142, 158, 241, 235, 093, 024, 198, 181, 194, 001,
+ 000, 000, 000, 128, 001, 000, 000, 001, 000, 000, 000, 036, 000, 000, 000, 070, 088, 049, 048, 084,
+ 001, 000, 000, 001, 016, 255, 254, 001, 000, 000, 000, 001, 000, 000, 000, 002, 000, 000, 000, 000,
+ 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 168, 000, 000, 000, 000,
+ 000, 000, 000, 001, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 001,
+ 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000,
+ 000, 000, 000, 036, 071, 108, 111, 098, 097, 108, 115, 000, 102, 108, 111, 097, 116, 052, 120, 052,
+ 000, 013, 000, 000, 000, 001, 000, 000, 000, 000, 000, 000, 000, 064, 000, 000, 000, 064, 000, 000,
+ 000, 064, 000, 000, 000, 011, 100, 000, 000, 077, 097, 116, 114, 105, 120, 084, 114, 097, 110, 115,
+ 102, 111, 114, 109, 000, 084, 101, 120, 116, 117, 114, 101, 050, 068, 000, 066, 000, 000, 000, 002,
+ 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 012,
+ 000, 000, 000, 084, 101, 120, 116, 117, 114, 101, 000, 083, 097, 109, 112, 108, 101, 114, 083, 116,
+ 097, 116, 101, 000, 112, 000, 000, 000, 002, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000,
+ 000, 000, 000, 000, 000, 000, 000, 000, 021, 000, 000, 000, 084, 101, 120, 116, 117, 114, 101, 083,
+ 097, 109, 112, 108, 101, 114, 000, 004, 000, 000, 000, 064, 000, 000, 000, 000, 000, 000, 000, 001,
+ 000, 000, 000, 255, 255, 255, 255, 000, 000, 000, 000, 050, 000, 000, 000, 022, 000, 000, 000, 000,
+ 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 104,
+ 000, 000, 000, 076, 000, 000, 000, 000, 000, 000, 000, 255, 255, 255, 255, 000, 000, 000, 000, 153,
+ 000, 000, 000, 125, 000, 000, 000, 000, 000, 000, 000, 255, 255, 255, 255, 000, 000, 000, 000, 000,
+ 000, 000, 000
+ };
+ #endregion //SkinnedEffectShader
+
+ }
+}
diff --git a/RenderSystems/ANX.RenderSystem.Windows.DX11/Texture2D_DX11.cs b/RenderSystems/ANX.RenderSystem.Windows.DX11/Texture2D_DX11.cs
new file mode 100644
index 00000000..28cad385
--- /dev/null
+++ b/RenderSystems/ANX.RenderSystem.Windows.DX11/Texture2D_DX11.cs
@@ -0,0 +1,316 @@
+#region Using Statements
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using ANX.Framework.Graphics;
+using SharpDX.Direct3D11;
+using ANX.Framework.NonXNA.RenderSystem;
+using System.IO;
+using System.Runtime.InteropServices;
+
+#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.RenderSystem.Windows.DX11
+{
+ public class Texture2D_DX11 : INativeTexture2D
+ {
+ #region Private Members
+ protected internal SharpDX.Direct3D11.Texture2D nativeTexture;
+ protected internal SharpDX.Direct3D11.ShaderResourceView nativeShaderResourceView;
+ protected internal int formatSize;
+ protected internal SurfaceFormat surfaceFormat;
+ protected internal GraphicsDevice graphicsDevice;
+
+ #endregion // Private Members
+
+ internal Texture2D_DX11(GraphicsDevice graphicsDevice)
+ {
+ this.graphicsDevice = graphicsDevice;
+ }
+
+ public Texture2D_DX11(GraphicsDevice graphicsDevice, int width, int height, SurfaceFormat surfaceFormat, int mipCount)
+ {
+ if (mipCount > 1)
+ {
+ throw new Exception("creating textures with mip map not yet implemented");
+ }
+
+ this.graphicsDevice = graphicsDevice;
+ this.surfaceFormat = surfaceFormat;
+
+ GraphicsDeviceWindowsDX11 graphicsDX11 = graphicsDevice.NativeDevice as GraphicsDeviceWindowsDX11;
+ SharpDX.Direct3D11.DeviceContext context = graphicsDX11.NativeDevice;
+
+ SharpDX.Direct3D11.Texture2DDescription description = new SharpDX.Direct3D11.Texture2DDescription()
+ {
+ Width = width,
+ Height = height,
+ MipLevels = mipCount,
+ ArraySize = mipCount,
+ Format = FormatConverter.Translate(surfaceFormat),
+ SampleDescription = new SharpDX.DXGI.SampleDescription(1, 0),
+ Usage = SharpDX.Direct3D11.ResourceUsage.Dynamic,
+ BindFlags = SharpDX.Direct3D11.BindFlags.ShaderResource,
+ CpuAccessFlags = SharpDX.Direct3D11.CpuAccessFlags.Write,
+ OptionFlags = SharpDX.Direct3D11.ResourceOptionFlags.None,
+ };
+ this.nativeTexture = new SharpDX.Direct3D11.Texture2D(context.Device, description);
+ this.nativeShaderResourceView = new SharpDX.Direct3D11.ShaderResourceView(context.Device, this.nativeTexture);
+
+ // description of texture formats of DX10: http://msdn.microsoft.com/en-us/library/bb694531(v=VS.85).aspx
+ // more helpfull information on DX10 textures: http://msdn.microsoft.com/en-us/library/windows/desktop/bb205131(v=vs.85).aspx
+
+ this.formatSize = FormatConverter.FormatSize(surfaceFormat);
+ }
+
+ public override int GetHashCode()
+ {
+ return NativeTexture.NativePointer.ToInt32();
+ }
+
+ internal SharpDX.Direct3D11.Texture2D NativeTexture
+ {
+ get
+ {
+ return this.nativeTexture;
+ }
+ set
+ {
+ if (this.nativeTexture != value)
+ {
+ if (this.nativeTexture != null)
+ {
+ this.nativeTexture.Dispose();
+ }
+
+ this.nativeTexture = value;
+ }
+ }
+ }
+
+ internal SharpDX.Direct3D11.ShaderResourceView NativeShaderResourceView
+ {
+ get
+ {
+ return this.nativeShaderResourceView;
+ }
+ set
+ {
+ if (this.nativeShaderResourceView != value)
+ {
+ if (this.nativeShaderResourceView != null)
+ {
+ this.nativeShaderResourceView.Dispose();
+ }
+
+ this.nativeShaderResourceView = value;
+ }
+ }
+ }
+
+ public void SetData(GraphicsDevice graphicsDevice, T[] data) where T : struct
+ {
+ SetData(graphicsDevice, 0, data, 0, data.Length);
+ }
+
+ public void SetData(GraphicsDevice graphicsDevice, T[] data, int startIndex, int elementCount) where T : struct
+ {
+ SetData(graphicsDevice, 0, data, startIndex, elementCount);
+ }
+
+ public void SetData(GraphicsDevice graphicsDevice, int offsetInBytes, T[] data, int startIndex, int elementCount) where T : struct
+ {
+ //TODO: handle offsetInBytes parameter
+ //TODO: handle startIndex parameter
+ //TODO: handle elementCount parameter
+
+ GraphicsDeviceWindowsDX11 dx11GraphicsDevice = graphicsDevice.NativeDevice as GraphicsDeviceWindowsDX11;
+ DeviceContext context = dx11GraphicsDevice.NativeDevice;
+
+ if (this.surfaceFormat == SurfaceFormat.Color)
+ {
+ int subresource = SharpDX.Direct3D11.Texture2D.CalculateSubResourceIndex(0, 0, 1);
+ SharpDX.DataBox rectangle = context.MapSubresource(this.nativeTexture, subresource, MapMode.WriteDiscard, MapFlags.None);
+ int rowPitch = rectangle.RowPitch;
+
+ unsafe
+ {
+ GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned);
+ byte* colorData = (byte*)handle.AddrOfPinnedObject();
+
+ byte* pTexels = (byte*)rectangle.DataPointer;
+ int srcIndex = 0;
+
+ for (int row = 0; row < Height; row++)
+ {
+ int rowStart = row * rowPitch;
+
+ for (int col = 0; col < Width; col++)
+ {
+ int colStart = col * formatSize;
+ pTexels[rowStart + colStart + 0] = colorData[srcIndex++];
+ pTexels[rowStart + colStart + 1] = colorData[srcIndex++];
+ pTexels[rowStart + colStart + 2] = colorData[srcIndex++];
+ pTexels[rowStart + colStart + 3] = colorData[srcIndex++];
+ }
+ }
+
+ handle.Free();
+ }
+
+ context.UnmapSubresource(this.nativeTexture, subresource);
+ }
+ else if (surfaceFormat == SurfaceFormat.Dxt5 || surfaceFormat == SurfaceFormat.Dxt3 || surfaceFormat == SurfaceFormat.Dxt1)
+ {
+ unsafe
+ {
+ GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned);
+ byte* colorData = (byte*)handle.AddrOfPinnedObject();
+
+ int w = (Width + 3) >> 2;
+ int h = (Height + 3) >> 2;
+ formatSize = (surfaceFormat == SurfaceFormat.Dxt1) ? 8 : 16;
+
+ int subresource = SharpDX.Direct3D11.Texture2D.CalculateSubResourceIndex(0, 0, 1);
+ SharpDX.DataBox rectangle = context.MapSubresource(this.nativeTexture, subresource, MapMode.WriteDiscard, MapFlags.None);
+ SharpDX.DataStream ds = new SharpDX.DataStream(rectangle.DataPointer, Width * Height * 4 * 2, true, true);
+ int pitch = rectangle.RowPitch;
+ int col = 0;
+ int index = 0; // startIndex
+ int count = data.Length; // elementCount
+ int actWidth = w * formatSize;
+
+ for (int i = 0; i < h; i++)
+ {
+ ds.Position = (i * pitch) + (col * formatSize);
+ if (count <= 0)
+ {
+ break;
+ }
+ else if (count < actWidth)
+ {
+ for (int idx = index; idx < index + count; idx++)
+ {
+ ds.WriteByte(colorData[idx]);
+ }
+ break;
+ }
+
+ for (int idx = index; idx < index + actWidth; idx++)
+ {
+ ds.WriteByte(colorData[idx]);
+ }
+
+ index += actWidth;
+ count -= actWidth;
+ }
+
+ handle.Free();
+
+ context.UnmapSubresource(this.nativeTexture, subresource);
+ }
+ }
+ else
+ {
+ throw new Exception(string.Format("creating textures of format {0} not yet implemented...", surfaceFormat.ToString()));
+ }
+ }
+
+ public int Width
+ {
+ get
+ {
+ if (this.nativeTexture != null)
+ {
+ return this.nativeTexture.Description.Width;
+ }
+
+ return 0;
+ }
+ }
+
+ public int Height
+ {
+ get
+ {
+ if (this.nativeTexture != null)
+ {
+ return this.nativeTexture.Description.Height;
+ }
+
+ return 0;
+ }
+ }
+
+ public GraphicsDevice GraphicsDevice
+ {
+ get
+ {
+ return this.graphicsDevice;
+ }
+ }
+
+ public void Dispose()
+ {
+ if (this.nativeShaderResourceView != null)
+ {
+ this.nativeShaderResourceView.Dispose();
+ this.nativeShaderResourceView = null;
+ }
+
+ if (this.nativeTexture != null)
+ {
+ this.nativeTexture.Dispose();
+ this.nativeTexture = null;
+ }
+ }
+ }
+}
diff --git a/RenderSystems/ANX.RenderSystem.Windows.DX11/VertexBuffer_DX11.cs b/RenderSystems/ANX.RenderSystem.Windows.DX11/VertexBuffer_DX11.cs
index b6d728ea..1249a69a 100644
--- a/RenderSystems/ANX.RenderSystem.Windows.DX11/VertexBuffer_DX11.cs
+++ b/RenderSystems/ANX.RenderSystem.Windows.DX11/VertexBuffer_DX11.cs
@@ -6,6 +6,7 @@ using System.Text;
using ANX.Framework.NonXNA;
using SharpDX.Direct3D11;
using ANX.Framework.Graphics;
+using System.Runtime.InteropServices;
#endregion // Using Statements
@@ -68,11 +69,11 @@ namespace ANX.RenderSystem.Windows.DX11
this.vertexStride = vertexDeclaration.VertexStride;
//TODO: translate and use usage
-
- GraphicsDeviceWindowsDX11 gd11 = graphics.NativeDevice as GraphicsDeviceWindowsDX11;
- SharpDX.Direct3D11.Device device = gd11 != null ? gd11.NativeDevice as SharpDX.Direct3D11.Device : null;
- if (device != null)
+ GraphicsDeviceWindowsDX11 gd11 = graphics.NativeDevice as GraphicsDeviceWindowsDX11;
+ SharpDX.Direct3D11.DeviceContext context = gd11 != null ? gd11.NativeDevice as SharpDX.Direct3D11.DeviceContext : null;
+
+ if (context != null)
{
BufferDescription description = new BufferDescription()
{
@@ -83,7 +84,7 @@ namespace ANX.RenderSystem.Windows.DX11
OptionFlags = ResourceOptionFlags.None
};
- this.buffer = new SharpDX.Direct3D11.Buffer(device, description);
+ this.buffer = new SharpDX.Direct3D11.Buffer(context.Device, description);
//this.buffer.Unmap();
}
}
@@ -95,25 +96,33 @@ namespace ANX.RenderSystem.Windows.DX11
throw new NotImplementedException("currently starIndex and elementCount of SetData are not implemented");
}
+ GraphicsDeviceWindowsDX11 dx11GraphicsDevice = graphicsDevice.NativeDevice as GraphicsDeviceWindowsDX11;
+ DeviceContext context = dx11GraphicsDevice.NativeDevice;
+
//TODO: check offsetInBytes parameter for bounds etc.
- throw new NotImplementedException();
+ GCHandle pinnedArray = GCHandle.Alloc(data, GCHandleType.Pinned);
+ IntPtr dataPointer = pinnedArray.AddrOfPinnedObject();
- /*
- using (var vData = new SharpDX.DataStream(data, true, false))
+ int dataLength = Marshal.SizeOf(typeof(T)) * data.Length;
+
+ unsafe
{
- if (offsetInBytes > 0)
+ using (var vData = new SharpDX.DataStream(dataPointer, dataLength, true, false))
{
- vData.Seek(offsetInBytes / vertexStride, System.IO.SeekOrigin.Begin);
- }
+ if (offsetInBytes > 0)
+ {
+ vData.Seek(offsetInBytes / vertexStride, System.IO.SeekOrigin.Begin);
+ }
- using (var d = buffer.Map(MapMode.WriteDiscard))
- {
- vData.CopyTo(d);
- buffer.Unmap();
+ SharpDX.DataStream stream;
+ SharpDX.DataBox box = context.MapSubresource(this.buffer, MapMode.WriteDiscard, MapFlags.None, out stream);
+ vData.CopyTo(stream);
+ context.UnmapSubresource(this.buffer, 0);
}
}
- */
+
+ pinnedArray.Free();
}
public void SetData(GraphicsDevice graphicsDevice, T[] data) where T : struct
diff --git a/RenderSystems/ANX.RenderSystem.Windows.DX11/WindowsGameHost.cs b/RenderSystems/ANX.RenderSystem.Windows.DX11/WindowsGameHost.cs
new file mode 100644
index 00000000..feb5fc42
--- /dev/null
+++ b/RenderSystems/ANX.RenderSystem.Windows.DX11/WindowsGameHost.cs
@@ -0,0 +1,137 @@
+#region Using Statements
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using ANX.Framework.Windows.DX10;
+using ANX.Framework.Input;
+using ANX.Framework;
+
+#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.RenderSystem.Windows.DX11
+{
+ public class WindowsGameHost : GameHost
+ {
+ private Game game;
+ private WindowsGameWindow gameWindow;
+ private bool exitRequested;
+
+ public WindowsGameHost(Game game)
+ : base(game)
+ {
+ this.game = game;
+ //this.LockThreadToProcessor();
+ this.gameWindow = new WindowsGameWindow();
+ Mouse.WindowHandle = this.gameWindow.Handle; //TODO: find a way to initialize all InputSystems with one Handle
+ Keyboard.WindowHandle = this.gameWindow.Handle;
+ //TouchPanel.WindowHandle = this.gameWindow.Handle;
+ //this.gameWindow.IsMouseVisible = game.IsMouseVisible;
+ this.gameWindow.Activated += new EventHandler(this.GameWindowActivated);
+ this.gameWindow.Deactivated += new EventHandler(this.GameWindowDeactivated);
+ //this.gameWindow.Suspend += new EventHandler(this.GameWindowSuspend);
+ //this.gameWindow.Resume += new EventHandler(this.GameWindowResume);
+
+ }
+
+ public override void Run()
+ {
+ Application.Idle += new EventHandler(this.ApplicationIdle);
+ Application.Run(this.gameWindow.Form);
+ Application.Idle -= this.ApplicationIdle;
+ }
+
+ public void RunOneFrame()
+ {
+ //this.gameWindow.Tick();
+ base.OnIdle();
+ }
+
+ public override GameWindow Window
+ {
+ get
+ {
+ return this.gameWindow;
+ }
+ }
+
+ public override void Exit()
+ {
+ this.exitRequested = true;
+ }
+
+ private void GameWindowActivated(object sender, EventArgs e)
+ {
+ base.OnActivated();
+ }
+
+ private void GameWindowDeactivated(object sender, EventArgs e)
+ {
+ base.OnDeactivated();
+ }
+
+ private void ApplicationIdle(object sender, EventArgs e)
+ {
+ NativeMethods.Message message;
+ while (!NativeMethods.PeekMessage(out message, IntPtr.Zero, 0, 0, 0))
+ {
+ if (this.exitRequested)
+ {
+ this.gameWindow.Close();
+ }
+ else
+ {
+ this.RunOneFrame();
+ }
+ }
+ }
+ }
+}
diff --git a/RenderSystems/ANX.RenderSystem.Windows.DX11/WindowsGameWindow.cs b/RenderSystems/ANX.RenderSystem.Windows.DX11/WindowsGameWindow.cs
new file mode 100644
index 00000000..6266e18e
--- /dev/null
+++ b/RenderSystems/ANX.RenderSystem.Windows.DX11/WindowsGameWindow.cs
@@ -0,0 +1,163 @@
+#region Using Statements
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using SharpDX.Windows;
+using ANX.Framework;
+
+#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.RenderSystem.Windows.DX11
+{
+ internal class WindowsGameWindow : GameWindow
+ {
+ #region Private Members
+ private RenderForm gameWindow;
+
+ #endregion // Private Members
+
+ internal WindowsGameWindow()
+ {
+ this.gameWindow = new RenderForm("ANX.Framework");
+
+ this.gameWindow.Width = 800;
+ this.gameWindow.Height = 480;
+
+ this.gameWindow.MaximizeBox = false;
+ this.gameWindow.FormBorderStyle = FormBorderStyle.Fixed3D;
+ }
+
+ public void Close()
+ {
+ if (gameWindow != null)
+ {
+ gameWindow.Close();
+ }
+ }
+
+ public Form Form
+ {
+ get
+ {
+ return gameWindow;
+ }
+ }
+
+ public override IntPtr Handle
+ {
+ get
+ {
+ return gameWindow.Handle;
+ }
+ }
+
+ public override bool IsMinimized
+ {
+ get
+ {
+ return gameWindow.WindowState == FormWindowState.Minimized;
+ }
+ }
+
+ public override void BeginScreenDeviceChange(bool willBeFullScreen)
+ {
+ throw new NotImplementedException();
+ }
+
+ public override void EndScreenDeviceChange(string screenDeviceName, int clientWidth, int clientHeight)
+ {
+ throw new NotImplementedException();
+ }
+
+ protected override void SetTitle(string title)
+ {
+ this.gameWindow.Text = title;
+ }
+
+ public override bool AllowUserResizing
+ {
+ get
+ {
+ return gameWindow.FormBorderStyle == FormBorderStyle.Sizable;
+ }
+ set
+ {
+ if (value)
+ {
+ gameWindow.FormBorderStyle = FormBorderStyle.Sizable;
+ }
+ else
+ {
+ gameWindow.FormBorderStyle = FormBorderStyle.Fixed3D;
+ }
+ }
+ }
+
+ public override Rectangle ClientBounds
+ {
+ get
+ {
+ return new Rectangle(this.gameWindow.ClientRectangle.Left, this.gameWindow.ClientRectangle.Top, this.gameWindow.ClientRectangle.Width, this.gameWindow.ClientRectangle.Height);
+ }
+ }
+
+ public override string ScreenDeviceName
+ {
+ get { throw new NotImplementedException(); }
+ }
+
+ public override DisplayOrientation CurrentOrientation
+ {
+ get { throw new NotImplementedException(); }
+ }
+ }
+}
diff --git a/Samples/SimpleSprite/Program.cs b/Samples/SimpleSprite/Program.cs
index e7b29cce..9a2b5764 100644
--- a/Samples/SimpleSprite/Program.cs
+++ b/Samples/SimpleSprite/Program.cs
@@ -11,7 +11,9 @@ namespace WindowsGame1
///
static void Main(string[] args)
{
- //AddInSystemFactory.Instance.PreferredRenderSystem = "OpenGL3";
+ //AddInSystemFactory.Instance.PreferredRenderSystem = "OpenGL3";
+ //AddInSystemFactory.Instance.PreferredRenderSystem = "DirectX11";
+
using (Game1 game = new Game1())
{
game.Run();
diff --git a/Samples/SimpleSprite/SimpleSprite.csproj b/Samples/SimpleSprite/SimpleSprite.csproj
index 8072e9e8..ed7f2d85 100644
--- a/Samples/SimpleSprite/SimpleSprite.csproj
+++ b/Samples/SimpleSprite/SimpleSprite.csproj
@@ -95,6 +95,10 @@
{EB8258E0-6741-4DB9-B756-1EBDF67B1ED6}
ANX.Framework.Windows.GL3
+
+ {B30DE9C2-0926-46B6-8351-9AF276C472D5}
+ ANX.RenderSystem.Windows.DX11
+
{6A582788-C4D2-410C-96CD-177F75712D65}
ANX.SoundSystem.Windows.XAudio
diff --git a/Tools/StockShaderCodeGenerator/Compiler.cs b/Tools/StockShaderCodeGenerator/Compiler.cs
index fc3318e5..3343a01b 100644
--- a/Tools/StockShaderCodeGenerator/Compiler.cs
+++ b/Tools/StockShaderCodeGenerator/Compiler.cs
@@ -6,6 +6,7 @@ using System.Text;
using ANX.Framework.Windows.DX10;
using ANX.Framework.Windows.GL3;
using System.IO;
+using ANX.RenderSystem.Windows.DX11;
#endregion // Using Statements
@@ -103,6 +104,9 @@ namespace StockShaderCodeGenerator
case "ANX.Framework.Windows.DX10":
byteCode = Effect_DX10.CompileFXShader(sourceCode);
break;
+ case "ANX.RenderSystem.Windows.DX11":
+ byteCode = Effect_DX11.CompileFXShader(sourceCode);
+ break;
case "ANX.Framework.Windows.GL3":
byteCode = EffectGL3.CompileShader(sourceCode);
break;
diff --git a/Tools/StockShaderCodeGenerator/Properties/AssemblyInfo.cs b/Tools/StockShaderCodeGenerator/Properties/AssemblyInfo.cs
index f2910f9f..cc7ec5cb 100644
--- a/Tools/StockShaderCodeGenerator/Properties/AssemblyInfo.cs
+++ b/Tools/StockShaderCodeGenerator/Properties/AssemblyInfo.cs
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
// übernehmen, indem Sie "*" eingeben:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("0.8.0.*")]
-[assembly: AssemblyFileVersion("0.8.0.0")]
+[assembly: AssemblyVersion("0.8.1.*")]
+[assembly: AssemblyFileVersion("0.8.1.0")]
diff --git a/Tools/StockShaderCodeGenerator/StockShaderCodeGenerator.csproj b/Tools/StockShaderCodeGenerator/StockShaderCodeGenerator.csproj
index 4d4b28af..7703df4a 100644
--- a/Tools/StockShaderCodeGenerator/StockShaderCodeGenerator.csproj
+++ b/Tools/StockShaderCodeGenerator/StockShaderCodeGenerator.csproj
@@ -63,6 +63,10 @@
{EB8258E0-6741-4DB9-B756-1EBDF67B1ED6}
ANX.Framework.Windows.GL3
+
+ {B30DE9C2-0926-46B6-8351-9AF276C472D5}
+ ANX.RenderSystem.Windows.DX11
+