- 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
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsGame", "Samples\WindowsGame\WindowsGame.csproj", "{A08575E0-7B21-4822-9D4C-6B9EEB7EFFF7}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsGame", "Samples\WindowsGame\WindowsGame.csproj", "{A08575E0-7B21-4822-9D4C-6B9EEB7EFFF7}"
|
||||||
EndProject
|
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
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kinect", "Samples\Kinect\Kinect.csproj", "{A42413A9-5189-40CB-AACA-D50F24865431}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kinect", "Samples\Kinect\Kinect.csproj", "{A42413A9-5189-40CB-AACA-D50F24865431}"
|
||||||
EndProject
|
EndProject
|
||||||
|
@ -33,7 +33,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xinput", "Samples\Xinput\Xi
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsGame", "Samples\WindowsGame\WindowsGame_Linux.csproj", "{A08575E0-7B21-4822-9D4C-6B9EEB7EFFF7}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsGame", "Samples\WindowsGame\WindowsGame_Linux.csproj", "{A08575E0-7B21-4822-9D4C-6B9EEB7EFFF7}"
|
||||||
EndProject
|
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
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kinect", "Samples\Kinect\Kinect_Linux.csproj", "{A42413A9-5189-40CB-AACA-D50F24865431}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kinect", "Samples\Kinect\Kinect_Linux.csproj", "{A42413A9-5189-40CB-AACA-D50F24865431}"
|
||||||
EndProject
|
EndProject
|
||||||
|
@ -33,7 +33,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xinput", "Samples\Xinput\Xi
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsGame", "Samples\WindowsGame\WindowsGame_PSVita.csproj", "{A08575E0-7B21-4822-9D4C-6B9EEB7EFFF7}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsGame", "Samples\WindowsGame\WindowsGame_PSVita.csproj", "{A08575E0-7B21-4822-9D4C-6B9EEB7EFFF7}"
|
||||||
EndProject
|
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
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kinect", "Samples\Kinect\Kinect_PSVita.csproj", "{A42413A9-5189-40CB-AACA-D50F24865431}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kinect", "Samples\Kinect\Kinect_PSVita.csproj", "{A42413A9-5189-40CB-AACA-D50F24865431}"
|
||||||
EndProject
|
EndProject
|
||||||
|
@ -33,7 +33,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xinput", "Samples\Xinput\Xi
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsGame", "Samples\WindowsGame\WindowsGame_WindowsMetro.csproj", "{A08575E0-7B21-4822-9D4C-6B9EEB7EFFF7}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsGame", "Samples\WindowsGame\WindowsGame_WindowsMetro.csproj", "{A08575E0-7B21-4822-9D4C-6B9EEB7EFFF7}"
|
||||||
EndProject
|
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
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kinect", "Samples\Kinect\Kinect_WindowsMetro.csproj", "{A42413A9-5189-40CB-AACA-D50F24865431}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kinect", "Samples\Kinect\Kinect_WindowsMetro.csproj", "{A42413A9-5189-40CB-AACA-D50F24865431}"
|
||||||
EndProject
|
EndProject
|
||||||
|
@ -56,16 +56,16 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
nativeEffectVariable.AsScalar().Set(value);
|
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);
|
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);
|
nativeEffectVariable.AsMatrix().SetMatrix(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetValue(Matrix[] value, bool transpose)
|
public void SetValue(Matrix[] value, bool transpose)
|
||||||
{
|
{
|
||||||
// TODO: handle transpose!
|
// TODO: handle transpose!
|
||||||
int count = value.Length;
|
int count = value.Length;
|
||||||
SharpDX.Matrix[] m = new SharpDX.Matrix[count];
|
SharpDX.Matrix[] m = new SharpDX.Matrix[count];
|
||||||
Matrix anxMatrix;
|
Matrix anxMatrix;
|
||||||
|
@ -7,9 +7,11 @@ using SharpDX;
|
|||||||
using SharpDX.DXGI;
|
using SharpDX.DXGI;
|
||||||
using SharpDX.Direct3D;
|
using SharpDX.Direct3D;
|
||||||
using SharpDX.D3DCompiler;
|
using SharpDX.D3DCompiler;
|
||||||
using ANX.Framework.NonXNA;
|
|
||||||
using SharpDX.Direct3D10;
|
using SharpDX.Direct3D10;
|
||||||
|
using ANX.Framework;
|
||||||
|
using ANX.Framework.NonXNA;
|
||||||
using ANX.Framework.Graphics;
|
using ANX.Framework.Graphics;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
#endregion // Using Statements
|
#endregion // Using Statements
|
||||||
|
|
||||||
@ -19,8 +21,6 @@ using ANX.Framework.Graphics;
|
|||||||
|
|
||||||
using Device = SharpDX.Direct3D10.Device;
|
using Device = SharpDX.Direct3D10.Device;
|
||||||
using Buffer = SharpDX.Direct3D10.Buffer;
|
using Buffer = SharpDX.Direct3D10.Buffer;
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
using ANX.Framework;
|
|
||||||
using Rectangle = ANX.Framework.Rectangle;
|
using Rectangle = ANX.Framework.Rectangle;
|
||||||
using Vector4 = ANX.Framework.Vector4;
|
using Vector4 = ANX.Framework.Vector4;
|
||||||
using VertexBufferBinding = ANX.Framework.Graphics.VertexBufferBinding;
|
using VertexBufferBinding = ANX.Framework.Graphics.VertexBufferBinding;
|
||||||
@ -61,7 +61,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
private Device device;
|
private Device device;
|
||||||
private SwapChain swapChain;
|
private SwapChain swapChain;
|
||||||
private RenderTargetView renderView;
|
private RenderTargetView renderView;
|
||||||
private RenderTargetView renderTargetView;
|
private RenderTargetView[] renderTargetView = new RenderTargetView[1];
|
||||||
private DepthStencilView depthStencilView;
|
private DepthStencilView depthStencilView;
|
||||||
private SharpDX.Direct3D10.Texture2D depthStencilBuffer;
|
private SharpDX.Direct3D10.Texture2D depthStencilBuffer;
|
||||||
private SharpDX.Direct3D10.Texture2D backBuffer;
|
private SharpDX.Direct3D10.Texture2D backBuffer;
|
||||||
@ -188,7 +188,22 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
clearColor.Alpha = color.A * ColorMultiplier;
|
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)
|
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.clearColor.Alpha = color.W;
|
||||||
this.lastClearColor = 0;
|
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)
|
if (this.depthStencilView != null)
|
||||||
@ -323,7 +353,23 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
|
|
||||||
device.InputAssembler.SetVertexBuffers(0, nativeVertexBufferBindings);
|
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>
|
#endregion // DrawUserPrimitives<T>
|
||||||
@ -352,7 +398,12 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
private void SetupInputLayout(ShaderBytecode passSignature)
|
private void SetupInputLayout(ShaderBytecode passSignature)
|
||||||
{
|
{
|
||||||
// get the VertexDeclaration from current VertexBuffer to create input layout for the input assembler
|
// 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;
|
VertexDeclaration vertexDeclaration = currentVertexBuffer.VertexDeclaration;
|
||||||
var layout = CreateInputLayout(device, passSignature, vertexDeclaration);
|
var layout = CreateInputLayout(device, passSignature, vertexDeclaration);
|
||||||
|
|
||||||
@ -487,10 +538,13 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
if (renderTargets == null)
|
if (renderTargets == null)
|
||||||
{
|
{
|
||||||
// reset the RenderTarget to backbuffer
|
// reset the RenderTarget to backbuffer
|
||||||
if (renderTargetView != null)
|
for (int i = 0; i < renderTargetView.Length; i++)
|
||||||
{
|
{
|
||||||
renderTargetView.Dispose();
|
if (renderTargetView[i] != null)
|
||||||
renderTargetView = null;
|
{
|
||||||
|
renderTargetView[i].Dispose();
|
||||||
|
renderTargetView[i] = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
device.OutputMerger.SetRenderTargets(1, new RenderTargetView[] { this.renderView }, this.depthStencilView);
|
device.OutputMerger.SetRenderTargets(1, new RenderTargetView[] { this.renderView }, this.depthStencilView);
|
||||||
@ -498,26 +552,60 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (renderTargets.Length == 1)
|
int renderTargetCount = renderTargets.Length;
|
||||||
|
if (this.renderTargetView.Length != renderTargetCount)
|
||||||
{
|
{
|
||||||
RenderTarget2D renderTarget = renderTargets[0].RenderTarget as RenderTarget2D;
|
for (int i = 0; i < renderTargetView.Length; i++)
|
||||||
RenderTarget2D_DX10 nativeRenderTarget = renderTarget.NativeRenderTarget as RenderTarget2D_DX10;
|
{
|
||||||
|
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 (renderTarget != null)
|
||||||
{
|
{
|
||||||
if (renderTargetView != null)
|
RenderTarget2D_DX10 nativeRenderTarget = renderTarget.NativeRenderTarget as RenderTarget2D_DX10;
|
||||||
|
|
||||||
|
if (renderTargetView[i] != null)
|
||||||
{
|
{
|
||||||
renderTargetView.Dispose();
|
renderTargetView[i].Dispose();
|
||||||
renderTargetView = null;
|
|
||||||
}
|
}
|
||||||
this.renderTargetView = new RenderTargetView(device, ((Texture2D_DX10)nativeRenderTarget).NativeShaderResourceView.Resource);
|
|
||||||
DepthStencilView depthStencilView = null;
|
renderTargetView[i] = new RenderTargetView(device, ((Texture2D_DX10)nativeRenderTarget).NativeShaderResourceView.Resource);
|
||||||
device.OutputMerger.SetRenderTargets(1,new RenderTargetView[] { this.renderTargetView }, depthStencilView);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
device.OutputMerger.SetRenderTargets(renderTargetCount, renderTargetView, this.depthStencilView);
|
||||||
throw new NotImplementedException("handling of multiple RenderTargets are not yet implemented");
|
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()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
if (renderTargetView != null)
|
for (int i = 0; i < renderTargetView.Length; i++)
|
||||||
{
|
{
|
||||||
renderTargetView.Dispose();
|
if (renderTargetView[i] != null)
|
||||||
renderTargetView = null;
|
{
|
||||||
|
renderTargetView[i].Dispose();
|
||||||
|
renderTargetView[i] = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (swapChain != null)
|
if (swapChain != null)
|
||||||
|
@ -15,6 +15,9 @@ using ANX.Framework;
|
|||||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||||
// For details see: http://anxframework.codeplex.com/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
|
namespace ANX.RenderSystem.Windows.DX11
|
||||||
{
|
{
|
||||||
public class EffectParameter_DX11 : INativeEffectParameter
|
public class EffectParameter_DX11 : INativeEffectParameter
|
||||||
@ -53,14 +56,16 @@ namespace ANX.RenderSystem.Windows.DX11
|
|||||||
nativeEffectVariable.AsScalar().Set(value);
|
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);
|
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);
|
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;
|
int count = value.Length;
|
||||||
SharpDX.Matrix[] m = new SharpDX.Matrix[count];
|
SharpDX.Matrix[] m = new SharpDX.Matrix[count];
|
||||||
Matrix anxMatrix;
|
Matrix anxMatrix;
|
||||||
|
@ -15,6 +15,8 @@ using ANX.Framework.Graphics;
|
|||||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||||
// For details see: http://anxframework.codeplex.com/license
|
// For details see: http://anxframework.codeplex.com/license
|
||||||
|
|
||||||
|
using EffectTechnique = ANX.Framework.Graphics.EffectTechnique;
|
||||||
|
|
||||||
namespace ANX.RenderSystem.Windows.DX11
|
namespace ANX.RenderSystem.Windows.DX11
|
||||||
{
|
{
|
||||||
public class Effect_DX11 : INativeEffect
|
public class Effect_DX11 : INativeEffect
|
||||||
@ -184,14 +186,14 @@ namespace ANX.RenderSystem.Windows.DX11
|
|||||||
EffectTechnique_DX11 teqDx11 = new EffectTechnique_DX11(this.managedEffect);
|
EffectTechnique_DX11 teqDx11 = new EffectTechnique_DX11(this.managedEffect);
|
||||||
teqDx11.NativeTechnique = nativeEffect.GetTechniqueByIndex(i);
|
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;
|
yield return teq;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<ANX.Framework.Graphics.EffectParameter> Parameters
|
public IEnumerable<EffectParameter> Parameters
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
@ -200,7 +202,7 @@ namespace ANX.RenderSystem.Windows.DX11
|
|||||||
EffectParameter_DX11 parDx11 = new EffectParameter_DX11();
|
EffectParameter_DX11 parDx11 = new EffectParameter_DX11();
|
||||||
parDx11.NativeParameter = nativeEffect.GetVariableByIndex(i);
|
parDx11.NativeParameter = nativeEffect.GetVariableByIndex(i);
|
||||||
|
|
||||||
ANX.Framework.Graphics.EffectParameter par = new ANX.Framework.Graphics.EffectParameter();
|
EffectParameter par = new EffectParameter();
|
||||||
par.NativeParameter = parDx11;
|
par.NativeParameter = parDx11;
|
||||||
|
|
||||||
yield return par;
|
yield return par;
|
||||||
|
@ -7,9 +7,11 @@ using SharpDX;
|
|||||||
using SharpDX.DXGI;
|
using SharpDX.DXGI;
|
||||||
using SharpDX.Direct3D;
|
using SharpDX.Direct3D;
|
||||||
using SharpDX.D3DCompiler;
|
using SharpDX.D3DCompiler;
|
||||||
using ANX.Framework.NonXNA;
|
|
||||||
using SharpDX.Direct3D11;
|
using SharpDX.Direct3D11;
|
||||||
|
using ANX.Framework;
|
||||||
|
using ANX.Framework.NonXNA;
|
||||||
using ANX.Framework.Graphics;
|
using ANX.Framework.Graphics;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
#endregion // Using Statements
|
#endregion // Using Statements
|
||||||
|
|
||||||
@ -19,8 +21,10 @@ using ANX.Framework.Graphics;
|
|||||||
|
|
||||||
using Device = SharpDX.Direct3D11.Device;
|
using Device = SharpDX.Direct3D11.Device;
|
||||||
using Buffer = SharpDX.Direct3D11.Buffer;
|
using Buffer = SharpDX.Direct3D11.Buffer;
|
||||||
using System.Runtime.InteropServices;
|
using Rectangle = ANX.Framework.Rectangle;
|
||||||
using ANX.Framework;
|
using Vector4 = ANX.Framework.Vector4;
|
||||||
|
using VertexBufferBinding = ANX.Framework.Graphics.VertexBufferBinding;
|
||||||
|
using Viewport = ANX.Framework.Graphics.Viewport;
|
||||||
|
|
||||||
namespace ANX.RenderSystem.Windows.DX11
|
namespace ANX.RenderSystem.Windows.DX11
|
||||||
{
|
{
|
||||||
@ -57,7 +61,7 @@ namespace ANX.RenderSystem.Windows.DX11
|
|||||||
private DeviceContext deviceContext;
|
private DeviceContext deviceContext;
|
||||||
private SwapChain swapChain;
|
private SwapChain swapChain;
|
||||||
private RenderTargetView renderView;
|
private RenderTargetView renderView;
|
||||||
private RenderTargetView renderTargetView;
|
private RenderTargetView[] renderTargetView = new RenderTargetView[1];
|
||||||
private DepthStencilView depthStencilView;
|
private DepthStencilView depthStencilView;
|
||||||
private SharpDX.Direct3D11.Texture2D depthStencilBuffer;
|
private SharpDX.Direct3D11.Texture2D depthStencilBuffer;
|
||||||
private SharpDX.Direct3D11.Texture2D backBuffer;
|
private SharpDX.Direct3D11.Texture2D backBuffer;
|
||||||
@ -187,7 +191,23 @@ namespace ANX.RenderSystem.Windows.DX11
|
|||||||
clearColor.Alpha = color.A * ColorMultiplier;
|
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)
|
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.clearColor.Alpha = color.W;
|
||||||
this.lastClearColor = 0;
|
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)
|
if (this.depthStencilView != null)
|
||||||
@ -322,7 +357,23 @@ namespace ANX.RenderSystem.Windows.DX11
|
|||||||
|
|
||||||
deviceContext.InputAssembler.SetVertexBuffers(0, nativeVertexBufferBindings);
|
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>
|
#endregion // DrawUserPrimitives<T>
|
||||||
@ -486,10 +537,13 @@ namespace ANX.RenderSystem.Windows.DX11
|
|||||||
if (renderTargets == null)
|
if (renderTargets == null)
|
||||||
{
|
{
|
||||||
// reset the RenderTarget to backbuffer
|
// reset the RenderTarget to backbuffer
|
||||||
if (renderTargetView != null)
|
for (int i = 0; i < renderTargetView.Length; i++)
|
||||||
{
|
{
|
||||||
renderTargetView.Dispose();
|
if (renderTargetView[i] != null)
|
||||||
renderTargetView = null;
|
{
|
||||||
|
renderTargetView[i].Dispose();
|
||||||
|
renderTargetView[i] = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
deviceContext.OutputMerger.SetRenderTargets(1, new RenderTargetView[] { this.renderView }, this.depthStencilView);
|
deviceContext.OutputMerger.SetRenderTargets(1, new RenderTargetView[] { this.renderView }, this.depthStencilView);
|
||||||
@ -497,26 +551,39 @@ namespace ANX.RenderSystem.Windows.DX11
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (renderTargets.Length == 1)
|
int renderTargetCount = renderTargets.Length;
|
||||||
|
if (this.renderTargetView.Length != renderTargetCount)
|
||||||
{
|
{
|
||||||
RenderTarget2D renderTarget = renderTargets[0].RenderTarget as RenderTarget2D;
|
for (int i = 0; i < renderTargetView.Length; i++)
|
||||||
RenderTarget2D_DX11 nativeRenderTarget = renderTarget.NativeRenderTarget as RenderTarget2D_DX11;
|
{
|
||||||
|
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 (renderTarget != null)
|
||||||
{
|
{
|
||||||
if (renderTargetView != null)
|
RenderTarget2D_DX11 nativeRenderTarget = renderTarget.NativeRenderTarget as RenderTarget2D_DX11;
|
||||||
|
|
||||||
|
if (renderTargetView[i] != null)
|
||||||
{
|
{
|
||||||
renderTargetView.Dispose();
|
renderTargetView[i].Dispose();
|
||||||
renderTargetView = null;
|
|
||||||
}
|
}
|
||||||
this.renderTargetView = new RenderTargetView(deviceContext.Device, ((Texture2D_DX11)nativeRenderTarget).NativeShaderResourceView.Resource);
|
|
||||||
DepthStencilView depthStencilView = null;
|
renderTargetView[i] = new RenderTargetView(deviceContext.Device, ((Texture2D_DX11)nativeRenderTarget).NativeShaderResourceView.Resource);
|
||||||
deviceContext.OutputMerger.SetRenderTargets(1, new RenderTargetView[] { this.renderTargetView }, depthStencilView);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
deviceContext.OutputMerger.SetRenderTargets(renderTargetCount, renderTargetView, this.depthStencilView);
|
||||||
throw new NotImplementedException("handling of multiple RenderTargets are not yet implemented");
|
deviceContext.OutputMerger.SetTargets(this.depthStencilView, this.renderTargetView);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -592,10 +659,13 @@ namespace ANX.RenderSystem.Windows.DX11
|
|||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
if (renderTargetView != null)
|
for (int i = 0; i < renderTargetView.Length; i++)
|
||||||
{
|
{
|
||||||
renderTargetView.Dispose();
|
if (renderTargetView[i] != null)
|
||||||
renderTargetView = null;
|
{
|
||||||
|
renderTargetView[i].Dispose();
|
||||||
|
renderTargetView[i] = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (swapChain != null)
|
if (swapChain != null)
|
||||||
|
@ -67,11 +67,21 @@ namespace MultiRenderTarget
|
|||||||
|
|
||||||
protected override void Draw(GameTime gameTime)
|
protected override void Draw(GameTime gameTime)
|
||||||
{
|
{
|
||||||
GraphicsDevice.SetRenderTargets(renderTargets[0], renderTargets[1], renderTargets[2], renderTargets[3]);
|
//GraphicsDevice.SetRenderTargets(renderTargets[0], renderTargets[1], renderTargets[2], renderTargets[3]);
|
||||||
GraphicsDevice.Clear(Color.Black);
|
//GraphicsDevice.Clear(Color.Black);
|
||||||
effect.CurrentTechnique.Passes[0].Apply();
|
//effect.CurrentTechnique.Passes[0].Apply();
|
||||||
GraphicsDevice.DrawUserPrimitives<VertexPositionColor>(PrimitiveType.TriangleList, primitives, 0, 2);
|
//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);
|
GraphicsDevice.SetRenderTarget(null);
|
||||||
|
|
||||||
spriteBatch.Begin();
|
spriteBatch.Begin();
|
||||||
|
@ -143,11 +143,7 @@
|
|||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
<ProjectReference Include="..\..\RenderSystems\ANX.Framework.Windows.DX10\ANX.RenderSystem.Windows.DX10.csproj">
|
<ProjectReference Include="..\..\RenderSystems\ANX.Framework.Windows.DX10\ANX.RenderSystem.Windows.DX10.csproj">
|
||||||
<Project>{5BE49183-2F6F-4527-AC90-D816911FCF90}</Project>
|
<Project>{5BE49183-2F6F-4527-AC90-D816911FCF90}</Project>
|
||||||
<Name>ANX.Framework.Windows.DX10</Name>
|
<Name>ANX.RenderSystem.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>
|
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
<ProjectReference Include="..\..\SoundSystems\ANX.SoundSystem.Windows.XAudio\ANX.SoundSystem.Windows.XAudio.csproj">
|
<ProjectReference Include="..\..\SoundSystems\ANX.SoundSystem.Windows.XAudio\ANX.SoundSystem.Windows.XAudio.csproj">
|
||||||
<Project>{6A582788-C4D2-410C-96CD-177F75712D65}</Project>
|
<Project>{6A582788-C4D2-410C-96CD-177F75712D65}</Project>
|
||||||
|
@ -5,7 +5,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ANXStatusComparer", "ANXSta
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StockShaderCodeGenerator", "StockShaderCodeGenerator\StockShaderCodeGenerator.csproj", "{D73E5FF4-AE88-4637-8159-120FBDA564BF}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StockShaderCodeGenerator", "StockShaderCodeGenerator\StockShaderCodeGenerator.csproj", "{D73E5FF4-AE88-4637-8159-120FBDA564BF}"
|
||||||
EndProject
|
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
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Loading…
x
Reference in New Issue
Block a user