diff --git a/ANX.Framework.sln b/ANX.Framework.sln index 13b8ef05..12275a9e 100644 --- a/ANX.Framework.sln +++ b/ANX.Framework.sln @@ -33,7 +33,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xinput", "Samples\Xinput\Xi EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsGame", "Samples\WindowsGame\WindowsGame.csproj", "{A08575E0-7B21-4822-9D4C-6B9EEB7EFFF7}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProjectConverter", "Tools\XNAToANXConverter\ProjectConverter.csproj", "{B5209A04-B2F8-4033-A5E7-545BE771214C}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProjectConverter", "Tools\ProjectConverter\ProjectConverter.csproj", "{B5209A04-B2F8-4033-A5E7-545BE771214C}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kinect", "Samples\Kinect\Kinect.csproj", "{A42413A9-5189-40CB-AACA-D50F24865431}" EndProject diff --git a/ANX.Framework_Linux.sln b/ANX.Framework_Linux.sln index 3948f39c..5578c8d5 100644 --- a/ANX.Framework_Linux.sln +++ b/ANX.Framework_Linux.sln @@ -33,7 +33,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xinput", "Samples\Xinput\Xi EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsGame", "Samples\WindowsGame\WindowsGame_Linux.csproj", "{A08575E0-7B21-4822-9D4C-6B9EEB7EFFF7}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProjectConverter", "Tools\XNAToANXConverter\ProjectConverter_Linux.csproj", "{B5209A04-B2F8-4033-A5E7-545BE771214C}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProjectConverter", "Tools\ProjectConverter\ProjectConverter_Linux.csproj", "{B5209A04-B2F8-4033-A5E7-545BE771214C}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kinect", "Samples\Kinect\Kinect_Linux.csproj", "{A42413A9-5189-40CB-AACA-D50F24865431}" EndProject diff --git a/ANX.Framework_PSVita.sln b/ANX.Framework_PSVita.sln index bf49af6e..9d5d1f80 100644 --- a/ANX.Framework_PSVita.sln +++ b/ANX.Framework_PSVita.sln @@ -33,7 +33,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xinput", "Samples\Xinput\Xi EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsGame", "Samples\WindowsGame\WindowsGame_PSVita.csproj", "{A08575E0-7B21-4822-9D4C-6B9EEB7EFFF7}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProjectConverter", "Tools\XNAToANXConverter\ProjectConverter_PSVita.csproj", "{B5209A04-B2F8-4033-A5E7-545BE771214C}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProjectConverter", "Tools\ProjectConverter\ProjectConverter_PSVita.csproj", "{B5209A04-B2F8-4033-A5E7-545BE771214C}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kinect", "Samples\Kinect\Kinect_PSVita.csproj", "{A42413A9-5189-40CB-AACA-D50F24865431}" EndProject diff --git a/ANX.Framework_WindowsMetro.sln b/ANX.Framework_WindowsMetro.sln index 61af71c1..c916313f 100644 --- a/ANX.Framework_WindowsMetro.sln +++ b/ANX.Framework_WindowsMetro.sln @@ -33,7 +33,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xinput", "Samples\Xinput\Xi EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsGame", "Samples\WindowsGame\WindowsGame_WindowsMetro.csproj", "{A08575E0-7B21-4822-9D4C-6B9EEB7EFFF7}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProjectConverter", "Tools\XNAToANXConverter\ProjectConverter_WindowsMetro.csproj", "{B5209A04-B2F8-4033-A5E7-545BE771214C}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProjectConverter", "Tools\ProjectConverter\ProjectConverter_WindowsMetro.csproj", "{B5209A04-B2F8-4033-A5E7-545BE771214C}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kinect", "Samples\Kinect\Kinect_WindowsMetro.csproj", "{A42413A9-5189-40CB-AACA-D50F24865431}" EndProject diff --git a/RenderSystems/ANX.Framework.Windows.DX10/EffectParameter_DX10.cs b/RenderSystems/ANX.Framework.Windows.DX10/EffectParameter_DX10.cs index e4e32fc8..e3cca7df 100644 --- a/RenderSystems/ANX.Framework.Windows.DX10/EffectParameter_DX10.cs +++ b/RenderSystems/ANX.Framework.Windows.DX10/EffectParameter_DX10.cs @@ -56,16 +56,16 @@ namespace ANX.RenderSystem.Windows.DX10 nativeEffectVariable.AsScalar().Set(value); } - public void SetValue(Matrix value, bool transpose) + public void SetValue(Matrix value, bool transpose) { - // TODO: handle transpose! + // TODO: handle transpose! SharpDX.Matrix m = new SharpDX.Matrix(value.M11, value.M12, value.M13, value.M14, value.M21, value.M22, value.M23, value.M24, value.M31, value.M32, value.M33, value.M34, value.M41, value.M42, value.M43, value.M44); nativeEffectVariable.AsMatrix().SetMatrix(m); } public void SetValue(Matrix[] value, bool transpose) - { - // TODO: handle transpose! + { + // TODO: handle transpose! int count = value.Length; SharpDX.Matrix[] m = new SharpDX.Matrix[count]; Matrix anxMatrix; diff --git a/RenderSystems/ANX.Framework.Windows.DX10/GraphicsDeviceWindowsDX10.cs b/RenderSystems/ANX.Framework.Windows.DX10/GraphicsDeviceWindowsDX10.cs index ded9e404..6527c51f 100644 --- a/RenderSystems/ANX.Framework.Windows.DX10/GraphicsDeviceWindowsDX10.cs +++ b/RenderSystems/ANX.Framework.Windows.DX10/GraphicsDeviceWindowsDX10.cs @@ -7,9 +7,11 @@ using SharpDX; using SharpDX.DXGI; using SharpDX.Direct3D; using SharpDX.D3DCompiler; -using ANX.Framework.NonXNA; using SharpDX.Direct3D10; +using ANX.Framework; +using ANX.Framework.NonXNA; using ANX.Framework.Graphics; +using System.Runtime.InteropServices; #endregion // Using Statements @@ -19,8 +21,6 @@ using ANX.Framework.Graphics; using Device = SharpDX.Direct3D10.Device; using Buffer = SharpDX.Direct3D10.Buffer; -using System.Runtime.InteropServices; -using ANX.Framework; using Rectangle = ANX.Framework.Rectangle; using Vector4 = ANX.Framework.Vector4; using VertexBufferBinding = ANX.Framework.Graphics.VertexBufferBinding; @@ -61,7 +61,7 @@ namespace ANX.RenderSystem.Windows.DX10 private Device device; private SwapChain swapChain; private RenderTargetView renderView; - private RenderTargetView renderTargetView; + private RenderTargetView[] renderTargetView = new RenderTargetView[1]; private DepthStencilView depthStencilView; private SharpDX.Direct3D10.Texture2D depthStencilBuffer; private SharpDX.Direct3D10.Texture2D backBuffer; @@ -188,7 +188,22 @@ namespace ANX.RenderSystem.Windows.DX10 clearColor.Alpha = color.A * ColorMultiplier; } - this.device.ClearRenderTargetView(this.renderTargetView != null ? this.renderTargetView : this.renderView, this.clearColor); + if (this.renderTargetView[0] == null) + { + this.device.ClearRenderTargetView(this.renderView, this.clearColor); + } + else + { + for (int i = 0; i < this.renderTargetView.Length; i++) + { + if (this.renderTargetView[i] == null) + { + break; + } + + this.device.ClearRenderTargetView(this.renderTargetView[i], this.clearColor); + } + } } public void Clear(ClearOptions options, Vector4 color, float depth, int stencil) @@ -203,7 +218,22 @@ namespace ANX.RenderSystem.Windows.DX10 this.clearColor.Alpha = color.W; this.lastClearColor = 0; - this.device.ClearRenderTargetView(this.renderTargetView != null ? this.renderTargetView : this.renderView, this.clearColor); + if (this.renderTargetView[0] == null) + { + this.device.ClearRenderTargetView(this.renderView, this.clearColor); + } + else + { + for (int i = 0; i < this.renderTargetView.Length; i++) + { + if (this.renderTargetView[i] == null) + { + break; + } + + this.device.ClearRenderTargetView(this.renderTargetView[i], this.clearColor); + } + } } if (this.depthStencilView != null) @@ -323,7 +353,23 @@ namespace ANX.RenderSystem.Windows.DX10 device.InputAssembler.SetVertexBuffers(0, nativeVertexBufferBindings); - DrawPrimitives(primitiveType, vertexOffset, primitiveCount); + SharpDX.Direct3D10.EffectPass pass; SharpDX.Direct3D10.EffectTechnique technique; ShaderBytecode passSignature; + SetupEffectForDraw(out pass, out technique, out passSignature); + + var layout = CreateInputLayout(device, passSignature, vertexDeclaration); + + device.InputAssembler.InputLayout = layout; + // Prepare All the stages + device.InputAssembler.PrimitiveTopology = FormatConverter.Translate(primitiveType); + device.Rasterizer.SetViewports(currentViewport); + + //device.OutputMerger.SetTargets(this.depthStencilView, this.renderView); + + for (int i = 0; i < technique.Description.PassCount; ++i) + { + pass.Apply(); + device.Draw(primitiveCount, vertexOffset); + } } #endregion // DrawUserPrimitives @@ -352,7 +398,12 @@ namespace ANX.RenderSystem.Windows.DX10 private void SetupInputLayout(ShaderBytecode passSignature) { // get the VertexDeclaration from current VertexBuffer to create input layout for the input assembler - //TODO: check for null and throw exception + + if (currentVertexBuffer == null) + { + throw new ArgumentNullException("passSignature"); + } + VertexDeclaration vertexDeclaration = currentVertexBuffer.VertexDeclaration; var layout = CreateInputLayout(device, passSignature, vertexDeclaration); @@ -487,10 +538,13 @@ namespace ANX.RenderSystem.Windows.DX10 if (renderTargets == null) { // reset the RenderTarget to backbuffer - if (renderTargetView != null) + for (int i = 0; i < renderTargetView.Length; i++) { - renderTargetView.Dispose(); - renderTargetView = null; + if (renderTargetView[i] != null) + { + renderTargetView[i].Dispose(); + renderTargetView[i] = null; + } } device.OutputMerger.SetRenderTargets(1, new RenderTargetView[] { this.renderView }, this.depthStencilView); @@ -498,26 +552,60 @@ namespace ANX.RenderSystem.Windows.DX10 } else { - if (renderTargets.Length == 1) + int renderTargetCount = renderTargets.Length; + if (this.renderTargetView.Length != renderTargetCount) { - RenderTarget2D renderTarget = renderTargets[0].RenderTarget as RenderTarget2D; - RenderTarget2D_DX10 nativeRenderTarget = renderTarget.NativeRenderTarget as RenderTarget2D_DX10; + for (int i = 0; i < renderTargetView.Length; i++) + { + if (renderTargetView[i] != null) + { + renderTargetView[i].Dispose(); + renderTargetView[i] = null; + } + } + + this.renderTargetView = new RenderTargetView[renderTargetCount]; + } + + for (int i = 0; i < renderTargetCount; i++) + { + RenderTarget2D renderTarget = renderTargets[i].RenderTarget as RenderTarget2D; if (renderTarget != null) { - if (renderTargetView != null) + RenderTarget2D_DX10 nativeRenderTarget = renderTarget.NativeRenderTarget as RenderTarget2D_DX10; + + if (renderTargetView[i] != null) { - renderTargetView.Dispose(); - renderTargetView = null; + renderTargetView[i].Dispose(); } - this.renderTargetView = new RenderTargetView(device, ((Texture2D_DX10)nativeRenderTarget).NativeShaderResourceView.Resource); - DepthStencilView depthStencilView = null; - device.OutputMerger.SetRenderTargets(1,new RenderTargetView[] { this.renderTargetView }, depthStencilView); + + renderTargetView[i] = new RenderTargetView(device, ((Texture2D_DX10)nativeRenderTarget).NativeShaderResourceView.Resource); } } - else - { - throw new NotImplementedException("handling of multiple RenderTargets are not yet implemented"); - } + + device.OutputMerger.SetRenderTargets(renderTargetCount, renderTargetView, this.depthStencilView); + device.OutputMerger.SetTargets(this.depthStencilView, this.renderTargetView); + + //if (renderTargets.Length == 1) + //{ + // RenderTarget2D renderTarget = renderTargets[0].RenderTarget as RenderTarget2D; + // RenderTarget2D_DX10 nativeRenderTarget = renderTarget.NativeRenderTarget as RenderTarget2D_DX10; + // if (renderTarget != null) + // { + // if (renderTargetView != null) + // { + // renderTargetView.Dispose(); + // renderTargetView = null; + // } + // this.renderTargetView = new RenderTargetView(device, ((Texture2D_DX10)nativeRenderTarget).NativeShaderResourceView.Resource); + // DepthStencilView depthStencilView = null; + // device.OutputMerger.SetRenderTargets(1, new RenderTargetView[] { this.renderTargetView }, depthStencilView); + // } + //} + //else + //{ + // throw new NotImplementedException("handling of multiple RenderTargets are not yet implemented"); + //} } } @@ -593,10 +681,13 @@ namespace ANX.RenderSystem.Windows.DX10 public void Dispose() { - if (renderTargetView != null) + for (int i = 0; i < renderTargetView.Length; i++) { - renderTargetView.Dispose(); - renderTargetView = null; + if (renderTargetView[i] != null) + { + renderTargetView[i].Dispose(); + renderTargetView[i] = null; + } } if (swapChain != null) diff --git a/RenderSystems/ANX.RenderSystem.Windows.DX11/EffectParameter_DX11.cs b/RenderSystems/ANX.RenderSystem.Windows.DX11/EffectParameter_DX11.cs index 15dd5df1..f40aed25 100644 --- a/RenderSystems/ANX.RenderSystem.Windows.DX11/EffectParameter_DX11.cs +++ b/RenderSystems/ANX.RenderSystem.Windows.DX11/EffectParameter_DX11.cs @@ -15,6 +15,9 @@ using ANX.Framework; // "ANX.Framework developer group" and released under the Ms-PL license. // For details see: http://anxframework.codeplex.com/license +using Texture2D = ANX.Framework.Graphics.Texture2D; +using Texture3D = ANX.Framework.Graphics.Texture3D; + namespace ANX.RenderSystem.Windows.DX11 { public class EffectParameter_DX11 : INativeEffectParameter @@ -53,14 +56,16 @@ namespace ANX.RenderSystem.Windows.DX11 nativeEffectVariable.AsScalar().Set(value); } - public void SetValue(Matrix value, bool transpose) + public void SetValue(Matrix value, bool transpose) { + // TODO: handle transpose! SharpDX.Matrix m = new SharpDX.Matrix(value.M11, value.M12, value.M13, value.M14, value.M21, value.M22, value.M23, value.M24, value.M31, value.M32, value.M33, value.M34, value.M41, value.M42, value.M43, value.M44); nativeEffectVariable.AsMatrix().SetMatrix(m); } - public void SetValue(Matrix[] value, bool transpose) + public void SetValue(Matrix[] value, bool transpose) { + // TODO: handle transpose! int count = value.Length; SharpDX.Matrix[] m = new SharpDX.Matrix[count]; Matrix anxMatrix; diff --git a/RenderSystems/ANX.RenderSystem.Windows.DX11/Effect_DX11.cs b/RenderSystems/ANX.RenderSystem.Windows.DX11/Effect_DX11.cs index 82dd8324..1446e3cd 100644 --- a/RenderSystems/ANX.RenderSystem.Windows.DX11/Effect_DX11.cs +++ b/RenderSystems/ANX.RenderSystem.Windows.DX11/Effect_DX11.cs @@ -15,6 +15,8 @@ using ANX.Framework.Graphics; // "ANX.Framework developer group" and released under the Ms-PL license. // For details see: http://anxframework.codeplex.com/license +using EffectTechnique = ANX.Framework.Graphics.EffectTechnique; + namespace ANX.RenderSystem.Windows.DX11 { public class Effect_DX11 : INativeEffect @@ -184,14 +186,14 @@ namespace ANX.RenderSystem.Windows.DX11 EffectTechnique_DX11 teqDx11 = new EffectTechnique_DX11(this.managedEffect); teqDx11.NativeTechnique = nativeEffect.GetTechniqueByIndex(i); - ANX.Framework.Graphics.EffectTechnique teq = new ANX.Framework.Graphics.EffectTechnique(this.managedEffect, teqDx11); + EffectTechnique teq = new EffectTechnique(this.managedEffect, teqDx11); yield return teq; } } } - public IEnumerable Parameters + public IEnumerable Parameters { get { @@ -200,7 +202,7 @@ namespace ANX.RenderSystem.Windows.DX11 EffectParameter_DX11 parDx11 = new EffectParameter_DX11(); parDx11.NativeParameter = nativeEffect.GetVariableByIndex(i); - ANX.Framework.Graphics.EffectParameter par = new ANX.Framework.Graphics.EffectParameter(); + EffectParameter par = new EffectParameter(); par.NativeParameter = parDx11; yield return par; diff --git a/RenderSystems/ANX.RenderSystem.Windows.DX11/GraphicsDeviceWindowsDX11.cs b/RenderSystems/ANX.RenderSystem.Windows.DX11/GraphicsDeviceWindowsDX11.cs index 08593daf..3729a469 100644 --- a/RenderSystems/ANX.RenderSystem.Windows.DX11/GraphicsDeviceWindowsDX11.cs +++ b/RenderSystems/ANX.RenderSystem.Windows.DX11/GraphicsDeviceWindowsDX11.cs @@ -7,9 +7,11 @@ using SharpDX; using SharpDX.DXGI; using SharpDX.Direct3D; using SharpDX.D3DCompiler; -using ANX.Framework.NonXNA; using SharpDX.Direct3D11; +using ANX.Framework; +using ANX.Framework.NonXNA; using ANX.Framework.Graphics; +using System.Runtime.InteropServices; #endregion // Using Statements @@ -19,8 +21,10 @@ using ANX.Framework.Graphics; using Device = SharpDX.Direct3D11.Device; using Buffer = SharpDX.Direct3D11.Buffer; -using System.Runtime.InteropServices; -using ANX.Framework; +using Rectangle = ANX.Framework.Rectangle; +using Vector4 = ANX.Framework.Vector4; +using VertexBufferBinding = ANX.Framework.Graphics.VertexBufferBinding; +using Viewport = ANX.Framework.Graphics.Viewport; namespace ANX.RenderSystem.Windows.DX11 { @@ -57,7 +61,7 @@ namespace ANX.RenderSystem.Windows.DX11 private DeviceContext deviceContext; private SwapChain swapChain; private RenderTargetView renderView; - private RenderTargetView renderTargetView; + private RenderTargetView[] renderTargetView = new RenderTargetView[1]; private DepthStencilView depthStencilView; private SharpDX.Direct3D11.Texture2D depthStencilBuffer; private SharpDX.Direct3D11.Texture2D backBuffer; @@ -187,7 +191,23 @@ namespace ANX.RenderSystem.Windows.DX11 clearColor.Alpha = color.A * ColorMultiplier; } - this.deviceContext.ClearRenderTargetView(this.renderTargetView != null ? this.renderTargetView : this.renderView, this.clearColor); + if (this.renderTargetView[0] == null) + { + this.deviceContext.ClearRenderTargetView(this.renderView, this.clearColor); + } + else + { + for (int i = 0; i < this.renderTargetView.Length; i++) + { + if (this.renderTargetView[i] == null) + { + break; + } + + this.deviceContext.ClearRenderTargetView(this.renderTargetView[i], this.clearColor); + } + } + } public void Clear(ClearOptions options, ANX.Framework.Vector4 color, float depth, int stencil) @@ -202,7 +222,22 @@ namespace ANX.RenderSystem.Windows.DX11 this.clearColor.Alpha = color.W; this.lastClearColor = 0; - this.deviceContext.ClearRenderTargetView(this.renderTargetView != null ? this.renderTargetView : this.renderView, this.clearColor); + if (this.renderTargetView[0] == null) + { + this.deviceContext.ClearRenderTargetView(this.renderView, this.clearColor); + } + else + { + for (int i = 0; i < this.renderTargetView.Length; i++) + { + if (this.renderTargetView[i] == null) + { + break; + } + + this.deviceContext.ClearRenderTargetView(this.renderTargetView[i], this.clearColor); + } + } } if (this.depthStencilView != null) @@ -322,7 +357,23 @@ namespace ANX.RenderSystem.Windows.DX11 deviceContext.InputAssembler.SetVertexBuffers(0, nativeVertexBufferBindings); - DrawPrimitives(primitiveType, vertexOffset, primitiveCount); + SharpDX.Direct3D11.EffectPass pass; SharpDX.Direct3D11.EffectTechnique technique; ShaderBytecode passSignature; + SetupEffectForDraw(out pass, out technique, out passSignature); + + var layout = CreateInputLayout(deviceContext.Device, passSignature, vertexDeclaration); + + deviceContext.InputAssembler.InputLayout = layout; + // Prepare All the stages + deviceContext.InputAssembler.PrimitiveTopology = FormatConverter.Translate(primitiveType); + deviceContext.Rasterizer.SetViewports(currentViewport); + + //device.OutputMerger.SetTargets(this.depthStencilView, this.renderView); + + for (int i = 0; i < technique.Description.PassCount; ++i) + { + pass.Apply(deviceContext); + deviceContext.Draw(primitiveCount, vertexOffset); + } } #endregion // DrawUserPrimitives @@ -486,10 +537,13 @@ namespace ANX.RenderSystem.Windows.DX11 if (renderTargets == null) { // reset the RenderTarget to backbuffer - if (renderTargetView != null) + for (int i = 0; i < renderTargetView.Length; i++) { - renderTargetView.Dispose(); - renderTargetView = null; + if (renderTargetView[i] != null) + { + renderTargetView[i].Dispose(); + renderTargetView[i] = null; + } } deviceContext.OutputMerger.SetRenderTargets(1, new RenderTargetView[] { this.renderView }, this.depthStencilView); @@ -497,26 +551,39 @@ namespace ANX.RenderSystem.Windows.DX11 } else { - if (renderTargets.Length == 1) + int renderTargetCount = renderTargets.Length; + if (this.renderTargetView.Length != renderTargetCount) { - RenderTarget2D renderTarget = renderTargets[0].RenderTarget as RenderTarget2D; - RenderTarget2D_DX11 nativeRenderTarget = renderTarget.NativeRenderTarget as RenderTarget2D_DX11; + for (int i = 0; i < renderTargetView.Length; i++) + { + if (renderTargetView[i] != null) + { + renderTargetView[i].Dispose(); + renderTargetView[i] = null; + } + } + + this.renderTargetView = new RenderTargetView[renderTargetCount]; + } + + for (int i = 0; i < renderTargetCount; i++) + { + RenderTarget2D renderTarget = renderTargets[i].RenderTarget as RenderTarget2D; if (renderTarget != null) { - if (renderTargetView != null) + RenderTarget2D_DX11 nativeRenderTarget = renderTarget.NativeRenderTarget as RenderTarget2D_DX11; + + if (renderTargetView[i] != null) { - renderTargetView.Dispose(); - renderTargetView = null; + renderTargetView[i].Dispose(); } - this.renderTargetView = new RenderTargetView(deviceContext.Device, ((Texture2D_DX11)nativeRenderTarget).NativeShaderResourceView.Resource); - DepthStencilView depthStencilView = null; - deviceContext.OutputMerger.SetRenderTargets(1, new RenderTargetView[] { this.renderTargetView }, depthStencilView); + + renderTargetView[i] = new RenderTargetView(deviceContext.Device, ((Texture2D_DX11)nativeRenderTarget).NativeShaderResourceView.Resource); } } - else - { - throw new NotImplementedException("handling of multiple RenderTargets are not yet implemented"); - } + + deviceContext.OutputMerger.SetRenderTargets(renderTargetCount, renderTargetView, this.depthStencilView); + deviceContext.OutputMerger.SetTargets(this.depthStencilView, this.renderTargetView); } } @@ -592,10 +659,13 @@ namespace ANX.RenderSystem.Windows.DX11 public void Dispose() { - if (renderTargetView != null) + for (int i = 0; i < renderTargetView.Length; i++) { - renderTargetView.Dispose(); - renderTargetView = null; + if (renderTargetView[i] != null) + { + renderTargetView[i].Dispose(); + renderTargetView[i] = null; + } } if (swapChain != null) diff --git a/Samples/MultiRenderTarget/Game1.cs b/Samples/MultiRenderTarget/Game1.cs index 281e0435..8e5d084c 100644 --- a/Samples/MultiRenderTarget/Game1.cs +++ b/Samples/MultiRenderTarget/Game1.cs @@ -67,11 +67,21 @@ namespace MultiRenderTarget protected override void Draw(GameTime gameTime) { - GraphicsDevice.SetRenderTargets(renderTargets[0], renderTargets[1], renderTargets[2], renderTargets[3]); - GraphicsDevice.Clear(Color.Black); - effect.CurrentTechnique.Passes[0].Apply(); - GraphicsDevice.DrawUserPrimitives(PrimitiveType.TriangleList, primitives, 0, 2); + //GraphicsDevice.SetRenderTargets(renderTargets[0], renderTargets[1], renderTargets[2], renderTargets[3]); + //GraphicsDevice.Clear(Color.Black); + //effect.CurrentTechnique.Passes[0].Apply(); + //GraphicsDevice.DrawUserPrimitives(PrimitiveType.TriangleList, primitives, 0, 2); + //GraphicsDevice.SetRenderTarget(null); + + //TODO: the code above should work but it looks like there's a problem with DrawUserPrimitives + + GraphicsDevice.SetRenderTarget(renderTargets[0]); + GraphicsDevice.Clear(Color.Green); + GraphicsDevice.SetRenderTarget(renderTargets[1]); + GraphicsDevice.Clear(Color.Blue); + GraphicsDevice.SetRenderTarget(renderTargets[2]); + GraphicsDevice.Clear(Color.Yellow); GraphicsDevice.SetRenderTarget(null); spriteBatch.Begin(); diff --git a/Samples/MultiRenderTarget/MultiRenderTarget.csproj b/Samples/MultiRenderTarget/MultiRenderTarget.csproj index 1a45af1e..5c7622aa 100644 --- a/Samples/MultiRenderTarget/MultiRenderTarget.csproj +++ b/Samples/MultiRenderTarget/MultiRenderTarget.csproj @@ -143,11 +143,7 @@ {5BE49183-2F6F-4527-AC90-D816911FCF90} - ANX.Framework.Windows.DX10 - - - {B30DE9C2-0926-46B6-8351-9AF276C472D5} - ANX.RenderSystem.Windows.DX11 + ANX.RenderSystem.Windows.DX10 {6A582788-C4D2-410C-96CD-177F75712D65} diff --git a/Tools/ANX.Framework.Tools.sln b/Tools/ANX.Framework.Tools.sln index 15891076..4eb696ce 100644 --- a/Tools/ANX.Framework.Tools.sln +++ b/Tools/ANX.Framework.Tools.sln @@ -5,7 +5,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ANXStatusComparer", "ANXSta EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StockShaderCodeGenerator", "StockShaderCodeGenerator\StockShaderCodeGenerator.csproj", "{D73E5FF4-AE88-4637-8159-120FBDA564BF}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XNAToANXConverter", "XNAToANXConverter\XNAToANXConverter.csproj", "{B5209A04-B2F8-4033-A5E7-545BE771214C}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProjectConverter", "ProjectConverter\ProjectConverter.csproj", "{B5209A04-B2F8-4033-A5E7-545BE771214C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution