- renamed folder XNAToANXConverter to ProjectConverter
- implemented MultiRenderTargets for DirectX 10 and DirectX 11 RenderSystems (feature #559) - fixed a minor issue in MultiRenderTarget sample
This commit is contained in:
parent
c4fe773af6
commit
00fc2bf49e
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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<T>
|
||||
@ -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)
|
||||
|
@ -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;
|
||||
|
@ -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<ANX.Framework.Graphics.EffectParameter> Parameters
|
||||
public IEnumerable<EffectParameter> 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;
|
||||
|
@ -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<T>
|
||||
@ -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)
|
||||
|
@ -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<VertexPositionColor>(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<VertexPositionColor>(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();
|
||||
|
@ -143,11 +143,7 @@
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\RenderSystems\ANX.Framework.Windows.DX10\ANX.RenderSystem.Windows.DX10.csproj">
|
||||
<Project>{5BE49183-2F6F-4527-AC90-D816911FCF90}</Project>
|
||||
<Name>ANX.Framework.Windows.DX10</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\RenderSystems\ANX.RenderSystem.Windows.DX11\ANX.RenderSystem.Windows.DX11.csproj">
|
||||
<Project>{B30DE9C2-0926-46B6-8351-9AF276C472D5}</Project>
|
||||
<Name>ANX.RenderSystem.Windows.DX11</Name>
|
||||
<Name>ANX.RenderSystem.Windows.DX10</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\SoundSystems\ANX.SoundSystem.Windows.XAudio\ANX.SoundSystem.Windows.XAudio.csproj">
|
||||
<Project>{6A582788-C4D2-410C-96CD-177F75712D65}</Project>
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user