diff --git a/ANX.Framework/Graphics/IndexBuffer.cs b/ANX.Framework/Graphics/IndexBuffer.cs index 4c79a796..fc13dd13 100644 --- a/ANX.Framework/Graphics/IndexBuffer.cs +++ b/ANX.Framework/Graphics/IndexBuffer.cs @@ -150,7 +150,7 @@ namespace ANX.Framework.Graphics public void GetData(T[] data) where T : struct { - NativeIndexBuffer.GetData(data); + NativeIndexBuffer.GetData(data); } public void GetData(T[] data, int startIndex, int elementCount) @@ -164,19 +164,18 @@ namespace ANX.Framework.Graphics public void SetData(int offsetInBytes, T[] data, int startIndex, int elementCount) where T : struct { - NativeIndexBuffer.SetData(GraphicsDevice, offsetInBytes, data, - startIndex, elementCount); + NativeIndexBuffer.SetData(offsetInBytes, data, startIndex, elementCount); } public void SetData(T[] data) where T : struct { - NativeIndexBuffer.SetData(GraphicsDevice, data); + NativeIndexBuffer.SetData(data); } public void SetData(T[] data, int startIndex, int elementCount) where T : struct { - NativeIndexBuffer.SetData(GraphicsDevice, data, startIndex, elementCount); + NativeIndexBuffer.SetData(data, startIndex, elementCount); } #endregion diff --git a/ANX.Framework/Graphics/RenderTarget2D.cs b/ANX.Framework/Graphics/RenderTarget2D.cs index 88f6c8ad..8bb3bdc2 100644 --- a/ANX.Framework/Graphics/RenderTarget2D.cs +++ b/ANX.Framework/Graphics/RenderTarget2D.cs @@ -30,8 +30,8 @@ namespace ANX.Framework.Graphics public RenderTarget2D(GraphicsDevice graphicsDevice, int width, int height) : base(graphicsDevice) { - this.width = width; - this.height = height; + this.Width = width; + this.Height = height; OneOverWidth = 1f / width; OneOverHeight = 1f / height; @@ -52,8 +52,8 @@ namespace ANX.Framework.Graphics [MarshalAsAttribute(UnmanagedType.U1)] bool mipMap, SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat) : base(graphicsDevice) { - this.width = width; - this.height = height; + this.Width = width; + this.Height = height; OneOverWidth = 1f / width; OneOverHeight = 1f / height; @@ -75,8 +75,8 @@ namespace ANX.Framework.Graphics int preferredMultiSampleCount, RenderTargetUsage usage) : base(graphicsDevice) { - this.width = width; - this.height = height; + this.Width = width; + this.Height = height; OneOverWidth = 1f / width; OneOverHeight = 1f / height; diff --git a/ANX.Framework/Graphics/Texture2D.cs b/ANX.Framework/Graphics/Texture2D.cs index 0ae52927..ebe6bc1e 100644 --- a/ANX.Framework/Graphics/Texture2D.cs +++ b/ANX.Framework/Graphics/Texture2D.cs @@ -20,9 +20,6 @@ namespace ANX.Framework.Graphics public class Texture2D : Texture, IGraphicsResource { #region Private - protected internal int width; - protected internal int height; - internal float OneOverWidth; internal float OneOverHeight; @@ -44,24 +41,20 @@ namespace ANX.Framework.Graphics { get { - return new Rectangle(0, 0, this.width, this.height); + return new Rectangle(0, 0, this.Width, this.Height); } } public int Width { - get - { - return this.width; - } + get; + protected set; } public int Height { - get - { - return this.height; - } + get; + protected set; } #endregion @@ -74,8 +67,8 @@ namespace ANX.Framework.Graphics public Texture2D(GraphicsDevice graphicsDevice, int width, int height) : base(graphicsDevice) { - this.width = width; - this.height = height; + this.Width = width; + this.Height = height; OneOverWidth = 1f / width; OneOverHeight = 1f / height; @@ -89,8 +82,8 @@ namespace ANX.Framework.Graphics SurfaceFormat format) : base(graphicsDevice) { - this.width = width; - this.height = height; + this.Width = width; + this.Height = height; OneOverWidth = 1f / width; OneOverHeight = 1f / height; @@ -104,8 +97,8 @@ namespace ANX.Framework.Graphics internal Texture2D(GraphicsDevice graphicsDevice, int width, int height, int mipCount, SurfaceFormat format) : base(graphicsDevice) { - this.width = width; - this.height = height; + this.Width = width; + this.Height = height; OneOverWidth = 1f / width; OneOverHeight = 1f / height; @@ -154,12 +147,12 @@ namespace ANX.Framework.Graphics public void SetData(T[] data) where T : struct { - NativeTexture.SetData(GraphicsDevice, data); + NativeTexture.SetData(data); } public void SetData(T[] data, int startIndex, int elementCount) where T : struct { - NativeTexture.SetData(GraphicsDevice, data, startIndex, elementCount); + NativeTexture.SetData(data, startIndex, elementCount); } #endregion @@ -200,7 +193,7 @@ namespace ANX.Framework.Graphics private void CreateNativeTextureSurface() { var creator = AddInSystemFactory.Instance.GetDefaultCreator(); - nativeTexture2D = creator.CreateTexture(GraphicsDevice, Format, width, height, LevelCount); + nativeTexture2D = creator.CreateTexture(GraphicsDevice, Format, Width, Height, LevelCount); base.nativeTexture = nativeTexture2D; } #endregion diff --git a/ANX.Framework/Graphics/VertexBuffer.cs b/ANX.Framework/Graphics/VertexBuffer.cs index 91552b57..9f9f7ca9 100644 --- a/ANX.Framework/Graphics/VertexBuffer.cs +++ b/ANX.Framework/Graphics/VertexBuffer.cs @@ -107,7 +107,7 @@ namespace ANX.Framework.Graphics public void GetData(T[] data) where T : struct { - NativeVertexBuffer.GetData(data); + NativeVertexBuffer.GetData(data); } public void GetData(T[] data, int startIndex, int elementCount) where T : struct @@ -119,17 +119,17 @@ namespace ANX.Framework.Graphics #region SetData public void SetData(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride) where T : struct { - NativeVertexBuffer.SetData(GraphicsDevice, offsetInBytes, data, startIndex, elementCount, vertexStride); + NativeVertexBuffer.SetData(offsetInBytes, data, startIndex, elementCount, vertexStride); } public void SetData(T[] data) where T : struct { - NativeVertexBuffer.SetData(GraphicsDevice, data); + NativeVertexBuffer.SetData(data); } public void SetData(T[] data, int startIndex, int elementCount) where T : struct { - NativeVertexBuffer.SetData(GraphicsDevice, data, startIndex, elementCount); + NativeVertexBuffer.SetData(data, startIndex, elementCount); } #endregion diff --git a/ANX.Framework/NonXNA/RenderSystem/INativeBuffer.cs b/ANX.Framework/NonXNA/RenderSystem/INativeBuffer.cs index ad1c9932..6f7e0fd0 100644 --- a/ANX.Framework/NonXNA/RenderSystem/INativeBuffer.cs +++ b/ANX.Framework/NonXNA/RenderSystem/INativeBuffer.cs @@ -9,13 +9,10 @@ namespace ANX.Framework.NonXNA.RenderSystem { public interface INativeBuffer : IDisposable { - void SetData(GraphicsDevice graphicsDevice, T[] data) where T : struct; - void SetData(GraphicsDevice graphicsDevice, T[] data, int startIndex, - int elementCount) where T : struct; - void SetData(GraphicsDevice graphicsDevice, int offsetInBytes, T[] data, - int startIndex, int elementCount) where T : struct; + void SetData(T[] data) where T : struct; + void SetData(T[] data, int startIndex, int elementCount) where T : struct; - void GetData(T[] data) where T : struct; + void GetData(T[] data) where T : struct; void GetData(T[] data, int startIndex, int elementCount) where T : struct; } } diff --git a/ANX.Framework/NonXNA/RenderSystem/INativeGraphicsDevice.cs b/ANX.Framework/NonXNA/RenderSystem/INativeGraphicsDevice.cs index 81edbfd6..9bd5ad32 100644 --- a/ANX.Framework/NonXNA/RenderSystem/INativeGraphicsDevice.cs +++ b/ANX.Framework/NonXNA/RenderSystem/INativeGraphicsDevice.cs @@ -9,7 +9,6 @@ namespace ANX.Framework.NonXNA { public interface INativeGraphicsDevice : IDisposable { - void Clear(ref Color color); void Clear(ClearOptions options, Vector4 color, float depth, int stencil); void Present(); diff --git a/ANX.Framework/NonXNA/RenderSystem/INativeIndexBuffer.cs b/ANX.Framework/NonXNA/RenderSystem/INativeIndexBuffer.cs index ae915383..2cefd1a4 100644 --- a/ANX.Framework/NonXNA/RenderSystem/INativeIndexBuffer.cs +++ b/ANX.Framework/NonXNA/RenderSystem/INativeIndexBuffer.cs @@ -9,7 +9,8 @@ namespace ANX.Framework.NonXNA.RenderSystem { public interface INativeIndexBuffer : INativeBuffer { - void GetData(int offsetInBytes, T[] data, int startIndex, - int elementCount) where T : struct; + void GetData(int offsetInBytes, T[] data, int startIndex, int elementCount) where T : struct; + + void SetData(int offsetInBytes, T[] data, int startIndex, int elementCount) where T : struct; } } diff --git a/ANX.Framework/NonXNA/RenderSystem/INativeTexture2D.cs b/ANX.Framework/NonXNA/RenderSystem/INativeTexture2D.cs index 6ca499ea..0f32415f 100644 --- a/ANX.Framework/NonXNA/RenderSystem/INativeTexture2D.cs +++ b/ANX.Framework/NonXNA/RenderSystem/INativeTexture2D.cs @@ -12,10 +12,8 @@ namespace ANX.Framework.NonXNA.RenderSystem void SaveAsJpeg(Stream stream, int width, int height); void SaveAsPng(Stream stream, int width, int height); - void GetData(int level, Nullable rect, T[] data, - int startIndex, int elementCount) where T : struct; + void GetData(int level, Nullable rect, T[] data, int startIndex, int elementCount) where T : struct; - void SetData(int level, Nullable rect, T[] data, - int startIndex, int elementCount) where T : struct; + void SetData(int level, Nullable rect, T[] data, int startIndex, int elementCount) where T : struct; } } diff --git a/ANX.Framework/NonXNA/RenderSystem/INativeVertexBuffer.cs b/ANX.Framework/NonXNA/RenderSystem/INativeVertexBuffer.cs index cfd3bbbd..074aeb0a 100644 --- a/ANX.Framework/NonXNA/RenderSystem/INativeVertexBuffer.cs +++ b/ANX.Framework/NonXNA/RenderSystem/INativeVertexBuffer.cs @@ -10,10 +10,8 @@ namespace ANX.Framework.NonXNA.RenderSystem { public interface INativeVertexBuffer : INativeBuffer { - void GetData(int offsetInBytes, T[] data, int startIndex, int elementCount, - int vertexStride) where T : struct; + void GetData(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride) where T : struct; - void SetData(GraphicsDevice graphicsDevice, int offsetInBytes, T[] data, - int startIndex, int elementCount, int vertexStride) where T : struct; + void SetData(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride) where T : struct; } } diff --git a/ANX.Framework_VS2013.sln b/ANX.Framework_VS2013.sln index b01bd829..5121bd70 100644 --- a/ANX.Framework_VS2013.sln +++ b/ANX.Framework_VS2013.sln @@ -663,39 +663,38 @@ Global {B30DE9C2-0926-46B6-8351-9AF276C472D5}.Release|x86.ActiveCfg = Release|x86 {B30DE9C2-0926-46B6-8351-9AF276C472D5}.Release|x86.Build.0 = Release|x86 {B30DE9C2-0926-46B6-8351-9AF276C472D5}.Release|Xbox 360.ActiveCfg = Release|x86 - {05233BB1-444F-43F6-A3DF-B82AA924E094}.Debug|Android.ActiveCfg = Debug|x86 - {05233BB1-444F-43F6-A3DF-B82AA924E094}.Debug|Any CPU.ActiveCfg = Debug|x86 - {05233BB1-444F-43F6-A3DF-B82AA924E094}.Debug|Any CPU.Build.0 = Debug|x86 - {05233BB1-444F-43F6-A3DF-B82AA924E094}.Debug|ARM.ActiveCfg = Debug|x86 - {05233BB1-444F-43F6-A3DF-B82AA924E094}.Debug|iOS.ActiveCfg = Debug|x86 - {05233BB1-444F-43F6-A3DF-B82AA924E094}.Debug|Linux.ActiveCfg = Debug|x86 - {05233BB1-444F-43F6-A3DF-B82AA924E094}.Debug|Mac OS.ActiveCfg = Debug|x86 - {05233BB1-444F-43F6-A3DF-B82AA924E094}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 - {05233BB1-444F-43F6-A3DF-B82AA924E094}.Debug|Mixed Platforms.Build.0 = Debug|x86 - {05233BB1-444F-43F6-A3DF-B82AA924E094}.Debug|PS Vita.ActiveCfg = Debug|x86 - {05233BB1-444F-43F6-A3DF-B82AA924E094}.Debug|Windows.ActiveCfg = Debug|x86 - {05233BB1-444F-43F6-A3DF-B82AA924E094}.Debug|Windows Metro.ActiveCfg = Debug|x86 - {05233BB1-444F-43F6-A3DF-B82AA924E094}.Debug|Windows Phone.ActiveCfg = Debug|x86 - {05233BB1-444F-43F6-A3DF-B82AA924E094}.Debug|x64.ActiveCfg = Debug|x86 - {05233BB1-444F-43F6-A3DF-B82AA924E094}.Debug|x86.ActiveCfg = Debug|x86 - {05233BB1-444F-43F6-A3DF-B82AA924E094}.Debug|x86.Build.0 = Debug|x86 - {05233BB1-444F-43F6-A3DF-B82AA924E094}.Debug|Xbox 360.ActiveCfg = Debug|x86 - {05233BB1-444F-43F6-A3DF-B82AA924E094}.Release|Android.ActiveCfg = Release|x86 - {05233BB1-444F-43F6-A3DF-B82AA924E094}.Release|Any CPU.ActiveCfg = Release|x86 - {05233BB1-444F-43F6-A3DF-B82AA924E094}.Release|ARM.ActiveCfg = Release|x86 - {05233BB1-444F-43F6-A3DF-B82AA924E094}.Release|iOS.ActiveCfg = Release|x86 - {05233BB1-444F-43F6-A3DF-B82AA924E094}.Release|Linux.ActiveCfg = Release|x86 - {05233BB1-444F-43F6-A3DF-B82AA924E094}.Release|Mac OS.ActiveCfg = Release|x86 - {05233BB1-444F-43F6-A3DF-B82AA924E094}.Release|Mixed Platforms.ActiveCfg = Release|x86 - {05233BB1-444F-43F6-A3DF-B82AA924E094}.Release|Mixed Platforms.Build.0 = Release|x86 - {05233BB1-444F-43F6-A3DF-B82AA924E094}.Release|PS Vita.ActiveCfg = Release|x86 - {05233BB1-444F-43F6-A3DF-B82AA924E094}.Release|Windows.ActiveCfg = Release|x86 - {05233BB1-444F-43F6-A3DF-B82AA924E094}.Release|Windows Metro.ActiveCfg = Release|x86 - {05233BB1-444F-43F6-A3DF-B82AA924E094}.Release|Windows Phone.ActiveCfg = Release|x86 - {05233BB1-444F-43F6-A3DF-B82AA924E094}.Release|x64.ActiveCfg = Release|x86 - {05233BB1-444F-43F6-A3DF-B82AA924E094}.Release|x86.ActiveCfg = Release|x86 - {05233BB1-444F-43F6-A3DF-B82AA924E094}.Release|x86.Build.0 = Release|x86 - {05233BB1-444F-43F6-A3DF-B82AA924E094}.Release|Xbox 360.ActiveCfg = Release|x86 + {05233BB1-444F-43F6-A3DF-B82AA924E094}.Debug|Android.ActiveCfg = Debug|Any CPU + {05233BB1-444F-43F6-A3DF-B82AA924E094}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {05233BB1-444F-43F6-A3DF-B82AA924E094}.Debug|Any CPU.Build.0 = Debug|Any CPU + {05233BB1-444F-43F6-A3DF-B82AA924E094}.Debug|ARM.ActiveCfg = Debug|Any CPU + {05233BB1-444F-43F6-A3DF-B82AA924E094}.Debug|iOS.ActiveCfg = Debug|Any CPU + {05233BB1-444F-43F6-A3DF-B82AA924E094}.Debug|Linux.ActiveCfg = Debug|Any CPU + {05233BB1-444F-43F6-A3DF-B82AA924E094}.Debug|Mac OS.ActiveCfg = Debug|Any CPU + {05233BB1-444F-43F6-A3DF-B82AA924E094}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {05233BB1-444F-43F6-A3DF-B82AA924E094}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {05233BB1-444F-43F6-A3DF-B82AA924E094}.Debug|PS Vita.ActiveCfg = Debug|Any CPU + {05233BB1-444F-43F6-A3DF-B82AA924E094}.Debug|Windows.ActiveCfg = Debug|Any CPU + {05233BB1-444F-43F6-A3DF-B82AA924E094}.Debug|Windows Metro.ActiveCfg = Debug|Any CPU + {05233BB1-444F-43F6-A3DF-B82AA924E094}.Debug|Windows Phone.ActiveCfg = Debug|Any CPU + {05233BB1-444F-43F6-A3DF-B82AA924E094}.Debug|x64.ActiveCfg = Debug|Any CPU + {05233BB1-444F-43F6-A3DF-B82AA924E094}.Debug|x86.ActiveCfg = Debug|Any CPU + {05233BB1-444F-43F6-A3DF-B82AA924E094}.Debug|Xbox 360.ActiveCfg = Debug|Any CPU + {05233BB1-444F-43F6-A3DF-B82AA924E094}.Release|Android.ActiveCfg = Release|Any CPU + {05233BB1-444F-43F6-A3DF-B82AA924E094}.Release|Any CPU.ActiveCfg = Release|Any CPU + {05233BB1-444F-43F6-A3DF-B82AA924E094}.Release|Any CPU.Build.0 = Release|Any CPU + {05233BB1-444F-43F6-A3DF-B82AA924E094}.Release|ARM.ActiveCfg = Release|Any CPU + {05233BB1-444F-43F6-A3DF-B82AA924E094}.Release|iOS.ActiveCfg = Release|Any CPU + {05233BB1-444F-43F6-A3DF-B82AA924E094}.Release|Linux.ActiveCfg = Release|Any CPU + {05233BB1-444F-43F6-A3DF-B82AA924E094}.Release|Mac OS.ActiveCfg = Release|Any CPU + {05233BB1-444F-43F6-A3DF-B82AA924E094}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {05233BB1-444F-43F6-A3DF-B82AA924E094}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {05233BB1-444F-43F6-A3DF-B82AA924E094}.Release|PS Vita.ActiveCfg = Release|Any CPU + {05233BB1-444F-43F6-A3DF-B82AA924E094}.Release|Windows.ActiveCfg = Release|Any CPU + {05233BB1-444F-43F6-A3DF-B82AA924E094}.Release|Windows Metro.ActiveCfg = Release|Any CPU + {05233BB1-444F-43F6-A3DF-B82AA924E094}.Release|Windows Phone.ActiveCfg = Release|Any CPU + {05233BB1-444F-43F6-A3DF-B82AA924E094}.Release|x64.ActiveCfg = Release|Any CPU + {05233BB1-444F-43F6-A3DF-B82AA924E094}.Release|x86.ActiveCfg = Release|Any CPU + {05233BB1-444F-43F6-A3DF-B82AA924E094}.Release|Xbox 360.ActiveCfg = Release|Any CPU {71378D2F-0DCD-4413-8DE0-3FEC0BA04E27}.Debug|Android.ActiveCfg = Debug|x86 {71378D2F-0DCD-4413-8DE0-3FEC0BA04E27}.Debug|Any CPU.ActiveCfg = Debug|x86 {71378D2F-0DCD-4413-8DE0-3FEC0BA04E27}.Debug|Any CPU.Build.0 = Debug|x86 @@ -1052,39 +1051,38 @@ Global {5040A9C7-6DEC-4613-8586-A598C4070B35}.Release|x64.ActiveCfg = Release|Any CPU {5040A9C7-6DEC-4613-8586-A598C4070B35}.Release|x86.ActiveCfg = Release|Any CPU {5040A9C7-6DEC-4613-8586-A598C4070B35}.Release|Xbox 360.ActiveCfg = Release|Any CPU - {9C9C6245-35C2-4230-8E17-9038A228227F}.Debug|Android.ActiveCfg = Debug|x86 - {9C9C6245-35C2-4230-8E17-9038A228227F}.Debug|Any CPU.ActiveCfg = Debug|x86 - {9C9C6245-35C2-4230-8E17-9038A228227F}.Debug|Any CPU.Build.0 = Debug|x86 - {9C9C6245-35C2-4230-8E17-9038A228227F}.Debug|ARM.ActiveCfg = Debug|x86 - {9C9C6245-35C2-4230-8E17-9038A228227F}.Debug|iOS.ActiveCfg = Debug|x86 - {9C9C6245-35C2-4230-8E17-9038A228227F}.Debug|Linux.ActiveCfg = Debug|x86 - {9C9C6245-35C2-4230-8E17-9038A228227F}.Debug|Mac OS.ActiveCfg = Debug|x86 - {9C9C6245-35C2-4230-8E17-9038A228227F}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 - {9C9C6245-35C2-4230-8E17-9038A228227F}.Debug|Mixed Platforms.Build.0 = Debug|x86 - {9C9C6245-35C2-4230-8E17-9038A228227F}.Debug|PS Vita.ActiveCfg = Debug|x86 - {9C9C6245-35C2-4230-8E17-9038A228227F}.Debug|Windows.ActiveCfg = Debug|x86 - {9C9C6245-35C2-4230-8E17-9038A228227F}.Debug|Windows Metro.ActiveCfg = Debug|x86 - {9C9C6245-35C2-4230-8E17-9038A228227F}.Debug|Windows Phone.ActiveCfg = Debug|x86 - {9C9C6245-35C2-4230-8E17-9038A228227F}.Debug|x64.ActiveCfg = Debug|x86 - {9C9C6245-35C2-4230-8E17-9038A228227F}.Debug|x86.ActiveCfg = Debug|x86 - {9C9C6245-35C2-4230-8E17-9038A228227F}.Debug|x86.Build.0 = Debug|x86 - {9C9C6245-35C2-4230-8E17-9038A228227F}.Debug|Xbox 360.ActiveCfg = Debug|x86 - {9C9C6245-35C2-4230-8E17-9038A228227F}.Release|Android.ActiveCfg = Release|x86 - {9C9C6245-35C2-4230-8E17-9038A228227F}.Release|Any CPU.ActiveCfg = Release|x86 - {9C9C6245-35C2-4230-8E17-9038A228227F}.Release|ARM.ActiveCfg = Release|x86 - {9C9C6245-35C2-4230-8E17-9038A228227F}.Release|iOS.ActiveCfg = Release|x86 - {9C9C6245-35C2-4230-8E17-9038A228227F}.Release|Linux.ActiveCfg = Release|x86 - {9C9C6245-35C2-4230-8E17-9038A228227F}.Release|Mac OS.ActiveCfg = Release|x86 - {9C9C6245-35C2-4230-8E17-9038A228227F}.Release|Mixed Platforms.ActiveCfg = Release|x86 - {9C9C6245-35C2-4230-8E17-9038A228227F}.Release|Mixed Platforms.Build.0 = Release|x86 - {9C9C6245-35C2-4230-8E17-9038A228227F}.Release|PS Vita.ActiveCfg = Release|x86 - {9C9C6245-35C2-4230-8E17-9038A228227F}.Release|Windows.ActiveCfg = Release|x86 - {9C9C6245-35C2-4230-8E17-9038A228227F}.Release|Windows Metro.ActiveCfg = Release|x86 - {9C9C6245-35C2-4230-8E17-9038A228227F}.Release|Windows Phone.ActiveCfg = Release|x86 - {9C9C6245-35C2-4230-8E17-9038A228227F}.Release|x64.ActiveCfg = Release|x86 - {9C9C6245-35C2-4230-8E17-9038A228227F}.Release|x86.ActiveCfg = Release|x86 - {9C9C6245-35C2-4230-8E17-9038A228227F}.Release|x86.Build.0 = Release|x86 - {9C9C6245-35C2-4230-8E17-9038A228227F}.Release|Xbox 360.ActiveCfg = Release|x86 + {9C9C6245-35C2-4230-8E17-9038A228227F}.Debug|Android.ActiveCfg = Debug|Any CPU + {9C9C6245-35C2-4230-8E17-9038A228227F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9C9C6245-35C2-4230-8E17-9038A228227F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9C9C6245-35C2-4230-8E17-9038A228227F}.Debug|ARM.ActiveCfg = Debug|Any CPU + {9C9C6245-35C2-4230-8E17-9038A228227F}.Debug|iOS.ActiveCfg = Debug|Any CPU + {9C9C6245-35C2-4230-8E17-9038A228227F}.Debug|Linux.ActiveCfg = Debug|Any CPU + {9C9C6245-35C2-4230-8E17-9038A228227F}.Debug|Mac OS.ActiveCfg = Debug|Any CPU + {9C9C6245-35C2-4230-8E17-9038A228227F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {9C9C6245-35C2-4230-8E17-9038A228227F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {9C9C6245-35C2-4230-8E17-9038A228227F}.Debug|PS Vita.ActiveCfg = Debug|Any CPU + {9C9C6245-35C2-4230-8E17-9038A228227F}.Debug|Windows.ActiveCfg = Debug|Any CPU + {9C9C6245-35C2-4230-8E17-9038A228227F}.Debug|Windows Metro.ActiveCfg = Debug|Any CPU + {9C9C6245-35C2-4230-8E17-9038A228227F}.Debug|Windows Phone.ActiveCfg = Debug|Any CPU + {9C9C6245-35C2-4230-8E17-9038A228227F}.Debug|x64.ActiveCfg = Debug|Any CPU + {9C9C6245-35C2-4230-8E17-9038A228227F}.Debug|x86.ActiveCfg = Debug|Any CPU + {9C9C6245-35C2-4230-8E17-9038A228227F}.Debug|Xbox 360.ActiveCfg = Debug|Any CPU + {9C9C6245-35C2-4230-8E17-9038A228227F}.Release|Android.ActiveCfg = Release|Any CPU + {9C9C6245-35C2-4230-8E17-9038A228227F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9C9C6245-35C2-4230-8E17-9038A228227F}.Release|Any CPU.Build.0 = Release|Any CPU + {9C9C6245-35C2-4230-8E17-9038A228227F}.Release|ARM.ActiveCfg = Release|Any CPU + {9C9C6245-35C2-4230-8E17-9038A228227F}.Release|iOS.ActiveCfg = Release|Any CPU + {9C9C6245-35C2-4230-8E17-9038A228227F}.Release|Linux.ActiveCfg = Release|Any CPU + {9C9C6245-35C2-4230-8E17-9038A228227F}.Release|Mac OS.ActiveCfg = Release|Any CPU + {9C9C6245-35C2-4230-8E17-9038A228227F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {9C9C6245-35C2-4230-8E17-9038A228227F}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {9C9C6245-35C2-4230-8E17-9038A228227F}.Release|PS Vita.ActiveCfg = Release|Any CPU + {9C9C6245-35C2-4230-8E17-9038A228227F}.Release|Windows.ActiveCfg = Release|Any CPU + {9C9C6245-35C2-4230-8E17-9038A228227F}.Release|Windows Metro.ActiveCfg = Release|Any CPU + {9C9C6245-35C2-4230-8E17-9038A228227F}.Release|Windows Phone.ActiveCfg = Release|Any CPU + {9C9C6245-35C2-4230-8E17-9038A228227F}.Release|x64.ActiveCfg = Release|Any CPU + {9C9C6245-35C2-4230-8E17-9038A228227F}.Release|x86.ActiveCfg = Release|Any CPU + {9C9C6245-35C2-4230-8E17-9038A228227F}.Release|Xbox 360.ActiveCfg = Release|Any CPU {441D953C-94C2-42FD-9917-3EB2F6E28173}.Debug|Android.ActiveCfg = Debug|x86 {441D953C-94C2-42FD-9917-3EB2F6E28173}.Debug|Any CPU.ActiveCfg = Debug|x86 {441D953C-94C2-42FD-9917-3EB2F6E28173}.Debug|Any CPU.Build.0 = Debug|x86 @@ -1572,39 +1570,38 @@ Global {E2EE2D12-A98E-4C21-AFFA-35F48D2B2A94}.Release|x64.ActiveCfg = Release|Any CPU {E2EE2D12-A98E-4C21-AFFA-35F48D2B2A94}.Release|x86.ActiveCfg = Release|Any CPU {E2EE2D12-A98E-4C21-AFFA-35F48D2B2A94}.Release|Xbox 360.ActiveCfg = Release|Any CPU - {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Debug|Android.ActiveCfg = Debug|x86 - {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Debug|Any CPU.ActiveCfg = Debug|x86 - {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Debug|Any CPU.Build.0 = Debug|x86 - {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Debug|ARM.ActiveCfg = Debug|x86 - {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Debug|iOS.ActiveCfg = Debug|x86 - {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Debug|Linux.ActiveCfg = Debug|x86 - {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Debug|Mac OS.ActiveCfg = Debug|x86 - {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 - {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Debug|Mixed Platforms.Build.0 = Debug|x86 - {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Debug|PS Vita.ActiveCfg = Debug|x86 - {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Debug|Windows.ActiveCfg = Debug|x86 - {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Debug|Windows Metro.ActiveCfg = Debug|x86 - {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Debug|Windows Phone.ActiveCfg = Debug|x86 - {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Debug|x64.ActiveCfg = Debug|x86 - {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Debug|x86.ActiveCfg = Debug|x86 - {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Debug|x86.Build.0 = Debug|x86 - {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Debug|Xbox 360.ActiveCfg = Debug|x86 - {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Release|Android.ActiveCfg = Release|x86 - {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Release|Any CPU.ActiveCfg = Release|x86 - {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Release|ARM.ActiveCfg = Release|x86 - {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Release|iOS.ActiveCfg = Release|x86 - {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Release|Linux.ActiveCfg = Release|x86 - {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Release|Mac OS.ActiveCfg = Release|x86 - {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Release|Mixed Platforms.ActiveCfg = Release|x86 - {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Release|Mixed Platforms.Build.0 = Release|x86 - {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Release|PS Vita.ActiveCfg = Release|x86 - {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Release|Windows.ActiveCfg = Release|x86 - {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Release|Windows Metro.ActiveCfg = Release|x86 - {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Release|Windows Phone.ActiveCfg = Release|x86 - {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Release|x64.ActiveCfg = Release|x86 - {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Release|x86.ActiveCfg = Release|x86 - {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Release|x86.Build.0 = Release|x86 - {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Release|Xbox 360.ActiveCfg = Release|x86 + {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Debug|Android.ActiveCfg = Debug|Any CPU + {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Debug|ARM.ActiveCfg = Debug|Any CPU + {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Debug|iOS.ActiveCfg = Debug|Any CPU + {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Debug|Linux.ActiveCfg = Debug|Any CPU + {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Debug|Mac OS.ActiveCfg = Debug|Any CPU + {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Debug|PS Vita.ActiveCfg = Debug|Any CPU + {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Debug|Windows.ActiveCfg = Debug|Any CPU + {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Debug|Windows Metro.ActiveCfg = Debug|Any CPU + {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Debug|Windows Phone.ActiveCfg = Debug|Any CPU + {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Debug|x64.ActiveCfg = Debug|Any CPU + {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Debug|x86.ActiveCfg = Debug|Any CPU + {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Debug|Xbox 360.ActiveCfg = Debug|Any CPU + {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Release|Android.ActiveCfg = Release|Any CPU + {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Release|Any CPU.Build.0 = Release|Any CPU + {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Release|ARM.ActiveCfg = Release|Any CPU + {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Release|iOS.ActiveCfg = Release|Any CPU + {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Release|Linux.ActiveCfg = Release|Any CPU + {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Release|Mac OS.ActiveCfg = Release|Any CPU + {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Release|PS Vita.ActiveCfg = Release|Any CPU + {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Release|Windows.ActiveCfg = Release|Any CPU + {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Release|Windows Metro.ActiveCfg = Release|Any CPU + {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Release|Windows Phone.ActiveCfg = Release|Any CPU + {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Release|x64.ActiveCfg = Release|Any CPU + {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Release|x86.ActiveCfg = Release|Any CPU + {4A048A8C-C31D-4FC8-AAF3-C387B9E0309B}.Release|Xbox 360.ActiveCfg = Release|Any CPU {45DD7B40-C498-4DD2-A16B-FD6C4E6991B3}.Debug|Android.ActiveCfg = Debug|Any CPU {45DD7B40-C498-4DD2-A16B-FD6C4E6991B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {45DD7B40-C498-4DD2-A16B-FD6C4E6991B3}.Debug|Any CPU.Build.0 = Debug|Any CPU @@ -1637,72 +1634,70 @@ Global {45DD7B40-C498-4DD2-A16B-FD6C4E6991B3}.Release|x64.ActiveCfg = Release|Any CPU {45DD7B40-C498-4DD2-A16B-FD6C4E6991B3}.Release|x86.ActiveCfg = Release|Any CPU {45DD7B40-C498-4DD2-A16B-FD6C4E6991B3}.Release|Xbox 360.ActiveCfg = Release|Any CPU - {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Debug|Android.ActiveCfg = Debug|x86 - {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Debug|Any CPU.ActiveCfg = Debug|x86 - {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Debug|Any CPU.Build.0 = Debug|x86 - {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Debug|ARM.ActiveCfg = Debug|x86 - {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Debug|iOS.ActiveCfg = Debug|x86 - {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Debug|Linux.ActiveCfg = Debug|x86 - {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Debug|Mac OS.ActiveCfg = Debug|x86 - {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 - {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Debug|Mixed Platforms.Build.0 = Debug|x86 - {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Debug|PS Vita.ActiveCfg = Debug|x86 - {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Debug|Windows.ActiveCfg = Debug|x86 - {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Debug|Windows Metro.ActiveCfg = Debug|x86 - {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Debug|Windows Phone.ActiveCfg = Debug|x86 - {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Debug|x64.ActiveCfg = Debug|x86 - {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Debug|x86.ActiveCfg = Debug|x86 - {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Debug|x86.Build.0 = Debug|x86 - {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Debug|Xbox 360.ActiveCfg = Debug|x86 - {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|Android.ActiveCfg = Release|x86 - {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|Any CPU.ActiveCfg = Release|x86 - {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|ARM.ActiveCfg = Release|x86 - {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|iOS.ActiveCfg = Release|x86 - {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|Linux.ActiveCfg = Release|x86 - {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|Mac OS.ActiveCfg = Release|x86 - {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|Mixed Platforms.ActiveCfg = Release|x86 - {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|Mixed Platforms.Build.0 = Release|x86 - {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|PS Vita.ActiveCfg = Release|x86 - {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|Windows.ActiveCfg = Release|x86 - {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|Windows Metro.ActiveCfg = Release|x86 - {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|Windows Phone.ActiveCfg = Release|x86 - {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|x64.ActiveCfg = Release|x86 - {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|x86.ActiveCfg = Release|x86 - {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|x86.Build.0 = Release|x86 - {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|Xbox 360.ActiveCfg = Release|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|Android.ActiveCfg = Debug|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|Any CPU.ActiveCfg = Debug|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|Any CPU.Build.0 = Debug|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|ARM.ActiveCfg = Debug|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|iOS.ActiveCfg = Debug|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|Linux.ActiveCfg = Debug|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|Mac OS.ActiveCfg = Debug|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|Mixed Platforms.Build.0 = Debug|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|PS Vita.ActiveCfg = Debug|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|Windows.ActiveCfg = Debug|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|Windows Metro.ActiveCfg = Debug|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|Windows Phone.ActiveCfg = Debug|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|x64.ActiveCfg = Debug|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|x86.ActiveCfg = Debug|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|x86.Build.0 = Debug|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|Xbox 360.ActiveCfg = Debug|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|Android.ActiveCfg = Release|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|Any CPU.ActiveCfg = Release|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|ARM.ActiveCfg = Release|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|iOS.ActiveCfg = Release|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|Linux.ActiveCfg = Release|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|Mac OS.ActiveCfg = Release|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|Mixed Platforms.ActiveCfg = Release|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|Mixed Platforms.Build.0 = Release|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|PS Vita.ActiveCfg = Release|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|Windows.ActiveCfg = Release|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|Windows Metro.ActiveCfg = Release|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|Windows Phone.ActiveCfg = Release|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|x64.ActiveCfg = Release|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|x86.ActiveCfg = Release|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|x86.Build.0 = Release|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|Xbox 360.ActiveCfg = Release|x86 + {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Debug|Android.ActiveCfg = Debug|Any CPU + {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Debug|ARM.ActiveCfg = Debug|Any CPU + {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Debug|iOS.ActiveCfg = Debug|Any CPU + {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Debug|Linux.ActiveCfg = Debug|Any CPU + {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Debug|Mac OS.ActiveCfg = Debug|Any CPU + {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Debug|PS Vita.ActiveCfg = Debug|Any CPU + {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Debug|Windows.ActiveCfg = Debug|Any CPU + {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Debug|Windows Metro.ActiveCfg = Debug|Any CPU + {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Debug|Windows Phone.ActiveCfg = Debug|Any CPU + {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Debug|x64.ActiveCfg = Debug|Any CPU + {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Debug|x86.ActiveCfg = Debug|Any CPU + {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Debug|Xbox 360.ActiveCfg = Debug|Any CPU + {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|Android.ActiveCfg = Release|Any CPU + {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|Any CPU.Build.0 = Release|Any CPU + {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|ARM.ActiveCfg = Release|Any CPU + {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|iOS.ActiveCfg = Release|Any CPU + {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|Linux.ActiveCfg = Release|Any CPU + {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|Mac OS.ActiveCfg = Release|Any CPU + {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|PS Vita.ActiveCfg = Release|Any CPU + {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|Windows.ActiveCfg = Release|Any CPU + {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|Windows Metro.ActiveCfg = Release|Any CPU + {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|Windows Phone.ActiveCfg = Release|Any CPU + {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|x64.ActiveCfg = Release|Any CPU + {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|x86.ActiveCfg = Release|Any CPU + {9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|Xbox 360.ActiveCfg = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|Android.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|ARM.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|iOS.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|Linux.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|Mac OS.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|PS Vita.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|Windows.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|Windows Metro.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|Windows Phone.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|x64.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|x86.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|Xbox 360.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|Android.ActiveCfg = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|Any CPU.Build.0 = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|ARM.ActiveCfg = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|iOS.ActiveCfg = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|Linux.ActiveCfg = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|Mac OS.ActiveCfg = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|PS Vita.ActiveCfg = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|Windows.ActiveCfg = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|Windows Metro.ActiveCfg = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|Windows Phone.ActiveCfg = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|x64.ActiveCfg = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|x86.ActiveCfg = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|Xbox 360.ActiveCfg = Release|Any CPU {1986B0ED-3D28-4FEE-82D0-BCC39C87C18C}.Debug|Android.ActiveCfg = Debug|Any CPU {1986B0ED-3D28-4FEE-82D0-BCC39C87C18C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1986B0ED-3D28-4FEE-82D0-BCC39C87C18C}.Debug|Any CPU.Build.0 = Debug|Any CPU @@ -1933,38 +1928,38 @@ Global {AA3DF4D7-F072-47B5-B88C-20140B5F704A}.Release|x64.ActiveCfg = Release|Any CPU {AA3DF4D7-F072-47B5-B88C-20140B5F704A}.Release|x86.ActiveCfg = Release|Any CPU {AA3DF4D7-F072-47B5-B88C-20140B5F704A}.Release|Xbox 360.ActiveCfg = Release|Any CPU - {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Debug|Android.ActiveCfg = Debug|x86 - {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Debug|Any CPU.ActiveCfg = Debug|x86 - {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Debug|ARM.ActiveCfg = Debug|x86 - {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Debug|iOS.ActiveCfg = Debug|x86 - {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Debug|Linux.ActiveCfg = Debug|x86 - {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Debug|Mac OS.ActiveCfg = Debug|x86 - {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 - {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Debug|Mixed Platforms.Build.0 = Debug|x86 - {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Debug|PS Vita.ActiveCfg = Debug|x86 - {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Debug|Windows.ActiveCfg = Debug|x86 - {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Debug|Windows Metro.ActiveCfg = Debug|x86 - {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Debug|Windows Phone.ActiveCfg = Debug|x86 - {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Debug|x64.ActiveCfg = Debug|x86 - {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Debug|x86.ActiveCfg = Debug|x86 - {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Debug|x86.Build.0 = Debug|x86 - {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Debug|Xbox 360.ActiveCfg = Debug|x86 - {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Release|Android.ActiveCfg = Release|x86 - {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Release|Any CPU.ActiveCfg = Release|x86 - {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Release|ARM.ActiveCfg = Release|x86 - {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Release|iOS.ActiveCfg = Release|x86 - {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Release|Linux.ActiveCfg = Release|x86 - {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Release|Mac OS.ActiveCfg = Release|x86 - {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Release|Mixed Platforms.ActiveCfg = Release|x86 - {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Release|Mixed Platforms.Build.0 = Release|x86 - {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Release|PS Vita.ActiveCfg = Release|x86 - {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Release|Windows.ActiveCfg = Release|x86 - {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Release|Windows Metro.ActiveCfg = Release|x86 - {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Release|Windows Phone.ActiveCfg = Release|x86 - {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Release|x64.ActiveCfg = Release|x86 - {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Release|x86.ActiveCfg = Release|x86 - {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Release|x86.Build.0 = Release|x86 - {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Release|Xbox 360.ActiveCfg = Release|x86 + {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Debug|Android.ActiveCfg = Debug|Any CPU + {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Debug|ARM.ActiveCfg = Debug|Any CPU + {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Debug|iOS.ActiveCfg = Debug|Any CPU + {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Debug|Linux.ActiveCfg = Debug|Any CPU + {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Debug|Mac OS.ActiveCfg = Debug|Any CPU + {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Debug|PS Vita.ActiveCfg = Debug|Any CPU + {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Debug|Windows.ActiveCfg = Debug|Any CPU + {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Debug|Windows Metro.ActiveCfg = Debug|Any CPU + {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Debug|Windows Phone.ActiveCfg = Debug|Any CPU + {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Debug|x64.ActiveCfg = Debug|Any CPU + {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Debug|x86.ActiveCfg = Debug|Any CPU + {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Debug|Xbox 360.ActiveCfg = Debug|Any CPU + {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Release|Android.ActiveCfg = Release|Any CPU + {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Release|Any CPU.Build.0 = Release|Any CPU + {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Release|ARM.ActiveCfg = Release|Any CPU + {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Release|iOS.ActiveCfg = Release|Any CPU + {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Release|Linux.ActiveCfg = Release|Any CPU + {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Release|Mac OS.ActiveCfg = Release|Any CPU + {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Release|PS Vita.ActiveCfg = Release|Any CPU + {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Release|Windows.ActiveCfg = Release|Any CPU + {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Release|Windows Metro.ActiveCfg = Release|Any CPU + {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Release|Windows Phone.ActiveCfg = Release|Any CPU + {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Release|x64.ActiveCfg = Release|Any CPU + {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Release|x86.ActiveCfg = Release|Any CPU + {0005BDAA-F232-45C3-8D37-7E4FF7A1F605}.Release|Xbox 360.ActiveCfg = Release|Any CPU {C4DDFFFF-595E-4089-B499-06F68CAF2566}.Debug|Android.ActiveCfg = Debug|Any CPU {C4DDFFFF-595E-4089-B499-06F68CAF2566}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C4DDFFFF-595E-4089-B499-06F68CAF2566}.Debug|Any CPU.Build.0 = Debug|Any CPU diff --git a/RenderSystems/ANX.Framework.GL3/IndexBufferGL3.cs b/RenderSystems/ANX.Framework.GL3/IndexBufferGL3.cs index a980d245..ba76036a 100644 --- a/RenderSystems/ANX.Framework.GL3/IndexBufferGL3.cs +++ b/RenderSystems/ANX.Framework.GL3/IndexBufferGL3.cs @@ -102,16 +102,13 @@ namespace ANX.RenderSystem.GL3 #endregion #region SetData - public void SetData(GraphicsDevice graphicsDevice, T[] data) + public void SetData(T[] data) where T : struct { BufferData(data, 0); } - #endregion - #region SetData - public void SetData(GraphicsDevice graphicsDevice, T[] data, - int startIndex, int elementCount) where T : struct + public void SetData(T[] data, int startIndex, int elementCount) where T : struct { if (startIndex != 0 || elementCount != data.Length) @@ -125,11 +122,8 @@ namespace ANX.RenderSystem.GL3 BufferData(data, 0); } } - #endregion - #region SetData - public void SetData(GraphicsDevice graphicsDevice, int offsetInBytes, - T[] data, int startIndex, int elementCount) where T : struct + public void SetData(int offsetInBytes, T[] data, int startIndex, int elementCount) where T : struct { if (startIndex != 0 || elementCount != data.Length) diff --git a/RenderSystems/ANX.Framework.GL3/Texture2DGL3.cs b/RenderSystems/ANX.Framework.GL3/Texture2DGL3.cs index 8bcf2f68..80272951 100644 --- a/RenderSystems/ANX.Framework.GL3/Texture2DGL3.cs +++ b/RenderSystems/ANX.Framework.GL3/Texture2DGL3.cs @@ -85,14 +85,14 @@ namespace ANX.RenderSystem.GL3 // TODO: offsetInBytes // TODO: elementCount #region SetData - public void SetData(GraphicsDevice graphicsDevice, T[] data) where T : struct + public void SetData(T[] data) where T : struct { - SetData(graphicsDevice, 0, data, 0, data.Length); + SetData(0, data, 0, data.Length); } - public void SetData(GraphicsDevice graphicsDevice, T[] data, int startIndex, int elementCount) where T : struct + public void SetData(T[] data, int startIndex, int elementCount) where T : struct { - SetData(graphicsDevice, 0, data, 0, data.Length); + SetData(0, data, 0, data.Length); } public void SetData(int level, Rectangle? rect, T[] data, int startIndex, int elementCount) where T : struct @@ -136,8 +136,7 @@ namespace ANX.RenderSystem.GL3 } } - public void SetData(GraphicsDevice graphicsDevice, int offsetInBytes, T[] data, int startIndex, int elementCount) - where T : struct + public void SetData(int offsetInBytes, T[] data, int startIndex, int elementCount) where T : struct { int size = Marshal.SizeOf(typeof(T)) * data.Length; if (size > maxSetDataSize) @@ -246,7 +245,7 @@ namespace ANX.RenderSystem.GL3 internal void RecreateData() { CreateTexture(); - SetData(null, texData); + SetData(texData); texData = null; } #endregion diff --git a/RenderSystems/ANX.Framework.GL3/VertexBufferGL3.cs b/RenderSystems/ANX.Framework.GL3/VertexBufferGL3.cs index 302fb8cf..44a5a28e 100644 --- a/RenderSystems/ANX.Framework.GL3/VertexBufferGL3.cs +++ b/RenderSystems/ANX.Framework.GL3/VertexBufferGL3.cs @@ -106,16 +106,13 @@ namespace ANX.RenderSystem.GL3 #endregion #region SetData - public void SetData(GraphicsDevice graphicsDevice, T[] data) + public void SetData(T[] data) where T : struct { BufferData(data, 0); } - #endregion - #region SetData - public void SetData(GraphicsDevice graphicsDevice, T[] data, - int startIndex, int elementCount) where T : struct + public void SetData(T[] data, int startIndex, int elementCount) where T : struct { if (startIndex != 0 || elementCount != data.Length) @@ -129,11 +126,8 @@ namespace ANX.RenderSystem.GL3 BufferData(data, 0); } } - #endregion - #region SetData - public void SetData(GraphicsDevice graphicsDevice, int offsetInBytes, - T[] data, int startIndex, int elementCount) where T : struct + public void SetData(int offsetInBytes, T[] data, int startIndex, int elementCount) where T : struct { if (startIndex != 0 || elementCount != data.Length) @@ -147,11 +141,8 @@ namespace ANX.RenderSystem.GL3 BufferData(data, offsetInBytes); } } - #endregion - #region SetData - public void SetData(GraphicsDevice graphicsDevice, int offsetInBytes, - T[] data, int startIndex, int elementCount, int vertexStride) where T : struct + public void SetData(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride) where T : struct { T[] elements; if (startIndex != 0 || @@ -178,10 +169,10 @@ namespace ANX.RenderSystem.GL3 ErrorHelper.Check("BufferSubData"); } } - #endregion + #endregion - #region BufferData (private helper) - private void BufferData(T[] data, int offset) where T : struct + #region BufferData (private helper) + private void BufferData(T[] data, int offset) where T : struct { int size = Marshal.SizeOf(typeof(T)) * data.Length; diff --git a/RenderSystems/ANX.RenderSystem.DX.SharedSources/DxFormatConverter.cs b/RenderSystems/ANX.RenderSystem.DX.SharedSources/DxFormatConverter.cs index 8d388dfb..8528eee0 100644 --- a/RenderSystems/ANX.RenderSystem.DX.SharedSources/DxFormatConverter.cs +++ b/RenderSystems/ANX.RenderSystem.DX.SharedSources/DxFormatConverter.cs @@ -23,6 +23,8 @@ namespace ANX.RenderSystem.Windows.DX11 #region FormatSize (SurfaceFormat) public static int FormatSize(SurfaceFormat format) { + // 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 switch (format) { case SurfaceFormat.Vector4: @@ -39,9 +41,6 @@ namespace ANX.RenderSystem.Windows.DX11 //case SurfaceFormat.BGR565: //case SurfaceFormat.BGRA5551: // return 2; - case SurfaceFormat.Dxt1: - case SurfaceFormat.Dxt3: - case SurfaceFormat.Dxt5: case SurfaceFormat.Alpha8: return 1; } diff --git a/RenderSystems/ANX.RenderSystem.DX.SharedSources/ResourceMapping.cs b/RenderSystems/ANX.RenderSystem.DX.SharedSources/ResourceMapping.cs new file mode 100644 index 00000000..7f08c610 --- /dev/null +++ b/RenderSystems/ANX.RenderSystem.DX.SharedSources/ResourceMapping.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +#if DX10 +namespace ANX.RenderSystem.Windows.DX10 +#elif DX11 +namespace ANX.RenderSystem.Windows.DX11 +#endif +{ + public enum ResourceMapping + { + Read = 1, + Write = 2, + ReadWrite = 3, + } +} diff --git a/RenderSystems/ANX.RenderSystem.DX.SharedSources/SharedDxTexture2D.cs b/RenderSystems/ANX.RenderSystem.DX.SharedSources/SharedDxTexture2D.cs index d7a16e8e..0789646d 100644 --- a/RenderSystems/ANX.RenderSystem.DX.SharedSources/SharedDxTexture2D.cs +++ b/RenderSystems/ANX.RenderSystem.DX.SharedSources/SharedDxTexture2D.cs @@ -19,195 +19,206 @@ namespace ANX.RenderSystem.Windows.DX11 { public partial class DxTexture2D : IDisposable { - #region Private - protected int mipCount; - protected int tempSubresource; - protected int pitch; - private int formatSize; +#if DEBUG + static int textureCount = 0; +#endif + protected SurfaceFormat surfaceFormat; - protected bool useRenderTexture; - #endregion + + public int Width + { + get; + protected set; + } + + public int Height + { + get; + protected set; + } #region Public - public GraphicsDevice GraphicsDevice + public GraphicsDeviceDX GraphicsDevice { get; protected set; } #endregion - #region Constructor - protected DxTexture2D(GraphicsDevice graphicsDevice, SurfaceFormat setSurfaceFormat, int setMipCount) + public void SetData(T[] data) where T : struct { - mipCount = setMipCount; - useRenderTexture = mipCount > 1; - GraphicsDevice = graphicsDevice; - surfaceFormat = setSurfaceFormat; - - // 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 - formatSize = DxFormatConverter.FormatSize(surfaceFormat); - } - #endregion - - #region SetData - public void SetData(GraphicsDevice graphicsDevice, T[] data) where T : struct - { - SetData(graphicsDevice, 0, data, 0, data.Length); + SetData(0, null, data, 0, data.Length); } - public void SetData(GraphicsDevice graphicsDevice, T[] data, int startIndex, int elementCount) where T : struct + public void SetData(T[] data, int startIndex, int elementCount) where T : struct { - SetData(graphicsDevice, 0, data, startIndex, elementCount); + SetData(0, null, 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 + public void SetData(int level, Framework.Rectangle? rect, T[] data, int startIndex, int elementCount) where T : struct + { + int formatSize = DxFormatConverter.FormatSize(this.surfaceFormat); + int elementSize = Marshal.SizeOf(typeof(T)); - unsafe - { - GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned); - byte* colorData = (byte*)handle.AddrOfPinnedObject(); + Framework.Rectangle realRect; + if (rect.HasValue) + realRect = rect.Value; + else + { + realRect.X = 0; + realRect.Y = 0; + realRect.Width = this.Width; + realRect.Height = this.Height; + } - switch (surfaceFormat) - { - case SurfaceFormat.Color: - SetDataColor(0, offsetInBytes, colorData, startIndex, elementCount); - return; + UpdateSubresource(data, _nativeTexture, level, realRect); + } - case SurfaceFormat.Dxt1: - case SurfaceFormat.Dxt3: - case SurfaceFormat.Dxt5: - SetDataDxt(0, offsetInBytes, colorData, startIndex, elementCount, data.Length); - return; - } + public void GetData(T[] data) where T : struct + { + if (data == null) + throw new ArgumentNullException("data"); - handle.Free(); - } + this.GetData(0, null, data, 0, data.Length); + } - throw new Exception(String.Format("creating textures of format {0} not yet implemented...", surfaceFormat)); - } - #endregion + public void GetData(T[] data, int startIndex, int elementCount) where T : struct + { + this.GetData(0, null, data, startIndex, elementCount); + } - #region SetDataColor - private unsafe void SetDataColor(int level, int offsetInBytes, byte* colorData, int startIndex, int elementCount) - { - int mipmapWidth = Math.Max(Width >> level, 1); - int mipmapHeight = Math.Max(Height >> level, 1); + private Framework.Rectangle ValidateRect(int level, Framework.Rectangle? rect, T[] data, int startIndex, int elementCount) + { + if (data == null) + throw new ArgumentNullException("data"); - IntPtr dataPtr = MapWrite(level); - int srcIndex = 0; + if (startIndex + elementCount > data.Length) + throw new ArgumentOutOfRangeException("startIndex + elementCount is bigger than data.Length"); - byte* pTexels = (byte*)dataPtr; - for (int row = 0; row < mipmapHeight; row++) - { - int rowStart = row * pitch; + int mipmapWidth = Math.Max(Width >> level, 1); + int mipmapHeight = Math.Max(Height >> level, 1); - for (int col = 0; col < mipmapWidth; col++) - { - int colStart = rowStart + (col * formatSize); - pTexels[colStart++] = colorData[srcIndex++]; - pTexels[colStart++] = colorData[srcIndex++]; - pTexels[colStart++] = colorData[srcIndex++]; - pTexels[colStart++] = colorData[srcIndex++]; - } - } + Framework.Rectangle finalRect; + if (rect != null) + { + finalRect = rect.Value; - Unmap(); - } - #endregion + if (finalRect.X < 0 || finalRect.Width <= 0 || finalRect.Y < 0 || finalRect.Height <= 0) + throw new ArgumentException("The given rectangle is invalid."); - #region SetDataDxt - private unsafe void SetDataDxt(int level, int offsetInBytes, byte* colorData, int startIndex, int elementCount, - int dataLength) - { - int mipmapWidth = Math.Max(Width >> level, 1); - int mipmapHeight = Math.Max(Height >> level, 1); + if (finalRect.Right > mipmapWidth || finalRect.Bottom > mipmapHeight) + throw new ArgumentException("The given rectangle is bigger than the texture on the given mip level."); + } + else + finalRect = new Framework.Rectangle(0, 0, mipmapWidth, mipmapHeight); - int w = (mipmapWidth + 3) >> 2; - int h = (mipmapHeight + 3) >> 2; - formatSize = (surfaceFormat == SurfaceFormat.Dxt1) ? 8 : 16; + int formatSize = DxFormatConverter.FormatSize(this.surfaceFormat); - IntPtr dataPtr = MapWrite(level); - var ds = new DataStream(dataPtr, mipmapWidth * mipmapHeight * 4 * 2, true, true); - int col = 0; - int index = 0; // startIndex - int count = dataLength; // elementCount - int actWidth = w * formatSize; + int elementSize = Marshal.SizeOf(typeof(T)); + if (elementSize * elementCount != formatSize * mipmapWidth * mipmapHeight) + throw new ArgumentException("\"data\" has the wrong size."); - 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; - } + return finalRect; + } - for (int idx = index; idx < index + actWidth; idx++) - ds.WriteByte(colorData[idx]); + public void GetData(int level, Framework.Rectangle? rect, T[] data, int startIndex, int elementCount) where T : struct + { + var finalRect = ValidateRect(level, rect, data, startIndex, elementCount); + + using (var texture = CreateStagingTexture(ResourceMapping.Read)) + { + GraphicsDevice.NativeDevice.CopyResource(NativeTexture, texture); - index += actWidth; - count -= actWidth; - } + int subresource = GetSubresource(level); + int pitch; + using (var dataStream = Map(texture, subresource, level, ResourceMapping.Read, out pitch)) + { + try + { + int elementIndex = startIndex; + for (int y = finalRect.Top; y < finalRect.Bottom; y++) + { + int width = Math.Min(finalRect.Width, elementCount); + if (width <= 0) + break; - Unmap(); - } - #endregion + dataStream.Position = y * pitch; + dataStream.ReadRange(data, elementIndex, width); - #region SetData (TODO) - public void SetData(int level, Framework.Rectangle? rect, T[] data, int startIndex, int elementCount) where T : struct - { - //TODO: handle rect parameter - if (rect != null) - throw new Exception("Texture2D SetData with rectangle is not yet implemented!"); + elementIndex += finalRect.Width; + elementCount -= width; + } + } + finally + { + Unmap(texture, subresource); + } + } + } + } - unsafe - { - GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned); - byte* colorData = (byte*)handle.AddrOfPinnedObject(); + private bool IsDxt + { + get + { + return this.surfaceFormat == SurfaceFormat.Dxt1 || this.surfaceFormat == SurfaceFormat.Dxt3 || this.surfaceFormat == SurfaceFormat.Dxt5; + } + } - switch (surfaceFormat) - { - case SurfaceFormat.Color: - SetDataColor(level, 0, colorData, startIndex, elementCount); - return; + protected int SizeInBytes(int level) + { + int mipmapWidth = Math.Max(Width >> level, 1); + int mipmapHeight = Math.Max(Height >> level, 1); - case SurfaceFormat.Dxt1: - case SurfaceFormat.Dxt3: - case SurfaceFormat.Dxt5: - SetDataDxt(level, 0, colorData, startIndex, elementCount, data.Length); - return; - } + if (this.IsDxt) + { + //Dxt uses 4x4 blocks and each of this block is 8 bytes in size for dxt1, so on average half a byte per pixel. + //For Dxt3 and Dxt5, it's 1 byte per pixel on average. + int w = (mipmapWidth + 3) / 4; + int h = (mipmapHeight + 3) / 4; + var formatSize = (surfaceFormat == SurfaceFormat.Dxt1) ? 8 : 16; - handle.Free(); - } + return w * h * formatSize; + } + else + { + return mipmapWidth * mipmapHeight * DxFormatConverter.FormatSize(this.surfaceFormat); + } + } - throw new Exception(String.Format("creating textures of format {0} not yet implemented...", surfaceFormat)); - } - #endregion + protected int GetPitch(int level) + { + int mipmapWidth = Math.Max(Width >> level, 1); + + if (this.IsDxt) + { + //Dxt uses 4x4 blocks and each of this block is 8 bytes in size for dxt1, so on average half a byte per pixel. + //For Dxt3 and Dxt5, it's 1 byte per pixel on average. + int w = (mipmapWidth + 3) / 4; + var formatSize = (surfaceFormat == SurfaceFormat.Dxt1) ? 8 : 16; + + return w * formatSize; + } + else + { + return mipmapWidth * DxFormatConverter.FormatSize(this.surfaceFormat); + } + } #region Dispose public void Dispose() { + this.Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool managed) + { if (NativeShaderResourceView != null) { NativeShaderResourceView.Dispose(); NativeShaderResourceView = null; } - - if (NativeTextureStaging != null) - { - NativeTextureStaging.Dispose(); - NativeTextureStaging = null; - } } #endregion } diff --git a/RenderSystems/ANX.RenderSystem.DX.SharedSources/SharedGraphicsDeviceDX.cs b/RenderSystems/ANX.RenderSystem.DX.SharedSources/SharedGraphicsDeviceDX.cs index f011a0ed..7eb09196 100644 --- a/RenderSystems/ANX.RenderSystem.DX.SharedSources/SharedGraphicsDeviceDX.cs +++ b/RenderSystems/ANX.RenderSystem.DX.SharedSources/SharedGraphicsDeviceDX.cs @@ -21,20 +21,7 @@ namespace ANX.RenderSystem.Windows.DX11 { public partial class GraphicsDeviceDX { - #region Constants - protected const float ColorMultiplier = 1f / 255f; - - protected const bool IsDebugMode = -#if DIRECTX_DEBUG_LAYER - true; -#else - false; -#endif - #endregion - #region Private - protected uint lastClearColor; - protected SharpDX.Color4 clearColor; protected SharpDX.DXGI.SwapChain swapChain; protected VertexBufferBinding[] currentVertexBuffer; protected int currentVertexBufferCount; @@ -53,12 +40,7 @@ namespace ANX.RenderSystem.Windows.DX11 CreateDevice(presentationParameters); MakeWindowAssociationAndResize(presentationParameters); - CreateRenderView(); - - // create the depth stencil buffer - SharpDX.DXGI.Format depthFormat = DxFormatConverter.Translate(presentationParameters.DepthStencilFormat); - if (depthFormat != SharpDX.DXGI.Format.Unknown) - CreateDepthStencilBuffer(depthFormat); + CreateRenderView(presentationParameters); } #endregion @@ -76,21 +58,6 @@ namespace ANX.RenderSystem.Windows.DX11 } #endregion - #region UpdateClearColorIfNeeded - protected void UpdateClearColorIfNeeded(ref Color color) - { - 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; - } - } - #endregion - #region SetViewport public void SetViewport(Viewport viewport) { @@ -104,45 +71,35 @@ namespace ANX.RenderSystem.Windows.DX11 { if (swapChain != null) { - DisposeRenderView(); + DisposeBackBuffer(); Format colorFormat = DxFormatConverter.Translate(presentationParameters.BackBufferFormat); swapChain.ResizeBuffers(swapChain.Description.BufferCount, presentationParameters.BackBufferWidth, presentationParameters.BackBufferHeight, colorFormat, swapChain.Description.Flags); - CreateRenderView(); + CreateRenderView(presentationParameters); SetViewport(0, 0, presentationParameters.BackBufferWidth, presentationParameters.BackBufferHeight, 0f, 1f); - - // create the depth stencil buffer - Format depthFormat = DxFormatConverter.Translate(presentationParameters.DepthStencilFormat); - if (depthFormat != Format.Unknown) - CreateDepthStencilBuffer(depthFormat); } WindowHelper.ResizeRenderWindow(presentationParameters); } #endregion - protected void CreateDepthStencilBuffer(Format depthFormat) - { - CreateDepthStencilBuffer(depthFormat, this.backBuffer.Description.Width, this.backBuffer.Description.Height, true); - } - #region GetBackBufferData (TODO) public void GetBackBufferData(Rectangle? rect, T[] data, int startIndex, int elementCount) where T : struct { - throw new NotImplementedException(); + this.backBuffer.GetData(0, rect, data, startIndex, elementCount); } public void GetBackBufferData(T[] data) where T : struct { - throw new NotImplementedException(); + this.backBuffer.GetData(data); } public void GetBackBufferData(T[] data, int startIndex, int elementCount) where T : struct { - throw new NotImplementedException(); + this.backBuffer.GetData(data, startIndex, elementCount); } #endregion diff --git a/RenderSystems/ANX.RenderSystem.DX.SharedSources/SharedIndexBuffer.cs b/RenderSystems/ANX.RenderSystem.DX.SharedSources/SharedIndexBuffer.cs index 63111ecc..8bf17ba4 100644 --- a/RenderSystems/ANX.RenderSystem.DX.SharedSources/SharedIndexBuffer.cs +++ b/RenderSystems/ANX.RenderSystem.DX.SharedSources/SharedIndexBuffer.cs @@ -22,17 +22,17 @@ namespace ANX.RenderSystem.Windows.DX11 protected IndexElementSize elementSize; #region SetData - public void SetData(GraphicsDevice graphicsDevice, S[] data) where S : struct + public void SetData(S[] data) where S : struct { - SetData(graphicsDevice, data, 0, data.Length); + SetData(data, 0, data.Length); } - public void SetData(GraphicsDevice graphicsDevice, S[] data, int startIndex, int elementCount) where S : struct + public void SetData(S[] data, int startIndex, int elementCount) where S : struct { - SetData(graphicsDevice, 0, data, startIndex, elementCount); + SetData(0, data, startIndex, elementCount); } - public void SetData(GraphicsDevice graphicsDevice, int offsetInBytes, S[] data, int startIndex, int elementCount) + public void SetData(int offsetInBytes, S[] data, int startIndex, int elementCount) where S : struct { if (offsetInBytes + elementCount * Marshal.SizeOf(typeof(S)) > NativeBuffer.Description.SizeInBytes) @@ -58,12 +58,15 @@ namespace ANX.RenderSystem.Windows.DX11 #region GetData public void GetData(S[] data) where S : struct { + if (data == null) + throw new ArgumentNullException("data"); + GetData(0, data, 0, data.Length); } public void GetData(S[] data, int startIndex, int elementCount) where S : struct { - GetData(0, data, 0, data.Length); + GetData(0, data, startIndex, elementCount); } public void GetData(int offsetInBytes, S[] data, int startIndex, int elementCount) where S : struct diff --git a/RenderSystems/ANX.RenderSystem.DX.SharedSources/SharedVertexBuffer.cs b/RenderSystems/ANX.RenderSystem.DX.SharedSources/SharedVertexBuffer.cs index bbed41ae..d94bcc09 100644 --- a/RenderSystems/ANX.RenderSystem.DX.SharedSources/SharedVertexBuffer.cs +++ b/RenderSystems/ANX.RenderSystem.DX.SharedSources/SharedVertexBuffer.cs @@ -30,20 +30,20 @@ namespace ANX.RenderSystem.Windows.DX11 private int vertexStride; #region SetData - public void SetData(GraphicsDevice graphicsDevice, S[] data) where S : struct + public void SetData(S[] data) where S : struct { if (data == null) throw new ArgumentNullException("data"); - SetData(graphicsDevice, data, 0, data.Length); + SetData(data, 0, data.Length); } - public void SetData(GraphicsDevice graphicsDevice, S[] data, int startIndex, int elementCount) where S : struct + public void SetData(S[] data, int startIndex, int elementCount) where S : struct { - SetData(graphicsDevice, 0, data, startIndex, elementCount); + SetData(0, data, startIndex, elementCount, vertexStride); } - public void SetData(GraphicsDevice graphicsDevice, int offsetInBytes, S[] data, int startIndex, int elementCount) + public void SetData(int offsetInBytes, S[] data, int startIndex, int elementCount, int vertexStride) where S : struct { if (data == null) @@ -70,12 +70,6 @@ namespace ANX.RenderSystem.Windows.DX11 UnmapBuffer(); } } - - public void SetData(GraphicsDevice graphicsDevice, int offsetInBytes, S[] data, int startIndex, int elementCount, - int vertexStride) where S : struct - { - throw new NotImplementedException(); - } #endregion #region GetData diff --git a/RenderSystems/ANX.RenderSystem.Windows.DX10/ANX.RenderSystem.Windows.DX10.csproj b/RenderSystems/ANX.RenderSystem.Windows.DX10/ANX.RenderSystem.Windows.DX10.csproj index 960c9b35..b2bacbc2 100644 --- a/RenderSystems/ANX.RenderSystem.Windows.DX10/ANX.RenderSystem.Windows.DX10.csproj +++ b/RenderSystems/ANX.RenderSystem.Windows.DX10/ANX.RenderSystem.Windows.DX10.csproj @@ -60,11 +60,15 @@ BufferHelper.cs + + ResourceMapping.cs + + diff --git a/RenderSystems/ANX.RenderSystem.Windows.DX10/Creator.cs b/RenderSystems/ANX.RenderSystem.Windows.DX10/Creator.cs index 7cd45e6e..95c3a053 100644 --- a/RenderSystems/ANX.RenderSystem.Windows.DX10/Creator.cs +++ b/RenderSystems/ANX.RenderSystem.Windows.DX10/Creator.cs @@ -107,7 +107,7 @@ namespace ANX.RenderSystem.Windows.DX10 int mipCount) { PreventSystemChange(); - return new DxTexture2D(graphics, width, height, surfaceFormat, mipCount); + return new DxTexture2D((GraphicsDeviceDX)graphics.NativeDevice, width, height, surfaceFormat, mipCount); } #endregion @@ -228,7 +228,7 @@ namespace ANX.RenderSystem.Windows.DX10 RenderTargetUsage usage) { PreventSystemChange(); - return new RenderTarget2D_DX10(graphics, width, height, mipMap, preferredFormat, preferredDepthFormat, + return new RenderTarget2D_DX10((GraphicsDeviceDX)graphics.NativeDevice, width, height, mipMap, preferredFormat, preferredDepthFormat, preferredMultiSampleCount, usage); } #endregion diff --git a/RenderSystems/ANX.RenderSystem.Windows.DX10/DxTexture2D.cs b/RenderSystems/ANX.RenderSystem.Windows.DX10/DxTexture2D.cs index dac1237c..c396ac07 100644 --- a/RenderSystems/ANX.RenderSystem.Windows.DX10/DxTexture2D.cs +++ b/RenderSystems/ANX.RenderSystem.Windows.DX10/DxTexture2D.cs @@ -12,59 +12,67 @@ using SharpDX; // For details see: http://anxframework.codeplex.com/license using Dx10 = SharpDX.Direct3D10; +using System.Runtime.InteropServices; namespace ANX.RenderSystem.Windows.DX10 { public partial class DxTexture2D : INativeTexture2D { - private Dx10.Texture2D NativeTextureStaging; - - public int Width + private Dx10.Texture2D _nativeTexture; + + public Dx10.ShaderResourceView NativeShaderResourceView { get; private set; } + + public Dx10.Texture2D NativeTexture + { + get { return _nativeTexture; } + set + { + if (NativeShaderResourceView != null) + { + NativeShaderResourceView.Dispose(); + NativeShaderResourceView = null; + } + + _nativeTexture = value; + + if (_nativeTexture != null) + { + NativeShaderResourceView = new Dx10.ShaderResourceView(this.GraphicsDevice.NativeDevice, NativeTexture); +#if DEBUG + NativeShaderResourceView.DebugName = _nativeTexture.DebugName + "_ShaderView"; +#endif + } + } + } + + protected DxTexture2D(GraphicsDeviceDX graphicsDevice) + { + this.GraphicsDevice = graphicsDevice; + } + + public DxTexture2D(GraphicsDeviceDX graphicsDevice, Dx10.Texture2D nativeTexture) + : this(graphicsDevice) + { + if (nativeTexture == null) + throw new ArgumentNullException("nativeTexture"); + + this.Width = nativeTexture.Description.Width; + this.Height = nativeTexture.Description.Height; +#if DEBUG + if (string.IsNullOrEmpty(nativeTexture.DebugName)) + nativeTexture.DebugName = "Texture_" + textureCount++; +#endif + this.NativeTexture = nativeTexture; + + this.surfaceFormat = DxFormatConverter.Translate(nativeTexture.Description.Format); + } + + public DxTexture2D(GraphicsDeviceDX graphicsDevice, int width, int height, SurfaceFormat surfaceFormat, int mipCount) + : this(graphicsDevice) { - get - { - return NativeTexture != null ? NativeTexture.Description.Width : 0; - } - } + this.surfaceFormat = surfaceFormat; - public int Height - { - get - { - return NativeTexture != null ? NativeTexture.Description.Height : 0; - } - } - - internal Dx10.ShaderResourceView NativeShaderResourceView { get; set; } - - internal Dx10.Texture2D NativeTexture { get; set; } - - #region Constructor - internal DxTexture2D(GraphicsDevice graphicsDevice, SurfaceFormat surfaceFormat) - : this(graphicsDevice, surfaceFormat, 1) - { - } - - public DxTexture2D(GraphicsDevice graphicsDevice, int width, int height, SurfaceFormat surfaceFormat, int mipCount) - : this(graphicsDevice, surfaceFormat, mipCount) - { - Dx10.Device device = (graphicsDevice.NativeDevice as GraphicsDeviceDX).NativeDevice; - - if (useRenderTexture) - { - var descriptionStaging = new Dx10.Texture2DDescription() - { - Width = width, - Height = height, - MipLevels = mipCount, - ArraySize = mipCount, - Format = DxFormatConverter.Translate(surfaceFormat), - SampleDescription = new SharpDX.DXGI.SampleDescription(1, 0), - Usage = Dx10.ResourceUsage.Staging, - CpuAccessFlags = Dx10.CpuAccessFlags.Write, - }; - NativeTextureStaging = new Dx10.Texture2D(device, descriptionStaging); - } + Dx10.Device device = graphicsDevice.NativeDevice; var description = new Dx10.Texture2DDescription() { @@ -74,88 +82,95 @@ namespace ANX.RenderSystem.Windows.DX10 ArraySize = mipCount, Format = DxFormatConverter.Translate(surfaceFormat), SampleDescription = new SharpDX.DXGI.SampleDescription(1, 0), - Usage = useRenderTexture ? Dx10.ResourceUsage.Default : Dx10.ResourceUsage.Dynamic, + Usage = Dx10.ResourceUsage.Default, BindFlags = Dx10.BindFlags.ShaderResource, - CpuAccessFlags = useRenderTexture ? Dx10.CpuAccessFlags.None : Dx10.CpuAccessFlags.Write, + CpuAccessFlags = Dx10.CpuAccessFlags.None, OptionFlags = Dx10.ResourceOptionFlags.None, }; - NativeTexture = new Dx10.Texture2D(device, description); - NativeShaderResourceView = new Dx10.ShaderResourceView(device, NativeTexture); - } - #endregion + this.Width = width; + this.Height = height; + var texture = new Dx10.Texture2D(device, description); +#if DEBUG + texture.DebugName = "Texture_" + textureCount++; +#endif + + NativeTexture = texture; + } - #region GetHashCode public override int GetHashCode() { return NativeTexture.NativePointer.ToInt32(); } - #endregion - #region SaveAsJpeg (TODO) public void SaveAsJpeg(Stream stream, int width, int height) { // TODO: handle width and height? Dx10.Texture2D.ToStream(NativeTexture, Dx10.ImageFileFormat.Jpg, stream); } - #endregion - #region SaveAsPng (TODO) public void SaveAsPng(Stream stream, int width, int height) { // TODO: handle width and height? Dx10.Texture2D.ToStream(NativeTexture, Dx10.ImageFileFormat.Png, stream); } - #endregion - #region GetData (TODO) - public void GetData(T[] data) where T : struct + protected DataStream Map(Dx10.Texture2D texture, int subresource, int level, ResourceMapping mapping, out int pitch) { - GetData(data, 0, data.Length); + var dataRect = texture.Map(subresource, mapping.ToMapMode(), Dx10.MapFlags.None); + + pitch = dataRect.Pitch; + + bool read = (mapping & ResourceMapping.Read) != 0; + bool write = (mapping & ResourceMapping.Write) != 0; + + return new DataStream(dataRect.DataPointer, SizeInBytes(level), read, write); } - public void GetData(T[] data, int startIndex, int elementCount) where T : struct - { - throw new NotImplementedException(); - } + protected int GetSubresource(int level) + { + return Dx10.Texture2D.CalculateSubResourceIndex(level, 0, NativeTexture.Description.MipLevels); + } - public void GetData(int level, Framework.Rectangle? rect, T[] data, int startIndex, int elementCount) where T : struct - { - throw new NotImplementedException(); - } - #endregion + protected void UpdateSubresource(T[] data, Dx10.Texture2D texture, int level, Framework.Rectangle rect) where T : struct + { + var handle = GCHandle.Alloc(data, GCHandleType.Pinned); + try + { + GraphicsDevice.NativeDevice.UpdateSubresource(texture, this.GetSubresource(level), rect.ToResourceRegion(), handle.AddrOfPinnedObject(), GetPitch(level), 0); + } + finally + { + handle.Free(); + } + } - #region MapWrite - protected IntPtr MapWrite(int level) - { - tempSubresource = Dx10.Texture2D.CalculateSubResourceIndex(level, 0, mipCount); - var texture = useRenderTexture ? NativeTextureStaging : NativeTexture; - DataRectangle rect = texture.Map(tempSubresource, useRenderTexture ? Dx10.MapMode.Write : Dx10.MapMode.WriteDiscard, - Dx10.MapFlags.None); - pitch = rect.Pitch; - return rect.DataPointer; - } - #endregion + protected Dx10.Texture2D CreateStagingTexture(ResourceMapping mapping) + { + var description = new Dx10.Texture2DDescription() + { + CpuAccessFlags = mapping.ToCpuAccessFlags(), + Usage = Dx10.ResourceUsage.Staging, + Format = NativeTexture.Description.Format, + Width = this.Width, + Height = this.Height, + MipLevels = this.NativeTexture.Description.MipLevels, + SampleDescription = NativeTexture.Description.SampleDescription, + ArraySize = NativeTexture.Description.ArraySize, + OptionFlags = Dx10.ResourceOptionFlags.None, + + }; - #region MapRead - protected IntPtr MapRead(int level) - { - tempSubresource = Dx10.Texture2D.CalculateSubResourceIndex(level, 0, mipCount); - var texture = useRenderTexture ? NativeTextureStaging : NativeTexture; - DataRectangle rect = texture.Map(tempSubresource, Dx10.MapMode.Read, Dx10.MapFlags.None); - pitch = rect.Pitch; - return rect.DataPointer; - } - #endregion + var texture = new Dx10.Texture2D(GraphicsDevice.NativeDevice, description); +#if DEBUG + texture.DebugName = NativeTexture.DebugName + "_Staging"; +#endif + return texture; + } - #region Unmap - protected void Unmap() + protected void Unmap(Dx10.Texture2D texture, int subresource) { - var texture = useRenderTexture ? NativeTextureStaging : NativeTexture; - texture.Unmap(tempSubresource); - if (useRenderTexture) - texture.Device.CopyResource(NativeTextureStaging, NativeTexture); + texture.Unmap(subresource); } - #endregion } } diff --git a/RenderSystems/ANX.RenderSystem.Windows.DX10/Extensions.cs b/RenderSystems/ANX.RenderSystem.Windows.DX10/Extensions.cs new file mode 100644 index 00000000..3df7ccda --- /dev/null +++ b/RenderSystems/ANX.RenderSystem.Windows.DX10/Extensions.cs @@ -0,0 +1,42 @@ +using SharpDX; +using SharpDX.Direct3D10; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Dx10 = SharpDX.Direct3D10; + +namespace ANX.RenderSystem.Windows.DX10 +{ + static class Extensions + { + public static Dx10.CpuAccessFlags ToCpuAccessFlags(this ResourceMapping mapping) + { + Dx10.CpuAccessFlags flags = Dx10.CpuAccessFlags.None; + if ((mapping & ResourceMapping.Read) != 0) + flags |= Dx10.CpuAccessFlags.Read; + if ((mapping & ResourceMapping.Write) != 0) + flags |= Dx10.CpuAccessFlags.Write; + + return flags; + } + + public static Dx10.MapMode ToMapMode(this ResourceMapping mapping) + { + return (Dx10.MapMode)mapping; + } + + public static ResourceRegion ToResourceRegion(this Framework.Rectangle rect) + { + return new ResourceRegion() + { + Back = 1, + Bottom = rect.Bottom, + Front = 0, + Left = rect.Left, + Right = rect.Right, + Top = rect.Top, + }; + } + } +} diff --git a/RenderSystems/ANX.RenderSystem.Windows.DX10/GraphicsDeviceDX.cs b/RenderSystems/ANX.RenderSystem.Windows.DX10/GraphicsDeviceDX.cs index d0b17712..fd25e190 100644 --- a/RenderSystems/ANX.RenderSystem.Windows.DX10/GraphicsDeviceDX.cs +++ b/RenderSystems/ANX.RenderSystem.Windows.DX10/GraphicsDeviceDX.cs @@ -20,13 +20,18 @@ namespace ANX.RenderSystem.Windows.DX10 { public partial class GraphicsDeviceDX : INativeGraphicsDevice { +#if DEBUG + static int graphicsDeviceCount = 0; + static int swapChainCount = 0; +#endif + //Restricted to 8 from DirectX side. + const int MAX_RENDER_TARGETS = 8; + #region Private private Dx10.Device nativeDevice; - private Dx10.RenderTargetView renderView; - private Dx10.RenderTargetView[] renderTargetView = new Dx10.RenderTargetView[1]; - private Dx10.DepthStencilView depthStencilView; - private Dx10.Texture2D depthStencilBuffer; - private Dx10.Texture2D backBuffer; + private Dx10.RenderTargetView[] renderTargetView = new RenderTargetView[MAX_RENDER_TARGETS]; + private Dx10.DepthStencilView[] depthStencilView = new DepthStencilView[MAX_RENDER_TARGETS]; + private RenderTarget2D_DX10 backBuffer; internal EffectDX currentEffect; #endregion @@ -36,148 +41,79 @@ namespace ANX.RenderSystem.Windows.DX10 var desc = new SwapChainDescription() { BufferCount = 1, - ModeDescription = new ModeDescription(presentationParameters.BackBufferWidth, - presentationParameters.BackBufferHeight, new Rational(60, 1), - DxFormatConverter.Translate(presentationParameters.BackBufferFormat)), + ModeDescription = new ModeDescription( + presentationParameters.BackBufferWidth, + presentationParameters.BackBufferHeight, + new Rational(60, 1), + DxFormatConverter.Translate(presentationParameters.BackBufferFormat) + ), IsWindowed = true, OutputHandle = presentationParameters.DeviceWindowHandle, SampleDescription = new SampleDescription(1, 0), SwapEffect = SwapEffect.Discard, - Usage = Usage.RenderTargetOutput + Usage = Usage.RenderTargetOutput | Usage.ShaderInput, }; // http://msdn.microsoft.com/en-us/library/windows/desktop/bb205068(v=vs.85).aspx - var flags = IsDebugMode ? Dx10.DeviceCreationFlags.Debug : Dx10.DeviceCreationFlags.None; +#if DEBUG + var flags = Dx10.DeviceCreationFlags.Debug; +#else + var flags = Dx10.DeviceCreationFlags.None; +#endif Dx10.Device.CreateWithSwapChain(Dx10.DriverType.Hardware, flags, desc, out nativeDevice, out swapChain); +#if DEBUG + nativeDevice.DebugName = "GraphicsDevice_" + graphicsDeviceCount++; + swapChain.DebugName = "SwapChain_" + swapChainCount++; +#endif + } #endregion #region CreateRenderView - protected void CreateRenderView() + protected void CreateRenderView(PresentationParameters presentationParameters) { - backBuffer = Dx10.Texture2D.FromSwapChain(swapChain, 0); - renderView = new Dx10.RenderTargetView(nativeDevice, backBuffer); - nativeDevice.OutputMerger.SetTargets(this.depthStencilView, this.renderView); + backBuffer = new RenderTarget2D_DX10(this, Dx10.Texture2D.FromSwapChain(swapChain, 0), presentationParameters.DepthStencilFormat); + this.SetRenderTargets(); } #endregion - #region CreateDepthStencilBuffer - protected void CreateDepthStencilBuffer(Format depthFormat, int width, int height, bool setAndClearTarget) - { - if (this.depthStencilBuffer != null && - this.depthStencilBuffer.Description.Format == depthFormat && - this.depthStencilBuffer.Description.Width == width && - this.depthStencilBuffer.Description.Height == height) - { - // a DepthStencilBuffer with the right format and the right size already exists -> nothing to do - return; - } - - if (depthFormat == Format.Unknown) - { - // no DepthStencilBuffer to create... Old one was disposed already... - return; - } - - var depthStencilViewDesc = new Dx10.DepthStencilViewDescription() - { - Format = depthFormat, - }; - - var depthStencilTextureDesc = new Dx10.Texture2DDescription() - { - Width = width, - Height = height, - MipLevels = 1, - ArraySize = 1, - Format = depthFormat, - SampleDescription = new SampleDescription(1, 0), - Usage = Dx10.ResourceUsage.Default, - BindFlags = Dx10.BindFlags.DepthStencil, - CpuAccessFlags = Dx10.CpuAccessFlags.None, - OptionFlags = Dx10.ResourceOptionFlags.None - }; - this.depthStencilBuffer = new Dx10.Texture2D(nativeDevice, depthStencilTextureDesc); - - this.depthStencilView = new Dx10.DepthStencilView(nativeDevice, this.depthStencilBuffer); - - if (setAndClearTarget) - { - nativeDevice.OutputMerger.SetTargets(this.depthStencilView, this.renderView); - - // this workaround is working but maybe not the best solution to issue #472 - Clear(ClearOptions.DepthBuffer | ClearOptions.Stencil, Vector4.Zero, 1.0f, 0); - } - } - #endregion - #region Clear - public void Clear(ref Color color) - { - UpdateClearColorIfNeeded(ref color); - - if (this.renderTargetView[0] == null) - nativeDevice.ClearRenderTargetView(this.renderView, this.clearColor); - else - { - for (int i = 0; i < this.renderTargetView.Length; i++) - { - if (this.renderTargetView[i] == null) - { - break; - } - - nativeDevice.ClearRenderTargetView(this.renderTargetView[i], this.clearColor); - } - } - } - public void Clear(ClearOptions options, Vector4 color, float depth, int stencil) { if ((options & ClearOptions.Target) == ClearOptions.Target) { // Clear a RenderTarget (or BackBuffer) + var clearColor = new SharpDX.Color4(color.X, color.Y, color.Z, color.W); - this.clearColor.Red = color.X; - this.clearColor.Green = color.Y; - this.clearColor.Blue = color.Z; - this.clearColor.Alpha = color.W; - this.lastClearColor = 0; - - if (this.renderTargetView[0] == null) + for (int i = 0; i < MAX_RENDER_TARGETS; i++) { - nativeDevice.ClearRenderTargetView(this.renderView, this.clearColor); - } - else - { - for (int i = 0; i < this.renderTargetView.Length; i++) - { - if (this.renderTargetView[i] == null) - break; + if (this.renderTargetView[i] == null) + break; - nativeDevice.ClearRenderTargetView(this.renderTargetView[i], this.clearColor); - } + nativeDevice.ClearRenderTargetView(this.renderTargetView[i], clearColor); } } - if (this.depthStencilView != null) + Dx10.DepthStencilClearFlags clearFlags; + if ((options | ClearOptions.Stencil | ClearOptions.DepthBuffer) == options) { - if ((options | ClearOptions.Stencil | ClearOptions.DepthBuffer) == options) - { - // Clear the stencil buffer - nativeDevice.ClearDepthStencilView(this.depthStencilView, Dx10.DepthStencilClearFlags.Depth | - Dx10.DepthStencilClearFlags.Stencil, depth, (byte)stencil); - } - else if ((options | ClearOptions.Stencil) == options) - { - nativeDevice.ClearDepthStencilView(this.depthStencilView, Dx10.DepthStencilClearFlags.Stencil, depth, - (byte)stencil); - } - else - { - nativeDevice.ClearDepthStencilView(this.depthStencilView, Dx10.DepthStencilClearFlags.Depth, depth, - (byte)stencil); - } + clearFlags = Dx10.DepthStencilClearFlags.Depth | Dx10.DepthStencilClearFlags.Stencil; + } + else if ((options | ClearOptions.Stencil) == options) + { + clearFlags = Dx10.DepthStencilClearFlags.Stencil; + } + else + { + clearFlags = Dx10.DepthStencilClearFlags.Depth; + } + + for (int i = 0; i < MAX_RENDER_TARGETS; i++) + { + if (this.depthStencilView[i] == null) + break; + + nativeDevice.ClearDepthStencilView(this.depthStencilView[i], clearFlags, depth, (byte)stencil); } } #endregion @@ -198,9 +134,7 @@ namespace ANX.RenderSystem.Windows.DX10 Dx10.EffectTechnique technique = SetupEffectForDraw(); int vertexCount = DxFormatConverter.CalculateVertexCount(primitiveType, primitiveCount); - nativeDevice.InputAssembler.PrimitiveTopology = DxFormatConverter.Translate(primitiveType); - //nativeDevice.Rasterizer.SetViewports(currentViewport); - //nativeDevice.OutputMerger.SetTargets(this.depthStencilView, this.renderView); + nativeDevice.InputAssembler.PrimitiveTopology = DxFormatConverter.Translate(primitiveType); if (indexBuffer != null) { @@ -225,8 +159,6 @@ namespace ANX.RenderSystem.Windows.DX10 int vertexCount = DxFormatConverter.CalculateVertexCount(primitiveType, primitiveCount); nativeDevice.InputAssembler.PrimitiveTopology = DxFormatConverter.Translate(primitiveType); - //nativeDevice.Rasterizer.SetViewports(currentViewport); - //nativeDevice.OutputMerger.SetTargets(this.depthStencilView, this.renderView); for (int i = 0; i < technique.Description.PassCount; ++i) { @@ -239,7 +171,6 @@ namespace ANX.RenderSystem.Windows.DX10 } #endregion - #region DrawInstancedPrimitives public void DrawInstancedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices, int startIndex, int primitiveCount, int instanceCount, IndexBuffer indexBuffer) { @@ -247,8 +178,6 @@ namespace ANX.RenderSystem.Windows.DX10 int vertexCount = DxFormatConverter.CalculateVertexCount(primitiveType, primitiveCount); nativeDevice.InputAssembler.PrimitiveTopology = DxFormatConverter.Translate(primitiveType); - //nativeDevice.Rasterizer.SetViewports(currentViewport); - //nativeDevice.OutputMerger.SetTargets(this.depthStencilView, this.renderView); if (indexBuffer != null) { @@ -264,9 +193,7 @@ namespace ANX.RenderSystem.Windows.DX10 nativeDevice.InputAssembler.InputLayout.Dispose(); nativeDevice.InputAssembler.InputLayout = null; } - #endregion - #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 @@ -290,14 +217,12 @@ namespace ANX.RenderSystem.Windows.DX10 DrawIndexedPrimitives(primitiveType, 0, vertexOffset, numVertices, indexOffset, primitiveCount, indexBuffer); } - #endregion - #region DrawUserPrimitives public void DrawUserPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int primitiveCount, VertexDeclaration vertexDeclaration) where T : struct, IVertexType { int vertexCount = vertexData.Length; DxVertexBuffer vb10 = new DxVertexBuffer(nativeDevice, vertexDeclaration, vertexCount, BufferUsage.None); - vb10.SetData(null, vertexData); + vb10.SetData(vertexData); Dx10.VertexBufferBinding nativeVertexBufferBindings = new Dx10.VertexBufferBinding(vb10.NativeBuffer, vertexDeclaration.VertexStride, 0); @@ -313,8 +238,6 @@ namespace ANX.RenderSystem.Windows.DX10 nativeDevice.InputAssembler.InputLayout = layout; // Prepare All the stages nativeDevice.InputAssembler.PrimitiveTopology = DxFormatConverter.Translate(primitiveType); - //nativeDevice.Rasterizer.SetViewports(currentViewport); - //device.OutputMerger.SetTargets(this.depthStencilView, this.renderView); for (int i = 0; i < technique.Description.PassCount; ++i) { @@ -325,9 +248,7 @@ namespace ANX.RenderSystem.Windows.DX10 nativeDevice.InputAssembler.InputLayout.Dispose(); nativeDevice.InputAssembler.InputLayout = null; } - #endregion - #region SetupEffectForDraw private Dx10.EffectTechnique SetupEffectForDraw() { //TODO: check for currentEffect null and throw exception @@ -339,7 +260,6 @@ namespace ANX.RenderSystem.Windows.DX10 return technique; } - #endregion #region SetupInputLayout private InputLayout SetupInputLayout(ShaderBytecode passSignature) @@ -488,120 +408,80 @@ namespace ANX.RenderSystem.Windows.DX10 #region SetRenderTargets public void SetRenderTargets(params RenderTargetBinding[] renderTargets) { - if (renderTargets == null) + if (renderTargets == null || renderTargets.Length == 0) { - // reset the RenderTarget to backbuffer - CreateDepthStencilBuffer(this.depthStencilBuffer.Description.Format, this.backBuffer.Description.Width, this.backBuffer.Description.Height, false); - nativeDevice.OutputMerger.SetRenderTargets(1, new Dx10.RenderTargetView[] { this.renderView }, this.depthStencilView); //TODO: necessary? - nativeDevice.OutputMerger.SetTargets(this.depthStencilView, this.renderView); - nativeDevice.Rasterizer.SetViewports(new SharpDX.Viewport(0, 0, this.backBuffer.Description.Width, this.backBuffer.Description.Height)); + this.renderTargetView[0] = this.backBuffer.RenderTargetView; + this.depthStencilView[0] = this.backBuffer.DepthStencilView; - // dispose the old views - for (int i = 0; i < renderTargetView.Length; i++) + for (int i = 1; i < MAX_RENDER_TARGETS; i++) { - if (renderTargetView[i] != null) - { - renderTargetView[i].Dispose(); - renderTargetView[i] = null; - } + this.renderTargetView[i] = null; + this.depthStencilView[i] = null; } + + //To correctly unset renderTargets, the amount of given rendertargetViews must be max(#previousRenderTargets, #newRenderTargets), + //otherwise the old ones at the slots stay bound. For us it means, we try to unbind every possible previous slot. + nativeDevice.OutputMerger.SetRenderTargets(MAX_RENDER_TARGETS, this.renderTargetView, this.backBuffer.DepthStencilView); + nativeDevice.Rasterizer.SetViewports(new SharpDX.Viewport(0, 0, this.backBuffer.Width, this.backBuffer.Height)); } else { int renderTargetCount = renderTargets.Length; - RenderTargetView[] renderTargetsToDelete = new RenderTargetView[renderTargetView.Length]; - Array.Copy(renderTargetView, renderTargetsToDelete, renderTargetView.Length); + if (renderTargetCount > MAX_RENDER_TARGETS) + throw new NotSupportedException(string.Format("{0} render targets are not supported. The maximum is {1}.", renderTargetCount, MAX_RENDER_TARGETS)); + SharpDX.Viewport[] rtViewports = new SharpDX.Viewport[renderTargetCount]; - if (this.renderTargetView.Length != renderTargetCount) + var firstRenderTarget = renderTargets[0].RenderTarget as RenderTarget2D; + for (int i = 1; i < renderTargetCount; i++) { - this.renderTargetView = new Dx10.RenderTargetView[renderTargetCount]; + var renderTarget = renderTargets[i].RenderTarget as RenderTarget2D; + if (renderTarget.Width != firstRenderTarget.Width || renderTarget.Height != firstRenderTarget.Height || renderTarget.MultiSampleCount != firstRenderTarget.MultiSampleCount) + throw new ArgumentException("The render targets don't match"); } - int width = this.backBuffer.Description.Width; - int height = this.backBuffer.Description.Height; - for (int i = 0; i < renderTargetCount; i++) { RenderTarget2D renderTarget = renderTargets[i].RenderTarget as RenderTarget2D; + RenderTarget2D_DX10 nativeRenderTarget = renderTarget.NativeRenderTarget as RenderTarget2D_DX10; - //TODO: check if all render Targets have the same size - width = renderTarget.Width; - height = renderTarget.Height; - - if (renderTarget != null) - { - RenderTarget2D_DX10 nativeRenderTarget = renderTarget.NativeRenderTarget as RenderTarget2D_DX10; - - if (renderTargetView[i] != null) - { - renderTargetView[i].Dispose(); - } - - renderTargetView[i] = new Dx10.RenderTargetView(nativeDevice, ((DxTexture2D)nativeRenderTarget).NativeShaderResourceView.Resource); - rtViewports[i] = new SharpDX.Viewport(0, 0, width, height); - } + renderTargetView[i] = nativeRenderTarget.RenderTargetView; + depthStencilView[i] = nativeRenderTarget.DepthStencilView; + rtViewports[i] = new SharpDX.Viewport(0, 0, renderTarget.Width, renderTarget.Height); } - CreateDepthStencilBuffer(this.depthStencilBuffer.Description.Format, width, height, false); - - nativeDevice.OutputMerger.SetRenderTargets(renderTargetCount, renderTargetView, this.depthStencilView); - - nativeDevice.Rasterizer.SetViewports(rtViewports); - - // free the old render target views... - for (int i = 0; i < renderTargetsToDelete.Length; i++) + for (int i = renderTargetCount; i < MAX_RENDER_TARGETS; i++) { - if (renderTargetsToDelete[i] != null) - { - renderTargetsToDelete[i].Dispose(); - renderTargetsToDelete[i] = null; - } + this.renderTargetView[i] = null; + this.depthStencilView[i] = null; } + + nativeDevice.OutputMerger.SetRenderTargets(MAX_RENDER_TARGETS, renderTargetView, this.depthStencilView[0]); + nativeDevice.Rasterizer.SetViewports(rtViewports); } } #endregion - #region DisposeRenderView - protected void DisposeRenderView() + protected void DisposeBackBuffer() { - renderView.Dispose(); - renderView = null; - - backBuffer.Dispose(); - backBuffer = null; + if (backBuffer != null) + { + backBuffer.Dispose(); + backBuffer = null; + } } - #endregion #region Dispose public void Dispose() { - for (int i = 0; i < renderTargetView.Length; i++) - { - if (renderTargetView[i] != null) - { - renderTargetView[i].Dispose(); - renderTargetView[i] = null; - } - } - if (swapChain != null) { - DisposeRenderView(); + DisposeBackBuffer(); swapChain.Dispose(); swapChain = null; } - if (this.depthStencilView != null) - { - this.depthStencilBuffer.Dispose(); - this.depthStencilBuffer = null; - - this.depthStencilView.Dispose(); - this.depthStencilView = null; - } - //TODO: dispose everything else } #endregion diff --git a/RenderSystems/ANX.RenderSystem.Windows.DX10/RenderTarget2D_DX10.cs b/RenderSystems/ANX.RenderSystem.Windows.DX10/RenderTarget2D_DX10.cs index 223dc56a..ee42a69c 100644 --- a/RenderSystems/ANX.RenderSystem.Windows.DX10/RenderTarget2D_DX10.cs +++ b/RenderSystems/ANX.RenderSystem.Windows.DX10/RenderTarget2D_DX10.cs @@ -10,15 +10,52 @@ using ANX.Framework.NonXNA.RenderSystem; // For details see: http://anxframework.codeplex.com/license using Dx10 = SharpDX.Direct3D10; +using SharpDX.DXGI; namespace ANX.RenderSystem.Windows.DX10 { public class RenderTarget2D_DX10 : DxTexture2D, INativeRenderTarget2D, INativeTexture2D { +#if DEBUG + static int depthStencilCount = 0; + static int renderTargetCount = 0; +#endif + + Dx10.Texture2D depthStencil; + + public Dx10.RenderTargetView RenderTargetView + { + get; + protected set; + } + + public Dx10.DepthStencilView DepthStencilView + { + get; + protected set; + } + + public RenderTarget2D_DX10(GraphicsDeviceDX graphics, Dx10.Texture2D texture, DepthFormat depthFormat) + : base(graphics, texture) + { + Dx10.Device device = graphics.NativeDevice; + + NativeTexture = texture; +#if DEBUG + NativeTexture.DebugName = "RenderTarget_" + renderTargetCount++; +#endif + RenderTargetView = new Dx10.RenderTargetView(device, NativeTexture); +#if DEBUG + RenderTargetView.DebugName = NativeTexture.DebugName + "_RenderTargetView"; +#endif + + CreateDepthStencil(graphics, depthFormat, texture.Description.Width, texture.Description.Height); + } + #region Constructor - public RenderTarget2D_DX10(GraphicsDevice graphics, int width, int height, bool mipMap, SurfaceFormat surfaceFormat, + public RenderTarget2D_DX10(GraphicsDeviceDX graphics, int width, int height, bool mipMap, SurfaceFormat surfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount, RenderTargetUsage usage) - : base(graphics, surfaceFormat) + : base(graphics) { if (mipMap) throw new NotImplementedException("creating RenderTargets with mip map not yet implemented"); @@ -37,10 +74,71 @@ namespace ANX.RenderSystem.Windows.DX10 OptionFlags = Dx10.ResourceOptionFlags.None, }; - Dx10.Device device = (GraphicsDevice.NativeDevice as GraphicsDeviceDX).NativeDevice; - NativeTexture = new Dx10.Texture2D(device, description); - NativeShaderResourceView = new Dx10.ShaderResourceView(device, NativeTexture); + Dx10.Device device = graphics.NativeDevice; + var texture = new Dx10.Texture2D(device, description); +#if DEBUG + texture.DebugName = "RenderTarget_" + renderTargetCount++; +#endif + this.Width = width; + this.Height = height; + + NativeTexture = texture; + RenderTargetView = new Dx10.RenderTargetView(device, NativeTexture); +#if DEBUG + RenderTargetView.DebugName = NativeTexture.DebugName + "_RenderTargetView"; +#endif + + CreateDepthStencil(graphics, preferredDepthFormat, width, height); } #endregion + + private void CreateDepthStencil(GraphicsDeviceDX graphics, DepthFormat depthFormat, int width, int height) + { + //TODO: As we can only ever have 1 active DepthStencil and it's currently not possible to access it from the outside, + //we could share the depth stencils as long as they have the correct size and format. + + if (depthFormat == DepthFormat.None) + return; + + var dxDepthFormat = DxFormatConverter.Translate(depthFormat); + var depthStencilViewDesc = new Dx10.DepthStencilViewDescription() + { + Format = dxDepthFormat, + }; + + var depthStencilTextureDesc = new Dx10.Texture2DDescription() + { + Width = width, + Height = height, + MipLevels = 1, + ArraySize = 1, + Format = dxDepthFormat, + SampleDescription = new SampleDescription(1, 0), + Usage = Dx10.ResourceUsage.Default, + BindFlags = Dx10.BindFlags.DepthStencil, + CpuAccessFlags = Dx10.CpuAccessFlags.None, + OptionFlags = Dx10.ResourceOptionFlags.None + }; + this.depthStencil = new Dx10.Texture2D(graphics.NativeDevice, depthStencilTextureDesc); + this.DepthStencilView = new Dx10.DepthStencilView(graphics.NativeDevice, this.depthStencil); +#if DEBUG + this.depthStencil.DebugName = "DepthStencil_" + depthStencilCount++; + this.DepthStencilView.DebugName = this.depthStencil.DebugName + "_View"; +#endif + } + + protected override void Dispose(bool managed) + { + base.Dispose(managed); + + if (RenderTargetView != null) + { + RenderTargetView.Dispose(); + } + if (DepthStencilView != null) + { + DepthStencilView.Dispose(); + } + } } } 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 3a0120ae..80903d84 100644 --- a/RenderSystems/ANX.RenderSystem.Windows.DX11/ANX.RenderSystem.Windows.DX11.csproj +++ b/RenderSystems/ANX.RenderSystem.Windows.DX11/ANX.RenderSystem.Windows.DX11.csproj @@ -73,12 +73,16 @@ BufferHelper.cs + + ResourceMapping.cs + + diff --git a/RenderSystems/ANX.RenderSystem.Windows.DX11/Creator.cs b/RenderSystems/ANX.RenderSystem.Windows.DX11/Creator.cs index 1914622c..a27826dc 100644 --- a/RenderSystems/ANX.RenderSystem.Windows.DX11/Creator.cs +++ b/RenderSystems/ANX.RenderSystem.Windows.DX11/Creator.cs @@ -86,7 +86,7 @@ namespace ANX.RenderSystem.Windows.DX11 VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage) { PreventSystemChange(); - return new DxVertexBuffer(graphics, vertexDeclaration, vertexCount, usage); + return new DxVertexBuffer((GraphicsDeviceDX)graphics.NativeDevice, vertexDeclaration, vertexCount, usage); } #endregion @@ -233,7 +233,7 @@ namespace ANX.RenderSystem.Windows.DX11 int mipCount) { PreventSystemChange(); - return new DxTexture2D(graphics, width, height, surfaceFormat, mipCount); + return new DxTexture2D((GraphicsDeviceDX)graphics.NativeDevice, width, height, surfaceFormat, mipCount); } #endregion @@ -243,7 +243,7 @@ namespace ANX.RenderSystem.Windows.DX11 RenderTargetUsage usage) { PreventSystemChange(); - return new RenderTarget2D_DX11(graphics, width, height, mipMap, preferredFormat, preferredDepthFormat, + return new RenderTarget2D_DX11((GraphicsDeviceDX)graphics.NativeDevice, width, height, mipMap, preferredFormat, preferredDepthFormat, preferredMultiSampleCount, usage); } #endregion diff --git a/RenderSystems/ANX.RenderSystem.Windows.DX11/DxTexture2D.cs b/RenderSystems/ANX.RenderSystem.Windows.DX11/DxTexture2D.cs index 1de41f9b..8182c3e2 100644 --- a/RenderSystems/ANX.RenderSystem.Windows.DX11/DxTexture2D.cs +++ b/RenderSystems/ANX.RenderSystem.Windows.DX11/DxTexture2D.cs @@ -17,72 +17,85 @@ namespace ANX.RenderSystem.Windows.DX11 { public partial class DxTexture2D : INativeTexture2D { - private Dx11.Texture2D NativeTextureStaging; + private Dx11.Texture2D _nativeTexture; - public int Width - { - get - { - return NativeTexture != null ? NativeTexture.Description.Width : 0; - } - } + public Dx11.ShaderResourceView NativeShaderResourceView { get; private set; } - public int Height - { - get - { - return NativeTexture != null ? NativeTexture.Description.Height : 0; - } - } + public Dx11.Texture2D NativeTexture + { + get { return _nativeTexture; } + set + { + if (NativeShaderResourceView != null) + { + NativeShaderResourceView.Dispose(); + NativeShaderResourceView = null; + } - protected internal Dx11.ShaderResourceView NativeShaderResourceView { get; protected set; } + _nativeTexture = value; - internal Dx11.Texture2D NativeTexture { get; set; } + if (_nativeTexture != null) + { + NativeShaderResourceView = new Dx11.ShaderResourceView(this.GraphicsDevice.NativeDevice.Device, NativeTexture); +#if DEBUG + NativeShaderResourceView.DebugName = _nativeTexture.DebugName + "_ShaderView"; +#endif + } + } + } #region Constructor - internal DxTexture2D(GraphicsDevice graphicsDevice, SurfaceFormat surfaceFormat) - : this(graphicsDevice, surfaceFormat, 1) - { - } + protected DxTexture2D(GraphicsDeviceDX graphicsDevice) + { + this.GraphicsDevice = graphicsDevice; + } - public DxTexture2D(GraphicsDevice graphicsDevice, int width, int height, SurfaceFormat surfaceFormat, int mipCount) - : this(graphicsDevice, surfaceFormat, mipCount) - { - Dx11.Device device = (graphicsDevice.NativeDevice as GraphicsDeviceDX).NativeDevice.Device; - var sampleDescription = new SharpDX.DXGI.SampleDescription(1, 0); + public DxTexture2D(GraphicsDeviceDX graphicsDevice, Dx11.Texture2D nativeTexture) + : this(graphicsDevice) + { + if (nativeTexture == null) + throw new ArgumentNullException("nativeTexture"); - if (useRenderTexture) - { - var descriptionStaging = new Dx11.Texture2DDescription() - { - Width = width, - Height = height, - MipLevels = mipCount, - ArraySize = mipCount, - Format = DxFormatConverter.Translate(surfaceFormat), - SampleDescription = sampleDescription, - Usage = Dx11.ResourceUsage.Staging, - CpuAccessFlags = Dx11.CpuAccessFlags.Write, - }; - NativeTextureStaging = new Dx11.Texture2D(device, descriptionStaging); - } + this.Width = nativeTexture.Description.Width; + this.Height = nativeTexture.Description.Height; +#if DEBUG + if (string.IsNullOrEmpty(nativeTexture.DebugName)) + nativeTexture.DebugName = "Texture_" + textureCount++; +#endif + this.NativeTexture = nativeTexture; - var description = new Dx11.Texture2DDescription() - { - Width = width, - Height = height, - MipLevels = mipCount, - ArraySize = mipCount, - Format = DxFormatConverter.Translate(surfaceFormat), - SampleDescription = sampleDescription, - Usage = useRenderTexture ? Dx11.ResourceUsage.Default : Dx11.ResourceUsage.Dynamic, - BindFlags = Dx11.BindFlags.ShaderResource, - CpuAccessFlags = useRenderTexture ? Dx11.CpuAccessFlags.None : Dx11.CpuAccessFlags.Write, - }; + this.surfaceFormat = DxFormatConverter.Translate(nativeTexture.Description.Format); + } - NativeTexture = new Dx11.Texture2D(device, description); - NativeShaderResourceView = new Dx11.ShaderResourceView(device, NativeTexture); - } + public DxTexture2D(GraphicsDeviceDX graphicsDevice, int width, int height, SurfaceFormat surfaceFormat, int mipCount) + : this(graphicsDevice) + { + this.surfaceFormat = surfaceFormat; + + Dx11.Device device = graphicsDevice.NativeDevice.Device; + + var description = new Dx11.Texture2DDescription() + { + Width = width, + Height = height, + MipLevels = mipCount, + ArraySize = mipCount, + Format = DxFormatConverter.Translate(surfaceFormat), + SampleDescription = new SharpDX.DXGI.SampleDescription(1, 0), + Usage = Dx11.ResourceUsage.Default, + BindFlags = Dx11.BindFlags.ShaderResource, + CpuAccessFlags = Dx11.CpuAccessFlags.None, + OptionFlags = Dx11.ResourceOptionFlags.None, + }; + + this.Width = width; + this.Height = height; + var texture = new Dx11.Texture2D(device, description); +#if DEBUG + texture.DebugName = "Texture_" + textureCount++; +#endif + this.NativeTexture = texture; + } #endregion #region GetHashCode @@ -108,58 +121,51 @@ namespace ANX.RenderSystem.Windows.DX11 } #endregion - #region GetData (TODO) - public void GetData(T[] data) where T : struct - { - GetData(data, 0, data.Length); - } + protected DataStream Map(Dx11.Texture2D texture, int subresource, int level, ResourceMapping mapping, out int pitch) + { + DataStream stream; + var box = GraphicsDevice.NativeDevice.MapSubresource(texture, subresource, mapping.ToMapMode(), Dx11.MapFlags.None, out stream); - public void GetData(T[] data, int startIndex, int elementCount) where T : struct - { - throw new NotImplementedException(); - } + pitch = box.RowPitch; + return stream; + } - public void GetData(int level, Framework.Rectangle? rect, T[] data, int startIndex, int elementCount) where T : struct - { - throw new NotImplementedException(); - } - #endregion + protected int GetSubresource(int level) + { + return Dx11.Texture2D.CalculateSubResourceIndex(level, 0, NativeTexture.Description.MipLevels); + } - #region MapWrite - protected IntPtr MapWrite(int level) - { - Dx11.DeviceContext context = (GraphicsDevice.NativeDevice as GraphicsDeviceDX).NativeDevice; - tempSubresource = Dx11.Texture2D.CalculateSubResourceIndex(level, 0, mipCount); - var texture = useRenderTexture ? NativeTextureStaging : NativeTexture; - DataBox box = context.MapSubresource(texture, tempSubresource, - useRenderTexture ? Dx11.MapMode.Write : Dx11.MapMode.WriteDiscard, Dx11.MapFlags.None); - pitch = box.RowPitch; - return box.DataPointer; - } - #endregion + protected void UpdateSubresource(T[] data, Dx11.Texture2D texture, int level, Framework.Rectangle rect) where T : struct + { + GraphicsDevice.NativeDevice.UpdateSubresource(data, _nativeTexture, this.GetSubresource(level), GetPitch(level), 0, rect.ToResourceRegion()); + } - #region MapRead - protected IntPtr MapRead(int level) - { - Dx11.DeviceContext context = (GraphicsDevice.NativeDevice as GraphicsDeviceDX).NativeDevice; - tempSubresource = Dx11.Texture2D.CalculateSubResourceIndex(level, 0, mipCount); - var texture = useRenderTexture ? NativeTextureStaging : NativeTexture; - DataBox box = context.MapSubresource(texture, tempSubresource, Dx11.MapMode.Read, Dx11.MapFlags.None); - pitch = box.RowPitch; - return box.DataPointer; - } - #endregion + protected Dx11.Texture2D CreateStagingTexture(ResourceMapping mapping) + { + var description = new Dx11.Texture2DDescription() + { + CpuAccessFlags = mapping.ToCpuAccessFlags(), + Usage = Dx11.ResourceUsage.Staging, + Format = NativeTexture.Description.Format, + Width = this.Width, + Height = this.Height, + MipLevels = this.NativeTexture.Description.MipLevels, + SampleDescription = NativeTexture.Description.SampleDescription, + ArraySize = NativeTexture.Description.ArraySize, + OptionFlags = Dx11.ResourceOptionFlags.None, - #region Unmap - protected void Unmap() - { - Dx11.DeviceContext context = (GraphicsDevice.NativeDevice as GraphicsDeviceDX).NativeDevice; - var texture = useRenderTexture ? NativeTextureStaging : NativeTexture; - context.UnmapSubresource(texture, tempSubresource); + }; - if(useRenderTexture) - context.CopyResource(NativeTextureStaging, NativeTexture); - } - #endregion + var texture = new Dx11.Texture2D(GraphicsDevice.NativeDevice.Device, description); +#if DEBUG + texture.DebugName = NativeTexture.DebugName + "_Staging"; +#endif + return texture; + } + + protected void Unmap(Dx11.Texture2D texture, int subresource) + { + GraphicsDevice.NativeDevice.UnmapSubresource(texture, subresource); + } } } diff --git a/RenderSystems/ANX.RenderSystem.Windows.DX11/DxVertexBuffer.cs b/RenderSystems/ANX.RenderSystem.Windows.DX11/DxVertexBuffer.cs index 5c707fd1..b42e5d93 100644 --- a/RenderSystems/ANX.RenderSystem.Windows.DX11/DxVertexBuffer.cs +++ b/RenderSystems/ANX.RenderSystem.Windows.DX11/DxVertexBuffer.cs @@ -29,10 +29,9 @@ namespace ANX.RenderSystem.Windows.DX11 private Dx.DeviceContext context; #region Constructor - public DxVertexBuffer(GraphicsDevice graphics, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage) + public DxVertexBuffer(GraphicsDeviceDX graphics, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage) { - var gd11 = graphics.NativeDevice as GraphicsDeviceDX; - this.context = gd11 != null ? gd11.NativeDevice as Dx.DeviceContext : null; + this.context = graphics.NativeDevice; InitializeBuffer(context.Device, vertexDeclaration, vertexCount, usage); } @@ -50,19 +49,16 @@ namespace ANX.RenderSystem.Windows.DX11 //TODO: translate and use usage - if (device != null) + var description = new Dx.BufferDescription() { - var description = new Dx.BufferDescription() - { - Usage = Dx.ResourceUsage.Dynamic, - SizeInBytes = vertexDeclaration.VertexStride * vertexCount, - BindFlags = Dx.BindFlags.VertexBuffer, - CpuAccessFlags = Dx.CpuAccessFlags.Write, - OptionFlags = Dx.ResourceOptionFlags.None - }; + Usage = Dx.ResourceUsage.Dynamic, + SizeInBytes = vertexDeclaration.VertexStride * vertexCount, + BindFlags = Dx.BindFlags.VertexBuffer, + CpuAccessFlags = Dx.CpuAccessFlags.Write, + OptionFlags = Dx.ResourceOptionFlags.None + }; - NativeBuffer = new Dx.Buffer(device, description); - } + NativeBuffer = new Dx.Buffer(device, description); } #endregion diff --git a/RenderSystems/ANX.RenderSystem.Windows.DX11/Extensions.cs b/RenderSystems/ANX.RenderSystem.Windows.DX11/Extensions.cs new file mode 100644 index 00000000..4a302fee --- /dev/null +++ b/RenderSystems/ANX.RenderSystem.Windows.DX11/Extensions.cs @@ -0,0 +1,34 @@ +using SharpDX; +using SharpDX.Direct3D11; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Dx10 = SharpDX.Direct3D11; + +namespace ANX.RenderSystem.Windows.DX11 +{ + static class Extensions + { + public static Dx10.CpuAccessFlags ToCpuAccessFlags(this ResourceMapping mapping) + { + Dx10.CpuAccessFlags flags = Dx10.CpuAccessFlags.None; + if ((mapping & ResourceMapping.Read) != 0) + flags |= Dx10.CpuAccessFlags.Read; + if ((mapping & ResourceMapping.Write) != 0) + flags |= Dx10.CpuAccessFlags.Write; + + return flags; + } + + public static Dx10.MapMode ToMapMode(this ResourceMapping mapping) + { + return (Dx10.MapMode)mapping; + } + + public static ResourceRegion ToResourceRegion(this Framework.Rectangle rect) + { + return new ResourceRegion(rect.Left, rect.Top, 0, rect.Right, rect.Bottom, 1); + } + } +} diff --git a/RenderSystems/ANX.RenderSystem.Windows.DX11/GraphicsDeviceDX.cs b/RenderSystems/ANX.RenderSystem.Windows.DX11/GraphicsDeviceDX.cs index 0c984301..cebb4cf0 100644 --- a/RenderSystems/ANX.RenderSystem.Windows.DX11/GraphicsDeviceDX.cs +++ b/RenderSystems/ANX.RenderSystem.Windows.DX11/GraphicsDeviceDX.cs @@ -23,12 +23,17 @@ namespace ANX.RenderSystem.Windows.DX11 public partial class GraphicsDeviceDX : INativeGraphicsDevice { #region Private - private DeviceContext nativeDevice; - private RenderTargetView renderView; - private RenderTargetView[] renderTargetView = new RenderTargetView[1]; - private DepthStencilView depthStencilView; - private Dx11.Texture2D depthStencilBuffer; - private Dx11.Texture2D backBuffer; +#if DEBUG + static int graphicsDeviceCount = 0; + static int swapChainCount = 0; +#endif + //Restricted to 8 from DirectX side. + const int MAX_RENDER_TARGETS = 8; + + private Dx11.DeviceContext nativeDevice; + private Dx11.RenderTargetView[] renderTargetView = new RenderTargetView[MAX_RENDER_TARGETS]; + private Dx11.DepthStencilView[] depthStencilView = new DepthStencilView[MAX_RENDER_TARGETS]; + private RenderTarget2D_DX11 backBuffer; internal EffectDX currentEffect; #endregion @@ -51,136 +56,67 @@ namespace ANX.RenderSystem.Windows.DX11 // Create Device and SwapChain Device dxDevice; - // http://msdn.microsoft.com/en-us/library/windows/desktop/bb205068(v=vs.85).aspx - var flags = IsDebugMode ? DeviceCreationFlags.Debug : DeviceCreationFlags.None; - Device.CreateWithSwapChain(DriverType.Hardware, flags, desc, out dxDevice, out swapChain); +#if DEBUG + var flags = DeviceCreationFlags.Debug; +#else + var flags = DeviceCreationFlags.None; +#endif + // http://msdn.microsoft.com/en-us/library/windows/desktop/bb205068(v=vs.85).aspx + Device.CreateWithSwapChain(DriverType.Hardware, flags, desc, out dxDevice, out swapChain); +#if DEBUG + nativeDevice.DebugName = "GraphicsDevice_" + graphicsDeviceCount++; + swapChain.DebugName = "SwapChain_" + swapChainCount++; +#endif + nativeDevice = dxDevice.ImmediateContext; } #endregion #region CreateRenderView - protected void CreateRenderView() - { - backBuffer = Dx11.Texture2D.FromSwapChain(swapChain, 0); - renderView = new RenderTargetView(nativeDevice.Device, backBuffer); - nativeDevice.OutputMerger.SetTargets(this.depthStencilView, this.renderView); - } - #endregion - - #region CreateDepthStencilBuffer - protected void CreateDepthStencilBuffer(Format depthFormat, int width, int height, bool setAndClearTarget) + protected void CreateRenderView(PresentationParameters presentationParameters) { - if (this.depthStencilBuffer != null && - this.depthStencilBuffer.Description.Format == depthFormat && - this.depthStencilBuffer.Description.Width == width && - this.depthStencilBuffer.Description.Height == height) - { - // a DepthStencilBuffer with the right format and the right size already exists -> nothing to do - return; - } - - 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 = width, - Height = 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 Dx11.Texture2D(nativeDevice.Device, depthStencilTextureDesc); - - this.depthStencilView = new DepthStencilView(nativeDevice.Device, this.depthStencilBuffer); - - if (setAndClearTarget) - { - nativeDevice.OutputMerger.SetTargets(this.depthStencilView, this.renderView); - - 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 - } + backBuffer = new RenderTarget2D_DX11(this, Dx11.Texture2D.FromSwapChain(swapChain, 0), presentationParameters.DepthStencilFormat); + this.SetRenderTargets(); } #endregion #region Clear - public void Clear(ref Color color) - { - UpdateClearColorIfNeeded(ref color); - - if (this.renderTargetView[0] == null) - nativeDevice.ClearRenderTargetView(this.renderView, this.clearColor); - else - { - for (int i = 0; i < this.renderTargetView.Length; i++) - { - if (this.renderTargetView[i] == null) - { - break; - } - - nativeDevice.ClearRenderTargetView(this.renderTargetView[i], this.clearColor); - } - } - - } - - public void Clear(ClearOptions options, ANX.Framework.Vector4 color, float depth, int stencil) + public void Clear(ClearOptions options, Vector4 color, float depth, int stencil) { if ((options & ClearOptions.Target) == ClearOptions.Target) { // Clear a RenderTarget (or BackBuffer) + var clearColor = new SharpDX.Color4(color.X, color.Y, color.Z, color.W); - this.clearColor.Red = color.X; - this.clearColor.Green = color.Y; - this.clearColor.Blue = color.Z; - this.clearColor.Alpha = color.W; - this.lastClearColor = 0; - - if (this.renderTargetView[0] == null) - nativeDevice.ClearRenderTargetView(this.renderView, this.clearColor); - else + for (int i = 0; i < MAX_RENDER_TARGETS; i++) { - for (int i = 0; i < this.renderTargetView.Length; i++) - { - if (this.renderTargetView[i] == null) - break; + if (this.renderTargetView[i] == null) + break; - nativeDevice.ClearRenderTargetView(this.renderTargetView[i], this.clearColor); - } + nativeDevice.ClearRenderTargetView(this.renderTargetView[i], clearColor); } } - if (this.depthStencilView != null) + Dx11.DepthStencilClearFlags clearFlags; + if ((options | ClearOptions.Stencil | ClearOptions.DepthBuffer) == options) { - if ((options | ClearOptions.Stencil | ClearOptions.DepthBuffer) == options) - { - // Clear the stencil buffer - nativeDevice.ClearDepthStencilView(this.depthStencilView, DepthStencilClearFlags.Depth | - DepthStencilClearFlags.Stencil, depth, (byte)stencil); - } - else if ((options | ClearOptions.Stencil) == options) - { - nativeDevice.ClearDepthStencilView(this.depthStencilView, DepthStencilClearFlags.Stencil, depth, - (byte)stencil); - } - else - { - nativeDevice.ClearDepthStencilView(this.depthStencilView, DepthStencilClearFlags.Depth, depth, (byte)stencil); - } + clearFlags = Dx11.DepthStencilClearFlags.Depth | Dx11.DepthStencilClearFlags.Stencil; + } + else if ((options | ClearOptions.Stencil) == options) + { + clearFlags = Dx11.DepthStencilClearFlags.Stencil; + } + else + { + clearFlags = Dx11.DepthStencilClearFlags.Depth; + } + + for (int i = 0; i < MAX_RENDER_TARGETS; i++) + { + if (this.depthStencilView[i] == null) + break; + + nativeDevice.ClearDepthStencilView(this.depthStencilView[i], clearFlags, depth, (byte)stencil); } } @@ -304,8 +240,8 @@ namespace ANX.RenderSystem.Windows.DX11 public void DrawUserPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int primitiveCount, VertexDeclaration vertexDeclaration) where T : struct, IVertexType { int vertexCount = vertexData.Length; - DxVertexBuffer vb11 = new DxVertexBuffer(nativeDevice.Device, vertexDeclaration, vertexCount, BufferUsage.None); - vb11.SetData(null, vertexData); + DxVertexBuffer vb11 = new DxVertexBuffer(this, vertexDeclaration, vertexCount, BufferUsage.None); + vb11.SetData(vertexData); Dx11.VertexBufferBinding nativeVertexBufferBindings = new Dx11.VertexBufferBinding(vb11.NativeBuffer, vertexDeclaration.VertexStride, 0); @@ -502,121 +438,82 @@ namespace ANX.RenderSystem.Windows.DX11 #endregion #region SetRenderTargets - public void SetRenderTargets(params RenderTargetBinding[] renderTargets) + public void SetRenderTargets(params RenderTargetBinding[] renderTargets) { - if (renderTargets == null) + if (renderTargets == null || renderTargets.Length == 0) { - // reset the RenderTarget to backbuffer - CreateDepthStencilBuffer(this.depthStencilBuffer.Description.Format, this.backBuffer.Description.Width, this.backBuffer.Description.Height, false); - nativeDevice.OutputMerger.SetTargets(this.depthStencilView, this.renderView); - nativeDevice.Rasterizer.SetViewport(new SharpDX.Viewport(0, 0, this.backBuffer.Description.Width, this.backBuffer.Description.Height)); + this.renderTargetView[0] = this.backBuffer.RenderTargetView; + this.depthStencilView[0] = this.backBuffer.DepthStencilView; - // dispose the old views - for (int i = 0; i < renderTargetView.Length; i++) + for (int i = 1; i < MAX_RENDER_TARGETS; i++) { - if (renderTargetView[i] != null) - { - renderTargetView[i].Dispose(); - renderTargetView[i] = null; - } + this.renderTargetView[i] = null; + this.depthStencilView[i] = null; } + + //To correctly unset renderTargets, the amount of given rendertargetViews must be max(#previousRenderTargets, #newRenderTargets), + //otherwise the old ones at the slots stay bound. For us it means, we try to unbind every possible previous slot. + nativeDevice.OutputMerger.SetRenderTargets(this.backBuffer.DepthStencilView, this.renderTargetView); + nativeDevice.Rasterizer.SetViewport(new SharpDX.ViewportF(0, 0, this.backBuffer.Width, this.backBuffer.Height)); } else { int renderTargetCount = renderTargets.Length; - RenderTargetView[] renderTargetsToDelete = new RenderTargetView[renderTargetView.Length]; - Array.Copy(renderTargetView, renderTargetsToDelete, renderTargetView.Length); - SharpDX.ViewportF[] rtViewports = new SharpDX.ViewportF[renderTargetCount]; + if (renderTargetCount > MAX_RENDER_TARGETS) + throw new NotSupportedException(string.Format("{0} render targets are not supported. The maximum is {1}.", renderTargetCount, MAX_RENDER_TARGETS)); - if (this.renderTargetView.Length != renderTargetCount) + var rtViewports = new SharpDX.ViewportF[renderTargetCount]; + + var firstRenderTarget = renderTargets[0].RenderTarget as RenderTarget2D; + for (int i = 1; i < renderTargetCount; i++) { - this.renderTargetView = new RenderTargetView[renderTargetCount]; + var renderTarget = renderTargets[i].RenderTarget as RenderTarget2D; + if (renderTarget.Width != firstRenderTarget.Width || renderTarget.Height != firstRenderTarget.Height || renderTarget.MultiSampleCount != firstRenderTarget.MultiSampleCount) + throw new ArgumentException("The render targets don't match"); } - int width = this.backBuffer.Description.Width; - int height = this.backBuffer.Description.Height; - for (int i = 0; i < renderTargetCount; i++) { RenderTarget2D renderTarget = renderTargets[i].RenderTarget as RenderTarget2D; + var nativeRenderTarget = renderTarget.NativeRenderTarget as RenderTarget2D_DX11; - //TODO: check if all render Targets have the same size - width = renderTarget.Width; - height = renderTarget.Height; - - if (renderTarget != null) - { - RenderTarget2D_DX11 nativeRenderTarget = renderTarget.NativeRenderTarget as RenderTarget2D_DX11; - - if (renderTargetView[i] != null) - { - renderTargetView[i].Dispose(); - } - - renderTargetView[i] = new RenderTargetView(nativeDevice.Device, ((DxTexture2D)nativeRenderTarget).NativeShaderResourceView.Resource); - rtViewports[i] = new SharpDX.Viewport(0, 0, width, height); - } + renderTargetView[i] = nativeRenderTarget.RenderTargetView; + depthStencilView[i] = nativeRenderTarget.DepthStencilView; + rtViewports[i] = new SharpDX.ViewportF(0, 0, renderTarget.Width, renderTarget.Height); } - CreateDepthStencilBuffer(this.depthStencilBuffer.Description.Format, width, height, false); - - nativeDevice.OutputMerger.SetTargets(this.depthStencilView, this.renderTargetView); - - nativeDevice.Rasterizer.SetViewports(rtViewports); - - // free the old render target views... - for (int i = 0; i < renderTargetsToDelete.Length; i++) + for (int i = renderTargetCount; i < MAX_RENDER_TARGETS; i++) { - if (renderTargetsToDelete[i] != null) - { - renderTargetsToDelete[i].Dispose(); - renderTargetsToDelete[i] = null; - } + this.renderTargetView[i] = null; + this.depthStencilView[i] = null; } + + nativeDevice.OutputMerger.SetRenderTargets(this.depthStencilView[0], renderTargetView); + nativeDevice.Rasterizer.SetViewports(rtViewports); } } #endregion - #region DisposeRenderView - protected void DisposeRenderView() - { - renderView.Dispose(); - renderView = null; - - backBuffer.Dispose(); - backBuffer = null; - } - #endregion + protected void DisposeBackBuffer() + { + if (backBuffer != null) + { + backBuffer.Dispose(); + backBuffer = null; + } + } #region Dispose public void Dispose() { - for (int i = 0; i < renderTargetView.Length; i++) - { - if (renderTargetView[i] != null) - { - renderTargetView[i].Dispose(); - renderTargetView[i] = null; - } - } - if (swapChain != null) { - DisposeRenderView(); + DisposeBackBuffer(); swapChain.Dispose(); swapChain = null; } - if (this.depthStencilView != null) - { - this.depthStencilBuffer.Dispose(); - this.depthStencilBuffer = null; - - this.depthStencilView.Dispose(); - this.depthStencilView = null; - } - //TODO: dispose everything else } #endregion diff --git a/RenderSystems/ANX.RenderSystem.Windows.DX11/RenderTarget2D_DX11.cs b/RenderSystems/ANX.RenderSystem.Windows.DX11/RenderTarget2D_DX11.cs index c011da0e..70789a7e 100644 --- a/RenderSystems/ANX.RenderSystem.Windows.DX11/RenderTarget2D_DX11.cs +++ b/RenderSystems/ANX.RenderSystem.Windows.DX11/RenderTarget2D_DX11.cs @@ -2,6 +2,8 @@ using System; using ANX.Framework.Graphics; using ANX.Framework.NonXNA.RenderSystem; +using Dx11 = SharpDX.Direct3D11; +using SharpDX.DXGI; #endregion @@ -13,30 +15,131 @@ namespace ANX.RenderSystem.Windows.DX11 { public class RenderTarget2D_DX11 : DxTexture2D, INativeRenderTarget2D, INativeTexture2D { - public RenderTarget2D_DX11(GraphicsDevice graphics, int width, int height, bool mipMap, SurfaceFormat surfaceFormat, + #if DEBUG + static int depthStencilCount = 0; + static int renderTargetCount = 0; +#endif + + Dx11.Texture2D depthStencil; + + public Dx11.RenderTargetView RenderTargetView + { + get; + protected set; + } + + public Dx11.DepthStencilView DepthStencilView + { + get; + protected set; + } + + public RenderTarget2D_DX11(GraphicsDeviceDX graphics, Dx11.Texture2D texture, DepthFormat depthFormat) + : base(graphics, texture) + { + Dx11.Device device = graphics.NativeDevice.Device; + + NativeTexture = texture; +#if DEBUG + NativeTexture.DebugName = "RenderTarget_" + renderTargetCount++; +#endif + RenderTargetView = new Dx11.RenderTargetView(device, NativeTexture); +#if DEBUG + RenderTargetView.DebugName = NativeTexture.DebugName + "_RenderTargetView"; +#endif + + CreateDepthStencil(graphics, depthFormat, texture.Description.Width, texture.Description.Height); + } + + #region Constructor + public RenderTarget2D_DX11(GraphicsDeviceDX graphics, int width, int height, bool mipMap, SurfaceFormat surfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount, RenderTargetUsage usage) - : base(graphics, surfaceFormat) - { - if (mipMap) - throw new NotImplementedException("creating RenderTargets with mip map not yet implemented"); - - var description = new SharpDX.Direct3D11.Texture2DDescription() - { - Width = width, - Height = height, - MipLevels = 1, - ArraySize = 1, + : base(graphics) + { + if (mipMap) + throw new NotImplementedException("creating RenderTargets with mip map not yet implemented"); + + var description = new Dx11.Texture2DDescription() + { + Width = width, + Height = height, + MipLevels = 1, + ArraySize = 1, Format = DxFormatConverter.Translate(surfaceFormat), - 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, - }; + SampleDescription = new SharpDX.DXGI.SampleDescription(1, 0), + Usage = Dx11.ResourceUsage.Default, + BindFlags = Dx11.BindFlags.ShaderResource | Dx11.BindFlags.RenderTarget, + CpuAccessFlags = Dx11.CpuAccessFlags.None, + OptionFlags = Dx11.ResourceOptionFlags.None, + }; - SharpDX.Direct3D11.DeviceContext device = (GraphicsDevice.NativeDevice as GraphicsDeviceDX).NativeDevice; - NativeTexture = new SharpDX.Direct3D11.Texture2D(device.Device, description); - NativeShaderResourceView = new SharpDX.Direct3D11.ShaderResourceView(device.Device, NativeTexture); + Dx11.Device device = graphics.NativeDevice.Device; + var texture = new Dx11.Texture2D(device, description); +#if DEBUG + texture.DebugName = "RenderTarget_" + renderTargetCount++; +#endif + this.Width = width; + this.Height = height; + + NativeTexture = texture; + RenderTargetView = new Dx11.RenderTargetView(device, NativeTexture); +#if DEBUG + RenderTargetView.DebugName = NativeTexture.DebugName + "_RenderTargetView"; +#endif + + CreateDepthStencil(graphics, preferredDepthFormat, width, height); } + #endregion + + private void CreateDepthStencil(GraphicsDeviceDX graphics, DepthFormat depthFormat, int width, int height) + { + //TODO: As we can only ever have 1 active DepthStencil and it's currently not possible to access it from the outside, + //we could share the depth stencils as long as they have the correct size and format. + + if (depthFormat == DepthFormat.None) + return; + + var dxDepthFormat = DxFormatConverter.Translate(depthFormat); + var depthStencilViewDesc = new Dx11.DepthStencilViewDescription() + { + Format = dxDepthFormat, + }; + + var device = graphics.NativeDevice.Device; + + var depthStencilTextureDesc = new Dx11.Texture2DDescription() + { + Width = width, + Height = height, + MipLevels = 1, + ArraySize = 1, + Format = dxDepthFormat, + SampleDescription = new SampleDescription(1, 0), + Usage = Dx11.ResourceUsage.Default, + BindFlags = Dx11.BindFlags.DepthStencil, + CpuAccessFlags = Dx11.CpuAccessFlags.None, + OptionFlags = Dx11.ResourceOptionFlags.None + }; + this.depthStencil = new Dx11.Texture2D(device, depthStencilTextureDesc); + this.DepthStencilView = new Dx11.DepthStencilView(device, this.depthStencil); +#if DEBUG + this.depthStencil.DebugName = "DepthStencil_" + depthStencilCount++; + this.DepthStencilView.DebugName = this.depthStencil.DebugName + "_View"; +#endif + } + + protected override void Dispose(bool managed) + { + base.Dispose(managed); + + if (RenderTargetView != null) + { + RenderTargetView.Dispose(); + } + if (DepthStencilView != null) + { + DepthStencilView.Dispose(); + } + } } } diff --git a/Samples/AlphaTestEffectSample/AlphaTestEffectSample.csproj b/Samples/AlphaTestEffectSample/AlphaTestEffectSample.csproj index 6b833081..01e500f0 100644 --- a/Samples/AlphaTestEffectSample/AlphaTestEffectSample.csproj +++ b/Samples/AlphaTestEffectSample/AlphaTestEffectSample.csproj @@ -22,6 +22,7 @@ DEBUG;TRACE prompt 4 + false AnyCPU diff --git a/Samples/BasicEffectSample.sln b/Samples/BasicEffectSample.sln index c72919a2..7b9fe272 100644 --- a/Samples/BasicEffectSample.sln +++ b/Samples/BasicEffectSample.sln @@ -1,58 +1,211 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SampleContent", "SampleContent\SampleContent.contentproj", "{FA6E229D-4504-47B1-8A23-2D3FCC13F778}" -EndProject +# Visual Studio 2013 +VisualStudioVersion = 12.0.40629.0 +MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BasicEffectSample", "BasicEffectSample\BasicEffectSample.csproj", "{D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}" + ProjectSection(ProjectDependencies) = postProject + {75EFAE60-726E-430F-8661-4CF9ABD1306C} = {75EFAE60-726E-430F-8661-4CF9ABD1306C} + EndProjectSection +EndProject +Project("{75EFAE60-726E-430F-8661-4CF9ABD1306C}") = "SampleContent", "SampleContent\SampleContent.cproj", "{75EFAE60-726E-430F-8661-4CF9ABD1306C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Android = Debug|Android Debug|Any CPU = Debug|Any CPU + Debug|iOS = Debug|iOS + Debug|Linux = Debug|Linux + Debug|Mac OS = Debug|Mac OS Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|PS Vita = Debug|PS Vita + Debug|Windows = Debug|Windows + Debug|Windows Metro = Debug|Windows Metro + Debug|Windows Phone = Debug|Windows Phone Debug|x86 = Debug|x86 + Debug|XBox 360 = Debug|XBox 360 + DebugWin8|Android = DebugWin8|Android DebugWin8|Any CPU = DebugWin8|Any CPU + DebugWin8|iOS = DebugWin8|iOS + DebugWin8|Linux = DebugWin8|Linux + DebugWin8|Mac OS = DebugWin8|Mac OS DebugWin8|Mixed Platforms = DebugWin8|Mixed Platforms + DebugWin8|PS Vita = DebugWin8|PS Vita + DebugWin8|Windows = DebugWin8|Windows + DebugWin8|Windows Metro = DebugWin8|Windows Metro + DebugWin8|Windows Phone = DebugWin8|Windows Phone DebugWin8|x86 = DebugWin8|x86 + DebugWin8|XBox 360 = DebugWin8|XBox 360 + Release|Android = Release|Android Release|Any CPU = Release|Any CPU + Release|iOS = Release|iOS + Release|Linux = Release|Linux + Release|Mac OS = Release|Mac OS Release|Mixed Platforms = Release|Mixed Platforms + Release|PS Vita = Release|PS Vita + Release|Windows = Release|Windows + Release|Windows Metro = Release|Windows Metro + Release|Windows Phone = Release|Windows Phone Release|x86 = Release|x86 + Release|XBox 360 = Release|XBox 360 + ReleaseWin8|Android = ReleaseWin8|Android ReleaseWin8|Any CPU = ReleaseWin8|Any CPU + ReleaseWin8|iOS = ReleaseWin8|iOS + ReleaseWin8|Linux = ReleaseWin8|Linux + ReleaseWin8|Mac OS = ReleaseWin8|Mac OS ReleaseWin8|Mixed Platforms = ReleaseWin8|Mixed Platforms + ReleaseWin8|PS Vita = ReleaseWin8|PS Vita + ReleaseWin8|Windows = ReleaseWin8|Windows + ReleaseWin8|Windows Metro = ReleaseWin8|Windows Metro + ReleaseWin8|Windows Phone = ReleaseWin8|Windows Phone ReleaseWin8|x86 = ReleaseWin8|x86 + ReleaseWin8|XBox 360 = ReleaseWin8|XBox 360 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {FA6E229D-4504-47B1-8A23-2D3FCC13F778}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FA6E229D-4504-47B1-8A23-2D3FCC13F778}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {FA6E229D-4504-47B1-8A23-2D3FCC13F778}.Debug|x86.ActiveCfg = Debug|Any CPU - {FA6E229D-4504-47B1-8A23-2D3FCC13F778}.DebugWin8|Any CPU.ActiveCfg = Debug|Any CPU - {FA6E229D-4504-47B1-8A23-2D3FCC13F778}.DebugWin8|Mixed Platforms.ActiveCfg = Debug|Any CPU - {FA6E229D-4504-47B1-8A23-2D3FCC13F778}.DebugWin8|x86.ActiveCfg = Debug|Any CPU - {FA6E229D-4504-47B1-8A23-2D3FCC13F778}.Release|Any CPU.ActiveCfg = Debug|Any CPU - {FA6E229D-4504-47B1-8A23-2D3FCC13F778}.Release|Mixed Platforms.ActiveCfg = Debug|Any CPU - {FA6E229D-4504-47B1-8A23-2D3FCC13F778}.Release|x86.ActiveCfg = Debug|Any CPU - {FA6E229D-4504-47B1-8A23-2D3FCC13F778}.ReleaseWin8|Any CPU.ActiveCfg = Debug|Any CPU - {FA6E229D-4504-47B1-8A23-2D3FCC13F778}.ReleaseWin8|Mixed Platforms.ActiveCfg = Debug|Any CPU - {FA6E229D-4504-47B1-8A23-2D3FCC13F778}.ReleaseWin8|x86.ActiveCfg = Debug|Any CPU - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|Any CPU.ActiveCfg = Debug|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|Mixed Platforms.Build.0 = Debug|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|x86.ActiveCfg = Debug|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|x86.Build.0 = Debug|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.DebugWin8|Any CPU.ActiveCfg = Debug|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.DebugWin8|Mixed Platforms.ActiveCfg = Debug|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.DebugWin8|Mixed Platforms.Build.0 = Debug|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.DebugWin8|x86.ActiveCfg = Debug|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.DebugWin8|x86.Build.0 = Debug|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|Any CPU.ActiveCfg = Release|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|Mixed Platforms.ActiveCfg = Release|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|Mixed Platforms.Build.0 = Release|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|x86.ActiveCfg = Release|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|x86.Build.0 = Release|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.ReleaseWin8|Any CPU.ActiveCfg = Release|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.ReleaseWin8|Mixed Platforms.ActiveCfg = Release|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.ReleaseWin8|Mixed Platforms.Build.0 = Release|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.ReleaseWin8|x86.ActiveCfg = Release|x86 - {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.ReleaseWin8|x86.Build.0 = Release|x86 + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|Android.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|iOS.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|Linux.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|Mac OS.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|PS Vita.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|Windows.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|Windows Metro.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|Windows Phone.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|x86.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Debug|XBox 360.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.DebugWin8|Android.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.DebugWin8|Any CPU.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.DebugWin8|Any CPU.Build.0 = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.DebugWin8|iOS.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.DebugWin8|Linux.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.DebugWin8|Mac OS.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.DebugWin8|Mixed Platforms.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.DebugWin8|Mixed Platforms.Build.0 = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.DebugWin8|PS Vita.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.DebugWin8|Windows.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.DebugWin8|Windows Metro.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.DebugWin8|Windows Phone.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.DebugWin8|x86.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.DebugWin8|XBox 360.ActiveCfg = Debug|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|Android.ActiveCfg = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|Any CPU.Build.0 = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|iOS.ActiveCfg = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|Linux.ActiveCfg = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|Mac OS.ActiveCfg = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|PS Vita.ActiveCfg = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|Windows.ActiveCfg = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|Windows Metro.ActiveCfg = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|Windows Phone.ActiveCfg = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|x86.ActiveCfg = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.Release|XBox 360.ActiveCfg = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.ReleaseWin8|Android.ActiveCfg = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.ReleaseWin8|Any CPU.ActiveCfg = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.ReleaseWin8|Any CPU.Build.0 = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.ReleaseWin8|iOS.ActiveCfg = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.ReleaseWin8|Linux.ActiveCfg = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.ReleaseWin8|Mac OS.ActiveCfg = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.ReleaseWin8|Mixed Platforms.ActiveCfg = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.ReleaseWin8|Mixed Platforms.Build.0 = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.ReleaseWin8|PS Vita.ActiveCfg = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.ReleaseWin8|Windows.ActiveCfg = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.ReleaseWin8|Windows Metro.ActiveCfg = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.ReleaseWin8|Windows Phone.ActiveCfg = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.ReleaseWin8|x86.ActiveCfg = Release|Any CPU + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782}.ReleaseWin8|XBox 360.ActiveCfg = Release|Any CPU + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Debug|Android.ActiveCfg = Debug|Android + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Debug|Android.Build.0 = Debug|Android + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Debug|Any CPU.ActiveCfg = Debug|Android + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Debug|iOS.ActiveCfg = Debug|iOS + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Debug|iOS.Build.0 = Debug|iOS + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Debug|Linux.ActiveCfg = Debug|Linux + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Debug|Linux.Build.0 = Debug|Linux + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Debug|Mac OS.ActiveCfg = Debug|Mac OS + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Debug|Mac OS.Build.0 = Debug|Mac OS + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Debug|Mixed Platforms.ActiveCfg = Debug|Windows + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Debug|Mixed Platforms.Build.0 = Debug|Windows + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Debug|PS Vita.ActiveCfg = Debug|PS Vita + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Debug|PS Vita.Build.0 = Debug|PS Vita + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Debug|Windows.ActiveCfg = Debug|Windows + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Debug|Windows.Build.0 = Debug|Windows + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Debug|Windows Metro.ActiveCfg = Debug|Windows Metro + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Debug|Windows Metro.Build.0 = Debug|Windows Metro + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Debug|Windows Phone.ActiveCfg = Debug|Windows Phone + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Debug|Windows Phone.Build.0 = Debug|Windows Phone + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Debug|x86.ActiveCfg = Debug|XBox 360 + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Debug|XBox 360.ActiveCfg = Debug|XBox 360 + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Debug|XBox 360.Build.0 = Debug|XBox 360 + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.DebugWin8|Android.ActiveCfg = Debug|Android + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.DebugWin8|Android.Build.0 = Debug|Android + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.DebugWin8|Any CPU.ActiveCfg = Debug|Android + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.DebugWin8|iOS.ActiveCfg = Debug|iOS + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.DebugWin8|iOS.Build.0 = Debug|iOS + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.DebugWin8|Linux.ActiveCfg = Debug|Linux + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.DebugWin8|Linux.Build.0 = Debug|Linux + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.DebugWin8|Mac OS.ActiveCfg = Debug|Mac OS + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.DebugWin8|Mac OS.Build.0 = Debug|Mac OS + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.DebugWin8|Mixed Platforms.ActiveCfg = Debug|XBox 360 + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.DebugWin8|Mixed Platforms.Build.0 = Debug|XBox 360 + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.DebugWin8|PS Vita.ActiveCfg = Debug|PS Vita + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.DebugWin8|PS Vita.Build.0 = Debug|PS Vita + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.DebugWin8|Windows.ActiveCfg = Debug|Windows + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.DebugWin8|Windows.Build.0 = Debug|Windows + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.DebugWin8|Windows Metro.ActiveCfg = Debug|Windows Metro + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.DebugWin8|Windows Metro.Build.0 = Debug|Windows Metro + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.DebugWin8|Windows Phone.ActiveCfg = Debug|Windows Phone + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.DebugWin8|Windows Phone.Build.0 = Debug|Windows Phone + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.DebugWin8|x86.ActiveCfg = Debug|XBox 360 + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.DebugWin8|XBox 360.ActiveCfg = Debug|XBox 360 + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.DebugWin8|XBox 360.Build.0 = Debug|XBox 360 + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Release|Android.ActiveCfg = Release|Android + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Release|Android.Build.0 = Release|Android + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Release|Any CPU.ActiveCfg = Release|Android + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Release|iOS.ActiveCfg = Release|iOS + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Release|iOS.Build.0 = Release|iOS + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Release|Linux.ActiveCfg = Release|Linux + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Release|Linux.Build.0 = Release|Linux + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Release|Mac OS.ActiveCfg = Release|Mac OS + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Release|Mac OS.Build.0 = Release|Mac OS + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Release|Mixed Platforms.ActiveCfg = Release|XBox 360 + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Release|Mixed Platforms.Build.0 = Release|XBox 360 + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Release|PS Vita.ActiveCfg = Release|PS Vita + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Release|PS Vita.Build.0 = Release|PS Vita + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Release|Windows.ActiveCfg = Release|Windows + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Release|Windows.Build.0 = Release|Windows + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Release|Windows Metro.ActiveCfg = Release|Windows Metro + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Release|Windows Metro.Build.0 = Release|Windows Metro + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Release|Windows Phone.ActiveCfg = Release|Windows Phone + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Release|Windows Phone.Build.0 = Release|Windows Phone + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Release|x86.ActiveCfg = Release|XBox 360 + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Release|XBox 360.ActiveCfg = Release|XBox 360 + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.Release|XBox 360.Build.0 = Release|XBox 360 + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.ReleaseWin8|Android.ActiveCfg = Release|Android + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.ReleaseWin8|Android.Build.0 = Release|Android + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.ReleaseWin8|Any CPU.ActiveCfg = Release|Android + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.ReleaseWin8|iOS.ActiveCfg = Release|iOS + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.ReleaseWin8|iOS.Build.0 = Release|iOS + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.ReleaseWin8|Linux.ActiveCfg = Release|Linux + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.ReleaseWin8|Linux.Build.0 = Release|Linux + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.ReleaseWin8|Mac OS.ActiveCfg = Release|Mac OS + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.ReleaseWin8|Mac OS.Build.0 = Release|Mac OS + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.ReleaseWin8|Mixed Platforms.ActiveCfg = Release|XBox 360 + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.ReleaseWin8|Mixed Platforms.Build.0 = Release|XBox 360 + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.ReleaseWin8|PS Vita.ActiveCfg = Release|PS Vita + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.ReleaseWin8|PS Vita.Build.0 = Release|PS Vita + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.ReleaseWin8|Windows.ActiveCfg = Release|Windows + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.ReleaseWin8|Windows.Build.0 = Release|Windows + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.ReleaseWin8|Windows Metro.ActiveCfg = Release|Windows Metro + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.ReleaseWin8|Windows Metro.Build.0 = Release|Windows Metro + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.ReleaseWin8|Windows Phone.ActiveCfg = Release|Windows Phone + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.ReleaseWin8|Windows Phone.Build.0 = Release|Windows Phone + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.ReleaseWin8|x86.ActiveCfg = Release|XBox 360 + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.ReleaseWin8|XBox 360.ActiveCfg = Release|XBox 360 + {75EFAE60-726E-430F-8661-4CF9ABD1306C}.ReleaseWin8|XBox 360.Build.0 = Release|XBox 360 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Samples/BasicEffectSample/BasicEffectSample.csproj b/Samples/BasicEffectSample/BasicEffectSample.csproj index 388881e7..93379acb 100644 --- a/Samples/BasicEffectSample/BasicEffectSample.csproj +++ b/Samples/BasicEffectSample/BasicEffectSample.csproj @@ -1,65 +1,69 @@  + {D810F12D-6CE9-4755-AC6A-5DFEC7D1C782} - {6D335F3A-9D43-41b4-9D22-F6F17C4BE596};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} Debug - x86 + AnyCPU WinExe Properties BasicEffectSample BasicEffectSample v4.0 Client - v4.0 - Windows - HiDef - e26e1d47-54d1-4ba4-87b9-492a55c54a4f - Game anx.ico - GameThumbnail.png - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - + true full false - bin\x86\Debug + bin\Debug DEBUG;TRACE;WINDOWS prompt 4 true false - x86 - false + AnyCPU - + pdbonly true - bin\x86\Release + bin\Release TRACE;WINDOWS prompt 4 true false - x86 - true + AnyCPU + + + Always + + False + ..\..\bin\Debug\ANX.Framework.dll + + + False + ..\..\bin\Debug\ANX.InputDevices.Windows.XInput.dll + + + False + ..\..\bin\Debug\ANX.InputSystem.Standard.dll + + + False + ..\..\bin\Debug\ANX.PlatformSystem.Windows.dll + + + False + ..\..\bin\Debug\ANX.RenderSystem.Windows.DX10.dll + + + False + ..\..\bin\Debug\ANX.SoundSystem.Windows.XAudio.dll + False @@ -109,41 +113,6 @@ - - - {6899F0C9-70B9-4EB0-9DD3-E598D4BE3E35} - ANX.Framework - - - {60D08399-244F-46A3-91F1-4CFD26D961A3} - ANX.InputDevices.Windows.XInput - - - {49066074-3B7B-4A55-B122-6BD33AB73558} - ANX.InputSystem.Standard - - - {068EB2E9-963C-4E1B-8831-E25011F11FFE} - ANX.PlatformSystem.Windows - - - {5BE49183-2F6F-4527-AC90-D816911FCF90} - ANX.RenderSystem.Windows.DX10 - - - {B30DE9C2-0926-46B6-8351-9AF276C472D5} - ANX.RenderSystem.Windows.DX11 - - - {6A582788-C4D2-410C-96CD-177F75712D65} - ANX.SoundSystem.Windows.XAudio - - - {FA6E229D-4504-47B1-8A23-2D3FCC13F778} - SampleContent - Content - - False @@ -165,14 +134,11 @@ Windows Installer 3.1 true - - False - Microsoft XNA Framework Redistributable 4.0 - true - - + + xcopy $(ProjectDir)..\SampleContent\bin\$(ConfigurationName) $(TargetDir)SampleContent\ /D /E /Y +