moved RenderSystems and InputSystems to a subfolder to clean up main folder
This commit is contained in:
parent
2576137bde
commit
12b4574a11
@ -0,0 +1,81 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
|
||||
<ProductVersion>8.0.30703</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{B30DE9C2-0926-46B6-8351-9AF276C472D5}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>ANX.RenderSystem.Windows.DX11._1</RootNamespace>
|
||||
<AssemblyName>ANX.RenderSystem.Windows.DX11.1</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>..\..\bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>..\..\bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<StartupObject />
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\ANX.Framework\ANX.Framework.csproj">
|
||||
<Project>{6899F0C9-70B9-4EB0-9DD3-E598D4BE3E35}</Project>
|
||||
<Name>ANX.Framework</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="SharpDX, Version=2.0.0.0, Culture=neutral, processorArchitecture=x86">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\lib\SharpDX\Bin\SharpDX.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="SharpDX.D3DCompiler, Version=2.0.0.0, Culture=neutral, processorArchitecture=x86">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\lib\SharpDX\Bin\SharpDX.D3DCompiler.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="SharpDX.Direct3D11">
|
||||
<HintPath>..\lib\SharpDX\Bin\SharpDX.Direct3D11.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="SharpDX.DXGI, Version=2.0.0.0, Culture=neutral, processorArchitecture=x86">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\lib\SharpDX\Bin\SharpDX.DXGI.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Creator.cs" />
|
||||
<Compile Include="Effect_DX11.cs" />
|
||||
<Compile Include="GraphicsDeviceWindowsDX11.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="VertexBuffer_DX11.cs" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
@ -58,7 +58,7 @@ using ANX.Framework;
|
||||
|
||||
#endregion // License
|
||||
|
||||
namespace ANX.RenderSystem.Windows.DX11_1
|
||||
namespace ANX.RenderSystem.Windows.DX11
|
||||
{
|
||||
public class Creator : IRenderSystemCreator
|
||||
{
|
||||
@ -70,7 +70,7 @@ namespace ANX.RenderSystem.Windows.DX11_1
|
||||
|
||||
public string Name
|
||||
{
|
||||
get { return "DirectX11.1"; }
|
||||
get { return "DirectX11"; }
|
||||
}
|
||||
|
||||
public GameHost CreateGameHost(Game game)
|
||||
@ -88,24 +88,24 @@ namespace ANX.RenderSystem.Windows.DX11_1
|
||||
public INativeBuffer CreateIndexBuffer(GraphicsDevice graphics, IndexElementSize size, int indexCount, BufferUsage usage)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
//return new IndexBuffer_DX11_1(graphics, size, indexCount, usage);
|
||||
//return new IndexBuffer_DX 11(graphics, size, indexCount, usage);
|
||||
}
|
||||
|
||||
public INativeBuffer CreateVertexBuffer(GraphicsDevice graphics, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage)
|
||||
{
|
||||
return new VertexBuffer_DX11_1(graphics, vertexDeclaration, vertexCount, usage);
|
||||
return new VertexBuffer_DX11(graphics, vertexDeclaration, vertexCount, usage);
|
||||
}
|
||||
|
||||
public INativeEffect CreateEffect(GraphicsDevice graphics, Stream vertexShaderByteCode, Stream pixelShaderByteCode)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
//return new Effect_DX11_1(graphics, vertexShaderByteCode, pixelShaderByteCode);
|
||||
//return new Effect_DX11(graphics, vertexShaderByteCode, pixelShaderByteCode);
|
||||
}
|
||||
|
||||
public INativeEffect CreateEffect(GraphicsDevice graphics, System.IO.Stream byteCode)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
//return new Effect_DX10(graphics, byteCode);
|
||||
//return new Effect_DX11(graphics, byteCode);
|
||||
}
|
||||
|
||||
public Texture2D CreateTexture(GraphicsDevice graphics, string fileName)
|
||||
|
248
ANX.RenderSystem.Windows.DX11.1/Effect_DX11.cs
Normal file
248
ANX.RenderSystem.Windows.DX11.1/Effect_DX11.cs
Normal file
@ -0,0 +1,248 @@
|
||||
#region Using Statements
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using SharpDX.Direct3D11;
|
||||
using SharpDX.D3DCompiler;
|
||||
using System.IO;
|
||||
using ANX.Framework.NonXNA;
|
||||
using ANX.Framework.Graphics;
|
||||
|
||||
#endregion // Using Statements
|
||||
|
||||
#region License
|
||||
|
||||
//
|
||||
// This file is part of the ANX.Framework created by the "ANX.Framework developer group".
|
||||
//
|
||||
// This file is released under the Ms-PL license.
|
||||
//
|
||||
//
|
||||
//
|
||||
// Microsoft Public License (Ms-PL)
|
||||
//
|
||||
// This license governs use of the accompanying software. If you use the software, you accept this license.
|
||||
// If you do not accept the license, do not use the software.
|
||||
//
|
||||
// 1.Definitions
|
||||
// The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning
|
||||
// here as under U.S. copyright law.
|
||||
// A "contribution" is the original software, or any additions or changes to the software.
|
||||
// A "contributor" is any person that distributes its contribution under this license.
|
||||
// "Licensed patents" are a contributor's patent claims that read directly on its contribution.
|
||||
//
|
||||
// 2.Grant of Rights
|
||||
// (A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations
|
||||
// in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to
|
||||
// reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution
|
||||
// or any derivative works that you create.
|
||||
// (B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in
|
||||
// section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed
|
||||
// patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution
|
||||
// in the software or derivative works of the contribution in the software.
|
||||
//
|
||||
// 3.Conditions and Limitations
|
||||
// (A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks.
|
||||
// (B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your
|
||||
// patent license from such contributor to the software ends automatically.
|
||||
// (C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution
|
||||
// notices that are present in the software.
|
||||
// (D) If you distribute any portion of the software in source code form, you may do so only under this license by including
|
||||
// a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or
|
||||
// object code form, you may only do so under a license that complies with this license.
|
||||
// (E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees,
|
||||
// or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the
|
||||
// extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a
|
||||
// particular purpose and non-infringement.
|
||||
|
||||
#endregion // License
|
||||
|
||||
namespace ANX.RenderSystem.Windows.DX11
|
||||
{
|
||||
public class Effect_DX11 : INativeEffect
|
||||
{
|
||||
private ShaderBytecode pixelShaderByteCode;
|
||||
private ShaderBytecode vertexShaderByteCode;
|
||||
private VertexShader vertexShader;
|
||||
private PixelShader pixelShader;
|
||||
|
||||
private ShaderBytecode effectByteCode;
|
||||
private SharpDX.Direct3D11.Effect nativeEffect;
|
||||
|
||||
public Effect_DX11(GraphicsDevice device, Stream vertexShaderByteCode, Stream pixelShaderByteCode)
|
||||
{
|
||||
if (vertexShaderByteCode.CanSeek)
|
||||
{
|
||||
vertexShaderByteCode.Seek(0, SeekOrigin.Begin);
|
||||
}
|
||||
this.vertexShaderByteCode = ShaderBytecode.FromStream(vertexShaderByteCode);
|
||||
this.vertexShader = new VertexShader((SharpDX.Direct3D11.Device)device.NativeDevice, this.vertexShaderByteCode);
|
||||
|
||||
if (pixelShaderByteCode.CanSeek)
|
||||
{
|
||||
pixelShaderByteCode.Seek(0, SeekOrigin.Begin);
|
||||
}
|
||||
this.pixelShaderByteCode = ShaderBytecode.FromStream(pixelShaderByteCode);
|
||||
this.pixelShader = new PixelShader((SharpDX.Direct3D11.Device)device.NativeDevice, this.pixelShaderByteCode);
|
||||
}
|
||||
|
||||
public Effect_DX11(GraphicsDevice device, Stream effectByteCode)
|
||||
{
|
||||
if (effectByteCode.CanSeek)
|
||||
{
|
||||
effectByteCode.Seek(0, SeekOrigin.Begin);
|
||||
}
|
||||
this.effectByteCode = ShaderBytecode.FromStream(effectByteCode);
|
||||
this.nativeEffect = new SharpDX.Direct3D11.Effect(((GraphicsDeviceWindowsDX11)device.NativeDevice).NativeDevice, this.effectByteCode);
|
||||
}
|
||||
|
||||
public void Apply(GraphicsDevice graphicsDevice)
|
||||
{
|
||||
//TODO: dummy
|
||||
((GraphicsDeviceWindowsDX11)graphicsDevice.NativeDevice).currentEffect = this;
|
||||
}
|
||||
|
||||
internal SharpDX.Direct3D11.Effect NativeEffect
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.nativeEffect;
|
||||
}
|
||||
}
|
||||
|
||||
internal ShaderBytecode PixelShaderByteCode
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.pixelShaderByteCode;
|
||||
}
|
||||
}
|
||||
|
||||
internal ShaderBytecode VertexShaderByteCode
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.vertexShaderByteCode;
|
||||
}
|
||||
}
|
||||
|
||||
internal VertexShader VertexShader
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.vertexShader;
|
||||
}
|
||||
}
|
||||
|
||||
internal PixelShader PixelShader
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.pixelShader;
|
||||
}
|
||||
}
|
||||
|
||||
public static byte[] CompileVertexShader(string effectCode)
|
||||
{
|
||||
ShaderBytecode vertexShaderByteCode = ShaderBytecode.Compile(effectCode, "VS", "vs_4_0", ShaderFlags.None, EffectFlags.None);
|
||||
byte[] bytecode = new byte[vertexShaderByteCode.BufferSize];
|
||||
vertexShaderByteCode.Data.Read(bytecode, 0, bytecode.Length);
|
||||
return bytecode;
|
||||
}
|
||||
|
||||
public static byte[] CompilePixelShader(string effectCode)
|
||||
{
|
||||
ShaderBytecode pixelShaderByteCode = ShaderBytecode.Compile(effectCode, "PS", "ps_4_0", ShaderFlags.None, EffectFlags.None);
|
||||
byte[] bytecode = new byte[pixelShaderByteCode.BufferSize];
|
||||
pixelShaderByteCode.Data.Read(bytecode, 0, bytecode.Length);
|
||||
return bytecode;
|
||||
}
|
||||
|
||||
public static byte[] CompileFXShader(string effectCode)
|
||||
{
|
||||
ShaderBytecode effectByteCode = ShaderBytecode.Compile(effectCode, "fx_4_0", ShaderFlags.None, EffectFlags.None);
|
||||
byte[] bytecode = new byte[effectByteCode.BufferSize];
|
||||
effectByteCode.Data.Read(bytecode, 0, bytecode.Length);
|
||||
return bytecode;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (this.pixelShaderByteCode != null)
|
||||
{
|
||||
this.pixelShaderByteCode.Dispose();
|
||||
this.pixelShaderByteCode = null;
|
||||
}
|
||||
|
||||
if (this.pixelShader != null)
|
||||
{
|
||||
this.pixelShader.Dispose();
|
||||
this.pixelShader = null;
|
||||
}
|
||||
|
||||
if (this.vertexShaderByteCode != null)
|
||||
{
|
||||
this.vertexShaderByteCode.Dispose();
|
||||
this.vertexShaderByteCode = null;
|
||||
}
|
||||
|
||||
if (this.vertexShader != null)
|
||||
{
|
||||
this.vertexShader.Dispose();
|
||||
this.vertexShader = null;
|
||||
}
|
||||
|
||||
if (this.effectByteCode != null)
|
||||
{
|
||||
this.effectByteCode.Dispose();
|
||||
this.effectByteCode = null;
|
||||
}
|
||||
|
||||
if (this.nativeEffect != null)
|
||||
{
|
||||
this.nativeEffect.Dispose();
|
||||
this.nativeEffect = null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public IEnumerable<ANX.Framework.Graphics.EffectTechnique> Techniques
|
||||
{
|
||||
get
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
|
||||
//for (int i = 0; i < nativeEffect.Description.TechniqueCount; i++)
|
||||
//{
|
||||
// EffectTechnique_DX11 teqDx11 = new EffectTechnique_DX11();
|
||||
// teqDx10.NativeTechnique = nativeEffect.GetTechniqueByIndex(i);
|
||||
|
||||
// ANX.Framework.Graphics.EffectTechnique teq = new ANX.Framework.Graphics.EffectTechnique();
|
||||
// teq.NativeTechnique = teqDx11;
|
||||
|
||||
// yield return teq;
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
||||
public IEnumerable<ANX.Framework.Graphics.EffectParameter> Parameters
|
||||
{
|
||||
get
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
|
||||
//for (int i = 0; i < nativeEffect.Description.GlobalVariableCount; i++)
|
||||
//{
|
||||
// EffectParameter_DX10 parDx10 = new EffectParameter_DX10();
|
||||
// parDx10.NativeParameter = nativeEffect.GetVariableByIndex(i);
|
||||
|
||||
// Graphics.EffectParameter par = new Graphics.EffectParameter();
|
||||
// par.NativeParameter = parDx10;
|
||||
|
||||
// yield return par;
|
||||
//}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
653
ANX.RenderSystem.Windows.DX11.1/GraphicsDeviceWindowsDX11.cs
Normal file
653
ANX.RenderSystem.Windows.DX11.1/GraphicsDeviceWindowsDX11.cs
Normal file
@ -0,0 +1,653 @@
|
||||
#region Using Statements
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using SharpDX;
|
||||
using SharpDX.DXGI;
|
||||
using SharpDX.Direct3D;
|
||||
using ANX.Framework.NonXNA;
|
||||
using ANX.Framework.Graphics;
|
||||
using SharpDX.Direct3D11;
|
||||
using ANX.Framework;
|
||||
using ANX.Framework.Graphics;
|
||||
using SharpDX.D3DCompiler;
|
||||
|
||||
#endregion // Using Statements
|
||||
|
||||
#region License
|
||||
|
||||
//
|
||||
// This file is part of the ANX.Framework created by the "ANX.Framework developer group".
|
||||
//
|
||||
// This file is released under the Ms-PL license.
|
||||
//
|
||||
//
|
||||
//
|
||||
// Microsoft Public License (Ms-PL)
|
||||
//
|
||||
// This license governs use of the accompanying software. If you use the software, you accept this license.
|
||||
// If you do not accept the license, do not use the software.
|
||||
//
|
||||
// 1.Definitions
|
||||
// The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning
|
||||
// here as under U.S. copyright law.
|
||||
// A "contribution" is the original software, or any additions or changes to the software.
|
||||
// A "contributor" is any person that distributes its contribution under this license.
|
||||
// "Licensed patents" are a contributor's patent claims that read directly on its contribution.
|
||||
//
|
||||
// 2.Grant of Rights
|
||||
// (A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations
|
||||
// in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to
|
||||
// reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution
|
||||
// or any derivative works that you create.
|
||||
// (B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in
|
||||
// section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed
|
||||
// patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution
|
||||
// in the software or derivative works of the contribution in the software.
|
||||
//
|
||||
// 3.Conditions and Limitations
|
||||
// (A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks.
|
||||
// (B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your
|
||||
// patent license from such contributor to the software ends automatically.
|
||||
// (C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution
|
||||
// notices that are present in the software.
|
||||
// (D) If you distribute any portion of the software in source code form, you may do so only under this license by including
|
||||
// a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or
|
||||
// object code form, you may only do so under a license that complies with this license.
|
||||
// (E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees,
|
||||
// or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the
|
||||
// extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a
|
||||
// particular purpose and non-infringement.
|
||||
|
||||
#endregion // License
|
||||
|
||||
using Device = SharpDX.Direct3D11.Device;
|
||||
using Buffer = SharpDX.Direct3D11.Buffer;
|
||||
|
||||
namespace ANX.RenderSystem.Windows.DX11
|
||||
{
|
||||
public class GraphicsDeviceWindowsDX11 : INativeGraphicsDevice
|
||||
{
|
||||
private Device device;
|
||||
private SwapChain swapChain;
|
||||
private RenderTargetView renderView;
|
||||
private SharpDX.Direct3D11.Texture2D backBuffer;
|
||||
internal Effect_DX11 currentEffect;
|
||||
private VertexBuffer currentVertexBuffer;
|
||||
private IndexBuffer currentIndexBuffer;
|
||||
private SharpDX.Direct3D11.Viewport currentViewport;
|
||||
|
||||
public GraphicsDeviceWindowsDX11(PresentationParameters presentationParameters)
|
||||
{
|
||||
// SwapChain description
|
||||
var desc = new SwapChainDescription()
|
||||
{
|
||||
BufferCount = 1,
|
||||
ModeDescription = new ModeDescription(presentationParameters.BackBufferWidth, presentationParameters.BackBufferHeight, new Rational(60, 1), Format.R8G8B8A8_UNorm),
|
||||
IsWindowed = true,
|
||||
OutputHandle = presentationParameters.DeviceWindowHandle,
|
||||
SampleDescription = new SampleDescription(1, 0),
|
||||
SwapEffect = SwapEffect.Discard,
|
||||
Usage = Usage.RenderTargetOutput
|
||||
};
|
||||
|
||||
// Create Device and SwapChain
|
||||
#if DIRECTX_DEBUG_LAYER
|
||||
// http://msdn.microsoft.com/en-us/library/windows/desktop/bb205068(v=vs.85).aspx
|
||||
Device.CreateWithSwapChain(SharpDX.Direct3D10.DriverType.Hardware, DeviceCreationFlags.Debug, desc, out device, out swapChain);
|
||||
#else
|
||||
Device.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.None, desc, out device, out swapChain);
|
||||
#endif
|
||||
|
||||
// Ignore all windows events
|
||||
Factory factory = swapChain.GetParent<Factory>();
|
||||
factory.MakeWindowAssociation(presentationParameters.DeviceWindowHandle, WindowAssociationFlags.IgnoreAll);
|
||||
|
||||
// New RenderTargetView from the backbuffer
|
||||
backBuffer = SharpDX.Direct3D11.Texture2D.FromSwapChain<SharpDX.Direct3D11.Texture2D>(swapChain, 0);
|
||||
renderView = new RenderTargetView(device, backBuffer);
|
||||
|
||||
currentViewport = new SharpDX.Direct3D11.Viewport(0, 0, presentationParameters.BackBufferWidth, presentationParameters.BackBufferHeight);
|
||||
}
|
||||
|
||||
public void Clear(ref Color color)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
//device.ClearRenderTargetView(renderView, new SharpDX.Color4(color.A / 255f, color.R / 255f, color.G / 255f, color.B / 255f));
|
||||
}
|
||||
|
||||
public void Present()
|
||||
{
|
||||
swapChain.Present(0, PresentFlags.None);
|
||||
}
|
||||
|
||||
internal Device NativeDevice
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.device;
|
||||
}
|
||||
}
|
||||
|
||||
private void SetupEffectForDraw(out SharpDX.Direct3D11.EffectPass pass, out SharpDX.Direct3D11.EffectTechnique technique, out ShaderBytecode passSignature)
|
||||
{
|
||||
// get the current effect
|
||||
//TODO: check for null and throw exception
|
||||
Effect_DX11 effect = this.currentEffect;
|
||||
|
||||
// get the input semantic of the current effect / technique that is used
|
||||
//TODO: check for null's and throw exceptions
|
||||
technique = effect.NativeEffect.GetTechniqueByIndex(0);
|
||||
pass = technique.GetPassByIndex(0);
|
||||
passSignature = pass.Description.Signature;
|
||||
}
|
||||
|
||||
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
|
||||
VertexDeclaration vertexDeclaration = currentVertexBuffer.VertexDeclaration;
|
||||
var layout = CreateInputLayout(device, passSignature, vertexDeclaration);
|
||||
|
||||
throw new NotImplementedException();
|
||||
|
||||
//device.InputAssembler.InputLayout = layout;
|
||||
}
|
||||
|
||||
private int CalculateVertexCount(PrimitiveType type, int primitiveCount)
|
||||
{
|
||||
if (type == PrimitiveType.TriangleList)
|
||||
{
|
||||
return primitiveCount * 3;
|
||||
}
|
||||
else if (type == PrimitiveType.LineList)
|
||||
{
|
||||
return primitiveCount * 2;
|
||||
}
|
||||
else if (type == PrimitiveType.LineStrip)
|
||||
{
|
||||
return primitiveCount + 1;
|
||||
}
|
||||
else if (type == PrimitiveType.TriangleStrip)
|
||||
{
|
||||
return primitiveCount + 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new NotImplementedException("couldn't calculate vertex count for PrimitiveType '" + type.ToString() + "'");
|
||||
}
|
||||
}
|
||||
|
||||
public void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices, int startIndex, int primitiveCount)
|
||||
{
|
||||
SharpDX.Direct3D11.EffectPass pass; SharpDX.Direct3D11.EffectTechnique technique; ShaderBytecode passSignature;
|
||||
SetupEffectForDraw(out pass, out technique, out passSignature);
|
||||
|
||||
SetupInputLayout(passSignature);
|
||||
|
||||
throw new NotImplementedException();
|
||||
|
||||
// Prepare All the stages
|
||||
//device.InputAssembler.PrimitiveTopology = Translate(primitiveType);
|
||||
//device.Rasterizer.SetViewports(currentViewport);
|
||||
|
||||
//device.OutputMerger.SetTargets(this.renderView);
|
||||
|
||||
//for (int i = 0; i < technique.Description.PassCount; ++i)
|
||||
//{
|
||||
// pass.Apply();
|
||||
// device.DrawIndexed(CalculateVertexCount(primitiveType, primitiveCount), startIndex, baseVertex);
|
||||
//}
|
||||
}
|
||||
|
||||
public void DrawPrimitives(PrimitiveType primitiveType, int vertexOffset, int primitiveCount)
|
||||
{
|
||||
SharpDX.Direct3D11.EffectPass pass; SharpDX.Direct3D11.EffectTechnique technique; ShaderBytecode passSignature;
|
||||
SetupEffectForDraw(out pass, out technique, out passSignature);
|
||||
|
||||
SetupInputLayout(passSignature);
|
||||
|
||||
throw new NotImplementedException();
|
||||
|
||||
// Prepare All the stages
|
||||
//device.InputAssembler.PrimitiveTopology = Translate(primitiveType);
|
||||
//device.Rasterizer.SetViewports(currentViewport);
|
||||
//device.OutputMerger.SetTargets(this.renderView);
|
||||
|
||||
//for (int i = 0; i < technique.Description.PassCount; ++i)
|
||||
//{
|
||||
// pass.Apply();
|
||||
// device.Draw(primitiveCount, vertexOffset);
|
||||
//}
|
||||
}
|
||||
|
||||
public void SetIndexBuffer(IndexBuffer indexBuffer)
|
||||
{
|
||||
if (indexBuffer == null)
|
||||
{
|
||||
throw new ArgumentNullException("indexBuffer");
|
||||
}
|
||||
|
||||
this.currentIndexBuffer = indexBuffer;
|
||||
|
||||
throw new NotImplementedException();
|
||||
|
||||
//IndexBuffer_DX11 nativeIndexBuffer = indexBuffer.NativeIndexBuffer as IndexBuffer_DX11;
|
||||
|
||||
//if (nativeIndexBuffer != null)
|
||||
//{
|
||||
// device.InputAssembler.SetIndexBuffer(nativeIndexBuffer.NativeBuffer, Translate(indexBuffer.IndexElementSize), 0);
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// throw new Exception("couldn't fetch native DirectX11.1 IndexBuffer");
|
||||
//}
|
||||
}
|
||||
|
||||
public void SetVertexBuffers(ANX.Framework.Graphics.VertexBufferBinding[] vertexBuffers)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void SetViewport(ANX.Framework.Graphics.Viewport viewport)
|
||||
{
|
||||
this.currentViewport = new SharpDX.Direct3D11.Viewport(viewport.X, viewport.Y, viewport.Width, viewport.Height, viewport.MinDepth, viewport.MaxDepth);
|
||||
}
|
||||
|
||||
public void ApplyStateObject(ANX.Framework.Graphics.BlendState blendState)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
|
||||
//BlendStateDescription description = new BlendStateDescription();
|
||||
//description.AlphaBlendOperation = Translate(blendState.AlphaBlendFunction);
|
||||
//description.BlendOperation = Translate(blendState.ColorBlendFunction);
|
||||
//description.DestinationAlphaBlend = Translate(blendState.AlphaDestinationBlend);
|
||||
//description.DestinationBlend = Translate(blendState.ColorDestinationBlend);
|
||||
|
||||
//for (int i = 0; i < 4; i++)
|
||||
//{
|
||||
// description.IsBlendEnabled[i] = true;
|
||||
//}
|
||||
|
||||
//description.RenderTargetWriteMask[0] = Translate(blendState.ColorWriteChannels);
|
||||
//description.RenderTargetWriteMask[1] = Translate(blendState.ColorWriteChannels1);
|
||||
//description.RenderTargetWriteMask[2] = Translate(blendState.ColorWriteChannels2);
|
||||
//description.RenderTargetWriteMask[3] = Translate(blendState.ColorWriteChannels3);
|
||||
|
||||
//description.SourceAlphaBlend = Translate(blendState.AlphaSourceBlend);
|
||||
//description.SourceBlend = Translate(blendState.ColorSourceBlend);
|
||||
|
||||
//SharpDX.Direct3D11.BlendState nativeBlendState = new SharpDX.Direct3D11.BlendState(device, description);
|
||||
|
||||
//Vector4 tempVector = blendState.BlendFactor.ToVector4();
|
||||
//SharpDX.Color4 blendFactor = new Color4(tempVector.X, tempVector.Y, tempVector.Z, tempVector.W);
|
||||
//device.OutputMerger.SetBlendState(nativeBlendState, blendFactor, blendState.MultiSampleMask);
|
||||
}
|
||||
|
||||
public void ApplyStateObject(ANX.Framework.Graphics.RasterizerState rasterizerState)
|
||||
{
|
||||
RasterizerStateDescription description = new RasterizerStateDescription();
|
||||
description.CullMode = Translate(rasterizerState.CullMode);
|
||||
description.DepthBias = (int)rasterizerState.DepthBias; //TODO: this looks wrong!!!
|
||||
description.IsScissorEnabled = rasterizerState.ScissorTestEnable;
|
||||
description.SlopeScaledDepthBias = rasterizerState.SlopeScaleDepthBias;
|
||||
description.IsMultisampleEnabled = rasterizerState.MultiSampleAntiAlias;
|
||||
description.FillMode = Translate(rasterizerState.FillMode);
|
||||
|
||||
description.IsAntialiasedLineEnabled = false; //TODO: this should be ok
|
||||
|
||||
SharpDX.Direct3D11.RasterizerState nativeRasterizerState = new SharpDX.Direct3D11.RasterizerState(device, description);
|
||||
|
||||
//device.Rasterizer.State = nativeRasterizerState;
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void ApplyStateObject(ANX.Framework.Graphics.DepthStencilState depthStencilState)
|
||||
{
|
||||
DepthStencilStateDescription description = new DepthStencilStateDescription();
|
||||
description.IsStencilEnabled = depthStencilState.StencilEnable;
|
||||
description.IsDepthEnabled = depthStencilState.DepthBufferEnable;
|
||||
description.DepthComparison = Translate(depthStencilState.DepthBufferFunction);
|
||||
|
||||
//TODO: more to implement
|
||||
|
||||
SharpDX.Direct3D11.DepthStencilState nativeDepthStencilState = new SharpDX.Direct3D11.DepthStencilState(device, description);
|
||||
//device.OutputMerger.SetDepthStencilState(nativeDepthStencilState, depthStencilState.ReferenceStencil);
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void ApplyStateObject(int slot, ANX.Framework.Graphics.SamplerState samplerState)
|
||||
{
|
||||
SamplerStateDescription description = new SamplerStateDescription();
|
||||
description.AddressU = Translate(samplerState.AddressU);
|
||||
description.AddressV = Translate(samplerState.AddressV);
|
||||
description.AddressW = Translate(samplerState.AddressW);
|
||||
description.Filter = Translate(samplerState.Filter);
|
||||
description.MaximumAnisotropy = samplerState.MaxAnisotropy;
|
||||
description.MaximumLod = samplerState.MaxMipLevel; //TODO: is this correct?
|
||||
description.MipLodBias = samplerState.MipMapLevelOfDetailBias;
|
||||
|
||||
SharpDX.Direct3D11.SamplerState nativeSamplerState = new SharpDX.Direct3D11.SamplerState(device, description);
|
||||
//device.PixelShader.SetSampler(slot, nativeSamplerState);
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
private Filter Translate(TextureFilter filter)
|
||||
{
|
||||
switch (filter)
|
||||
{
|
||||
case TextureFilter.Anisotropic:
|
||||
return Filter.Anisotropic;
|
||||
case TextureFilter.Linear:
|
||||
return Filter.MinMagMipLinear;
|
||||
case TextureFilter.LinearMipPoint:
|
||||
return Filter.MinMagMipPoint;
|
||||
case TextureFilter.MinLinearMagPointMipLinear:
|
||||
return Filter.MinLinearMagPointMipLinear;
|
||||
case TextureFilter.MinLinearMagPointMipPoint:
|
||||
return Filter.MinLinearMagMipPoint;
|
||||
case TextureFilter.MinPointMagLinearMipLinear:
|
||||
return Filter.MinPointMagMipLinear;
|
||||
case TextureFilter.MinPointMagLinearMipPoint:
|
||||
return Filter.MinPointMagLinearMipPoint;
|
||||
case TextureFilter.Point:
|
||||
return Filter.MinMagMipPoint;
|
||||
case TextureFilter.PointMipLinear:
|
||||
return Filter.MinMagPointMipLinear;
|
||||
}
|
||||
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
private SharpDX.Direct3D11.TextureAddressMode Translate(ANX.Framework.Graphics.TextureAddressMode addressMode)
|
||||
{
|
||||
switch (addressMode)
|
||||
{
|
||||
case ANX.Framework.Graphics.TextureAddressMode.Clamp:
|
||||
return SharpDX.Direct3D11.TextureAddressMode.Clamp;
|
||||
case ANX.Framework.Graphics.TextureAddressMode.Mirror:
|
||||
return SharpDX.Direct3D11.TextureAddressMode.Mirror;
|
||||
case ANX.Framework.Graphics.TextureAddressMode.Wrap:
|
||||
return SharpDX.Direct3D11.TextureAddressMode.Wrap;
|
||||
}
|
||||
|
||||
return SharpDX.Direct3D11.TextureAddressMode.Clamp;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This method creates a InputLayout which is needed by DirectX 10 for rendering primitives. The VertexDeclaration of ANX/XNA needs to be mapped
|
||||
/// to the DirectX 10 types. This is what this method is for.
|
||||
/// </summary>
|
||||
private InputLayout CreateInputLayout(Device device, ShaderBytecode passSignature, VertexDeclaration vertexDeclaration)
|
||||
{
|
||||
VertexElement[] vertexElements = vertexDeclaration.GetVertexElements();
|
||||
int elementCount = vertexElements.Length;
|
||||
InputElement[] inputElements = new InputElement[elementCount];
|
||||
|
||||
for (int i = 0; i < elementCount; i++)
|
||||
{
|
||||
inputElements[i] = CreateInputElementFromVertexElement(vertexElements[i]);
|
||||
}
|
||||
|
||||
// Layout from VertexShader input signature
|
||||
return new InputLayout(device, passSignature, inputElements);
|
||||
}
|
||||
|
||||
private InputElement CreateInputElementFromVertexElement(VertexElement vertexElement)
|
||||
{
|
||||
string elementName = Translate(vertexElement.VertexElementUsage);
|
||||
|
||||
Format elementFormat;
|
||||
switch (vertexElement.VertexElementFormat)
|
||||
{
|
||||
case VertexElementFormat.Vector2:
|
||||
elementFormat = Format.R32G32_Float;
|
||||
break;
|
||||
case VertexElementFormat.Vector3:
|
||||
elementFormat = Format.R32G32B32_Float;
|
||||
break;
|
||||
case VertexElementFormat.Vector4:
|
||||
elementFormat = Format.R32G32B32A32_Float;
|
||||
break;
|
||||
case VertexElementFormat.Color:
|
||||
elementFormat = Format.R8G8B8A8_UNorm;
|
||||
break;
|
||||
default:
|
||||
throw new Exception("can't map '" + vertexElement.VertexElementFormat.ToString() + "' to DXGI.Format in DirectX10 RenderSystem CreateInputElementFromVertexElement");
|
||||
}
|
||||
|
||||
return new InputElement(elementName, vertexElement.UsageIndex, elementFormat, vertexElement.Offset, 0);
|
||||
}
|
||||
|
||||
private PrimitiveTopology Translate(PrimitiveType primitiveType)
|
||||
{
|
||||
switch (primitiveType)
|
||||
{
|
||||
case PrimitiveType.LineList:
|
||||
return PrimitiveTopology.LineList;
|
||||
case PrimitiveType.LineStrip:
|
||||
return PrimitiveTopology.LineStrip;
|
||||
case PrimitiveType.TriangleList:
|
||||
return PrimitiveTopology.TriangleList;
|
||||
case PrimitiveType.TriangleStrip:
|
||||
return PrimitiveTopology.TriangleStrip;
|
||||
default:
|
||||
throw new InvalidOperationException("unknown PrimitiveType: " + primitiveType.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
private SharpDX.DXGI.Format Translate(IndexElementSize indexElementSize)
|
||||
{
|
||||
switch (indexElementSize)
|
||||
{
|
||||
case IndexElementSize.SixteenBits:
|
||||
return Format.R16_UInt;
|
||||
case IndexElementSize.ThirtyTwoBits:
|
||||
return Format.R32_UInt;
|
||||
default:
|
||||
throw new InvalidOperationException("unknown IndexElementSize: " + indexElementSize.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
private string Translate(VertexElementUsage usage)
|
||||
{
|
||||
//TODO: map the other Usages
|
||||
if (usage == VertexElementUsage.TextureCoordinate)
|
||||
{
|
||||
return "TEXCOORD";
|
||||
}
|
||||
else
|
||||
{
|
||||
return usage.ToString().ToUpperInvariant();
|
||||
}
|
||||
}
|
||||
|
||||
private ColorWriteMaskFlags Translate(ColorWriteChannels colorWriteChannels)
|
||||
{
|
||||
switch (colorWriteChannels)
|
||||
{
|
||||
case ColorWriteChannels.All:
|
||||
return ColorWriteMaskFlags.All;
|
||||
case ColorWriteChannels.Alpha:
|
||||
return ColorWriteMaskFlags.Alpha;
|
||||
case ColorWriteChannels.Blue:
|
||||
return ColorWriteMaskFlags.Blue;
|
||||
case ColorWriteChannels.Green:
|
||||
return ColorWriteMaskFlags.Green;
|
||||
case ColorWriteChannels.Red:
|
||||
return ColorWriteMaskFlags.Red;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
private BlendOption Translate(Blend blend)
|
||||
{
|
||||
switch (blend)
|
||||
{
|
||||
case Blend.BlendFactor:
|
||||
return BlendOption.BlendFactor;
|
||||
case Blend.DestinationAlpha:
|
||||
return BlendOption.DestinationAlpha;
|
||||
case Blend.DestinationColor:
|
||||
return BlendOption.DestinationColor;
|
||||
case Blend.InverseBlendFactor:
|
||||
return BlendOption.InverseBlendFactor;
|
||||
case Blend.InverseDestinationAlpha:
|
||||
return BlendOption.InverseDestinationAlpha;
|
||||
case Blend.InverseDestinationColor:
|
||||
return BlendOption.InverseDestinationColor;
|
||||
case Blend.InverseSourceAlpha:
|
||||
return BlendOption.InverseSourceAlpha;
|
||||
case Blend.InverseSourceColor:
|
||||
return BlendOption.InverseSourceColor;
|
||||
case Blend.One:
|
||||
return BlendOption.One;
|
||||
case Blend.SourceAlpha:
|
||||
return BlendOption.SourceAlpha;
|
||||
case Blend.SourceAlphaSaturation:
|
||||
return BlendOption.SourceAlphaSaturate;
|
||||
case Blend.SourceColor:
|
||||
return BlendOption.SourceColor;
|
||||
case Blend.Zero:
|
||||
return BlendOption.Zero;
|
||||
}
|
||||
|
||||
return BlendOption.One;
|
||||
}
|
||||
|
||||
private BlendOperation Translate(BlendFunction blendFunction)
|
||||
{
|
||||
switch (blendFunction)
|
||||
{
|
||||
case BlendFunction.Add:
|
||||
return BlendOperation.Add;
|
||||
case BlendFunction.Max:
|
||||
return BlendOperation.Maximum;
|
||||
case BlendFunction.Min:
|
||||
return BlendOperation.Minimum;
|
||||
case BlendFunction.ReverseSubtract:
|
||||
return BlendOperation.ReverseSubtract;
|
||||
case BlendFunction.Subtract:
|
||||
return BlendOperation.Subtract;
|
||||
}
|
||||
|
||||
return BlendOperation.Add;
|
||||
}
|
||||
|
||||
private SharpDX.Direct3D11.FillMode Translate(ANX.Framework.Graphics.FillMode fillMode)
|
||||
{
|
||||
if (fillMode == ANX.Framework.Graphics.FillMode.WireFrame)
|
||||
{
|
||||
return SharpDX.Direct3D11.FillMode.Wireframe;
|
||||
}
|
||||
else
|
||||
{
|
||||
return SharpDX.Direct3D11.FillMode.Solid;
|
||||
}
|
||||
}
|
||||
|
||||
private SharpDX.Direct3D11.CullMode Translate(ANX.Framework.Graphics.CullMode cullMode)
|
||||
{
|
||||
if (cullMode == ANX.Framework.Graphics.CullMode.CullClockwiseFace)
|
||||
{
|
||||
return SharpDX.Direct3D11.CullMode.Front;
|
||||
}
|
||||
else if (cullMode == ANX.Framework.Graphics.CullMode.CullCounterClockwiseFace)
|
||||
{
|
||||
return SharpDX.Direct3D11.CullMode.Back;
|
||||
}
|
||||
else
|
||||
{
|
||||
return SharpDX.Direct3D11.CullMode.None;
|
||||
}
|
||||
}
|
||||
|
||||
private Comparison Translate(CompareFunction compareFunction)
|
||||
{
|
||||
switch (compareFunction)
|
||||
{
|
||||
case CompareFunction.Always:
|
||||
return Comparison.Always;
|
||||
case CompareFunction.Equal:
|
||||
return Comparison.Equal;
|
||||
case CompareFunction.Greater:
|
||||
return Comparison.Greater;
|
||||
case CompareFunction.GreaterEqual:
|
||||
return Comparison.GreaterEqual;
|
||||
case CompareFunction.Less:
|
||||
return Comparison.Less;
|
||||
case CompareFunction.LessEqual:
|
||||
return Comparison.LessEqual;
|
||||
case CompareFunction.Never:
|
||||
return Comparison.Never;
|
||||
case CompareFunction.NotEqual:
|
||||
return Comparison.NotEqual;
|
||||
}
|
||||
|
||||
return Comparison.Always;
|
||||
}
|
||||
|
||||
public void SetRenderTargets(params Framework.Graphics.RenderTargetBinding[] renderTargets)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
|
||||
public void GetBackBufferData<T>(Framework.Rectangle? rect, T[] data, int startIndex, int elementCount) where T : struct
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void GetBackBufferData<T>(T[] data) where T : struct
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void GetBackBufferData<T>(T[] data, int startIndex, int elementCount) where T : struct
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
|
||||
public void Clear(Framework.Graphics.ClearOptions options, Framework.Vector4 color, float depth, int stencil)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void DrawInstancedPrimitives(Framework.Graphics.PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices, int startIndex, int primitiveCount, int instanceCount)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void DrawUserIndexedPrimitives<T>(Framework.Graphics.PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, Array indexData, int indexOffset, int primitiveCount, Framework.Graphics.VertexDeclaration vertexDeclaration, Framework.Graphics.IndexElementSize indexFormat) where T : struct, Framework.Graphics.IVertexType
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void DrawUserPrimitives<T>(Framework.Graphics.PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int primitiveCount, Framework.Graphics.VertexDeclaration vertexDeclaration) where T : struct, Framework.Graphics.IVertexType
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
|
||||
public void ResizeBuffers(Framework.Graphics.PresentationParameters presentationParameters)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
|
||||
public bool VSync
|
||||
{
|
||||
get
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
set
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
146
ANX.RenderSystem.Windows.DX11.1/VertexBuffer_DX11.cs
Normal file
146
ANX.RenderSystem.Windows.DX11.1/VertexBuffer_DX11.cs
Normal file
@ -0,0 +1,146 @@
|
||||
#region Using Statements
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using ANX.Framework.NonXNA;
|
||||
using SharpDX.Direct3D11;
|
||||
using ANX.Framework.Graphics;
|
||||
|
||||
#endregion // Using Statements
|
||||
|
||||
#region License
|
||||
|
||||
//
|
||||
// This file is part of the ANX.Framework created by the "ANX.Framework developer group".
|
||||
//
|
||||
// This file is released under the Ms-PL license.
|
||||
//
|
||||
//
|
||||
//
|
||||
// Microsoft Public License (Ms-PL)
|
||||
//
|
||||
// This license governs use of the accompanying software. If you use the software, you accept this license.
|
||||
// If you do not accept the license, do not use the software.
|
||||
//
|
||||
// 1.Definitions
|
||||
// The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning
|
||||
// here as under U.S. copyright law.
|
||||
// A "contribution" is the original software, or any additions or changes to the software.
|
||||
// A "contributor" is any person that distributes its contribution under this license.
|
||||
// "Licensed patents" are a contributor's patent claims that read directly on its contribution.
|
||||
//
|
||||
// 2.Grant of Rights
|
||||
// (A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations
|
||||
// in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to
|
||||
// reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution
|
||||
// or any derivative works that you create.
|
||||
// (B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in
|
||||
// section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed
|
||||
// patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution
|
||||
// in the software or derivative works of the contribution in the software.
|
||||
//
|
||||
// 3.Conditions and Limitations
|
||||
// (A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks.
|
||||
// (B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your
|
||||
// patent license from such contributor to the software ends automatically.
|
||||
// (C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution
|
||||
// notices that are present in the software.
|
||||
// (D) If you distribute any portion of the software in source code form, you may do so only under this license by including
|
||||
// a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or
|
||||
// object code form, you may only do so under a license that complies with this license.
|
||||
// (E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees,
|
||||
// or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the
|
||||
// extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a
|
||||
// particular purpose and non-infringement.
|
||||
|
||||
#endregion // License
|
||||
|
||||
namespace ANX.RenderSystem.Windows.DX11
|
||||
{
|
||||
public class VertexBuffer_DX11 : INativeBuffer, IDisposable
|
||||
{
|
||||
SharpDX.Direct3D11.Buffer buffer;
|
||||
int vertexStride;
|
||||
|
||||
public VertexBuffer_DX11(GraphicsDevice graphics, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage)
|
||||
{
|
||||
this.vertexStride = vertexDeclaration.VertexStride;
|
||||
|
||||
//TODO: translate and use usage
|
||||
|
||||
GraphicsDeviceWindowsDX11 gd11 = graphics.NativeDevice as GraphicsDeviceWindowsDX11;
|
||||
SharpDX.Direct3D11.Device device = gd11 != null ? gd11.NativeDevice as SharpDX.Direct3D11.Device : null;
|
||||
|
||||
if (device != null)
|
||||
{
|
||||
BufferDescription description = new BufferDescription()
|
||||
{
|
||||
Usage = ResourceUsage.Dynamic,
|
||||
SizeInBytes = vertexDeclaration.VertexStride * vertexCount,
|
||||
BindFlags = BindFlags.VertexBuffer,
|
||||
CpuAccessFlags = CpuAccessFlags.Write,
|
||||
OptionFlags = ResourceOptionFlags.None
|
||||
};
|
||||
|
||||
this.buffer = new SharpDX.Direct3D11.Buffer(device, description);
|
||||
//this.buffer.Unmap();
|
||||
}
|
||||
}
|
||||
|
||||
public void SetData<T>(GraphicsDevice graphicsDevice, int offsetInBytes, T[] data, int startIndex, int elementCount) where T : struct
|
||||
{
|
||||
if (startIndex > 0 || elementCount < data.Length)
|
||||
{
|
||||
throw new NotImplementedException("currently starIndex and elementCount of SetData are not implemented");
|
||||
}
|
||||
|
||||
//TODO: check offsetInBytes parameter for bounds etc.
|
||||
|
||||
throw new NotImplementedException();
|
||||
|
||||
/*
|
||||
using (var vData = new SharpDX.DataStream(data, true, false))
|
||||
{
|
||||
if (offsetInBytes > 0)
|
||||
{
|
||||
vData.Seek(offsetInBytes / vertexStride, System.IO.SeekOrigin.Begin);
|
||||
}
|
||||
|
||||
using (var d = buffer.Map(MapMode.WriteDiscard))
|
||||
{
|
||||
vData.CopyTo(d);
|
||||
buffer.Unmap();
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
public void SetData<T>(GraphicsDevice graphicsDevice, T[] data) where T : struct
|
||||
{
|
||||
SetData<T>(graphicsDevice, data, 0, data.Length);
|
||||
}
|
||||
|
||||
public void SetData<T>(GraphicsDevice graphicsDevice, T[] data, int startIndex, int elementCount) where T : struct
|
||||
{
|
||||
SetData<T>(graphicsDevice, 0, data, startIndex, elementCount);
|
||||
}
|
||||
|
||||
public SharpDX.Direct3D11.Buffer NativeBuffer
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.buffer;
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (this.buffer != null)
|
||||
{
|
||||
buffer.Dispose();
|
||||
buffer = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user