From 55ab328f79815da435b02c81d58353cfc22d5a12 Mon Sep 17 00:00:00 2001 From: Konstantin Koch Date: Wed, 30 Sep 2015 21:31:15 +0200 Subject: [PATCH] Updated BasicEffectSample, DualTextureSample, KeyboardSample and MultiRenderTarget. Also reduced the memory usage for multiple rendertargets Also did some Refactoring for Classes that implement and use INativeBuffer. The memory usage reduction for rendertargets resulted in some refactoring of the directx texture classes. Also added DebugNames for some DirectX resources in case of a debug build. --- ANX.Framework/Graphics/IndexBuffer.cs | 9 +- ANX.Framework/Graphics/RenderTarget2D.cs | 12 +- ANX.Framework/Graphics/Texture2D.cs | 35 +- ANX.Framework/Graphics/VertexBuffer.cs | 8 +- .../NonXNA/RenderSystem/INativeBuffer.cs | 9 +- .../RenderSystem/INativeGraphicsDevice.cs | 1 - .../NonXNA/RenderSystem/INativeIndexBuffer.cs | 5 +- .../NonXNA/RenderSystem/INativeTexture2D.cs | 6 +- .../RenderSystem/INativeVertexBuffer.cs | 6 +- ANX.Framework_VS2013.sln | 389 +++++++++--------- .../ANX.Framework.GL3/IndexBufferGL3.cs | 12 +- .../ANX.Framework.GL3/Texture2DGL3.cs | 13 +- .../ANX.Framework.GL3/VertexBufferGL3.cs | 23 +- .../DxFormatConverter.cs | 5 +- .../ResourceMapping.cs | 18 + .../SharedDxTexture2D.cs | 295 ++++++------- .../SharedGraphicsDeviceDX.cs | 55 +-- .../SharedIndexBuffer.cs | 15 +- .../SharedVertexBuffer.cs | 16 +- .../ANX.RenderSystem.Windows.DX10.csproj | 4 + .../ANX.RenderSystem.Windows.DX10/Creator.cs | 4 +- .../DxTexture2D.cs | 211 +++++----- .../Extensions.cs | 42 ++ .../GraphicsDeviceDX.cs | 304 +++++--------- .../RenderTarget2D_DX10.cs | 108 ++++- .../ANX.RenderSystem.Windows.DX11.csproj | 4 + .../ANX.RenderSystem.Windows.DX11/Creator.cs | 6 +- .../DxTexture2D.cs | 212 +++++----- .../DxVertexBuffer.cs | 24 +- .../Extensions.cs | 34 ++ .../GraphicsDeviceDX.cs | 289 +++++-------- .../RenderTarget2D_DX11.cs | 145 ++++++- .../AlphaTestEffectSample.csproj | 1 + Samples/BasicEffectSample.sln | 223 ++++++++-- .../BasicEffectSample.csproj | 110 ++--- Samples/DualTextureSample.sln | 223 ++++++++-- .../DualTextureSample.csproj | 104 ++--- Samples/KeyboardSample.sln | 220 ++++++++-- Samples/KeyboardSample/KeyboardSample.csproj | 121 ++---- Samples/MultiRenderTarget.sln | 223 ++++++++-- Samples/MultiRenderTarget/Game1.cs | 1 + .../MultiRenderTarget.csproj | 113 ++--- Samples/SampleContent/SampleContent.cproj | 5 + Samples/VertexIndexBuffer/Game1.cs | 1 - 44 files changed, 2059 insertions(+), 1605 deletions(-) create mode 100644 RenderSystems/ANX.RenderSystem.DX.SharedSources/ResourceMapping.cs create mode 100644 RenderSystems/ANX.RenderSystem.Windows.DX10/Extensions.cs create mode 100644 RenderSystems/ANX.RenderSystem.Windows.DX11/Extensions.cs 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 +