Even more refactorings in Dx11 and Dx10 RenderSystems and added the ANX.BaseDirectX project which unifies a lot of code from both RenderSystems and even more in the near future.
This commit is contained in:
parent
dd173478d6
commit
e0165985b3
@ -186,6 +186,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WaveUtils", "SoundSystems\W
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DualTextureSample", "Samples\DualTextureSample\DualTextureSample.csproj", "{9259CC4E-AE6B-403C-8FAB-2408448C3935}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ANX.BaseDirectX", "RenderSystems\ANX.BaseDirectX\ANX.BaseDirectX.csproj", "{A4D3AD34-E49C-4142-8620-2AFF44ED6719}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
@ -728,6 +730,16 @@ Global
|
||||
{9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|Mixed Platforms.Build.0 = Release|x86
|
||||
{9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|x86.ActiveCfg = Release|x86
|
||||
{9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|x86.Build.0 = Release|x86
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Release|Mixed Platforms.Build.0 = Release|Any CPU
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
@ -748,6 +760,7 @@ Global
|
||||
{B30DE9C2-0926-46B6-8351-9AF276C472D5} = {D421509A-9AE3-4D7E-881B-EAFED598B028}
|
||||
{FF0AB665-2796-4354-9630-76C2751DB3C2} = {D421509A-9AE3-4D7E-881B-EAFED598B028}
|
||||
{2B71A7C2-0D18-4E3D-AE5A-320641D1162A} = {D421509A-9AE3-4D7E-881B-EAFED598B028}
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719} = {D421509A-9AE3-4D7E-881B-EAFED598B028}
|
||||
{F945515B-394D-4ED4-80E0-98EB59B69D24} = {9B0DD48B-3912-4F33-AF3F-691AF02B73F9}
|
||||
{AAA20E99-A897-4C91-A23E-D02B8F08ACA5} = {9B0DD48B-3912-4F33-AF3F-691AF02B73F9}
|
||||
{BC79B021-10E4-4D01-945A-7048FFF53A22} = {9B0DD48B-3912-4F33-AF3F-691AF02B73F9}
|
||||
|
@ -186,6 +186,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WaveUtils", "SoundSystems\W
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DualTextureSample", "Samples\DualTextureSample\DualTextureSample_Linux.csproj", "{9259CC4E-AE6B-403C-8FAB-2408448C3935}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ANX.BaseDirectX", "RenderSystems\ANX.BaseDirectX\ANX.BaseDirectX_Linux.csproj", "{A4D3AD34-E49C-4142-8620-2AFF44ED6719}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
@ -728,6 +730,16 @@ Global
|
||||
{9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|Mixed Platforms.Build.0 = Release|x86
|
||||
{9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|x86.ActiveCfg = Release|x86
|
||||
{9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|x86.Build.0 = Release|x86
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Release|Mixed Platforms.Build.0 = Release|Any CPU
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
@ -748,6 +760,7 @@ Global
|
||||
{B30DE9C2-0926-46B6-8351-9AF276C472D5} = {D421509A-9AE3-4D7E-881B-EAFED598B028}
|
||||
{FF0AB665-2796-4354-9630-76C2751DB3C2} = {D421509A-9AE3-4D7E-881B-EAFED598B028}
|
||||
{2B71A7C2-0D18-4E3D-AE5A-320641D1162A} = {D421509A-9AE3-4D7E-881B-EAFED598B028}
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719} = {D421509A-9AE3-4D7E-881B-EAFED598B028}
|
||||
{F945515B-394D-4ED4-80E0-98EB59B69D24} = {9B0DD48B-3912-4F33-AF3F-691AF02B73F9}
|
||||
{AAA20E99-A897-4C91-A23E-D02B8F08ACA5} = {9B0DD48B-3912-4F33-AF3F-691AF02B73F9}
|
||||
{BC79B021-10E4-4D01-945A-7048FFF53A22} = {9B0DD48B-3912-4F33-AF3F-691AF02B73F9}
|
||||
|
@ -186,6 +186,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WaveUtils", "SoundSystems\W
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DualTextureSample", "Samples\DualTextureSample\DualTextureSample_PSVita.csproj", "{9259CC4E-AE6B-403C-8FAB-2408448C3935}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ANX.BaseDirectX", "RenderSystems\ANX.BaseDirectX\ANX.BaseDirectX_PSVita.csproj", "{A4D3AD34-E49C-4142-8620-2AFF44ED6719}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
@ -728,6 +730,16 @@ Global
|
||||
{9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|Mixed Platforms.Build.0 = Release|x86
|
||||
{9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|x86.ActiveCfg = Release|x86
|
||||
{9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|x86.Build.0 = Release|x86
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Release|Mixed Platforms.Build.0 = Release|Any CPU
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
@ -748,6 +760,7 @@ Global
|
||||
{B30DE9C2-0926-46B6-8351-9AF276C472D5} = {D421509A-9AE3-4D7E-881B-EAFED598B028}
|
||||
{FF0AB665-2796-4354-9630-76C2751DB3C2} = {D421509A-9AE3-4D7E-881B-EAFED598B028}
|
||||
{2B71A7C2-0D18-4E3D-AE5A-320641D1162A} = {D421509A-9AE3-4D7E-881B-EAFED598B028}
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719} = {D421509A-9AE3-4D7E-881B-EAFED598B028}
|
||||
{F945515B-394D-4ED4-80E0-98EB59B69D24} = {9B0DD48B-3912-4F33-AF3F-691AF02B73F9}
|
||||
{AAA20E99-A897-4C91-A23E-D02B8F08ACA5} = {9B0DD48B-3912-4F33-AF3F-691AF02B73F9}
|
||||
{BC79B021-10E4-4D01-945A-7048FFF53A22} = {9B0DD48B-3912-4F33-AF3F-691AF02B73F9}
|
||||
|
@ -186,6 +186,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WaveUtils", "SoundSystems\W
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DualTextureSample", "Samples\DualTextureSample\DualTextureSample_WindowsMetro.csproj", "{9259CC4E-AE6B-403C-8FAB-2408448C3935}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ANX.BaseDirectX", "RenderSystems\ANX.BaseDirectX\ANX.BaseDirectX_WindowsMetro.csproj", "{A4D3AD34-E49C-4142-8620-2AFF44ED6719}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
@ -728,6 +730,16 @@ Global
|
||||
{9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|Mixed Platforms.Build.0 = Release|x86
|
||||
{9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|x86.ActiveCfg = Release|x86
|
||||
{9259CC4E-AE6B-403C-8FAB-2408448C3935}.Release|x86.Build.0 = Release|x86
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Release|Mixed Platforms.Build.0 = Release|Any CPU
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
@ -748,6 +760,7 @@ Global
|
||||
{B30DE9C2-0926-46B6-8351-9AF276C472D5} = {D421509A-9AE3-4D7E-881B-EAFED598B028}
|
||||
{FF0AB665-2796-4354-9630-76C2751DB3C2} = {D421509A-9AE3-4D7E-881B-EAFED598B028}
|
||||
{2B71A7C2-0D18-4E3D-AE5A-320641D1162A} = {D421509A-9AE3-4D7E-881B-EAFED598B028}
|
||||
{A4D3AD34-E49C-4142-8620-2AFF44ED6719} = {D421509A-9AE3-4D7E-881B-EAFED598B028}
|
||||
{F945515B-394D-4ED4-80E0-98EB59B69D24} = {9B0DD48B-3912-4F33-AF3F-691AF02B73F9}
|
||||
{AAA20E99-A897-4C91-A23E-D02B8F08ACA5} = {9B0DD48B-3912-4F33-AF3F-691AF02B73F9}
|
||||
{BC79B021-10E4-4D01-945A-7048FFF53A22} = {9B0DD48B-3912-4F33-AF3F-691AF02B73F9}
|
||||
|
73
RenderSystems/ANX.BaseDirectX/ANX.BaseDirectX.csproj
Normal file
73
RenderSystems/ANX.BaseDirectX/ANX.BaseDirectX.csproj
Normal file
@ -0,0 +1,73 @@
|
||||
<?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)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>8.0.30703</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{A4D3AD34-E49C-4142-8620-2AFF44ED6719}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>ANX.BaseDirectX</RootNamespace>
|
||||
<AssemblyName>ANX.BaseDirectX</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="SharpDX, Version=2.2.0.0, Culture=neutral, PublicKeyToken=6f19e8495e7498cf, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\lib\SharpDX\Bin\Standard-net20\SharpDX.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="SharpDX.DXGI, Version=2.2.0.0, Culture=neutral, PublicKeyToken=6f19e8495e7498cf, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\lib\SharpDX\Bin\Standard-net20\SharpDX.DXGI.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="BaseFormatConverter.cs" />
|
||||
<Compile Include="BaseStateObject.cs" />
|
||||
<Compile Include="BaseTexture2D.cs" />
|
||||
<Compile Include="BaseVertexBuffer.cs" />
|
||||
<Compile Include="BaseIndexBuffer.cs" />
|
||||
<Compile Include="BaseEffectTechnique.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="WindowHelper.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\ANX.Framework\ANX.Framework.csproj">
|
||||
<Project>{6899F0C9-70B9-4EB0-9DD3-E598D4BE3E35}</Project>
|
||||
<Name>ANX.Framework</Name>
|
||||
</ProjectReference>
|
||||
</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>
|
72
RenderSystems/ANX.BaseDirectX/ANX.BaseDirectX_Linux.csproj
Normal file
72
RenderSystems/ANX.BaseDirectX/ANX.BaseDirectX_Linux.csproj
Normal file
@ -0,0 +1,72 @@
|
||||
<?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)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>8.0.30703</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{A4D3AD34-E49C-4142-8620-2AFF44ED6719}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>ANX.BaseDirectX</RootNamespace>
|
||||
<AssemblyName>ANX.BaseDirectX</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>TRACE;DEBUG;LINUX;</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE;LINUX;</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="SharpDX, Version=2.2.0.0, Culture=neutral, PublicKeyToken=6f19e8495e7498cf, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\lib\SharpDX\Bin\Standard-net20\SharpDX.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="SharpDX.DXGI, Version=2.2.0.0, Culture=neutral, PublicKeyToken=6f19e8495e7498cf, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\lib\SharpDX\Bin\Standard-net20\SharpDX.DXGI.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="BaseFormatConverter.cs" />
|
||||
<Compile Include="BaseStateObject.cs" />
|
||||
<Compile Include="BaseTexture2D.cs" />
|
||||
<Compile Include="BaseVertexBuffer.cs" />
|
||||
<Compile Include="BaseIndexBuffer.cs" />
|
||||
<Compile Include="BaseEffectTechnique.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="WindowHelper.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\ANX.Framework\ANX.Framework_Linux.csproj">
|
||||
<Project>{6899F0C9-70B9-4EB0-9DD3-E598D4BE3E35}</Project>
|
||||
<Name>ANX.Framework</Name>
|
||||
</ProjectReference>
|
||||
</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>
|
73
RenderSystems/ANX.BaseDirectX/ANX.BaseDirectX_PSVita.csproj
Normal file
73
RenderSystems/ANX.BaseDirectX/ANX.BaseDirectX_PSVita.csproj
Normal file
@ -0,0 +1,73 @@
|
||||
<?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)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>10.0.0</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{A4D3AD34-E49C-4142-8620-2AFF44ED6719}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>ANX.BaseDirectX</RootNamespace>
|
||||
<AssemblyName>ANX.BaseDirectX</AssemblyName>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<ProjectTypeGuids>{69878862-DA7D-4DC6-B0A1-50D8FAB4242F};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>TRACE;DEBUG;PSVITA;</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE;PSVITA;</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="SharpDX, Version=2.2.0.0, Culture=neutral, PublicKeyToken=6f19e8495e7498cf, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\lib\SharpDX\Bin\Standard-net20\SharpDX.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="SharpDX.DXGI, Version=2.2.0.0, Culture=neutral, PublicKeyToken=6f19e8495e7498cf, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\lib\SharpDX\Bin\Standard-net20\SharpDX.DXGI.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="BaseFormatConverter.cs" />
|
||||
<Compile Include="BaseStateObject.cs" />
|
||||
<Compile Include="BaseTexture2D.cs" />
|
||||
<Compile Include="BaseVertexBuffer.cs" />
|
||||
<Compile Include="BaseIndexBuffer.cs" />
|
||||
<Compile Include="BaseEffectTechnique.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="WindowHelper.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\ANX.Framework\ANX.Framework_PSVita.csproj">
|
||||
<Project>{6899F0C9-70B9-4EB0-9DD3-E598D4BE3E35}</Project>
|
||||
<Name>ANX.Framework</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildExtensionsPath)\Sce\Sce.Psm.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>
|
@ -0,0 +1,78 @@
|
||||
<?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)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>8.0.30703</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{A4D3AD34-E49C-4142-8620-2AFF44ED6719}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>ANX.BaseDirectX</RootNamespace>
|
||||
<AssemblyName>ANX.BaseDirectX</AssemblyName>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<ProjectTypeGuids>{BC8A1FFA-BEE3-4634-8014-F334798102B3};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
<DefaultLanguage>en-US</DefaultLanguage>
|
||||
<PackageCertificateKeyFile>Test_TemporaryKey.pfx</PackageCertificateKeyFile>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>TRACE;DEBUG;WINDOWSMETRO;</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE;WINDOWSMETRO;</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="SharpDX, Version=2.2.0.0, Culture=neutral, PublicKeyToken=6f19e8495e7498cf, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\lib\SharpDX\Bin\Standard-net20\SharpDX.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="SharpDX.DXGI, Version=2.2.0.0, Culture=neutral, PublicKeyToken=6f19e8495e7498cf, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\lib\SharpDX\Bin\Standard-net20\SharpDX.DXGI.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="BaseFormatConverter.cs" />
|
||||
<Compile Include="BaseStateObject.cs" />
|
||||
<Compile Include="BaseTexture2D.cs" />
|
||||
<Compile Include="BaseVertexBuffer.cs" />
|
||||
<Compile Include="BaseIndexBuffer.cs" />
|
||||
<Compile Include="BaseEffectTechnique.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="WindowHelper.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\ANX.Framework\ANX.Framework_WindowsMetro.csproj">
|
||||
<Project>{6899F0C9-70B9-4EB0-9DD3-E598D4BE3E35}</Project>
|
||||
<Name>ANX.Framework</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.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>
|
||||
-->
|
||||
<PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' < '11.0' ">
|
||||
<VisualStudioVersion>11.0</VisualStudioVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
</Project>
|
25
RenderSystems/ANX.BaseDirectX/BaseEffectTechnique.cs
Normal file
25
RenderSystems/ANX.BaseDirectX/BaseEffectTechnique.cs
Normal file
@ -0,0 +1,25 @@
|
||||
using System;
|
||||
using ANX.Framework.Graphics;
|
||||
|
||||
// This file is part of the ANX.Framework created by the
|
||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||
// For details see: http://anxframework.codeplex.com/license
|
||||
|
||||
namespace ANX.BaseDirectX
|
||||
{
|
||||
public abstract class BaseEffectTechnique<T> where T : class, IDisposable
|
||||
{
|
||||
protected Effect parentEffect;
|
||||
|
||||
public T NativeTechnique { get; protected set; }
|
||||
|
||||
public BaseEffectTechnique(Effect parentEffect, T nativeTechnique)
|
||||
{
|
||||
if (parentEffect == null)
|
||||
throw new ArgumentNullException("parentEffect");
|
||||
|
||||
this.parentEffect = parentEffect;
|
||||
NativeTechnique = nativeTechnique;
|
||||
}
|
||||
}
|
||||
}
|
158
RenderSystems/ANX.BaseDirectX/BaseFormatConverter.cs
Normal file
158
RenderSystems/ANX.BaseDirectX/BaseFormatConverter.cs
Normal file
@ -0,0 +1,158 @@
|
||||
using System;
|
||||
using ANX.Framework.Graphics;
|
||||
using SharpDX.Direct3D;
|
||||
using SharpDX.DXGI;
|
||||
|
||||
// This file is part of the ANX.Framework created by the
|
||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||
// For details see: http://anxframework.codeplex.com/license
|
||||
|
||||
namespace ANX.BaseDirectX
|
||||
{
|
||||
public static class BaseFormatConverter
|
||||
{
|
||||
#region FormatSize (SurfaceFormat)
|
||||
public static int FormatSize(SurfaceFormat format)
|
||||
{
|
||||
switch (format)
|
||||
{
|
||||
case SurfaceFormat.Vector4:
|
||||
return 16;
|
||||
//case SurfaceFormat.Vector3:
|
||||
// return 12;
|
||||
case SurfaceFormat.Vector2:
|
||||
return 8;
|
||||
case SurfaceFormat.Single:
|
||||
case SurfaceFormat.Color:
|
||||
//case SurfaceFormat.RGBA1010102:
|
||||
//case SurfaceFormat.RG32:
|
||||
return 4;
|
||||
//case SurfaceFormat.BGR565:
|
||||
//case SurfaceFormat.BGRA5551:
|
||||
// return 2;
|
||||
case SurfaceFormat.Dxt1:
|
||||
case SurfaceFormat.Dxt3:
|
||||
case SurfaceFormat.Dxt5:
|
||||
case SurfaceFormat.Alpha8:
|
||||
return 1;
|
||||
}
|
||||
|
||||
throw new ArgumentException("Invalid format '" + format + "'.");
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Translate (SurfaceFormat)
|
||||
public static SharpDX.DXGI.Format Translate(SurfaceFormat surfaceFormat)
|
||||
{
|
||||
switch (surfaceFormat)
|
||||
{
|
||||
case SurfaceFormat.Color:
|
||||
return SharpDX.DXGI.Format.R8G8B8A8_UNorm;
|
||||
case SurfaceFormat.Dxt3:
|
||||
return SharpDX.DXGI.Format.BC2_UNorm;
|
||||
case SurfaceFormat.Dxt5:
|
||||
return SharpDX.DXGI.Format.BC3_UNorm;
|
||||
}
|
||||
|
||||
throw new Exception("can't translate SurfaceFormat: " + surfaceFormat.ToString());
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Translate (DepthFormat)
|
||||
public static Format Translate(DepthFormat depthFormat)
|
||||
{
|
||||
switch (depthFormat)
|
||||
{
|
||||
case DepthFormat.Depth16:
|
||||
return Format.D16_UNorm;
|
||||
case DepthFormat.Depth24:
|
||||
//TODO: no DirectX10 24Bit depth format???
|
||||
case DepthFormat.Depth24Stencil8:
|
||||
return Format.D24_UNorm_S8_UInt;
|
||||
case DepthFormat.None:
|
||||
return Format.Unknown;
|
||||
}
|
||||
|
||||
throw new Exception("can't translate DepthFormat: " + depthFormat.ToString());
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Translate (Format)
|
||||
public static SurfaceFormat Translate(SharpDX.DXGI.Format format)
|
||||
{
|
||||
switch (format)
|
||||
{
|
||||
case SharpDX.DXGI.Format.R8G8B8A8_UNorm:
|
||||
return SurfaceFormat.Color;
|
||||
case SharpDX.DXGI.Format.BC2_UNorm:
|
||||
return SurfaceFormat.Dxt3;
|
||||
case SharpDX.DXGI.Format.BC3_UNorm:
|
||||
return SurfaceFormat.Dxt5;
|
||||
}
|
||||
|
||||
throw new Exception("can't translate Format: " + format.ToString());
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Translate (PrimitiveType)
|
||||
public static 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;
|
||||
}
|
||||
|
||||
throw new InvalidOperationException("unknown PrimitiveType: " + primitiveType);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Translate (IndexElementSize)
|
||||
public static SharpDX.DXGI.Format Translate(IndexElementSize indexElementSize)
|
||||
{
|
||||
switch (indexElementSize)
|
||||
{
|
||||
case IndexElementSize.SixteenBits:
|
||||
return Format.R16_UInt;
|
||||
case IndexElementSize.ThirtyTwoBits:
|
||||
return Format.R32_UInt;
|
||||
}
|
||||
|
||||
throw new InvalidOperationException("unknown IndexElementSize: " + indexElementSize);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Translate (VertexElement)
|
||||
public static string Translate(ref VertexElement element)
|
||||
{
|
||||
//TODO: map the other Usages
|
||||
if (element.VertexElementUsage == VertexElementUsage.TextureCoordinate)
|
||||
return "TEXCOORD";
|
||||
else
|
||||
return element.VertexElementUsage.ToString().ToUpperInvariant();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region CalculateVertexCount
|
||||
public static 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;
|
||||
|
||||
throw new NotImplementedException("Couldn't calculate vertex count for PrimitiveType '" + type + "'.");
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
94
RenderSystems/ANX.BaseDirectX/BaseIndexBuffer.cs
Normal file
94
RenderSystems/ANX.BaseDirectX/BaseIndexBuffer.cs
Normal file
@ -0,0 +1,94 @@
|
||||
using System;
|
||||
using ANX.Framework.Graphics;
|
||||
using SharpDX;
|
||||
using System.IO;
|
||||
|
||||
// This file is part of the ANX.Framework created by the
|
||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||
// For details see: http://anxframework.codeplex.com/license
|
||||
|
||||
namespace ANX.BaseDirectX
|
||||
{
|
||||
public abstract class BaseIndexBuffer<T> : IDisposable where T : class, IDisposable
|
||||
{
|
||||
protected IndexElementSize elementSize;
|
||||
public T NativeBuffer { get; protected set; }
|
||||
|
||||
#region SetData
|
||||
public void SetData<S>(GraphicsDevice graphicsDevice, S[] data) where S : struct
|
||||
{
|
||||
SetData<S>(graphicsDevice, data, 0, data.Length);
|
||||
}
|
||||
|
||||
public void SetData<S>(GraphicsDevice graphicsDevice, S[] data, int startIndex, int elementCount) where S : struct
|
||||
{
|
||||
SetData<S>(graphicsDevice, 0, data, startIndex, elementCount);
|
||||
}
|
||||
|
||||
public void SetData<S>(GraphicsDevice graphicsDevice, int offsetInBytes, S[] data, int startIndex, int elementCount)
|
||||
where S : struct
|
||||
{
|
||||
//TODO: check offsetInBytes parameter for bounds etc.
|
||||
|
||||
using (var stream = MapBufferWrite())
|
||||
{
|
||||
if (offsetInBytes > 0)
|
||||
stream.Seek(offsetInBytes, SeekOrigin.Current);
|
||||
|
||||
if (startIndex > 0 || elementCount < data.Length)
|
||||
for (int i = startIndex; i < startIndex + elementCount; i++)
|
||||
stream.Write<S>(data[i]);
|
||||
else
|
||||
for (int i = 0; i < data.Length; i++)
|
||||
stream.Write<S>(data[i]);
|
||||
|
||||
UnmapBuffer();
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region GetData
|
||||
public void GetData<S>(S[] data) where S : struct
|
||||
{
|
||||
GetData(0, data, 0, data.Length);
|
||||
}
|
||||
|
||||
public void GetData<S>(S[] data, int startIndex, int elementCount) where S : struct
|
||||
{
|
||||
GetData(0, data, 0, data.Length);
|
||||
}
|
||||
|
||||
public void GetData<S>(int offsetInBytes, S[] data, int startIndex, int elementCount) where S : struct
|
||||
{
|
||||
using (var stream = MapBufferRead())
|
||||
{
|
||||
if (offsetInBytes > 0)
|
||||
stream.Seek(offsetInBytes, SeekOrigin.Current);
|
||||
|
||||
stream.ReadRange(data, startIndex, elementCount);
|
||||
UnmapBuffer();
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
protected int GetSizeInBytes(int indexCount)
|
||||
{
|
||||
return (elementSize == IndexElementSize.SixteenBits ? 2 : 4) * indexCount;
|
||||
}
|
||||
|
||||
protected abstract DataStream MapBufferWrite();
|
||||
protected abstract DataStream MapBufferRead();
|
||||
protected abstract void UnmapBuffer();
|
||||
|
||||
#region Dispose
|
||||
public void Dispose()
|
||||
{
|
||||
if (NativeBuffer != null)
|
||||
{
|
||||
NativeBuffer.Dispose();
|
||||
NativeBuffer = null;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
86
RenderSystems/ANX.BaseDirectX/BaseStateObject.cs
Normal file
86
RenderSystems/ANX.BaseDirectX/BaseStateObject.cs
Normal file
@ -0,0 +1,86 @@
|
||||
using System;
|
||||
using ANX.Framework.Graphics;
|
||||
|
||||
// This file is part of the ANX.Framework created by the
|
||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||
// For details see: http://anxframework.codeplex.com/license
|
||||
|
||||
namespace ANX.BaseDirectX
|
||||
{
|
||||
public abstract class BaseStateObject<T> : IDisposable where T : class, IDisposable
|
||||
{
|
||||
protected const int IntMaxOver16 = int.MaxValue / 16;
|
||||
protected const float ColorByteToFloatFactor = 1f / 255f;
|
||||
|
||||
#region Private
|
||||
protected bool isDirty;
|
||||
protected T nativeState;
|
||||
#endregion
|
||||
|
||||
#region Public
|
||||
public bool IsBound { get; protected set; }
|
||||
#endregion
|
||||
|
||||
#region Constructor
|
||||
protected BaseStateObject()
|
||||
{
|
||||
isDirty = true;
|
||||
Init();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Release
|
||||
public void Release()
|
||||
{
|
||||
IsBound = false;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region SetValueIfDifferentAndMarkDirty
|
||||
protected void SetValueIfDifferentAndMarkDirty<T>(ref T oldValue, ref T newValue)
|
||||
{
|
||||
if (oldValue.Equals(newValue) == false)
|
||||
{
|
||||
isDirty = true;
|
||||
oldValue = newValue;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Dispose
|
||||
public void Dispose()
|
||||
{
|
||||
if (nativeState != null)
|
||||
{
|
||||
nativeState.Dispose();
|
||||
nativeState = null;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Apply
|
||||
public void Apply(GraphicsDevice graphics)
|
||||
{
|
||||
UpdateNativeBlendState(graphics);
|
||||
IsBound = true;
|
||||
ApplyNativeState(graphics);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region UpdateNativeBlendState
|
||||
private void UpdateNativeBlendState(GraphicsDevice graphics)
|
||||
{
|
||||
if (isDirty || nativeState == null)
|
||||
{
|
||||
Dispose();
|
||||
nativeState = CreateNativeState(graphics);
|
||||
isDirty = false;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
protected virtual void Init() { }
|
||||
protected abstract T CreateNativeState(GraphicsDevice graphics);
|
||||
protected abstract void ApplyNativeState(GraphicsDevice graphics);
|
||||
}
|
||||
}
|
182
RenderSystems/ANX.BaseDirectX/BaseTexture2D.cs
Normal file
182
RenderSystems/ANX.BaseDirectX/BaseTexture2D.cs
Normal file
@ -0,0 +1,182 @@
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using ANX.Framework.Graphics;
|
||||
using SharpDX;
|
||||
|
||||
// This file is part of the ANX.Framework created by the
|
||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||
// For details see: http://anxframework.codeplex.com/license
|
||||
|
||||
namespace ANX.BaseDirectX
|
||||
{
|
||||
public abstract class BaseTexture2D<S> : IDisposable where S : class, IDisposable
|
||||
{
|
||||
#region Private
|
||||
protected int tempSubresource;
|
||||
protected int pitch;
|
||||
protected int formatSize;
|
||||
protected SurfaceFormat surfaceFormat;
|
||||
|
||||
protected bool IsDxtTexture
|
||||
{
|
||||
get
|
||||
{
|
||||
return surfaceFormat == SurfaceFormat.Dxt5 || surfaceFormat == SurfaceFormat.Dxt3 ||
|
||||
surfaceFormat == SurfaceFormat.Dxt1;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Public
|
||||
public abstract int Width { get; }
|
||||
public abstract int Height { get; }
|
||||
|
||||
public S NativeTexture
|
||||
{
|
||||
get;
|
||||
protected set;
|
||||
}
|
||||
|
||||
public GraphicsDevice GraphicsDevice
|
||||
{
|
||||
get;
|
||||
protected set;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Constructor
|
||||
protected BaseTexture2D(GraphicsDevice graphicsDevice)
|
||||
{
|
||||
GraphicsDevice = graphicsDevice;
|
||||
}
|
||||
|
||||
protected BaseTexture2D(GraphicsDevice graphicsDevice, SurfaceFormat setSurfaceFormat)
|
||||
{
|
||||
GraphicsDevice = graphicsDevice;
|
||||
surfaceFormat = setSurfaceFormat;
|
||||
|
||||
// description of texture formats of DX10: http://msdn.microsoft.com/en-us/library/bb694531(v=VS.85).aspx
|
||||
// more helpfull information on DX10 textures: http://msdn.microsoft.com/en-us/library/windows/desktop/bb205131(v=vs.85).aspx
|
||||
formatSize = BaseFormatConverter.FormatSize(surfaceFormat);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region SetData
|
||||
public void SetData<T>(GraphicsDevice graphicsDevice, T[] data) where T : struct
|
||||
{
|
||||
SetData<T>(graphicsDevice, 0, 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 void SetData<T>(GraphicsDevice graphicsDevice, int offsetInBytes, T[] data, int startIndex, int elementCount)
|
||||
where T : struct
|
||||
{
|
||||
//TODO: handle offsetInBytes parameter
|
||||
//TODO: handle startIndex parameter
|
||||
//TODO: handle elementCount parameter
|
||||
|
||||
if (surfaceFormat == SurfaceFormat.Color)
|
||||
{
|
||||
IntPtr dataPtr = MapWrite();
|
||||
|
||||
unsafe
|
||||
{
|
||||
GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned);
|
||||
byte* colorData = (byte*)handle.AddrOfPinnedObject();
|
||||
|
||||
byte* pTexels = (byte*)dataPtr;
|
||||
int srcIndex = 0;
|
||||
|
||||
for (int row = 0; row < Height; row++)
|
||||
{
|
||||
int rowStart = row * pitch;
|
||||
|
||||
for (int col = 0; col < Width; col++)
|
||||
{
|
||||
int colStart = col * formatSize;
|
||||
pTexels[rowStart + colStart + 0] = colorData[srcIndex++];
|
||||
pTexels[rowStart + colStart + 1] = colorData[srcIndex++];
|
||||
pTexels[rowStart + colStart + 2] = colorData[srcIndex++];
|
||||
pTexels[rowStart + colStart + 3] = colorData[srcIndex++];
|
||||
}
|
||||
}
|
||||
|
||||
handle.Free();
|
||||
}
|
||||
|
||||
Unmap();
|
||||
}
|
||||
else if (IsDxtTexture)
|
||||
{
|
||||
unsafe
|
||||
{
|
||||
GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned);
|
||||
byte* colorData = (byte*)handle.AddrOfPinnedObject();
|
||||
|
||||
int w = (Width + 3) >> 2;
|
||||
int h = (Height + 3) >> 2;
|
||||
formatSize = (surfaceFormat == SurfaceFormat.Dxt1) ? 8 : 16;
|
||||
|
||||
IntPtr dataPtr = MapWrite();
|
||||
var ds = new DataStream(dataPtr, Width * Height * 4 * 2, true, true);
|
||||
int col = 0;
|
||||
int index = 0; // startIndex
|
||||
int count = data.Length; // elementCount
|
||||
int actWidth = w * formatSize;
|
||||
|
||||
for (int i = 0; i < h; i++)
|
||||
{
|
||||
ds.Position = (i * pitch) + (col * formatSize);
|
||||
if (count <= 0)
|
||||
break;
|
||||
else if (count < actWidth)
|
||||
{
|
||||
for (int idx = index; idx < index + count; idx++)
|
||||
ds.WriteByte(colorData[idx]);
|
||||
break;
|
||||
}
|
||||
|
||||
for (int idx = index; idx < index + actWidth; idx++)
|
||||
ds.WriteByte(colorData[idx]);
|
||||
|
||||
index += actWidth;
|
||||
count -= actWidth;
|
||||
}
|
||||
|
||||
handle.Free();
|
||||
|
||||
Unmap();
|
||||
}
|
||||
}
|
||||
else
|
||||
throw new Exception(String.Format("creating textures of format {0} not yet implemented...", surfaceFormat));
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region SetData (TODO)
|
||||
public void SetData<T>(int level, Framework.Rectangle? rect, T[] data, int startIndex, int elementCount) where T : struct
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
#endregion
|
||||
|
||||
protected abstract IntPtr MapWrite();
|
||||
protected abstract IntPtr MapRead();
|
||||
protected abstract void Unmap();
|
||||
|
||||
#region Dispose
|
||||
public virtual void Dispose()
|
||||
{
|
||||
if (NativeTexture != null)
|
||||
{
|
||||
NativeTexture.Dispose();
|
||||
NativeTexture = null;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
96
RenderSystems/ANX.BaseDirectX/BaseVertexBuffer.cs
Normal file
96
RenderSystems/ANX.BaseDirectX/BaseVertexBuffer.cs
Normal file
@ -0,0 +1,96 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using ANX.Framework.Graphics;
|
||||
using SharpDX;
|
||||
|
||||
// This file is part of the ANX.Framework created by the
|
||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||
// For details see: http://anxframework.codeplex.com/license
|
||||
|
||||
namespace ANX.BaseDirectX
|
||||
{
|
||||
public abstract class BaseVertexBuffer<T> : IDisposable where T : class, IDisposable
|
||||
{
|
||||
protected int vertexStride;
|
||||
public T NativeBuffer { get; protected set; }
|
||||
|
||||
#region SetData
|
||||
public void SetData<S>(GraphicsDevice graphicsDevice, S[] data) where S : struct
|
||||
{
|
||||
SetData<S>(graphicsDevice, data, 0, data.Length);
|
||||
}
|
||||
|
||||
public void SetData<S>(GraphicsDevice graphicsDevice, S[] data, int startIndex, int elementCount) where S : struct
|
||||
{
|
||||
SetData<S>(graphicsDevice, 0, data, startIndex, elementCount);
|
||||
}
|
||||
|
||||
public void SetData<S>(GraphicsDevice graphicsDevice, int offsetInBytes, S[] data, int startIndex, int elementCount)
|
||||
where S : struct
|
||||
{
|
||||
//TODO: check offsetInBytes parameter for bounds etc.
|
||||
|
||||
using (var stream = MapBufferWrite())
|
||||
{
|
||||
if (offsetInBytes > 0)
|
||||
stream.Seek(offsetInBytes, SeekOrigin.Current);
|
||||
|
||||
if (startIndex > 0 || elementCount < data.Length)
|
||||
for (int i = startIndex; i < startIndex + elementCount; i++)
|
||||
stream.Write<S>(data[i]);
|
||||
else
|
||||
for (int i = 0; i < data.Length; i++)
|
||||
stream.Write<S>(data[i]);
|
||||
|
||||
UnmapBuffer();
|
||||
}
|
||||
}
|
||||
|
||||
public void SetData<S>(GraphicsDevice graphicsDevice, int offsetInBytes, S[] data, int startIndex, int elementCount,
|
||||
int vertexStride) where S : struct
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region GetData
|
||||
public void GetData<S>(S[] data) where S : struct
|
||||
{
|
||||
GetData(data, 0, data.Length);
|
||||
}
|
||||
|
||||
public void GetData<S>(S[] data, int startIndex, int elementCount) where S : struct
|
||||
{
|
||||
GetData(0, data, startIndex, elementCount, vertexStride);
|
||||
}
|
||||
|
||||
public void GetData<S>(int offsetInBytes, S[] data, int startIndex, int elementCount, int vertexStride)
|
||||
where S : struct
|
||||
{
|
||||
using (var stream = MapBufferRead())
|
||||
{
|
||||
if (offsetInBytes > 0)
|
||||
stream.Seek(offsetInBytes, SeekOrigin.Current);
|
||||
|
||||
stream.ReadRange(data, startIndex, elementCount);
|
||||
UnmapBuffer();
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
protected abstract DataStream MapBufferWrite();
|
||||
protected abstract DataStream MapBufferRead();
|
||||
protected abstract void UnmapBuffer();
|
||||
|
||||
#region Dispose
|
||||
public void Dispose()
|
||||
{
|
||||
if (NativeBuffer != null)
|
||||
{
|
||||
NativeBuffer.Dispose();
|
||||
NativeBuffer = null;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
36
RenderSystems/ANX.BaseDirectX/Properties/AssemblyInfo.cs
Normal file
36
RenderSystems/ANX.BaseDirectX/Properties/AssemblyInfo.cs
Normal file
@ -0,0 +1,36 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// Allgemeine Informationen über eine Assembly werden über die folgenden
|
||||
// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
|
||||
// die mit einer Assembly verknüpft sind.
|
||||
[assembly: AssemblyTitle("ANX.BaseDirectX")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("ANX.Framework Team")]
|
||||
[assembly: AssemblyProduct("ANX.BaseDirectX")]
|
||||
[assembly: AssemblyCopyright("Copyright © ANX.Framework Team 2012")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar
|
||||
// für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von
|
||||
// COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
|
||||
[assembly: Guid("380bb0b2-4535-4b10-b6a7-4c7fc453460f")]
|
||||
|
||||
// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
|
||||
//
|
||||
// Hauptversion
|
||||
// Nebenversion
|
||||
// Buildnummer
|
||||
// Revision
|
||||
//
|
||||
// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
|
||||
// übernehmen, indem Sie "*" eingeben:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
@ -2,17 +2,21 @@
|
||||
using System.Runtime.InteropServices;
|
||||
using ANX.Framework.Graphics;
|
||||
|
||||
namespace ANX.RenderSystem.Windows.DX10.Helpers
|
||||
// This file is part of the ANX.Framework created by the
|
||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||
// For details see: http://anxframework.codeplex.com/license
|
||||
|
||||
namespace ANX.BaseDirectX
|
||||
{
|
||||
internal static class WindowHelper
|
||||
public static class WindowHelper
|
||||
{
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct RECT
|
||||
{
|
||||
public int Left; // x position of upper-left corner
|
||||
public int Top; // y position of upper-left corner
|
||||
public int Right; // x position of lower-right corner
|
||||
public int Bottom; // y position of lower-right corner
|
||||
public int Left;
|
||||
public int Top;
|
||||
public int Right;
|
||||
public int Bottom;
|
||||
}
|
||||
|
||||
[DllImport("user32.dll")]
|
@ -85,7 +85,6 @@
|
||||
<Compile Include="Helpers\FormatConverter.cs" />
|
||||
<Compile Include="GraphicsDeviceWindowsDX10.cs" />
|
||||
<Compile Include="Helpers\IncludeHandler.cs" />
|
||||
<Compile Include="Helpers\WindowHelper.cs" />
|
||||
<Compile Include="IndexBuffer_DX10.cs" />
|
||||
<Compile Include="EffectPass_DX10.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
@ -102,6 +101,10 @@
|
||||
<Project>{6899F0C9-70B9-4EB0-9DD3-E598D4BE3E35}</Project>
|
||||
<Name>ANX.Framework</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\ANX.BaseDirectX\ANX.BaseDirectX.csproj">
|
||||
<Project>{A4D3AD34-E49C-4142-8620-2AFF44ED6719}</Project>
|
||||
<Name>ANX.BaseDirectX</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<PropertyGroup>
|
||||
|
@ -85,7 +85,6 @@
|
||||
<Compile Include="Helpers\FormatConverter.cs" />
|
||||
<Compile Include="GraphicsDeviceWindowsDX10.cs" />
|
||||
<Compile Include="Helpers\IncludeHandler.cs" />
|
||||
<Compile Include="Helpers\WindowHelper.cs" />
|
||||
<Compile Include="IndexBuffer_DX10.cs" />
|
||||
<Compile Include="EffectPass_DX10.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
@ -102,6 +101,10 @@
|
||||
<Project>{6899F0C9-70B9-4EB0-9DD3-E598D4BE3E35}</Project>
|
||||
<Name>ANX.Framework</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\ANX.BaseDirectX\ANX.BaseDirectX_Linux.csproj">
|
||||
<Project>{A4D3AD34-E49C-4142-8620-2AFF44ED6719}</Project>
|
||||
<Name>ANX.BaseDirectX</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<PropertyGroup>
|
||||
|
@ -86,7 +86,6 @@
|
||||
<Compile Include="Helpers\FormatConverter.cs" />
|
||||
<Compile Include="GraphicsDeviceWindowsDX10.cs" />
|
||||
<Compile Include="Helpers\IncludeHandler.cs" />
|
||||
<Compile Include="Helpers\WindowHelper.cs" />
|
||||
<Compile Include="IndexBuffer_DX10.cs" />
|
||||
<Compile Include="EffectPass_DX10.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
@ -103,6 +102,10 @@
|
||||
<Project>{6899F0C9-70B9-4EB0-9DD3-E598D4BE3E35}</Project>
|
||||
<Name>ANX.Framework</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\ANX.BaseDirectX\ANX.BaseDirectX_PSVita.csproj">
|
||||
<Project>{A4D3AD34-E49C-4142-8620-2AFF44ED6719}</Project>
|
||||
<Name>ANX.BaseDirectX</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildExtensionsPath)\Sce\Sce.Psm.CSharp.targets" />
|
||||
<PropertyGroup>
|
||||
|
@ -87,7 +87,6 @@
|
||||
<Compile Include="Helpers\FormatConverter.cs" />
|
||||
<Compile Include="GraphicsDeviceWindowsDX10.cs" />
|
||||
<Compile Include="Helpers\IncludeHandler.cs" />
|
||||
<Compile Include="Helpers\WindowHelper.cs" />
|
||||
<Compile Include="IndexBuffer_DX10.cs" />
|
||||
<Compile Include="EffectPass_DX10.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
@ -104,6 +103,10 @@
|
||||
<Project>{6899F0C9-70B9-4EB0-9DD3-E598D4BE3E35}</Project>
|
||||
<Name>ANX.Framework</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\ANX.BaseDirectX\ANX.BaseDirectX.csproj">
|
||||
<Project>{A4D3AD34-E49C-4142-8620-2AFF44ED6719}</Project>
|
||||
<Name>ANX.BaseDirectX</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets" />
|
||||
<PropertyGroup>
|
||||
|
@ -1,3 +1,5 @@
|
||||
using System;
|
||||
using ANX.BaseDirectX;
|
||||
using ANX.Framework;
|
||||
using ANX.Framework.Graphics;
|
||||
using ANX.Framework.NonXNA;
|
||||
@ -10,25 +12,13 @@ using Dx10 = SharpDX.Direct3D10;
|
||||
|
||||
namespace ANX.RenderSystem.Windows.DX10
|
||||
{
|
||||
public class BlendState_DX10 : INativeBlendState
|
||||
public class BlendState_DX10 : BaseStateObject<Dx10.BlendState>, INativeBlendState
|
||||
{
|
||||
private const float ColorByteToFloatFactor = 1f / 255f;
|
||||
|
||||
#region Private
|
||||
private Dx10.BlendStateDescription description;
|
||||
private Dx10.BlendState nativeBlendState;
|
||||
private bool isDirty;
|
||||
private SharpDX.Color4 blendFactor;
|
||||
private int multiSampleMask;
|
||||
#endregion
|
||||
|
||||
#region Public
|
||||
public bool IsBound
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
public Color BlendFactor
|
||||
{
|
||||
set
|
||||
@ -53,7 +43,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
set
|
||||
{
|
||||
Dx10.BlendOperation alphaBlendOperation = FormatConverter.Translate(value);
|
||||
UpdateValueAndMarkDirtyIfNeeded(ref description.AlphaBlendOperation, ref alphaBlendOperation);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.AlphaBlendOperation, ref alphaBlendOperation);
|
||||
}
|
||||
}
|
||||
|
||||
@ -62,7 +52,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
set
|
||||
{
|
||||
Dx10.BlendOperation blendOperation = FormatConverter.Translate(value);
|
||||
UpdateValueAndMarkDirtyIfNeeded(ref description.BlendOperation, ref blendOperation);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.BlendOperation, ref blendOperation);
|
||||
}
|
||||
}
|
||||
|
||||
@ -71,7 +61,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
set
|
||||
{
|
||||
Dx10.BlendOption destinationAlphaBlend = FormatConverter.Translate(value);
|
||||
UpdateValueAndMarkDirtyIfNeeded(ref description.DestinationAlphaBlend, ref destinationAlphaBlend);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.DestinationAlphaBlend, ref destinationAlphaBlend);
|
||||
}
|
||||
}
|
||||
|
||||
@ -80,7 +70,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
set
|
||||
{
|
||||
Dx10.BlendOption destinationBlend = FormatConverter.Translate(value);
|
||||
UpdateValueAndMarkDirtyIfNeeded(ref description.DestinationBlend, ref destinationBlend);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.DestinationBlend, ref destinationBlend);
|
||||
}
|
||||
}
|
||||
|
||||
@ -89,7 +79,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
set
|
||||
{
|
||||
Dx10.ColorWriteMaskFlags writeMask = FormatConverter.Translate(value);
|
||||
UpdateValueAndMarkDirtyIfNeeded(ref description.RenderTargetWriteMask[0], ref writeMask);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.RenderTargetWriteMask[0], ref writeMask);
|
||||
}
|
||||
}
|
||||
|
||||
@ -98,7 +88,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
set
|
||||
{
|
||||
Dx10.ColorWriteMaskFlags writeMask = FormatConverter.Translate(value);
|
||||
UpdateValueAndMarkDirtyIfNeeded(ref description.RenderTargetWriteMask[1], ref writeMask);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.RenderTargetWriteMask[1], ref writeMask);
|
||||
}
|
||||
}
|
||||
|
||||
@ -107,7 +97,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
set
|
||||
{
|
||||
Dx10.ColorWriteMaskFlags writeMask = FormatConverter.Translate(value);
|
||||
UpdateValueAndMarkDirtyIfNeeded(ref description.RenderTargetWriteMask[2], ref writeMask);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.RenderTargetWriteMask[2], ref writeMask);
|
||||
}
|
||||
}
|
||||
|
||||
@ -116,7 +106,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
set
|
||||
{
|
||||
Dx10.ColorWriteMaskFlags writeMask = FormatConverter.Translate(value);
|
||||
UpdateValueAndMarkDirtyIfNeeded(ref description.RenderTargetWriteMask[3], ref writeMask);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.RenderTargetWriteMask[3], ref writeMask);
|
||||
}
|
||||
}
|
||||
|
||||
@ -125,7 +115,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
set
|
||||
{
|
||||
Dx10.BlendOption sourceAlphaBlend = FormatConverter.Translate(value);
|
||||
UpdateValueAndMarkDirtyIfNeeded(ref description.SourceAlphaBlend, ref sourceAlphaBlend);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.SourceAlphaBlend, ref sourceAlphaBlend);
|
||||
}
|
||||
}
|
||||
|
||||
@ -134,71 +124,27 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
set
|
||||
{
|
||||
Dx10.BlendOption sourceBlend = FormatConverter.Translate(value);
|
||||
UpdateValueAndMarkDirtyIfNeeded(ref description.SourceBlend, ref sourceBlend);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.SourceBlend, ref sourceBlend);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Constructor
|
||||
public BlendState_DX10()
|
||||
protected override void Init()
|
||||
{
|
||||
isDirty = true;
|
||||
for (int i = 0; i < description.IsBlendEnabled.Length; i++)
|
||||
description.IsBlendEnabled[i] = (i < 4);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Apply
|
||||
public void Apply(GraphicsDevice graphics)
|
||||
{
|
||||
Dx10.Device device = (graphics.NativeDevice as GraphicsDeviceWindowsDX10).NativeDevice;
|
||||
|
||||
UpdateNativeBlendState(device);
|
||||
IsBound = true;
|
||||
|
||||
device.OutputMerger.SetBlendState(nativeBlendState, blendFactor, multiSampleMask);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Release
|
||||
public void Release()
|
||||
{
|
||||
IsBound = false;
|
||||
for (int i = 0; i < description.IsBlendEnabled.Length; i++)
|
||||
description.IsBlendEnabled[i] = (i < 4);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Dispose
|
||||
public void Dispose()
|
||||
{
|
||||
if (nativeBlendState != null)
|
||||
{
|
||||
nativeBlendState.Dispose();
|
||||
nativeBlendState = null;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region UpdateNativeBlendState
|
||||
private void UpdateNativeBlendState(Dx10.Device device)
|
||||
{
|
||||
if (isDirty || nativeBlendState == null)
|
||||
{
|
||||
Dispose();
|
||||
nativeBlendState = new Dx10.BlendState(device, ref description);
|
||||
isDirty = false;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region UpdateValueAndMarkDirtyIfNeeded
|
||||
private void UpdateValueAndMarkDirtyIfNeeded<T>(ref T currentValue, ref T value)
|
||||
protected override Dx10.BlendState CreateNativeState(GraphicsDevice graphics)
|
||||
{
|
||||
if (value.Equals(currentValue) == false)
|
||||
{
|
||||
isDirty = true;
|
||||
currentValue = value;
|
||||
}
|
||||
Dx10.Device device = (graphics.NativeDevice as GraphicsDeviceWindowsDX10).NativeDevice;
|
||||
return new Dx10.BlendState(device, ref description);
|
||||
}
|
||||
|
||||
protected override void ApplyNativeState(GraphicsDevice graphics)
|
||||
{
|
||||
Dx10.Device device = (graphics.NativeDevice as GraphicsDeviceWindowsDX10).NativeDevice;
|
||||
device.OutputMerger.SetBlendState(nativeState, blendFactor, multiSampleMask);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
@ -8,6 +8,7 @@ using ANX.Framework.NonXNA;
|
||||
using ANX.Framework.NonXNA.RenderSystem;
|
||||
using ANX.RenderSystem.Windows.DX10.Helpers;
|
||||
using SharpDX.DXGI;
|
||||
using ANX.BaseDirectX;
|
||||
|
||||
// This file is part of the ANX.Framework created by the
|
||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||
@ -197,7 +198,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
{
|
||||
DisplayMode displayMode = new DisplayMode()
|
||||
{
|
||||
Format = FormatConverter.Translate(modeDescription.Format),
|
||||
Format = BaseFormatConverter.Translate(modeDescription.Format),
|
||||
Width = modeDescription.Width,
|
||||
Height = modeDescription.Height,
|
||||
AspectRatio = (float)modeDescription.Width / (float)modeDescription.Height,
|
||||
|
@ -1,3 +1,5 @@
|
||||
using System;
|
||||
using ANX.BaseDirectX;
|
||||
using ANX.Framework.Graphics;
|
||||
using ANX.Framework.NonXNA;
|
||||
using ANX.RenderSystem.Windows.DX10.Helpers;
|
||||
@ -9,28 +11,18 @@ using Dx10 = SharpDX.Direct3D10;
|
||||
|
||||
namespace ANX.RenderSystem.Windows.DX10
|
||||
{
|
||||
public class DepthStencilState_DX10 : INativeDepthStencilState
|
||||
public class DepthStencilState_DX10 : BaseStateObject<Dx10.DepthStencilState>, INativeDepthStencilState
|
||||
{
|
||||
#region Private
|
||||
private Dx10.DepthStencilStateDescription description;
|
||||
private Dx10.DepthStencilState nativeDepthStencilState;
|
||||
private bool isDirty;
|
||||
private int referenceStencil;
|
||||
#endregion
|
||||
|
||||
#region Public (TODO)
|
||||
public bool IsBound
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
public StencilOperation CounterClockwiseStencilDepthBufferFail
|
||||
{
|
||||
set
|
||||
{
|
||||
Dx10.StencilOperation operation = FormatConverter.Translate(value);
|
||||
UpdateValueAndMarkDirtyIfNeeded(ref description.BackFace.DepthFailOperation, ref operation);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.BackFace.DepthFailOperation, ref operation);
|
||||
}
|
||||
}
|
||||
|
||||
@ -39,7 +31,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
set
|
||||
{
|
||||
Dx10.StencilOperation operation = FormatConverter.Translate(value);
|
||||
UpdateValueAndMarkDirtyIfNeeded(ref description.BackFace.FailOperation, ref operation);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.BackFace.FailOperation, ref operation);
|
||||
}
|
||||
}
|
||||
|
||||
@ -48,7 +40,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
set
|
||||
{
|
||||
Dx10.Comparison comparison = FormatConverter.Translate(value);
|
||||
UpdateValueAndMarkDirtyIfNeeded(ref description.BackFace.Comparison, ref comparison);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.BackFace.Comparison, ref comparison);
|
||||
}
|
||||
}
|
||||
|
||||
@ -57,7 +49,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
set
|
||||
{
|
||||
Dx10.StencilOperation operation = FormatConverter.Translate(value);
|
||||
UpdateValueAndMarkDirtyIfNeeded(ref description.BackFace.PassOperation, ref operation);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.BackFace.PassOperation, ref operation);
|
||||
}
|
||||
}
|
||||
|
||||
@ -78,7 +70,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
set
|
||||
{
|
||||
Dx10.Comparison comparison = FormatConverter.Translate(value);
|
||||
UpdateValueAndMarkDirtyIfNeeded(ref description.DepthComparison, ref comparison);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.DepthComparison, ref comparison);
|
||||
}
|
||||
}
|
||||
|
||||
@ -87,7 +79,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
set
|
||||
{
|
||||
Dx10.DepthWriteMask writeMask = value ? Dx10.DepthWriteMask.All : Dx10.DepthWriteMask.Zero;
|
||||
UpdateValueAndMarkDirtyIfNeeded(ref description.DepthWriteMask, ref writeMask);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.DepthWriteMask, ref writeMask);
|
||||
}
|
||||
}
|
||||
|
||||
@ -95,7 +87,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
{
|
||||
set
|
||||
{
|
||||
UpdateValueAndMarkDirtyIfNeeded(ref referenceStencil, ref value);
|
||||
SetValueIfDifferentAndMarkDirty(ref referenceStencil, ref value);
|
||||
}
|
||||
}
|
||||
|
||||
@ -104,7 +96,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
set
|
||||
{
|
||||
Dx10.StencilOperation operation = FormatConverter.Translate(value);
|
||||
UpdateValueAndMarkDirtyIfNeeded(ref description.FrontFace.DepthFailOperation, ref operation);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.FrontFace.DepthFailOperation, ref operation);
|
||||
}
|
||||
}
|
||||
|
||||
@ -125,7 +117,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
set
|
||||
{
|
||||
Dx10.StencilOperation operation = FormatConverter.Translate(value);
|
||||
UpdateValueAndMarkDirtyIfNeeded(ref description.FrontFace.FailOperation, ref operation);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.FrontFace.FailOperation, ref operation);
|
||||
}
|
||||
}
|
||||
|
||||
@ -134,7 +126,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
set
|
||||
{
|
||||
Dx10.Comparison comparison = FormatConverter.Translate(value);
|
||||
UpdateValueAndMarkDirtyIfNeeded(ref description.FrontFace.Comparison, ref comparison);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.FrontFace.Comparison, ref comparison);
|
||||
}
|
||||
}
|
||||
|
||||
@ -143,7 +135,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
set
|
||||
{
|
||||
byte stencilMask = (byte)value; //TODO: check range
|
||||
UpdateValueAndMarkDirtyIfNeeded(ref description.StencilReadMask, ref stencilMask);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.StencilReadMask, ref stencilMask);
|
||||
}
|
||||
}
|
||||
|
||||
@ -152,7 +144,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
set
|
||||
{
|
||||
Dx10.StencilOperation operation = FormatConverter.Translate(value);
|
||||
UpdateValueAndMarkDirtyIfNeeded(ref description.FrontFace.PassOperation, ref operation);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.FrontFace.PassOperation, ref operation);
|
||||
}
|
||||
}
|
||||
|
||||
@ -161,7 +153,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
set
|
||||
{
|
||||
byte stencilWriteMask = (byte)value; //TODO: check range
|
||||
UpdateValueAndMarkDirtyIfNeeded(ref description.StencilWriteMask, ref stencilWriteMask);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.StencilWriteMask, ref stencilWriteMask);
|
||||
}
|
||||
}
|
||||
|
||||
@ -174,63 +166,16 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Constructor
|
||||
public DepthStencilState_DX10()
|
||||
{
|
||||
isDirty = true;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Apply
|
||||
public void Apply(GraphicsDevice graphicsDevice)
|
||||
{
|
||||
Dx10.Device device = (graphicsDevice.NativeDevice as GraphicsDeviceWindowsDX10).NativeDevice;
|
||||
UpdateNativeDepthStencilState(device);
|
||||
IsBound = true;
|
||||
|
||||
device.OutputMerger.SetDepthStencilState(nativeDepthStencilState, referenceStencil);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Release
|
||||
public void Release()
|
||||
{
|
||||
IsBound = false;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Dispose
|
||||
public void Dispose()
|
||||
{
|
||||
if (nativeDepthStencilState != null)
|
||||
{
|
||||
nativeDepthStencilState.Dispose();
|
||||
nativeDepthStencilState = null;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region UpdateNativeDepthStencilState
|
||||
private void UpdateNativeDepthStencilState(Dx10.Device device)
|
||||
{
|
||||
if (isDirty == true || nativeDepthStencilState == null)
|
||||
{
|
||||
Dispose();
|
||||
nativeDepthStencilState = new Dx10.DepthStencilState(device, ref description);
|
||||
isDirty = false;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region UpdateValueAndMarkDirtyIfNeeded
|
||||
private void UpdateValueAndMarkDirtyIfNeeded<T>(ref T currentValue, ref T value)
|
||||
protected override Dx10.DepthStencilState CreateNativeState(GraphicsDevice graphics)
|
||||
{
|
||||
if (value.Equals(currentValue) == false)
|
||||
{
|
||||
isDirty = true;
|
||||
currentValue = value;
|
||||
}
|
||||
Dx10.Device device = (graphics.NativeDevice as GraphicsDeviceWindowsDX10).NativeDevice;
|
||||
return new Dx10.DepthStencilState(device, ref description);
|
||||
}
|
||||
|
||||
protected override void ApplyNativeState(GraphicsDevice graphics)
|
||||
{
|
||||
Dx10.Device device = (graphics.NativeDevice as GraphicsDeviceWindowsDX10).NativeDevice;
|
||||
device.OutputMerger.SetDepthStencilState(nativeState, referenceStencil);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
@ -149,9 +149,6 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
throw new ArgumentNullException("value");
|
||||
|
||||
var tex = value.NativeTexture as Texture2D_DX10;
|
||||
var graphicsDX10 = tex.GraphicsDevice.NativeDevice as GraphicsDeviceWindowsDX10;
|
||||
Dx10.Device device = graphicsDX10.NativeDevice;
|
||||
|
||||
NativeParameter.AsShaderResource().SetResource(tex.NativeShaderResourceView);
|
||||
}
|
||||
#endregion
|
||||
|
@ -8,20 +8,20 @@ using SharpDX.Direct3D10;
|
||||
namespace ANX.RenderSystem.Windows.DX10
|
||||
{
|
||||
public class EffectPass_DX10 : INativeEffectPass
|
||||
{
|
||||
public EffectPass NativePass { get; internal set; }
|
||||
{
|
||||
private EffectPass nativePass;
|
||||
|
||||
public string Name
|
||||
{
|
||||
get
|
||||
{
|
||||
return NativePass.Description.Name;
|
||||
return nativePass.Description.Name;
|
||||
}
|
||||
}
|
||||
|
||||
internal EffectPass_DX10(EffectPass setNativePass)
|
||||
{
|
||||
NativePass = setNativePass;
|
||||
nativePass = setNativePass;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using ANX.BaseDirectX;
|
||||
using ANX.Framework.Graphics;
|
||||
using ANX.Framework.NonXNA;
|
||||
using Dx10 = SharpDX.Direct3D10;
|
||||
@ -10,12 +10,8 @@ using Dx10 = SharpDX.Direct3D10;
|
||||
|
||||
namespace ANX.RenderSystem.Windows.DX10
|
||||
{
|
||||
public class EffectTechnique_DX10 : INativeEffectTechnique
|
||||
public class EffectTechnique_DX10 : BaseEffectTechnique<Dx10.EffectTechnique>, INativeEffectTechnique
|
||||
{
|
||||
private Effect parentEffect;
|
||||
|
||||
public Dx10.EffectTechnique NativeTechnique { get; internal set; }
|
||||
|
||||
public string Name
|
||||
{
|
||||
get
|
||||
@ -30,20 +26,16 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
{
|
||||
for (int i = 0; i < NativeTechnique.Description.PassCount; i++)
|
||||
{
|
||||
EffectPass_DX10 passDx10 = new EffectPass_DX10(NativeTechnique.GetPassByIndex(i));
|
||||
EffectPass pass = new EffectPass(this.parentEffect);
|
||||
var passDx10 = new EffectPass_DX10(NativeTechnique.GetPassByIndex(i));
|
||||
// TODO: wire up native pass and managed pass?
|
||||
yield return pass;
|
||||
yield return new EffectPass(this.parentEffect);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal EffectTechnique_DX10(Effect parentEffect)
|
||||
public EffectTechnique_DX10(Effect parentEffect, Dx10.EffectTechnique nativeTechnique)
|
||||
: base(parentEffect, nativeTechnique)
|
||||
{
|
||||
if (parentEffect == null)
|
||||
throw new ArgumentNullException("parentEffect");
|
||||
|
||||
this.parentEffect = parentEffect;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -34,8 +34,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
{
|
||||
for (int i = 0; i < NativeEffect.Description.TechniqueCount; i++)
|
||||
{
|
||||
EffectTechnique_DX10 teqDx10 = new EffectTechnique_DX10(this.managedEffect);
|
||||
teqDx10.NativeTechnique = NativeEffect.GetTechniqueByIndex(i);
|
||||
var teqDx10 = new EffectTechnique_DX10(managedEffect, NativeEffect.GetTechniqueByIndex(i));
|
||||
yield return new EffectTechnique(this.managedEffect, teqDx10);
|
||||
}
|
||||
}
|
||||
|
@ -6,6 +6,7 @@ using ANX.RenderSystem.Windows.DX10.Helpers;
|
||||
using SharpDX.D3DCompiler;
|
||||
using SharpDX.DXGI;
|
||||
using Dx10 = SharpDX.Direct3D10;
|
||||
using ANX.BaseDirectX;
|
||||
|
||||
// This file is part of the ANX.Framework created by the
|
||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||
@ -58,7 +59,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
BufferCount = 1,
|
||||
ModeDescription = new ModeDescription(presentationParameters.BackBufferWidth,
|
||||
presentationParameters.BackBufferHeight, new Rational(60, 1),
|
||||
FormatConverter.Translate(presentationParameters.BackBufferFormat)),
|
||||
BaseFormatConverter.Translate(presentationParameters.BackBufferFormat)),
|
||||
IsWindowed = true,
|
||||
OutputHandle = presentationParameters.DeviceWindowHandle,
|
||||
SampleDescription = new SampleDescription(1, 0),
|
||||
@ -91,7 +92,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
//
|
||||
// create the depth stencil buffer
|
||||
//
|
||||
Format depthFormat = FormatConverter.Translate(presentationParameters.DepthStencilFormat);
|
||||
Format depthFormat = BaseFormatConverter.Translate(presentationParameters.DepthStencilFormat);
|
||||
if (depthFormat != Format.Unknown)
|
||||
CreateDepthStencilBuffer(depthFormat);
|
||||
}
|
||||
@ -248,9 +249,9 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
int startIndex, int primitiveCount)
|
||||
{
|
||||
Dx10.EffectTechnique technique = SetupEffectForDraw();
|
||||
int vertexCount = FormatConverter.CalculateVertexCount(primitiveType, primitiveCount);
|
||||
int vertexCount = BaseFormatConverter.CalculateVertexCount(primitiveType, primitiveCount);
|
||||
|
||||
device.InputAssembler.PrimitiveTopology = FormatConverter.Translate(primitiveType);
|
||||
device.InputAssembler.PrimitiveTopology = BaseFormatConverter.Translate(primitiveType);
|
||||
device.Rasterizer.SetViewports(currentViewport);
|
||||
device.OutputMerger.SetTargets(this.depthStencilView, this.renderView);
|
||||
|
||||
@ -267,7 +268,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
{
|
||||
Dx10.EffectTechnique technique = SetupEffectForDraw();
|
||||
|
||||
device.InputAssembler.PrimitiveTopology = FormatConverter.Translate(primitiveType);
|
||||
device.InputAssembler.PrimitiveTopology = BaseFormatConverter.Translate(primitiveType);
|
||||
device.Rasterizer.SetViewports(currentViewport);
|
||||
device.OutputMerger.SetTargets(this.depthStencilView, this.renderView);
|
||||
|
||||
@ -334,7 +335,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
|
||||
device.InputAssembler.InputLayout = layout;
|
||||
// Prepare All the stages
|
||||
device.InputAssembler.PrimitiveTopology = FormatConverter.Translate(primitiveType);
|
||||
device.InputAssembler.PrimitiveTopology = BaseFormatConverter.Translate(primitiveType);
|
||||
device.Rasterizer.SetViewports(currentViewport);
|
||||
|
||||
//device.OutputMerger.SetTargets(this.depthStencilView, this.renderView);
|
||||
@ -388,7 +389,8 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
|
||||
if (nativeIndexBuffer != null)
|
||||
{
|
||||
device.InputAssembler.SetIndexBuffer(nativeIndexBuffer.NativeBuffer, FormatConverter.Translate(indexBuffer.IndexElementSize), 0);
|
||||
device.InputAssembler.SetIndexBuffer(nativeIndexBuffer.NativeBuffer,
|
||||
BaseFormatConverter.Translate(indexBuffer.IndexElementSize), 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -469,7 +471,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
#region CreateInputElementFromVertexElement
|
||||
private Dx10.InputElement CreateInputElementFromVertexElement(VertexElement vertexElement)
|
||||
{
|
||||
string elementName = FormatConverter.Translate(ref vertexElement);
|
||||
string elementName = BaseFormatConverter.Translate(ref vertexElement);
|
||||
Format elementFormat = ConvertVertexElementFormat(vertexElement.VertexElementFormat);
|
||||
return new Dx10.InputElement(elementName, vertexElement.UsageIndex, elementFormat, vertexElement.Offset, 0);
|
||||
}
|
||||
@ -616,7 +618,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
presentationParameters.BackBufferHeight);
|
||||
|
||||
// create the depth stencil buffer
|
||||
Format depthFormat = FormatConverter.Translate(presentationParameters.DepthStencilFormat);
|
||||
Format depthFormat = BaseFormatConverter.Translate(presentationParameters.DepthStencilFormat);
|
||||
if (depthFormat != Format.Unknown)
|
||||
CreateDepthStencilBuffer(depthFormat);
|
||||
}
|
||||
|
@ -12,89 +12,6 @@ namespace ANX.RenderSystem.Windows.DX10.Helpers
|
||||
{
|
||||
internal class FormatConverter
|
||||
{
|
||||
#region FormatSize (SurfaceFormat)
|
||||
public static int FormatSize(SurfaceFormat format)
|
||||
{
|
||||
switch (format)
|
||||
{
|
||||
case SurfaceFormat.Vector4:
|
||||
return 16;
|
||||
//case SurfaceFormat.Vector3:
|
||||
// return 12;
|
||||
case SurfaceFormat.Vector2:
|
||||
return 8;
|
||||
case SurfaceFormat.Single:
|
||||
case SurfaceFormat.Color:
|
||||
//case SurfaceFormat.RGBA1010102:
|
||||
//case SurfaceFormat.RG32:
|
||||
return 4;
|
||||
//case SurfaceFormat.BGR565:
|
||||
//case SurfaceFormat.BGRA5551:
|
||||
// return 2;
|
||||
case SurfaceFormat.Dxt1:
|
||||
case SurfaceFormat.Dxt3:
|
||||
case SurfaceFormat.Dxt5:
|
||||
case SurfaceFormat.Alpha8:
|
||||
return 1;
|
||||
}
|
||||
|
||||
throw new ArgumentException("Invalid format '" + format + "'.");
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Translate (SurfaceFormat)
|
||||
public static SharpDX.DXGI.Format Translate(SurfaceFormat surfaceFormat)
|
||||
{
|
||||
switch (surfaceFormat)
|
||||
{
|
||||
case SurfaceFormat.Color:
|
||||
return SharpDX.DXGI.Format.R8G8B8A8_UNorm;
|
||||
case SurfaceFormat.Dxt3:
|
||||
return SharpDX.DXGI.Format.BC2_UNorm;
|
||||
case SurfaceFormat.Dxt5:
|
||||
return SharpDX.DXGI.Format.BC3_UNorm;
|
||||
}
|
||||
|
||||
throw new Exception("can't translate SurfaceFormat: " + surfaceFormat.ToString());
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Translate (DepthFormat)
|
||||
public static Format Translate(DepthFormat depthFormat)
|
||||
{
|
||||
switch (depthFormat)
|
||||
{
|
||||
case DepthFormat.Depth16:
|
||||
return Format.D16_UNorm;
|
||||
case DepthFormat.Depth24:
|
||||
//TODO: no DirectX10 24Bit depth format???
|
||||
case DepthFormat.Depth24Stencil8:
|
||||
return Format.D24_UNorm_S8_UInt;
|
||||
case DepthFormat.None:
|
||||
return Format.Unknown;
|
||||
}
|
||||
|
||||
throw new Exception("can't translate DepthFormat: " + depthFormat.ToString());
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Translate (Format)
|
||||
public static SurfaceFormat Translate(SharpDX.DXGI.Format format)
|
||||
{
|
||||
switch (format)
|
||||
{
|
||||
case SharpDX.DXGI.Format.R8G8B8A8_UNorm:
|
||||
return SurfaceFormat.Color;
|
||||
case SharpDX.DXGI.Format.BC2_UNorm:
|
||||
return SurfaceFormat.Dxt3;
|
||||
case SharpDX.DXGI.Format.BC3_UNorm:
|
||||
return SurfaceFormat.Dxt5;
|
||||
}
|
||||
|
||||
throw new Exception("can't translate Format: " + format.ToString());
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Translate (TextureFilter)
|
||||
public static Dx10.Filter Translate(TextureFilter filter)
|
||||
{
|
||||
@ -141,51 +58,6 @@ namespace ANX.RenderSystem.Windows.DX10.Helpers
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Translate (PrimitiveType)
|
||||
public static 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;
|
||||
}
|
||||
|
||||
throw new InvalidOperationException("unknown PrimitiveType: " + primitiveType);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Translate (IndexElementSize)
|
||||
public static SharpDX.DXGI.Format Translate(IndexElementSize indexElementSize)
|
||||
{
|
||||
switch (indexElementSize)
|
||||
{
|
||||
case IndexElementSize.SixteenBits:
|
||||
return Format.R16_UInt;
|
||||
case IndexElementSize.ThirtyTwoBits:
|
||||
return Format.R32_UInt;
|
||||
}
|
||||
|
||||
throw new InvalidOperationException("unknown IndexElementSize: " + indexElementSize);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Translate (VertexElement)
|
||||
public static string Translate(ref VertexElement element)
|
||||
{
|
||||
//TODO: map the other Usages
|
||||
if (element.VertexElementUsage == VertexElementUsage.TextureCoordinate)
|
||||
return "TEXCOORD";
|
||||
else
|
||||
return element.VertexElementUsage.ToString().ToUpperInvariant();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Translate (BlendFunction)
|
||||
public static Dx10.BlendOperation Translate(BlendFunction blendFunction)
|
||||
{
|
||||
@ -340,21 +212,5 @@ namespace ANX.RenderSystem.Windows.DX10.Helpers
|
||||
return fillMode == FillMode.WireFrame ? Dx10.FillMode.Wireframe : Dx10.FillMode.Solid;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region CalculateVertexCount
|
||||
public static 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;
|
||||
|
||||
throw new NotImplementedException("Couldn't calculate vertex count for PrimitiveType '" + type + "'.");
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,9 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using ANX.BaseDirectX;
|
||||
using ANX.Framework.Graphics;
|
||||
using ANX.Framework.NonXNA.RenderSystem;
|
||||
using SharpDX.Direct3D10;
|
||||
using SharpDX;
|
||||
using Dx10 = SharpDX.Direct3D10;
|
||||
|
||||
// This file is part of the ANX.Framework created by the
|
||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||
@ -10,123 +11,56 @@ using SharpDX.Direct3D10;
|
||||
|
||||
namespace ANX.RenderSystem.Windows.DX10
|
||||
{
|
||||
public class IndexBuffer_DX10 : INativeIndexBuffer, IDisposable
|
||||
public class IndexBuffer_DX10 : BaseIndexBuffer<Dx10.Buffer>, INativeIndexBuffer, IDisposable
|
||||
{
|
||||
private IndexElementSize size;
|
||||
|
||||
public SharpDX.Direct3D10.Buffer NativeBuffer { get; private set; }
|
||||
|
||||
#region Constructor
|
||||
public IndexBuffer_DX10(GraphicsDevice graphics, IndexElementSize size, int indexCount, BufferUsage usage)
|
||||
{
|
||||
this.size = size;
|
||||
|
||||
//TODO: translate and use usage
|
||||
|
||||
elementSize = size;
|
||||
GraphicsDeviceWindowsDX10 gd10 = graphics.NativeDevice as GraphicsDeviceWindowsDX10;
|
||||
Device device = gd10 != null ? gd10.NativeDevice as Device : null;
|
||||
Dx10.Device device = gd10 != null ? gd10.NativeDevice as Dx10.Device : null;
|
||||
|
||||
InitializeBuffer(device, size, indexCount, usage);
|
||||
}
|
||||
|
||||
internal IndexBuffer_DX10(Device device, IndexElementSize size, int indexCount, BufferUsage usage)
|
||||
internal IndexBuffer_DX10(Dx10.Device device, IndexElementSize size, int indexCount, BufferUsage usage)
|
||||
{
|
||||
this.size = size;
|
||||
elementSize = size;
|
||||
InitializeBuffer(device, size, indexCount, usage);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region InitializeBuffer
|
||||
private void InitializeBuffer(Device device, IndexElementSize size, int indexCount, BufferUsage usage)
|
||||
private void InitializeBuffer(Dx10.Device device, IndexElementSize size, int indexCount, BufferUsage usage)
|
||||
{
|
||||
BufferDescription description = new BufferDescription()
|
||||
//TODO: translate and use usage
|
||||
var description = new Dx10.BufferDescription()
|
||||
{
|
||||
Usage = ResourceUsage.Dynamic,
|
||||
SizeInBytes = (size == IndexElementSize.SixteenBits ? 2 : 4) * indexCount,
|
||||
BindFlags = BindFlags.IndexBuffer,
|
||||
CpuAccessFlags = CpuAccessFlags.Write,
|
||||
OptionFlags = ResourceOptionFlags.None
|
||||
Usage = Dx10.ResourceUsage.Dynamic,
|
||||
SizeInBytes = GetSizeInBytes(indexCount),
|
||||
BindFlags = Dx10.BindFlags.IndexBuffer,
|
||||
CpuAccessFlags = Dx10.CpuAccessFlags.Write,
|
||||
OptionFlags = Dx10.ResourceOptionFlags.None
|
||||
};
|
||||
|
||||
NativeBuffer = new SharpDX.Direct3D10.Buffer(device, description);
|
||||
NativeBuffer = new Dx10.Buffer(device, description);
|
||||
NativeBuffer.Unmap();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region SetData
|
||||
public void SetData<T>(GraphicsDevice graphicsDevice, T[] data) where T : struct
|
||||
protected override DataStream MapBufferWrite()
|
||||
{
|
||||
SetData<T>(graphicsDevice, data, 0, data.Length);
|
||||
return NativeBuffer.Map(Dx10.MapMode.WriteDiscard);
|
||||
}
|
||||
|
||||
public void SetData<T>(GraphicsDevice graphicsDevice, int offsetInBytes, T[] data, int startIndex, int elementCount)
|
||||
where T : struct
|
||||
protected override DataStream MapBufferRead()
|
||||
{
|
||||
//TODO: check offsetInBytes parameter for bounds etc.
|
||||
|
||||
using (var stream = NativeBuffer.Map(MapMode.WriteDiscard))
|
||||
{
|
||||
if (offsetInBytes > 0)
|
||||
stream.Seek(offsetInBytes, SeekOrigin.Current);
|
||||
|
||||
if (startIndex > 0 || elementCount < data.Length)
|
||||
for (int i = startIndex; i < startIndex + elementCount; i++)
|
||||
stream.Write<T>(data[i]);
|
||||
else
|
||||
for (int i = 0; i < data.Length; i++)
|
||||
stream.Write<T>(data[i]);
|
||||
|
||||
NativeBuffer.Unmap();
|
||||
}
|
||||
return NativeBuffer.Map(Dx10.MapMode.Read);
|
||||
}
|
||||
|
||||
public void SetData<T>(GraphicsDevice graphicsDevice, T[] data, int startIndex, int elementCount) where T : struct
|
||||
protected override void UnmapBuffer()
|
||||
{
|
||||
SetData<T>(graphicsDevice, 0, data, startIndex, elementCount);
|
||||
NativeBuffer.Unmap();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Dispose
|
||||
public void Dispose()
|
||||
{
|
||||
if (NativeBuffer != null)
|
||||
{
|
||||
NativeBuffer.Dispose();
|
||||
NativeBuffer = null;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region GetData
|
||||
public void GetData<T>(T[] data) where T : struct
|
||||
{
|
||||
using (var stream = NativeBuffer.Map(MapMode.Read))
|
||||
{
|
||||
stream.ReadRange(data, 0, data.Length);
|
||||
NativeBuffer.Unmap();
|
||||
}
|
||||
}
|
||||
|
||||
public void GetData<T>(T[] data, int startIndex, int elementCount) where T : struct
|
||||
{
|
||||
using (var stream = NativeBuffer.Map(MapMode.Read))
|
||||
{
|
||||
stream.ReadRange(data, startIndex, elementCount);
|
||||
NativeBuffer.Unmap();
|
||||
}
|
||||
}
|
||||
|
||||
public void GetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount) where T : struct
|
||||
{
|
||||
using (var stream = NativeBuffer.Map(MapMode.Read))
|
||||
{
|
||||
if (offsetInBytes > 0)
|
||||
stream.Seek(offsetInBytes, SeekOrigin.Current);
|
||||
|
||||
stream.ReadRange(data, startIndex, elementCount);
|
||||
NativeBuffer.Unmap();
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
@ -1,3 +1,5 @@
|
||||
using System;
|
||||
using ANX.BaseDirectX;
|
||||
using ANX.Framework.Graphics;
|
||||
using ANX.Framework.NonXNA;
|
||||
using ANX.RenderSystem.Windows.DX10.Helpers;
|
||||
@ -9,25 +11,17 @@ using Dx10 = SharpDX.Direct3D10;
|
||||
|
||||
namespace ANX.RenderSystem.Windows.DX10
|
||||
{
|
||||
public class RasterizerState_DX10 : INativeRasterizerState
|
||||
public class RasterizerState_DX10 : BaseStateObject<Dx10.RasterizerState>, INativeRasterizerState
|
||||
{
|
||||
private const int intMaxOver16 = int.MaxValue / 16;
|
||||
|
||||
#region Private
|
||||
private Dx10.RasterizerStateDescription description;
|
||||
private Dx10.RasterizerState nativeRasterizerState;
|
||||
private bool isDirty;
|
||||
#endregion
|
||||
|
||||
#region Public
|
||||
public bool IsBound { get; private set; }
|
||||
|
||||
public CullMode CullMode
|
||||
{
|
||||
set
|
||||
{
|
||||
Dx10.CullMode cullMode = FormatConverter.Translate(value);
|
||||
UpdateValueAndMarkDirtyIfNeeded(ref description.CullMode, ref cullMode);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.CullMode, ref cullMode);
|
||||
}
|
||||
}
|
||||
|
||||
@ -38,8 +32,8 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
// XNA uses a float value in the range of 0f..16f as value
|
||||
// DirectX 10 uses a INT value
|
||||
|
||||
int depthBiasValue = (int)(value * intMaxOver16);
|
||||
UpdateValueAndMarkDirtyIfNeeded(ref description.DepthBias, ref depthBiasValue);
|
||||
int depthBiasValue = (int)(value * IntMaxOver16);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.DepthBias, ref depthBiasValue);
|
||||
}
|
||||
}
|
||||
|
||||
@ -48,7 +42,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
set
|
||||
{
|
||||
Dx10.FillMode fillMode = FormatConverter.Translate(value);
|
||||
UpdateValueAndMarkDirtyIfNeeded(ref description.FillMode, ref fillMode);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.FillMode, ref fillMode);
|
||||
}
|
||||
}
|
||||
|
||||
@ -80,70 +74,26 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
{
|
||||
set
|
||||
{
|
||||
UpdateValueAndMarkDirtyIfNeeded(ref description.SlopeScaledDepthBias, ref value);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.SlopeScaledDepthBias, ref value);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Constructor
|
||||
public RasterizerState_DX10()
|
||||
{
|
||||
description.IsAntialiasedLineEnabled = false;
|
||||
isDirty = true;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Apply
|
||||
public void Apply(GraphicsDevice graphicsDevice)
|
||||
{
|
||||
UpdateNativeRasterizerState(graphicsDevice);
|
||||
IsBound = true;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Release
|
||||
public void Release()
|
||||
{
|
||||
IsBound = false;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Dispose
|
||||
public void Dispose()
|
||||
{
|
||||
if (nativeRasterizerState != null)
|
||||
{
|
||||
nativeRasterizerState.Dispose();
|
||||
nativeRasterizerState = null;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region UpdateNativeRasterizerState
|
||||
private void UpdateNativeRasterizerState(GraphicsDevice graphicsDevice)
|
||||
protected override void Init()
|
||||
{
|
||||
Dx10.Device device = (graphicsDevice.NativeDevice as GraphicsDeviceWindowsDX10).NativeDevice;
|
||||
|
||||
if (isDirty == true || nativeRasterizerState == null)
|
||||
{
|
||||
Dispose();
|
||||
nativeRasterizerState = new Dx10.RasterizerState(device, ref description);
|
||||
isDirty = false;
|
||||
}
|
||||
|
||||
device.Rasterizer.State = nativeRasterizerState;
|
||||
description.IsAntialiasedLineEnabled = false;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region UpdateValueAndMarkDirtyIfNeeded
|
||||
private void UpdateValueAndMarkDirtyIfNeeded<T>(ref T currentValue, ref T value)
|
||||
protected override Dx10.RasterizerState CreateNativeState(GraphicsDevice graphics)
|
||||
{
|
||||
if (value.Equals(currentValue) == false)
|
||||
{
|
||||
isDirty = true;
|
||||
currentValue = value;
|
||||
}
|
||||
Dx10.Device device = (graphics.NativeDevice as GraphicsDeviceWindowsDX10).NativeDevice;
|
||||
return new Dx10.RasterizerState(device, ref description);
|
||||
}
|
||||
|
||||
protected override void ApplyNativeState(GraphicsDevice graphics)
|
||||
{
|
||||
Dx10.Device device = (graphics.NativeDevice as GraphicsDeviceWindowsDX10).NativeDevice;
|
||||
device.Rasterizer.State = nativeState;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
using System;
|
||||
using ANX.BaseDirectX;
|
||||
using ANX.Framework.Graphics;
|
||||
using ANX.Framework.NonXNA.RenderSystem;
|
||||
using ANX.RenderSystem.Windows.DX10.Helpers;
|
||||
using Dx10 = SharpDX.Direct3D10;
|
||||
|
||||
// This file is part of the ANX.Framework created by the
|
||||
@ -13,38 +13,30 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
public class RenderTarget2D_DX10 : Texture2D_DX10, INativeRenderTarget2D, INativeTexture2D
|
||||
{
|
||||
#region Constructor
|
||||
public RenderTarget2D_DX10(GraphicsDevice graphics, int width, int height, bool mipMap, SurfaceFormat preferredFormat,
|
||||
public RenderTarget2D_DX10(GraphicsDevice graphics, int width, int height, bool mipMap, SurfaceFormat surfaceFormat,
|
||||
DepthFormat preferredDepthFormat, int preferredMultiSampleCount, RenderTargetUsage usage)
|
||||
: base(graphics)
|
||||
: base(graphics, surfaceFormat)
|
||||
{
|
||||
if (mipMap)
|
||||
throw new NotImplementedException("creating RenderTargets with mip map not yet implemented");
|
||||
|
||||
this.surfaceFormat = surfaceFormat;
|
||||
|
||||
GraphicsDeviceWindowsDX10 graphicsDX10 = graphicsDevice.NativeDevice as GraphicsDeviceWindowsDX10;
|
||||
Dx10.Device device = graphicsDX10.NativeDevice;
|
||||
|
||||
|
||||
var description = new Dx10.Texture2DDescription()
|
||||
{
|
||||
Width = width,
|
||||
Height = height,
|
||||
MipLevels = 1,
|
||||
ArraySize = 1,
|
||||
Format = FormatConverter.Translate(preferredFormat),
|
||||
Format = BaseFormatConverter.Translate(surfaceFormat),
|
||||
SampleDescription = new SharpDX.DXGI.SampleDescription(1, 0),
|
||||
Usage = Dx10.ResourceUsage.Default,
|
||||
BindFlags = Dx10.BindFlags.ShaderResource | Dx10.BindFlags.RenderTarget,
|
||||
CpuAccessFlags = Dx10.CpuAccessFlags.None,
|
||||
OptionFlags = Dx10.ResourceOptionFlags.None,
|
||||
};
|
||||
nativeTexture = new Dx10.Texture2D(graphicsDX10.NativeDevice, description);
|
||||
nativeShaderResourceView = new Dx10.ShaderResourceView(graphicsDX10.NativeDevice, nativeTexture);
|
||||
|
||||
// description of texture formats of DX10: http://msdn.microsoft.com/en-us/library/bb694531(v=VS.85).aspx
|
||||
// more helpfull information on DX10 textures: http://msdn.microsoft.com/en-us/library/windows/desktop/bb205131(v=vs.85).aspx
|
||||
|
||||
formatSize = FormatConverter.FormatSize(surfaceFormat);
|
||||
Dx10.Device device = (GraphicsDevice.NativeDevice as GraphicsDeviceWindowsDX10).NativeDevice;
|
||||
NativeTexture = new Dx10.Texture2D(device, description);
|
||||
NativeShaderResourceView = new Dx10.ShaderResourceView(device, NativeTexture);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
@ -1,3 +1,5 @@
|
||||
using System;
|
||||
using ANX.BaseDirectX;
|
||||
using ANX.Framework.Graphics;
|
||||
using ANX.Framework.NonXNA;
|
||||
using ANX.RenderSystem.Windows.DX10.Helpers;
|
||||
@ -9,41 +11,37 @@ using Dx10 = SharpDX.Direct3D10;
|
||||
|
||||
namespace ANX.RenderSystem.Windows.DX10
|
||||
{
|
||||
public class SamplerState_DX10 : INativeSamplerState
|
||||
public class SamplerState_DX10 : BaseStateObject<Dx10.SamplerState>, INativeSamplerState
|
||||
{
|
||||
#region Private
|
||||
private Dx10.SamplerStateDescription description;
|
||||
private Dx10.SamplerState nativeSamplerState;
|
||||
private bool isDirty;
|
||||
#endregion
|
||||
|
||||
#region Public
|
||||
public bool IsBound { get; private set; }
|
||||
|
||||
public ANX.Framework.Graphics.TextureAddressMode AddressU
|
||||
public TextureAddressMode AddressU
|
||||
{
|
||||
set
|
||||
{
|
||||
Dx10.TextureAddressMode mode = FormatConverter.Translate(value);
|
||||
UpdateValueAndMarkDirtyIfNeeded(ref description.AddressU, ref mode);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.AddressU, ref mode);
|
||||
}
|
||||
}
|
||||
|
||||
public ANX.Framework.Graphics.TextureAddressMode AddressV
|
||||
public TextureAddressMode AddressV
|
||||
{
|
||||
set
|
||||
{
|
||||
Dx10.TextureAddressMode mode = FormatConverter.Translate(value);
|
||||
UpdateValueAndMarkDirtyIfNeeded(ref description.AddressV, ref mode);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.AddressV, ref mode);
|
||||
}
|
||||
}
|
||||
|
||||
public ANX.Framework.Graphics.TextureAddressMode AddressW
|
||||
public TextureAddressMode AddressW
|
||||
{
|
||||
set
|
||||
{
|
||||
Dx10.TextureAddressMode mode = FormatConverter.Translate(value);
|
||||
UpdateValueAndMarkDirtyIfNeeded(ref description.AddressW, ref mode);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.AddressW, ref mode);
|
||||
}
|
||||
}
|
||||
|
||||
@ -52,7 +50,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
set
|
||||
{
|
||||
Dx10.Filter filter = FormatConverter.Translate(value);
|
||||
UpdateValueAndMarkDirtyIfNeeded(ref description.Filter, ref filter);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.Filter, ref filter);
|
||||
}
|
||||
}
|
||||
|
||||
@ -60,7 +58,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
{
|
||||
set
|
||||
{
|
||||
UpdateValueAndMarkDirtyIfNeeded(ref description.MaximumAnisotropy, ref value);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.MaximumAnisotropy, ref value);
|
||||
}
|
||||
}
|
||||
|
||||
@ -80,18 +78,11 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
{
|
||||
set
|
||||
{
|
||||
UpdateValueAndMarkDirtyIfNeeded(ref description.MipLodBias, ref value);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.MipLodBias, ref value);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Constructor
|
||||
public SamplerState_DX10()
|
||||
{
|
||||
isDirty = true;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Apply
|
||||
public void Apply(GraphicsDevice graphicsDevice, int index)
|
||||
{
|
||||
@ -99,49 +90,29 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
UpdateNativeSamplerState(device);
|
||||
IsBound = true;
|
||||
|
||||
device.PixelShader.SetSampler(index, nativeSamplerState);
|
||||
device.PixelShader.SetSampler(index, nativeState);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Release
|
||||
public void Release()
|
||||
{
|
||||
IsBound = false;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Dispose
|
||||
public void Dispose()
|
||||
{
|
||||
if (nativeSamplerState != null)
|
||||
{
|
||||
nativeSamplerState.Dispose();
|
||||
nativeSamplerState = null;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region UpdateNativeSamplerState
|
||||
private void UpdateNativeSamplerState(Dx10.Device device)
|
||||
{
|
||||
if (isDirty == true || nativeSamplerState == null)
|
||||
if (isDirty == true || nativeState == null)
|
||||
{
|
||||
Dispose();
|
||||
nativeSamplerState = new Dx10.SamplerState(device, ref description);
|
||||
nativeState = new Dx10.SamplerState(device, ref description);
|
||||
isDirty = false;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region UpdateValueAndMarkDirtyIfNeeded
|
||||
private void UpdateValueAndMarkDirtyIfNeeded<T>(ref T currentValue, ref T value)
|
||||
protected override Dx10.SamplerState CreateNativeState(GraphicsDevice graphics)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
protected override void ApplyNativeState(GraphicsDevice graphics)
|
||||
{
|
||||
if (value.Equals(currentValue) == false)
|
||||
{
|
||||
isDirty = true;
|
||||
currentValue = value;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
@ -1,10 +1,9 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Runtime.InteropServices;
|
||||
using ANX.Framework;
|
||||
using ANX.BaseDirectX;
|
||||
using ANX.Framework.Graphics;
|
||||
using ANX.Framework.NonXNA.RenderSystem;
|
||||
using ANX.RenderSystem.Windows.DX10.Helpers;
|
||||
using SharpDX;
|
||||
using Dx10 = SharpDX.Direct3D10;
|
||||
|
||||
// This file is part of the ANX.Framework created by the
|
||||
@ -13,117 +12,57 @@ using Dx10 = SharpDX.Direct3D10;
|
||||
|
||||
namespace ANX.RenderSystem.Windows.DX10
|
||||
{
|
||||
public class Texture2D_DX10 : INativeTexture2D
|
||||
public class Texture2D_DX10 : BaseTexture2D<Dx10.Texture2D>, INativeTexture2D
|
||||
{
|
||||
#region Private
|
||||
protected internal Dx10.Texture2D nativeTexture;
|
||||
protected internal Dx10.ShaderResourceView nativeShaderResourceView;
|
||||
protected internal int formatSize;
|
||||
protected internal SurfaceFormat surfaceFormat;
|
||||
protected internal GraphicsDevice graphicsDevice;
|
||||
#endregion
|
||||
|
||||
#region Public
|
||||
internal Dx10.Texture2D NativeTexture
|
||||
public override int Width
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.nativeTexture;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (this.nativeTexture != value)
|
||||
{
|
||||
if (this.nativeTexture != null)
|
||||
this.nativeTexture.Dispose();
|
||||
|
||||
this.nativeTexture = value;
|
||||
}
|
||||
return NativeTexture != null ? NativeTexture.Description.Width : 0;
|
||||
}
|
||||
}
|
||||
|
||||
internal Dx10.ShaderResourceView NativeShaderResourceView
|
||||
public override int Height
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.nativeShaderResourceView;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (this.nativeShaderResourceView != value)
|
||||
{
|
||||
if (this.nativeShaderResourceView != null)
|
||||
{
|
||||
this.nativeShaderResourceView.Dispose();
|
||||
}
|
||||
|
||||
this.nativeShaderResourceView = value;
|
||||
}
|
||||
return NativeTexture != null ? NativeTexture.Description.Height : 0;
|
||||
}
|
||||
}
|
||||
|
||||
public int Width
|
||||
{
|
||||
get
|
||||
{
|
||||
return (this.nativeTexture != null) ? this.nativeTexture.Description.Width : 0;
|
||||
}
|
||||
}
|
||||
|
||||
public int Height
|
||||
{
|
||||
get
|
||||
{
|
||||
return (this.nativeTexture != null) ? this.nativeTexture.Description.Height : 0;
|
||||
}
|
||||
}
|
||||
|
||||
public GraphicsDevice GraphicsDevice
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.graphicsDevice;
|
||||
}
|
||||
}
|
||||
protected internal Dx10.ShaderResourceView NativeShaderResourceView { get; protected set; }
|
||||
#endregion
|
||||
|
||||
#region Constructor
|
||||
internal Texture2D_DX10(GraphicsDevice graphicsDevice)
|
||||
internal Texture2D_DX10(GraphicsDevice graphicsDevice, SurfaceFormat surfaceFormat)
|
||||
: base(graphicsDevice, surfaceFormat)
|
||||
{
|
||||
this.graphicsDevice = graphicsDevice;
|
||||
}
|
||||
|
||||
public Texture2D_DX10(GraphicsDevice graphicsDevice, int width, int height, SurfaceFormat surfaceFormat, int mipCount)
|
||||
: base(graphicsDevice, surfaceFormat)
|
||||
{
|
||||
if (mipCount > 1)
|
||||
throw new Exception("creating textures with mip map not yet implemented");
|
||||
|
||||
this.graphicsDevice = graphicsDevice;
|
||||
this.surfaceFormat = surfaceFormat;
|
||||
|
||||
GraphicsDeviceWindowsDX10 graphicsDX10 = graphicsDevice.NativeDevice as GraphicsDeviceWindowsDX10;
|
||||
Dx10.Device device = graphicsDX10.NativeDevice;
|
||||
|
||||
Dx10.Texture2DDescription description = new Dx10.Texture2DDescription()
|
||||
{
|
||||
Width = width,
|
||||
Height = height,
|
||||
MipLevels = mipCount,
|
||||
ArraySize = mipCount,
|
||||
Format = FormatConverter.Translate(surfaceFormat),
|
||||
Format = BaseFormatConverter.Translate(surfaceFormat),
|
||||
SampleDescription = new SharpDX.DXGI.SampleDescription(1, 0),
|
||||
Usage = Dx10.ResourceUsage.Dynamic,
|
||||
BindFlags = Dx10.BindFlags.ShaderResource,
|
||||
CpuAccessFlags = Dx10.CpuAccessFlags.Write,
|
||||
OptionFlags = Dx10.ResourceOptionFlags.None,
|
||||
};
|
||||
this.nativeTexture = new Dx10.Texture2D(graphicsDX10.NativeDevice, description);
|
||||
this.nativeShaderResourceView = new Dx10.ShaderResourceView(graphicsDX10.NativeDevice, this.nativeTexture);
|
||||
|
||||
// description of texture formats of DX10: http://msdn.microsoft.com/en-us/library/bb694531(v=VS.85).aspx
|
||||
// more helpfull information on DX10 textures: http://msdn.microsoft.com/en-us/library/windows/desktop/bb205131(v=vs.85).aspx
|
||||
|
||||
this.formatSize = FormatConverter.FormatSize(surfaceFormat);
|
||||
Dx10.Device device = (graphicsDevice.NativeDevice as GraphicsDeviceWindowsDX10).NativeDevice;
|
||||
NativeTexture = new Dx10.Texture2D(device, description);
|
||||
NativeShaderResourceView = new Dx10.ShaderResourceView(device, NativeTexture);
|
||||
}
|
||||
#endregion
|
||||
|
||||
@ -134,136 +73,16 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region SetData
|
||||
public void SetData<T>(GraphicsDevice graphicsDevice, T[] data) where T : struct
|
||||
{
|
||||
SetData<T>(graphicsDevice, 0, 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 void SetData<T>(GraphicsDevice graphicsDevice, int offsetInBytes, T[] data, int startIndex, int elementCount)
|
||||
where T : struct
|
||||
{
|
||||
//TODO: handle offsetInBytes parameter
|
||||
//TODO: handle startIndex parameter
|
||||
//TODO: handle elementCount parameter
|
||||
|
||||
if (this.surfaceFormat == SurfaceFormat.Color)
|
||||
{
|
||||
int subresource = Dx10.Texture2D.CalculateSubResourceIndex(0, 0, 1);
|
||||
SharpDX.DataRectangle rectangle = this.nativeTexture.Map(subresource, Dx10.MapMode.WriteDiscard, Dx10.MapFlags.None);
|
||||
int rowPitch = rectangle.Pitch;
|
||||
|
||||
unsafe
|
||||
{
|
||||
GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned);
|
||||
byte* colorData = (byte*)handle.AddrOfPinnedObject();
|
||||
|
||||
byte* pTexels = (byte*)rectangle.DataPointer;
|
||||
int srcIndex = 0;
|
||||
|
||||
for (int row = 0; row < Height; row++)
|
||||
{
|
||||
int rowStart = row * rowPitch;
|
||||
|
||||
for (int col = 0; col < Width; col++)
|
||||
{
|
||||
int colStart = col * formatSize;
|
||||
pTexels[rowStart + colStart + 0] = colorData[srcIndex++];
|
||||
pTexels[rowStart + colStart + 1] = colorData[srcIndex++];
|
||||
pTexels[rowStart + colStart + 2] = colorData[srcIndex++];
|
||||
pTexels[rowStart + colStart + 3] = colorData[srcIndex++];
|
||||
}
|
||||
}
|
||||
|
||||
handle.Free();
|
||||
}
|
||||
|
||||
this.nativeTexture.Unmap(subresource);
|
||||
}
|
||||
else if (surfaceFormat == SurfaceFormat.Dxt5 || surfaceFormat == SurfaceFormat.Dxt3 || surfaceFormat == SurfaceFormat.Dxt1)
|
||||
{
|
||||
unsafe
|
||||
{
|
||||
GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned);
|
||||
byte* colorData = (byte*)handle.AddrOfPinnedObject();
|
||||
|
||||
int w = (Width + 3) >> 2;
|
||||
int h = (Height + 3) >> 2;
|
||||
formatSize = (surfaceFormat == SurfaceFormat.Dxt1) ? 8 : 16;
|
||||
|
||||
int subresource = Dx10.Texture2D.CalculateSubResourceIndex(0, 0, 1);
|
||||
SharpDX.DataRectangle rectangle = this.nativeTexture.Map(subresource, Dx10.MapMode.WriteDiscard, Dx10.MapFlags.None);
|
||||
SharpDX.DataStream ds = new SharpDX.DataStream(rectangle.DataPointer, Width * Height * 4 * 2, true, true);
|
||||
int pitch = rectangle.Pitch;
|
||||
int col = 0;
|
||||
int index = 0; // startIndex
|
||||
int count = data.Length; // elementCount
|
||||
int actWidth = w * formatSize;
|
||||
|
||||
for (int i = 0; i < h; i++)
|
||||
{
|
||||
ds.Position = (i * pitch) + (col * formatSize);
|
||||
if (count <= 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
else if (count < actWidth)
|
||||
{
|
||||
for (int idx = index; idx < index + count; idx++)
|
||||
{
|
||||
ds.WriteByte(colorData[idx]);
|
||||
}
|
||||
//ds.WriteRange<byte>(colorDataArray, index, count);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
for (int idx = index; idx < index + actWidth; idx++)
|
||||
{
|
||||
ds.WriteByte(colorData[idx]);
|
||||
}
|
||||
//ds.WriteRange<byte>(colorDataArray, index, actWidth);
|
||||
|
||||
index += actWidth;
|
||||
count -= actWidth;
|
||||
}
|
||||
|
||||
handle.Free();
|
||||
|
||||
this.nativeTexture.Unmap(subresource);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Exception(string.Format("creating textures of format {0} not yet implemented...", surfaceFormat.ToString()));
|
||||
}
|
||||
}
|
||||
|
||||
public void SetData<T>(int level, Rectangle? rect, T[] data, int startIndex, int elementCount) where T : struct
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Dispose
|
||||
public void Dispose()
|
||||
public override void Dispose()
|
||||
{
|
||||
if (this.nativeShaderResourceView != null)
|
||||
if (NativeShaderResourceView != null)
|
||||
{
|
||||
this.nativeShaderResourceView.Dispose();
|
||||
this.nativeShaderResourceView = null;
|
||||
NativeShaderResourceView.Dispose();
|
||||
NativeShaderResourceView = null;
|
||||
}
|
||||
|
||||
if (this.nativeTexture != null)
|
||||
{
|
||||
this.nativeTexture.Dispose();
|
||||
this.nativeTexture = null;
|
||||
}
|
||||
base.Dispose();
|
||||
}
|
||||
#endregion
|
||||
|
||||
@ -284,7 +103,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
#region GetData (TODO)
|
||||
public void GetData<T>(T[] data) where T : struct
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
GetData(data, 0, data.Length);
|
||||
}
|
||||
|
||||
public void GetData<T>(T[] data, int startIndex, int elementCount) where T : struct
|
||||
@ -292,10 +111,37 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void GetData<T>(int level, Rectangle? rect, T[] data, int startIndex, int elementCount) where T : struct
|
||||
public void GetData<T>(int level, Framework.Rectangle? rect, T[] data, int startIndex, int elementCount) where T : struct
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region MapWrite
|
||||
protected override IntPtr MapWrite()
|
||||
{
|
||||
tempSubresource = Dx10.Texture2D.CalculateSubResourceIndex(0, 0, 1);
|
||||
DataRectangle rect = NativeTexture.Map(tempSubresource, Dx10.MapMode.WriteDiscard, Dx10.MapFlags.None);
|
||||
pitch = rect.Pitch;
|
||||
return rect.DataPointer;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region MapRead
|
||||
protected override IntPtr MapRead()
|
||||
{
|
||||
tempSubresource = Dx10.Texture2D.CalculateSubResourceIndex(0, 0, 1);
|
||||
DataRectangle rect = NativeTexture.Map(tempSubresource, Dx10.MapMode.Read, Dx10.MapFlags.None);
|
||||
pitch = rect.Pitch;
|
||||
return rect.DataPointer;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Unmap
|
||||
protected override void Unmap()
|
||||
{
|
||||
NativeTexture.Unmap(tempSubresource);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,9 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using ANX.BaseDirectX;
|
||||
using ANX.Framework.Graphics;
|
||||
using ANX.Framework.NonXNA.RenderSystem;
|
||||
using SharpDX.Direct3D10;
|
||||
using SharpDX;
|
||||
using Dx10 = SharpDX.Direct3D10;
|
||||
|
||||
// This file is part of the ANX.Framework created by the
|
||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||
@ -10,29 +11,25 @@ using SharpDX.Direct3D10;
|
||||
|
||||
namespace ANX.RenderSystem.Windows.DX10
|
||||
{
|
||||
public class VertexBuffer_DX10 : INativeVertexBuffer, IDisposable
|
||||
public class VertexBuffer_DX10 : BaseVertexBuffer<Dx10.Buffer>, INativeVertexBuffer, IDisposable
|
||||
{
|
||||
int vertexStride;
|
||||
|
||||
public SharpDX.Direct3D10.Buffer NativeBuffer { get; private set; }
|
||||
|
||||
#region Constructor
|
||||
public VertexBuffer_DX10(GraphicsDevice graphics, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage)
|
||||
{
|
||||
GraphicsDeviceWindowsDX10 gd10 = graphics.NativeDevice as GraphicsDeviceWindowsDX10;
|
||||
Device device = gd10 != null ? gd10.NativeDevice as Device : null;
|
||||
Dx10.Device device = gd10 != null ? gd10.NativeDevice as Dx10.Device : null;
|
||||
|
||||
InitializeBuffer(device, vertexDeclaration, vertexCount, usage);
|
||||
}
|
||||
|
||||
internal VertexBuffer_DX10(Device device, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage)
|
||||
internal VertexBuffer_DX10(Dx10.Device device, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage)
|
||||
{
|
||||
InitializeBuffer(device, vertexDeclaration, vertexCount, usage);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region InitializeBuffer
|
||||
private void InitializeBuffer(Device device, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage)
|
||||
private void InitializeBuffer(Dx10.Device device, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage)
|
||||
{
|
||||
this.vertexStride = vertexDeclaration.VertexStride;
|
||||
|
||||
@ -40,101 +37,34 @@ namespace ANX.RenderSystem.Windows.DX10
|
||||
|
||||
if (device != null)
|
||||
{
|
||||
BufferDescription description = new BufferDescription()
|
||||
var description = new Dx10.BufferDescription()
|
||||
{
|
||||
Usage = ResourceUsage.Dynamic,
|
||||
Usage = Dx10.ResourceUsage.Dynamic,
|
||||
SizeInBytes = vertexDeclaration.VertexStride * vertexCount,
|
||||
BindFlags = BindFlags.VertexBuffer,
|
||||
CpuAccessFlags = CpuAccessFlags.Write,
|
||||
OptionFlags = ResourceOptionFlags.None
|
||||
BindFlags = Dx10.BindFlags.VertexBuffer,
|
||||
CpuAccessFlags = Dx10.CpuAccessFlags.Write,
|
||||
OptionFlags = Dx10.ResourceOptionFlags.None
|
||||
};
|
||||
|
||||
NativeBuffer = new SharpDX.Direct3D10.Buffer(device, description);
|
||||
NativeBuffer = new Dx10.Buffer(device, description);
|
||||
NativeBuffer.Unmap();
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region SetData
|
||||
public void SetData<T>(GraphicsDevice graphicsDevice, int offsetInBytes, T[] data, int startIndex, int elementCount)
|
||||
where T : struct
|
||||
protected override DataStream MapBufferWrite()
|
||||
{
|
||||
//TODO: check offsetInBytes parameter for bounds etc.
|
||||
|
||||
using (var stream = NativeBuffer.Map(MapMode.WriteDiscard))
|
||||
{
|
||||
if (offsetInBytes > 0)
|
||||
stream.Seek(offsetInBytes, SeekOrigin.Current);
|
||||
|
||||
if (startIndex > 0 || elementCount < data.Length)
|
||||
for (int i = startIndex; i < startIndex + elementCount; i++)
|
||||
stream.Write<T>(data[i]);
|
||||
else
|
||||
for (int i = 0; i < data.Length; i++)
|
||||
stream.Write<T>(data[i]);
|
||||
|
||||
NativeBuffer.Unmap();
|
||||
}
|
||||
return NativeBuffer.Map(Dx10.MapMode.WriteDiscard);
|
||||
}
|
||||
|
||||
public void SetData<T>(GraphicsDevice graphicsDevice, T[] data) where T : struct
|
||||
protected override DataStream MapBufferRead()
|
||||
{
|
||||
SetData<T>(graphicsDevice, data, 0, data.Length);
|
||||
return NativeBuffer.Map(Dx10.MapMode.Read);
|
||||
}
|
||||
|
||||
public void SetData<T>(GraphicsDevice graphicsDevice, T[] data, int startIndex, int elementCount) where T : struct
|
||||
protected override void UnmapBuffer()
|
||||
{
|
||||
SetData<T>(graphicsDevice, 0, data, startIndex, elementCount);
|
||||
NativeBuffer.Unmap();
|
||||
}
|
||||
|
||||
public void SetData<T>(GraphicsDevice graphicsDevice, int offsetInBytes, T[] data, int startIndex, int elementCount,
|
||||
int vertexStride) where T : struct
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region GetData
|
||||
public void GetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride) where T : struct
|
||||
{
|
||||
using (var stream = NativeBuffer.Map(MapMode.Read))
|
||||
{
|
||||
if (offsetInBytes > 0)
|
||||
stream.Seek(offsetInBytes, SeekOrigin.Current);
|
||||
|
||||
stream.ReadRange(data, startIndex, elementCount);
|
||||
NativeBuffer.Unmap();
|
||||
}
|
||||
}
|
||||
|
||||
public void GetData<T>(T[] data) where T : struct
|
||||
{
|
||||
using (var stream = NativeBuffer.Map(MapMode.Read))
|
||||
{
|
||||
stream.ReadRange(data, 0, data.Length);
|
||||
NativeBuffer.Unmap();
|
||||
}
|
||||
}
|
||||
|
||||
public void GetData<T>(T[] data, int startIndex, int elementCount) where T : struct
|
||||
{
|
||||
using (var stream = NativeBuffer.Map(MapMode.Read))
|
||||
{
|
||||
stream.ReadRange(data, startIndex, elementCount);
|
||||
NativeBuffer.Unmap();
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Dispose
|
||||
public void Dispose()
|
||||
{
|
||||
if (this.NativeBuffer != null)
|
||||
{
|
||||
NativeBuffer.Dispose();
|
||||
NativeBuffer = null;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
@ -63,6 +63,10 @@
|
||||
<Project>{6899F0C9-70B9-4EB0-9DD3-E598D4BE3E35}</Project>
|
||||
<Name>ANX.Framework</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\ANX.BaseDirectX\ANX.BaseDirectX.csproj">
|
||||
<Project>{A4D3AD34-E49C-4142-8620-2AFF44ED6719}</Project>
|
||||
<Name>ANX.BaseDirectX</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\ANX.Framework.Windows.DX10\ANX.RenderSystem.Windows.DX10.csproj">
|
||||
<Project>{5BE49183-2F6F-4527-AC90-D816911FCF90}</Project>
|
||||
<Name>ANX.RenderSystem.Windows.DX10</Name>
|
||||
@ -98,7 +102,7 @@
|
||||
<Compile Include="Effect_DX11.cs" />
|
||||
<Compile Include="FormatConverter.cs" />
|
||||
<Compile Include="GraphicsDeviceWindowsDX11.cs" />
|
||||
<Compile Include="IncludeHandler.cs" />
|
||||
<Compile Include="Helpers\IncludeHandler.cs" />
|
||||
<Compile Include="IndexBuffer_DX11.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="RasterizerState_DX11.cs" />
|
||||
|
@ -62,6 +62,10 @@
|
||||
<Project>{6899F0C9-70B9-4EB0-9DD3-E598D4BE3E35}</Project>
|
||||
<Name>ANX.Framework</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\ANX.BaseDirectX\ANX.BaseDirectX_Linux.csproj">
|
||||
<Project>{A4D3AD34-E49C-4142-8620-2AFF44ED6719}</Project>
|
||||
<Name>ANX.BaseDirectX</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\ANX.Framework.Windows.DX10\ANX.RenderSystem.Windows.DX10_Linux.csproj">
|
||||
<Project>{5BE49183-2F6F-4527-AC90-D816911FCF90}</Project>
|
||||
<Name>ANX.RenderSystem.Windows.DX10</Name>
|
||||
@ -97,7 +101,7 @@
|
||||
<Compile Include="Effect_DX11.cs" />
|
||||
<Compile Include="FormatConverter.cs" />
|
||||
<Compile Include="GraphicsDeviceWindowsDX11.cs" />
|
||||
<Compile Include="IncludeHandler.cs" />
|
||||
<Compile Include="Helpers\IncludeHandler.cs" />
|
||||
<Compile Include="IndexBuffer_DX11.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="RasterizerState_DX11.cs" />
|
||||
|
@ -62,6 +62,10 @@
|
||||
<Project>{6899F0C9-70B9-4EB0-9DD3-E598D4BE3E35}</Project>
|
||||
<Name>ANX.Framework</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\ANX.BaseDirectX\ANX.BaseDirectX_PSVita.csproj">
|
||||
<Project>{A4D3AD34-E49C-4142-8620-2AFF44ED6719}</Project>
|
||||
<Name>ANX.BaseDirectX</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\ANX.Framework.Windows.DX10\ANX.RenderSystem.Windows.DX10_PSVita.csproj">
|
||||
<Project>{5BE49183-2F6F-4527-AC90-D816911FCF90}</Project>
|
||||
<Name>ANX.RenderSystem.Windows.DX10</Name>
|
||||
@ -98,7 +102,7 @@
|
||||
<Compile Include="Effect_DX11.cs" />
|
||||
<Compile Include="FormatConverter.cs" />
|
||||
<Compile Include="GraphicsDeviceWindowsDX11.cs" />
|
||||
<Compile Include="IncludeHandler.cs" />
|
||||
<Compile Include="Helpers\IncludeHandler.cs" />
|
||||
<Compile Include="IndexBuffer_DX11.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="RasterizerState_DX11.cs" />
|
||||
|
@ -64,6 +64,10 @@
|
||||
<Project>{6899F0C9-70B9-4EB0-9DD3-E598D4BE3E35}</Project>
|
||||
<Name>ANX.Framework</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\ANX.BaseDirectX\ANX.BaseDirectX.csproj">
|
||||
<Project>{A4D3AD34-E49C-4142-8620-2AFF44ED6719}</Project>
|
||||
<Name>ANX.BaseDirectX</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="SharpDX, Version=2.2.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
@ -95,7 +99,7 @@
|
||||
<Compile Include="Effect_DX11.cs" />
|
||||
<Compile Include="FormatConverter.cs" />
|
||||
<Compile Include="GraphicsDeviceWindowsDX11.cs" />
|
||||
<Compile Include="IncludeHandler.cs" />
|
||||
<Compile Include="Helpers\IncludeHandler.cs" />
|
||||
<Compile Include="IndexBuffer_DX11.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="RasterizerState_DX11.cs" />
|
||||
|
@ -1,14 +1,9 @@
|
||||
#region Using Statements
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using SharpDX.Direct3D11;
|
||||
using ANX.BaseDirectX;
|
||||
using ANX.Framework;
|
||||
using ANX.Framework.Graphics;
|
||||
using ANX.Framework.NonXNA;
|
||||
using ANX.Framework;
|
||||
|
||||
#endregion // Using Statements
|
||||
using Dx11 = SharpDX.Direct3D11;
|
||||
|
||||
// This file is part of the ANX.Framework created by the
|
||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||
@ -16,270 +11,225 @@ using ANX.Framework;
|
||||
|
||||
namespace ANX.RenderSystem.Windows.DX11
|
||||
{
|
||||
public class BlendState_DX11 : INativeBlendState
|
||||
public class BlendState_DX11 : BaseStateObject<Dx11.BlendState>, INativeBlendState
|
||||
{
|
||||
#region Private Members
|
||||
private BlendStateDescription blendStateDescription;
|
||||
private SharpDX.Direct3D11.BlendState nativeBlendState;
|
||||
private bool nativeBlendStateDirty;
|
||||
private Dx11.BlendStateDescription blendStateDescription;
|
||||
private SharpDX.Color4 blendFactor;
|
||||
private int multiSampleMask;
|
||||
private bool bound;
|
||||
|
||||
#endregion // Private Members
|
||||
|
||||
public BlendState_DX11()
|
||||
{
|
||||
for (int i = 0; i < blendStateDescription.RenderTarget.Length; i++)
|
||||
{
|
||||
blendStateDescription.RenderTarget[i] = new RenderTargetBlendDescription();
|
||||
blendStateDescription.RenderTarget[i].IsBlendEnabled = (i < 4);
|
||||
blendStateDescription.IndependentBlendEnable = true;
|
||||
}
|
||||
|
||||
nativeBlendStateDirty = true;
|
||||
}
|
||||
|
||||
public void Apply(GraphicsDevice graphics)
|
||||
{
|
||||
GraphicsDeviceWindowsDX11 gdx11 = graphics.NativeDevice as GraphicsDeviceWindowsDX11;
|
||||
SharpDX.Direct3D11.DeviceContext context = gdx11.NativeDevice;
|
||||
|
||||
UpdateNativeBlendState(context.Device);
|
||||
this.bound = true;
|
||||
|
||||
context.OutputMerger.SetBlendState(nativeBlendState, this.blendFactor, this.multiSampleMask);
|
||||
}
|
||||
|
||||
public void Release()
|
||||
{
|
||||
this.bound = false;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (this.nativeBlendState != null)
|
||||
{
|
||||
this.nativeBlendState.Dispose();
|
||||
this.nativeBlendState = null;
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsBound
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.bound;
|
||||
}
|
||||
}
|
||||
|
||||
public Color BlendFactor
|
||||
{
|
||||
set
|
||||
{
|
||||
#region Public
|
||||
public Color BlendFactor
|
||||
{
|
||||
set
|
||||
{
|
||||
const float colorConvert = 1f / 255f;
|
||||
|
||||
blendFactor.Red = value.R * colorConvert;
|
||||
blendFactor.Green = value.G * colorConvert;
|
||||
blendFactor.Blue = value.B * colorConvert;
|
||||
blendFactor.Alpha = value.A * colorConvert;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int MultiSampleMask
|
||||
{
|
||||
set
|
||||
{
|
||||
this.multiSampleMask = value;
|
||||
}
|
||||
}
|
||||
public int MultiSampleMask
|
||||
{
|
||||
set
|
||||
{
|
||||
this.multiSampleMask = value;
|
||||
}
|
||||
}
|
||||
|
||||
public BlendFunction AlphaBlendFunction
|
||||
{
|
||||
set
|
||||
{
|
||||
BlendOperation alphaBlendOperation = FormatConverter.Translate(value);
|
||||
public BlendFunction AlphaBlendFunction
|
||||
{
|
||||
set
|
||||
{
|
||||
Dx11.BlendOperation alphaBlendOperation = FormatConverter.Translate(value);
|
||||
for (int i = 0; i < blendStateDescription.RenderTarget.Length; i++)
|
||||
{
|
||||
if (blendStateDescription.RenderTarget[i].AlphaBlendOperation != alphaBlendOperation)
|
||||
{
|
||||
isDirty = true;
|
||||
blendStateDescription.RenderTarget[i].AlphaBlendOperation = alphaBlendOperation;
|
||||
}
|
||||
|
||||
for (int i = 0; i < blendStateDescription.RenderTarget.Length; i++)
|
||||
{
|
||||
if (blendStateDescription.RenderTarget[i].AlphaBlendOperation != alphaBlendOperation)
|
||||
{
|
||||
nativeBlendStateDirty = true;
|
||||
blendStateDescription.RenderTarget[i].AlphaBlendOperation = alphaBlendOperation;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
public BlendFunction ColorBlendFunction
|
||||
{
|
||||
set
|
||||
{
|
||||
Dx11.BlendOperation blendOperation = FormatConverter.Translate(value);
|
||||
|
||||
public BlendFunction ColorBlendFunction
|
||||
{
|
||||
set
|
||||
{
|
||||
BlendOperation blendOperation = FormatConverter.Translate(value);
|
||||
for (int i = 0; i < blendStateDescription.RenderTarget.Length; i++)
|
||||
{
|
||||
if (blendStateDescription.RenderTarget[i].BlendOperation != blendOperation)
|
||||
{
|
||||
isDirty = true;
|
||||
blendStateDescription.RenderTarget[i].BlendOperation = blendOperation;
|
||||
}
|
||||
|
||||
for (int i = 0; i < blendStateDescription.RenderTarget.Length; i++)
|
||||
{
|
||||
if (blendStateDescription.RenderTarget[i].BlendOperation != blendOperation)
|
||||
{
|
||||
nativeBlendStateDirty = true;
|
||||
blendStateDescription.RenderTarget[i].BlendOperation = blendOperation;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
public Blend AlphaDestinationBlend
|
||||
{
|
||||
set
|
||||
{
|
||||
Dx11.BlendOption destinationAlphaBlend = FormatConverter.Translate(value);
|
||||
|
||||
public Blend AlphaDestinationBlend
|
||||
{
|
||||
set
|
||||
{
|
||||
BlendOption destinationAlphaBlend = FormatConverter.Translate(value);
|
||||
for (int i = 0; i < blendStateDescription.RenderTarget.Length; i++)
|
||||
{
|
||||
if (blendStateDescription.RenderTarget[i].DestinationAlphaBlend != destinationAlphaBlend)
|
||||
{
|
||||
isDirty = true;
|
||||
blendStateDescription.RenderTarget[i].DestinationAlphaBlend = destinationAlphaBlend;
|
||||
}
|
||||
|
||||
for (int i = 0; i < blendStateDescription.RenderTarget.Length; i++)
|
||||
{
|
||||
if (blendStateDescription.RenderTarget[i].DestinationAlphaBlend != destinationAlphaBlend)
|
||||
{
|
||||
nativeBlendStateDirty = true;
|
||||
blendStateDescription.RenderTarget[i].DestinationAlphaBlend = destinationAlphaBlend;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
public Blend ColorDestinationBlend
|
||||
{
|
||||
set
|
||||
{
|
||||
Dx11.BlendOption destinationBlend = FormatConverter.Translate(value);
|
||||
|
||||
public Blend ColorDestinationBlend
|
||||
{
|
||||
set
|
||||
{
|
||||
BlendOption destinationBlend = FormatConverter.Translate(value);
|
||||
for (int i = 0; i < blendStateDescription.RenderTarget.Length; i++)
|
||||
{
|
||||
if (blendStateDescription.RenderTarget[i].DestinationBlend != destinationBlend)
|
||||
{
|
||||
isDirty = true;
|
||||
blendStateDescription.RenderTarget[i].DestinationBlend = destinationBlend;
|
||||
}
|
||||
|
||||
for (int i = 0; i < blendStateDescription.RenderTarget.Length; i++)
|
||||
{
|
||||
if (blendStateDescription.RenderTarget[i].DestinationBlend != destinationBlend)
|
||||
{
|
||||
nativeBlendStateDirty = true;
|
||||
blendStateDescription.RenderTarget[i].DestinationBlend = destinationBlend;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
public ColorWriteChannels ColorWriteChannels
|
||||
{
|
||||
set
|
||||
{
|
||||
Dx11.ColorWriteMaskFlags renderTargetWriteMask = FormatConverter.Translate(value);
|
||||
|
||||
public ColorWriteChannels ColorWriteChannels
|
||||
{
|
||||
set
|
||||
{
|
||||
ColorWriteMaskFlags renderTargetWriteMask = FormatConverter.Translate(value);
|
||||
//TODO: range check
|
||||
|
||||
//TODO: range check
|
||||
if (blendStateDescription.RenderTarget[0].RenderTargetWriteMask != renderTargetWriteMask)
|
||||
{
|
||||
isDirty = true;
|
||||
blendStateDescription.RenderTarget[0].RenderTargetWriteMask = renderTargetWriteMask;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (blendStateDescription.RenderTarget[0].RenderTargetWriteMask != renderTargetWriteMask)
|
||||
{
|
||||
nativeBlendStateDirty = true;
|
||||
blendStateDescription.RenderTarget[0].RenderTargetWriteMask = renderTargetWriteMask;
|
||||
}
|
||||
}
|
||||
}
|
||||
public ColorWriteChannels ColorWriteChannels1
|
||||
{
|
||||
set
|
||||
{
|
||||
Dx11.ColorWriteMaskFlags renderTargetWriteMask = FormatConverter.Translate(value);
|
||||
|
||||
public ColorWriteChannels ColorWriteChannels1
|
||||
{
|
||||
set
|
||||
{
|
||||
ColorWriteMaskFlags renderTargetWriteMask = FormatConverter.Translate(value);
|
||||
//TODO: range check
|
||||
|
||||
//TODO: range check
|
||||
if (blendStateDescription.RenderTarget[1].RenderTargetWriteMask != renderTargetWriteMask)
|
||||
{
|
||||
isDirty = true;
|
||||
blendStateDescription.RenderTarget[1].RenderTargetWriteMask = renderTargetWriteMask;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (blendStateDescription.RenderTarget[1].RenderTargetWriteMask != renderTargetWriteMask)
|
||||
{
|
||||
nativeBlendStateDirty = true;
|
||||
blendStateDescription.RenderTarget[1].RenderTargetWriteMask = renderTargetWriteMask;
|
||||
}
|
||||
}
|
||||
}
|
||||
public ColorWriteChannels ColorWriteChannels2
|
||||
{
|
||||
set
|
||||
{
|
||||
Dx11.ColorWriteMaskFlags renderTargetWriteMask = FormatConverter.Translate(value);
|
||||
|
||||
public ColorWriteChannels ColorWriteChannels2
|
||||
{
|
||||
set
|
||||
{
|
||||
ColorWriteMaskFlags renderTargetWriteMask = FormatConverter.Translate(value);
|
||||
//TODO: range check
|
||||
|
||||
//TODO: range check
|
||||
if (blendStateDescription.RenderTarget[2].RenderTargetWriteMask != renderTargetWriteMask)
|
||||
{
|
||||
isDirty = true;
|
||||
blendStateDescription.RenderTarget[2].RenderTargetWriteMask = renderTargetWriteMask;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (blendStateDescription.RenderTarget[2].RenderTargetWriteMask != renderTargetWriteMask)
|
||||
{
|
||||
nativeBlendStateDirty = true;
|
||||
blendStateDescription.RenderTarget[2].RenderTargetWriteMask = renderTargetWriteMask;
|
||||
}
|
||||
}
|
||||
}
|
||||
public ColorWriteChannels ColorWriteChannels3
|
||||
{
|
||||
set
|
||||
{
|
||||
Dx11.ColorWriteMaskFlags renderTargetWriteMask = FormatConverter.Translate(value);
|
||||
|
||||
public ColorWriteChannels ColorWriteChannels3
|
||||
{
|
||||
set
|
||||
{
|
||||
ColorWriteMaskFlags renderTargetWriteMask = FormatConverter.Translate(value);
|
||||
//TODO: range check
|
||||
|
||||
//TODO: range check
|
||||
if (blendStateDescription.RenderTarget[3].RenderTargetWriteMask != renderTargetWriteMask)
|
||||
{
|
||||
isDirty = true;
|
||||
blendStateDescription.RenderTarget[3].RenderTargetWriteMask = renderTargetWriteMask;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (blendStateDescription.RenderTarget[3].RenderTargetWriteMask != renderTargetWriteMask)
|
||||
{
|
||||
nativeBlendStateDirty = true;
|
||||
blendStateDescription.RenderTarget[3].RenderTargetWriteMask = renderTargetWriteMask;
|
||||
}
|
||||
}
|
||||
}
|
||||
public Blend AlphaSourceBlend
|
||||
{
|
||||
set
|
||||
{
|
||||
Dx11.BlendOption sourceAlphaBlend = FormatConverter.Translate(value);
|
||||
|
||||
public Blend AlphaSourceBlend
|
||||
{
|
||||
set
|
||||
{
|
||||
BlendOption sourceAlphaBlend = FormatConverter.Translate(value);
|
||||
for (int i = 0; i < blendStateDescription.RenderTarget.Length; i++)
|
||||
{
|
||||
if (blendStateDescription.RenderTarget[i].SourceAlphaBlend != sourceAlphaBlend)
|
||||
{
|
||||
isDirty = true;
|
||||
blendStateDescription.RenderTarget[i].SourceAlphaBlend = sourceAlphaBlend;
|
||||
}
|
||||
|
||||
for (int i = 0; i < blendStateDescription.RenderTarget.Length; i++)
|
||||
{
|
||||
if (blendStateDescription.RenderTarget[i].SourceAlphaBlend != sourceAlphaBlend)
|
||||
{
|
||||
nativeBlendStateDirty = true;
|
||||
blendStateDescription.RenderTarget[i].SourceAlphaBlend = sourceAlphaBlend;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
public Blend ColorSourceBlend
|
||||
{
|
||||
set
|
||||
{
|
||||
Dx11.BlendOption sourceBlend = FormatConverter.Translate(value);
|
||||
|
||||
public Blend ColorSourceBlend
|
||||
{
|
||||
set
|
||||
{
|
||||
BlendOption sourceBlend = FormatConverter.Translate(value);
|
||||
for (int i = 0; i < blendStateDescription.RenderTarget.Length; i++)
|
||||
{
|
||||
if (blendStateDescription.RenderTarget[i].SourceBlend != sourceBlend)
|
||||
{
|
||||
isDirty = true;
|
||||
blendStateDescription.RenderTarget[i].SourceBlend = sourceBlend;
|
||||
}
|
||||
|
||||
for (int i = 0; i < blendStateDescription.RenderTarget.Length; i++)
|
||||
{
|
||||
if (blendStateDescription.RenderTarget[i].SourceBlend != sourceBlend)
|
||||
{
|
||||
nativeBlendStateDirty = true;
|
||||
blendStateDescription.RenderTarget[i].SourceBlend = sourceBlend;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
protected override void Init()
|
||||
{
|
||||
for (int i = 0; i < blendStateDescription.RenderTarget.Length; i++)
|
||||
{
|
||||
blendStateDescription.RenderTarget[i].IsBlendEnabled = (i < 4);
|
||||
blendStateDescription.IndependentBlendEnable = true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
protected override Dx11.BlendState CreateNativeState(GraphicsDevice graphics)
|
||||
{
|
||||
Dx11.DeviceContext context = (graphics.NativeDevice as GraphicsDeviceWindowsDX11).NativeDevice;
|
||||
return new Dx11.BlendState(context.Device, ref blendStateDescription);
|
||||
}
|
||||
|
||||
private void UpdateNativeBlendState(SharpDX.Direct3D11.Device device)
|
||||
{
|
||||
if (this.nativeBlendStateDirty == true || this.nativeBlendState == null)
|
||||
{
|
||||
if (this.nativeBlendState != null)
|
||||
{
|
||||
this.nativeBlendState.Dispose();
|
||||
this.nativeBlendState = null;
|
||||
}
|
||||
|
||||
this.nativeBlendState = new SharpDX.Direct3D11.BlendState(device, ref this.blendStateDescription);
|
||||
|
||||
this.nativeBlendStateDirty = false;
|
||||
}
|
||||
}
|
||||
protected override void ApplyNativeState(GraphicsDevice graphics)
|
||||
{
|
||||
Dx11.DeviceContext context = (graphics.NativeDevice as GraphicsDeviceWindowsDX11).NativeDevice;
|
||||
context.OutputMerger.SetBlendState(nativeState, blendFactor, multiSampleMask);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,17 +1,12 @@
|
||||
#region Using Statements
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using ANX.Framework.Graphics;
|
||||
using System.IO;
|
||||
using ANX.Framework.NonXNA;
|
||||
using System.Runtime.InteropServices;
|
||||
using SharpDX.DXGI;
|
||||
using ANX.Framework.NonXNA.RenderSystem;
|
||||
using ANX.Framework;
|
||||
|
||||
#endregion // Using Statements
|
||||
using ANX.Framework.Graphics;
|
||||
using ANX.Framework.NonXNA;
|
||||
using ANX.Framework.NonXNA.RenderSystem;
|
||||
using SharpDX.DXGI;
|
||||
using ANX.BaseDirectX;
|
||||
|
||||
// This file is part of the ANX.Framework created by the
|
||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||
@ -21,6 +16,7 @@ namespace ANX.RenderSystem.Windows.DX11
|
||||
{
|
||||
public class Creator : IRenderSystemCreator
|
||||
{
|
||||
#region Public
|
||||
public string Name
|
||||
{
|
||||
get { return "DirectX11"; }
|
||||
@ -40,99 +36,104 @@ namespace ANX.RenderSystem.Windows.DX11
|
||||
}
|
||||
}
|
||||
|
||||
public EffectSourceLanguage GetStockShaderSourceLanguage
|
||||
{
|
||||
get
|
||||
{
|
||||
return EffectSourceLanguage.HLSL_FX;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region CreateGraphicsDevice
|
||||
public INativeGraphicsDevice CreateGraphicsDevice(PresentationParameters presentationParameters)
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventSystemChange(
|
||||
AddInType.RenderSystem);
|
||||
PreventSystemChange();
|
||||
return new GraphicsDeviceWindowsDX11(presentationParameters);
|
||||
}
|
||||
#endregion
|
||||
|
||||
public INativeIndexBuffer CreateIndexBuffer(GraphicsDevice graphics,
|
||||
IndexBuffer managedBuffer, IndexElementSize size, int indexCount, BufferUsage usage)
|
||||
#region CreateIndexBuffer
|
||||
public INativeIndexBuffer CreateIndexBuffer(GraphicsDevice graphics, IndexBuffer managedBuffer, IndexElementSize size,
|
||||
int indexCount, BufferUsage usage)
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventSystemChange(
|
||||
AddInType.RenderSystem);
|
||||
PreventSystemChange();
|
||||
return new IndexBuffer_DX11(graphics, size, indexCount, usage);
|
||||
}
|
||||
#endregion
|
||||
|
||||
public INativeVertexBuffer CreateVertexBuffer(GraphicsDevice graphics,
|
||||
VertexBuffer managedBuffer, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage)
|
||||
#region CreateVertexBuffer
|
||||
public INativeVertexBuffer CreateVertexBuffer(GraphicsDevice graphics, VertexBuffer managedBuffer,
|
||||
VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage)
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventSystemChange(AddInType.RenderSystem);
|
||||
PreventSystemChange();
|
||||
return new VertexBuffer_DX11(graphics, vertexDeclaration, vertexCount, usage);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#if XNAEXT
|
||||
#region CreateConstantBuffer
|
||||
public INativeConstantBuffer CreateConstantBuffer(GraphicsDevice graphics, ConstantBuffer managedBuffer, BufferUsage usage)
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventSystemChange(AddInType.RenderSystem);
|
||||
public INativeConstantBuffer CreateConstantBuffer(GraphicsDevice graphics, ConstantBuffer managedBuffer,
|
||||
BufferUsage usage)
|
||||
{
|
||||
PreventSystemChange();
|
||||
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
#endregion
|
||||
#endif
|
||||
|
||||
public INativeEffect CreateEffect(GraphicsDevice graphics, ANX.Framework.Graphics.Effect managedEffect, Stream vertexShaderByteCode, Stream pixelShaderByteCode)
|
||||
#region CreateEffect
|
||||
public INativeEffect CreateEffect(GraphicsDevice graphics, Effect managedEffect, Stream vertexShaderByteCode,
|
||||
Stream pixelShaderByteCode)
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventSystemChange(AddInType.RenderSystem);
|
||||
|
||||
Effect_DX11 effect = new Effect_DX11(graphics, managedEffect, vertexShaderByteCode, pixelShaderByteCode);
|
||||
|
||||
return effect;
|
||||
PreventSystemChange();
|
||||
return new Effect_DX11(graphics, managedEffect, vertexShaderByteCode, pixelShaderByteCode);
|
||||
}
|
||||
|
||||
public INativeEffect CreateEffect(GraphicsDevice graphics, ANX.Framework.Graphics.Effect managedEffect, System.IO.Stream byteCode)
|
||||
public INativeEffect CreateEffect(GraphicsDevice graphics, Effect managedEffect, Stream byteCode)
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventSystemChange(AddInType.RenderSystem);
|
||||
|
||||
Effect_DX11 effect = new Effect_DX11(graphics, managedEffect, byteCode);
|
||||
|
||||
return effect;
|
||||
}
|
||||
|
||||
public Texture2D CreateTexture(GraphicsDevice graphics, string fileName)
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventSystemChange(AddInType.RenderSystem);
|
||||
|
||||
//TODO: implement
|
||||
throw new NotImplementedException();
|
||||
|
||||
//GraphicsDeviceWindowsDX10 graphicsDX10 = graphics.NativeDevice as GraphicsDeviceWindowsDX10;
|
||||
//SharpDX.Direct3D10.Texture2D nativeTexture = SharpDX.Direct3D10.Texture2D.FromFile<SharpDX.Direct3D10.Texture2D>(graphicsDX10.NativeDevice, fileName);
|
||||
//Texture2D_DX10 texture = new Texture2D_DX10(graphics, nativeTexture.Description.Width, nativeTexture.Description.Height, FormatConverter.Translate(nativeTexture.Description.Format), nativeTexture.Description.MipLevels);
|
||||
//texture.NativeTexture = nativeTexture;
|
||||
|
||||
//return texture;
|
||||
PreventSystemChange();
|
||||
return new Effect_DX11(graphics, managedEffect, byteCode);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region CreateBlendState
|
||||
public INativeBlendState CreateBlendState()
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventSystemChange(AddInType.RenderSystem);
|
||||
PreventSystemChange();
|
||||
return new BlendState_DX11();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region CreateRasterizerState
|
||||
public INativeRasterizerState CreateRasterizerState()
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventSystemChange(AddInType.RenderSystem);
|
||||
PreventSystemChange();
|
||||
return new RasterizerState_DX11();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region CreateDepthStencilState
|
||||
public INativeDepthStencilState CreateDepthStencilState()
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventSystemChange(AddInType.RenderSystem);
|
||||
PreventSystemChange();
|
||||
return new DepthStencilState_DX11();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region CreateSamplerState
|
||||
public INativeSamplerState CreateSamplerState()
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventSystemChange(AddInType.RenderSystem);
|
||||
PreventSystemChange();
|
||||
return new SamplerState_DX11();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region GetShaderByteCode
|
||||
public byte[] GetShaderByteCode(PreDefinedShader type)
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventSystemChange(AddInType.RenderSystem);
|
||||
PreventSystemChange();
|
||||
|
||||
if (type == PreDefinedShader.SpriteBatch)
|
||||
{
|
||||
@ -159,22 +160,16 @@ namespace ANX.RenderSystem.Windows.DX11
|
||||
return ShaderByteCode.SkinnedEffectByteCode;
|
||||
}
|
||||
|
||||
throw new NotImplementedException("ByteCode for '" + type.ToString() + "' is not yet available");
|
||||
throw new NotImplementedException("ByteCode for '" + type + "' is not yet available");
|
||||
}
|
||||
#endregion
|
||||
|
||||
public EffectSourceLanguage GetStockShaderSourceLanguage
|
||||
{
|
||||
get
|
||||
{
|
||||
return EffectSourceLanguage.HLSL_FX;
|
||||
}
|
||||
}
|
||||
|
||||
#region GetAdapterList
|
||||
public System.Collections.ObjectModel.ReadOnlyCollection<GraphicsAdapter> GetAdapterList()
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventSystemChange(AddInType.RenderSystem);
|
||||
PreventSystemChange();
|
||||
|
||||
SharpDX.DXGI.Factory factory = new Factory();
|
||||
var factory = new Factory();
|
||||
|
||||
List<GraphicsAdapter> adapterList = new List<GraphicsAdapter>();
|
||||
DisplayModeCollection displayModeCollection = new DisplayModeCollection();
|
||||
@ -202,7 +197,7 @@ namespace ANX.RenderSystem.Windows.DX11
|
||||
{
|
||||
DisplayMode displayMode = new DisplayMode()
|
||||
{
|
||||
Format = FormatConverter.Translate(modeDescription.Format),
|
||||
Format = BaseFormatConverter.Translate(modeDescription.Format),
|
||||
Width = modeDescription.Width,
|
||||
Height = modeDescription.Height,
|
||||
AspectRatio = (float)modeDescription.Width / (float)modeDescription.Height,
|
||||
@ -223,29 +218,39 @@ namespace ANX.RenderSystem.Windows.DX11
|
||||
|
||||
return new System.Collections.ObjectModel.ReadOnlyCollection<GraphicsAdapter>(adapterList);
|
||||
}
|
||||
#endregion
|
||||
|
||||
public INativeTexture2D CreateTexture(GraphicsDevice graphics, SurfaceFormat surfaceFormat, int width, int height, int mipCount)
|
||||
#region CreateTexture
|
||||
public INativeTexture2D CreateTexture(GraphicsDevice graphics, SurfaceFormat surfaceFormat, int width, int height,
|
||||
int mipCount)
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventSystemChange(AddInType.RenderSystem);
|
||||
|
||||
PreventSystemChange();
|
||||
return new Texture2D_DX11(graphics, width, height, surfaceFormat, mipCount);
|
||||
}
|
||||
#endregion
|
||||
|
||||
public INativeRenderTarget2D CreateRenderTarget(GraphicsDevice graphics, int width, int height, bool mipMap, SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount, RenderTargetUsage usage)
|
||||
#region CreateRenderTarget
|
||||
public INativeRenderTarget2D CreateRenderTarget(GraphicsDevice graphics, int width, int height, bool mipMap,
|
||||
SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount,
|
||||
RenderTargetUsage usage)
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventSystemChange(AddInType.RenderSystem);
|
||||
|
||||
return new RenderTarget2D_DX11(graphics, width, height, mipMap, preferredFormat, preferredDepthFormat, preferredMultiSampleCount, usage);
|
||||
PreventSystemChange();
|
||||
return new RenderTarget2D_DX11(graphics, width, height, mipMap, preferredFormat, preferredDepthFormat,
|
||||
preferredMultiSampleCount, usage);
|
||||
}
|
||||
#endregion
|
||||
|
||||
public bool IsLanguageSupported(EffectSourceLanguage sourceLanguage)
|
||||
#region IsLanguageSupported
|
||||
public bool IsLanguageSupported(EffectSourceLanguage sourceLanguage)
|
||||
{
|
||||
return sourceLanguage == EffectSourceLanguage.HLSL_FX || sourceLanguage == EffectSourceLanguage.HLSL;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region CreateOcclusionQuery (TODO)
|
||||
public IOcclusionQuery CreateOcclusionQuery()
|
||||
{
|
||||
PreventSystemChange();
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
#endregion
|
||||
@ -253,8 +258,16 @@ namespace ANX.RenderSystem.Windows.DX11
|
||||
#region SetTextureSampler (TODO)
|
||||
public void SetTextureSampler(int index, Texture value)
|
||||
{
|
||||
PreventSystemChange();
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region PreventSystemChange
|
||||
private void PreventSystemChange()
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventSystemChange(AddInType.RenderSystem);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
@ -1,14 +1,8 @@
|
||||
#region Using Statements
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using SharpDX.Direct3D11;
|
||||
using ANX.BaseDirectX;
|
||||
using ANX.Framework.Graphics;
|
||||
using ANX.Framework.NonXNA;
|
||||
using ANX.Framework;
|
||||
|
||||
#endregion // Using Statements
|
||||
using Dx11 = SharpDX.Direct3D11;
|
||||
|
||||
// This file is part of the ANX.Framework created by the
|
||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||
@ -16,284 +10,171 @@ using ANX.Framework;
|
||||
|
||||
namespace ANX.RenderSystem.Windows.DX11
|
||||
{
|
||||
public class DepthStencilState_DX11 : INativeDepthStencilState
|
||||
public class DepthStencilState_DX11 : BaseStateObject<Dx11.DepthStencilState>, INativeDepthStencilState
|
||||
{
|
||||
#region Private Members
|
||||
private DepthStencilStateDescription description;
|
||||
private SharpDX.Direct3D11.DepthStencilState nativeDepthStencilState;
|
||||
private bool nativeDepthStencilStateDirty;
|
||||
private bool bound;
|
||||
|
||||
private Dx11.DepthStencilStateDescription description;
|
||||
private int referenceStencil;
|
||||
|
||||
#endregion // Private Members
|
||||
#region Public
|
||||
public StencilOperation CounterClockwiseStencilDepthBufferFail
|
||||
{
|
||||
set
|
||||
{
|
||||
Dx11.StencilOperation operation = FormatConverter.Translate(value);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.BackFace.DepthFailOperation, ref operation);
|
||||
}
|
||||
}
|
||||
|
||||
public DepthStencilState_DX11()
|
||||
{
|
||||
this.description = new DepthStencilStateDescription();
|
||||
public StencilOperation CounterClockwiseStencilFail
|
||||
{
|
||||
set
|
||||
{
|
||||
Dx11.StencilOperation operation = FormatConverter.Translate(value);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.BackFace.FailOperation, ref operation);
|
||||
}
|
||||
}
|
||||
|
||||
this.nativeDepthStencilStateDirty = true;
|
||||
}
|
||||
public CompareFunction CounterClockwiseStencilFunction
|
||||
{
|
||||
set
|
||||
{
|
||||
Dx11.Comparison comparison = FormatConverter.Translate(value);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.BackFace.Comparison, ref comparison);
|
||||
}
|
||||
}
|
||||
|
||||
public void Apply(ANX.Framework.Graphics.GraphicsDevice graphicsDevice)
|
||||
{
|
||||
GraphicsDeviceWindowsDX11 gdx11 = graphicsDevice.NativeDevice as GraphicsDeviceWindowsDX11;
|
||||
DeviceContext context = gdx11.NativeDevice;
|
||||
public StencilOperation CounterClockwiseStencilPass
|
||||
{
|
||||
set
|
||||
{
|
||||
Dx11.StencilOperation operation = FormatConverter.Translate(value);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.BackFace.PassOperation, ref operation);
|
||||
}
|
||||
}
|
||||
|
||||
UpdateNativeDepthStencilState(context.Device);
|
||||
this.bound = true;
|
||||
public bool DepthBufferEnable
|
||||
{
|
||||
set
|
||||
{
|
||||
if (description.IsDepthEnabled != value)
|
||||
{
|
||||
description.IsDepthEnabled = value;
|
||||
isDirty = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
context.OutputMerger.SetDepthStencilState(nativeDepthStencilState, this.referenceStencil);
|
||||
}
|
||||
public CompareFunction DepthBufferFunction
|
||||
{
|
||||
set
|
||||
{
|
||||
Dx11.Comparison comparison = FormatConverter.Translate(value);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.DepthComparison, ref comparison);
|
||||
}
|
||||
}
|
||||
|
||||
public void Release()
|
||||
{
|
||||
this.bound = false;
|
||||
}
|
||||
public bool DepthBufferWriteEnable
|
||||
{
|
||||
set
|
||||
{
|
||||
Dx11.DepthWriteMask writeMask = value ? Dx11.DepthWriteMask.All : Dx11.DepthWriteMask.Zero;
|
||||
SetValueIfDifferentAndMarkDirty(ref description.DepthWriteMask, ref writeMask);
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (this.nativeDepthStencilState != null)
|
||||
{
|
||||
this.nativeDepthStencilState.Dispose();
|
||||
this.nativeDepthStencilState = null;
|
||||
}
|
||||
}
|
||||
public int ReferenceStencil
|
||||
{
|
||||
set
|
||||
{
|
||||
SetValueIfDifferentAndMarkDirty(ref referenceStencil, ref value);
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsBound
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.bound;
|
||||
}
|
||||
}
|
||||
public StencilOperation StencilDepthBufferFail
|
||||
{
|
||||
set
|
||||
{
|
||||
Dx11.StencilOperation operation = FormatConverter.Translate(value);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.FrontFace.DepthFailOperation, ref operation);
|
||||
}
|
||||
}
|
||||
|
||||
public ANX.Framework.Graphics.StencilOperation CounterClockwiseStencilDepthBufferFail
|
||||
{
|
||||
set
|
||||
{
|
||||
SharpDX.Direct3D11.StencilOperation operation = FormatConverter.Translate(value);
|
||||
public bool StencilEnable
|
||||
{
|
||||
set
|
||||
{
|
||||
if (description.IsStencilEnabled != value)
|
||||
{
|
||||
description.IsStencilEnabled = value;
|
||||
isDirty = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (description.BackFace.DepthFailOperation != operation)
|
||||
{
|
||||
description.BackFace.DepthFailOperation = operation;
|
||||
nativeDepthStencilStateDirty = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
public StencilOperation StencilFail
|
||||
{
|
||||
set
|
||||
{
|
||||
Dx11.StencilOperation operation = FormatConverter.Translate(value);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.FrontFace.FailOperation, ref operation);
|
||||
}
|
||||
}
|
||||
|
||||
public ANX.Framework.Graphics.StencilOperation CounterClockwiseStencilFail
|
||||
{
|
||||
set
|
||||
{
|
||||
SharpDX.Direct3D11.StencilOperation operation = FormatConverter.Translate(value);
|
||||
public CompareFunction StencilFunction
|
||||
{
|
||||
set
|
||||
{
|
||||
Dx11.Comparison comparison = FormatConverter.Translate(value);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.FrontFace.Comparison, ref comparison);
|
||||
}
|
||||
}
|
||||
|
||||
if (description.BackFace.FailOperation != operation)
|
||||
{
|
||||
description.BackFace.FailOperation = operation;
|
||||
nativeDepthStencilStateDirty = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
public int StencilMask
|
||||
{
|
||||
set
|
||||
{
|
||||
byte stencilMask = (byte)value; //TODO: check range
|
||||
SetValueIfDifferentAndMarkDirty(ref description.StencilReadMask, ref stencilMask);
|
||||
}
|
||||
}
|
||||
|
||||
public ANX.Framework.Graphics.CompareFunction CounterClockwiseStencilFunction
|
||||
{
|
||||
set
|
||||
{
|
||||
SharpDX.Direct3D11.Comparison comparison = FormatConverter.Translate(value);
|
||||
public StencilOperation StencilPass
|
||||
{
|
||||
set
|
||||
{
|
||||
Dx11.StencilOperation operation = FormatConverter.Translate(value);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.FrontFace.PassOperation, ref operation);
|
||||
}
|
||||
}
|
||||
|
||||
if (description.BackFace.Comparison != comparison)
|
||||
{
|
||||
description.BackFace.Comparison = comparison;
|
||||
nativeDepthStencilStateDirty = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
public int StencilWriteMask
|
||||
{
|
||||
set
|
||||
{
|
||||
byte stencilWriteMask = (byte)value; //TODO: check range
|
||||
SetValueIfDifferentAndMarkDirty(ref description.StencilWriteMask, ref stencilWriteMask);
|
||||
}
|
||||
}
|
||||
|
||||
public ANX.Framework.Graphics.StencilOperation CounterClockwiseStencilPass
|
||||
{
|
||||
set
|
||||
{
|
||||
SharpDX.Direct3D11.StencilOperation operation = FormatConverter.Translate(value);
|
||||
public bool TwoSidedStencilMode
|
||||
{
|
||||
set
|
||||
{
|
||||
//TODO: check if we really need this. in xna this enables only counter clockwise stencil operations
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
if (description.BackFace.PassOperation != operation)
|
||||
{
|
||||
description.BackFace.PassOperation = operation;
|
||||
nativeDepthStencilStateDirty = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
protected override Dx11.DepthStencilState CreateNativeState(GraphicsDevice graphics)
|
||||
{
|
||||
Dx11.DeviceContext context = (graphics.NativeDevice as GraphicsDeviceWindowsDX11).NativeDevice;
|
||||
return new Dx11.DepthStencilState(context.Device, ref description);
|
||||
}
|
||||
|
||||
public bool DepthBufferEnable
|
||||
{
|
||||
set
|
||||
{
|
||||
if (description.IsDepthEnabled != value)
|
||||
{
|
||||
description.IsDepthEnabled = value;
|
||||
nativeDepthStencilStateDirty = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ANX.Framework.Graphics.CompareFunction DepthBufferFunction
|
||||
{
|
||||
set
|
||||
{
|
||||
SharpDX.Direct3D11.Comparison comparison = FormatConverter.Translate(value);
|
||||
|
||||
if (description.DepthComparison != comparison)
|
||||
{
|
||||
description.DepthComparison = comparison;
|
||||
nativeDepthStencilStateDirty = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool DepthBufferWriteEnable
|
||||
{
|
||||
set
|
||||
{
|
||||
DepthWriteMask writeMask = value ? DepthWriteMask.All : DepthWriteMask.Zero;
|
||||
|
||||
if (description.DepthWriteMask != writeMask)
|
||||
{
|
||||
description.DepthWriteMask = writeMask;
|
||||
nativeDepthStencilStateDirty = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int ReferenceStencil
|
||||
{
|
||||
set
|
||||
{
|
||||
if (this.referenceStencil != value)
|
||||
{
|
||||
this.referenceStencil = value;
|
||||
this.nativeDepthStencilStateDirty = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ANX.Framework.Graphics.StencilOperation StencilDepthBufferFail
|
||||
{
|
||||
set
|
||||
{
|
||||
SharpDX.Direct3D11.StencilOperation operation = FormatConverter.Translate(value);
|
||||
|
||||
if (description.FrontFace.DepthFailOperation != operation)
|
||||
{
|
||||
description.FrontFace.DepthFailOperation = operation;
|
||||
nativeDepthStencilStateDirty = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool StencilEnable
|
||||
{
|
||||
set
|
||||
{
|
||||
if (description.IsStencilEnabled != value)
|
||||
{
|
||||
description.IsStencilEnabled = value;
|
||||
nativeDepthStencilStateDirty = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ANX.Framework.Graphics.StencilOperation StencilFail
|
||||
{
|
||||
set
|
||||
{
|
||||
SharpDX.Direct3D11.StencilOperation operation = FormatConverter.Translate(value);
|
||||
|
||||
if (description.FrontFace.FailOperation != operation)
|
||||
{
|
||||
description.FrontFace.FailOperation = operation;
|
||||
nativeDepthStencilStateDirty = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ANX.Framework.Graphics.CompareFunction StencilFunction
|
||||
{
|
||||
set
|
||||
{
|
||||
SharpDX.Direct3D11.Comparison comparison = FormatConverter.Translate(value);
|
||||
|
||||
if (description.FrontFace.Comparison != comparison)
|
||||
{
|
||||
description.FrontFace.Comparison = comparison;
|
||||
nativeDepthStencilStateDirty = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int StencilMask
|
||||
{
|
||||
set
|
||||
{
|
||||
byte stencilMask = (byte)value; //TODO: check range
|
||||
|
||||
if (description.StencilReadMask != stencilMask)
|
||||
{
|
||||
description.StencilReadMask = stencilMask;
|
||||
nativeDepthStencilStateDirty = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ANX.Framework.Graphics.StencilOperation StencilPass
|
||||
{
|
||||
set
|
||||
{
|
||||
SharpDX.Direct3D11.StencilOperation operation = FormatConverter.Translate(value);
|
||||
|
||||
if (description.FrontFace.PassOperation != operation)
|
||||
{
|
||||
description.FrontFace.PassOperation = operation;
|
||||
nativeDepthStencilStateDirty = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int StencilWriteMask
|
||||
{
|
||||
set
|
||||
{
|
||||
byte stencilWriteMask = (byte)value; //TODO: check range
|
||||
|
||||
if (description.StencilWriteMask != stencilWriteMask)
|
||||
{
|
||||
description.StencilWriteMask = stencilWriteMask;
|
||||
nativeDepthStencilStateDirty = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool TwoSidedStencilMode
|
||||
{
|
||||
set
|
||||
{
|
||||
//TODO: check if we really need this. in xna this enables only counter clockwise stencil operations
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateNativeDepthStencilState(Device device)
|
||||
{
|
||||
if (this.nativeDepthStencilStateDirty == true || this.nativeDepthStencilState == null)
|
||||
{
|
||||
if (this.nativeDepthStencilState != null)
|
||||
{
|
||||
this.nativeDepthStencilState.Dispose();
|
||||
this.nativeDepthStencilState = null;
|
||||
}
|
||||
|
||||
this.nativeDepthStencilState = new SharpDX.Direct3D11.DepthStencilState(device, ref this.description);
|
||||
|
||||
this.nativeDepthStencilStateDirty = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
protected override void ApplyNativeState(GraphicsDevice graphics)
|
||||
{
|
||||
Dx11.DeviceContext context = (graphics.NativeDevice as GraphicsDeviceWindowsDX11).NativeDevice;
|
||||
context.OutputMerger.SetDepthStencilState(nativeState, referenceStencil);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,289 +1,275 @@
|
||||
#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;
|
||||
using ANX.Framework.NonXNA.RenderSystem;
|
||||
using ANX.Framework;
|
||||
|
||||
#endregion // Using Statements
|
||||
using ANX.Framework.Graphics;
|
||||
using ANX.Framework.NonXNA;
|
||||
using Dx11 = SharpDX.Direct3D11;
|
||||
|
||||
// This file is part of the ANX.Framework created by the
|
||||
// "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
|
||||
{
|
||||
private EffectVariable nativeEffectVariable;
|
||||
|
||||
public EffectVariable NativeParameter
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.nativeEffectVariable;
|
||||
}
|
||||
internal set
|
||||
{
|
||||
this.nativeEffectVariable = value;
|
||||
}
|
||||
}
|
||||
|
||||
public void SetValue(bool value)
|
||||
{
|
||||
nativeEffectVariable.AsScalar().Set(value);
|
||||
}
|
||||
|
||||
public void SetValue(bool[] value)
|
||||
{
|
||||
nativeEffectVariable.AsScalar().Set(value);
|
||||
}
|
||||
|
||||
public void SetValue(int value)
|
||||
{
|
||||
nativeEffectVariable.AsScalar().Set(value);
|
||||
}
|
||||
|
||||
public void SetValue(int[] value)
|
||||
{
|
||||
nativeEffectVariable.AsScalar().Set(value);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
// TODO: handle transpose!
|
||||
int count = value.Length;
|
||||
SharpDX.Matrix[] m = new SharpDX.Matrix[count];
|
||||
Matrix anxMatrix;
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
anxMatrix = value[i];
|
||||
m[i] = new SharpDX.Matrix(anxMatrix.M11, anxMatrix.M12, anxMatrix.M13, anxMatrix.M14,
|
||||
anxMatrix.M21, anxMatrix.M22, anxMatrix.M23, anxMatrix.M24,
|
||||
anxMatrix.M31, anxMatrix.M32, anxMatrix.M33, anxMatrix.M34,
|
||||
anxMatrix.M41, anxMatrix.M42, anxMatrix.M43, anxMatrix.M44);
|
||||
}
|
||||
|
||||
nativeEffectVariable.AsMatrix().SetMatrix(m);
|
||||
}
|
||||
|
||||
public void SetValue(Quaternion value)
|
||||
{
|
||||
SharpDX.Vector4 q = new SharpDX.Vector4(value.X, value.Y, value.Z, value.W);
|
||||
nativeEffectVariable.AsVector().Set(q);
|
||||
}
|
||||
|
||||
public void SetValue(Quaternion[] value)
|
||||
{
|
||||
int count = value.Length;
|
||||
SharpDX.Vector4[] q = new SharpDX.Vector4[count];
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
q[i] = new SharpDX.Vector4(value[i].X, value[i].Y, value[i].Z, value[i].W);
|
||||
}
|
||||
nativeEffectVariable.AsVector().Set(q);
|
||||
}
|
||||
|
||||
public void SetValue(float value)
|
||||
{
|
||||
nativeEffectVariable.AsScalar().Set(value);
|
||||
}
|
||||
|
||||
public void SetValue(float[] value)
|
||||
{
|
||||
nativeEffectVariable.AsScalar().Set(value);
|
||||
}
|
||||
|
||||
public void SetValue(Vector2 value)
|
||||
{
|
||||
SharpDX.Vector2 v = new SharpDX.Vector2(value.X, value.Y);
|
||||
nativeEffectVariable.AsVector().Set(v);
|
||||
}
|
||||
|
||||
public void SetValue(Vector2[] value)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void SetValue(Vector3 value)
|
||||
{
|
||||
SharpDX.Vector3 v = new SharpDX.Vector3(value.X, value.Y, value.Z);
|
||||
nativeEffectVariable.AsVector().Set(v);
|
||||
}
|
||||
|
||||
public void SetValue(Vector3[] value)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void SetValue(Vector4 value)
|
||||
{
|
||||
SharpDX.Vector4 v = new SharpDX.Vector4(value.X, value.Y, value.Z, value.W);
|
||||
nativeEffectVariable.AsVector().Set(v);
|
||||
}
|
||||
|
||||
public void SetValue(Vector4[] value)
|
||||
{
|
||||
int count = value.Length;
|
||||
SharpDX.Vector4[] q = new SharpDX.Vector4[count];
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
q[i] = new SharpDX.Vector4(value[i].X, value[i].Y, value[i].Z, value[i].W);
|
||||
}
|
||||
nativeEffectVariable.AsVector().Set(q);
|
||||
}
|
||||
|
||||
public void SetValue(Texture value)
|
||||
{
|
||||
Texture2D_DX11 tex = value.NativeTexture as Texture2D_DX11;
|
||||
nativeEffectVariable.AsShaderResource().SetResource(tex.NativeShaderResourceView);
|
||||
}
|
||||
|
||||
public string Name
|
||||
{
|
||||
get
|
||||
{
|
||||
return nativeEffectVariable.Description.Name;
|
||||
}
|
||||
}
|
||||
|
||||
#region INativeEffectParameter Member
|
||||
|
||||
|
||||
public bool GetValueBoolean()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public bool[] GetValueBooleanArray(int count)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public int GetValueInt32()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public int[] GetValueInt32Array(int count)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Matrix GetValueMatrix()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Matrix[] GetValueMatrixArray(int count)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Matrix GetValueMatrixTranspose()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Matrix[] GetValueMatrixTransposeArray(int count)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Quaternion GetValueQuaternion()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Quaternion[] GetValueQuaternionArray(int count)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public float GetValueSingle()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public float[] GetValueSingleArray(int count)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public string GetValueString()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Framework.Graphics.Texture2D GetValueTexture2D()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Framework.Graphics.Texture3D GetValueTexture3D()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public TextureCube GetValueTextureCube()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Vector2 GetValueVector2()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Vector2[] GetValueVector2Array(int count)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Vector3 GetValueVector3()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Vector3[] GetValueVector3Array(int count)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Vector4 GetValueVector4()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Vector4[] GetValueVector4Array(int count)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region INativeEffectParameter Member
|
||||
|
||||
|
||||
public void SetValue(string value)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
#endregion
|
||||
public class EffectParameter_DX11 : INativeEffectParameter
|
||||
{
|
||||
#region Public
|
||||
public Dx11.EffectVariable NativeParameter
|
||||
{
|
||||
get;
|
||||
internal set;
|
||||
}
|
||||
|
||||
public string Name
|
||||
{
|
||||
get
|
||||
{
|
||||
return NativeParameter.Description.Name;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region SetValue (bool)
|
||||
public void SetValue(bool value)
|
||||
{
|
||||
NativeParameter.AsScalar().Set(value);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region SetValue (bool[])
|
||||
public void SetValue(bool[] value)
|
||||
{
|
||||
NativeParameter.AsScalar().Set(value);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region SetValue (int)
|
||||
public void SetValue(int value)
|
||||
{
|
||||
NativeParameter.AsScalar().Set(value);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region SetValue (int[])
|
||||
public void SetValue(int[] value)
|
||||
{
|
||||
NativeParameter.AsScalar().Set(value);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region SetValue (Matrix, transpose) (TODO)
|
||||
public void SetValue(Matrix value, bool transpose)
|
||||
{
|
||||
// TODO: handle transpose!
|
||||
NativeParameter.AsMatrix().SetMatrix(value);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region SetValue (Matrix[], transpose) (TODO)
|
||||
public void SetValue(Matrix[] value, bool transpose)
|
||||
{
|
||||
// TODO: handle transpose!
|
||||
NativeParameter.AsMatrix().SetMatrix(value);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region SetValue (Quaternion)
|
||||
public void SetValue(Quaternion value)
|
||||
{
|
||||
NativeParameter.AsVector().Set(value);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region SetValue (Quaternion[])
|
||||
public void SetValue(Quaternion[] value)
|
||||
{
|
||||
NativeParameter.AsVector().Set(value);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region SetValue (float)
|
||||
public void SetValue(float value)
|
||||
{
|
||||
NativeParameter.AsScalar().Set(value);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region SetValue (float[])
|
||||
public void SetValue(float[] value)
|
||||
{
|
||||
NativeParameter.AsScalar().Set(value);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region SetValue (Vector2)
|
||||
public void SetValue(Vector2 value)
|
||||
{
|
||||
NativeParameter.AsVector().Set(value);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region SetValue (Vector2[])
|
||||
public void SetValue(Vector2[] value)
|
||||
{
|
||||
NativeParameter.AsVector().Set(value);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region SetValue (Vector3)
|
||||
public void SetValue(Vector3 value)
|
||||
{
|
||||
NativeParameter.AsVector().Set(value);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region SetValue (Vector3[])
|
||||
public void SetValue(Vector3[] value)
|
||||
{
|
||||
NativeParameter.AsVector().Set(value);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region SetValue (Vector4)
|
||||
public void SetValue(Vector4 value)
|
||||
{
|
||||
NativeParameter.AsVector().Set(value);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region SetValue (Vector4[])
|
||||
public void SetValue(Vector4[] value)
|
||||
{
|
||||
NativeParameter.AsVector().Set(value);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region SetValue (Texture)
|
||||
public void SetValue(Texture value)
|
||||
{
|
||||
if (value == null)
|
||||
throw new ArgumentNullException("value");
|
||||
|
||||
var tex = value.NativeTexture as Texture2D_DX11;
|
||||
NativeParameter.AsShaderResource().SetResource(tex.NativeShaderResourceView);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region SetValue (string) (TODO)
|
||||
public void SetValue(string value)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Get (TODO)
|
||||
public bool GetValueBoolean()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public bool[] GetValueBooleanArray(int count)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public int GetValueInt32()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public int[] GetValueInt32Array(int count)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Matrix GetValueMatrix()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Matrix[] GetValueMatrixArray(int count)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Matrix GetValueMatrixTranspose()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Matrix[] GetValueMatrixTransposeArray(int count)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Quaternion GetValueQuaternion()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Quaternion[] GetValueQuaternionArray(int count)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public float GetValueSingle()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public float[] GetValueSingleArray(int count)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public string GetValueString()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Texture2D GetValueTexture2D()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Texture3D GetValueTexture3D()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public TextureCube GetValueTextureCube()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Vector2 GetValueVector2()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Vector2[] GetValueVector2Array(int count)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Vector3 GetValueVector3()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Vector3[] GetValueVector3Array(int count)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Vector4 GetValueVector4()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Vector4[] GetValueVector4Array(int count)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
@ -1,13 +1,6 @@
|
||||
#region Using Statements
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using ANX.Framework.NonXNA;
|
||||
using SharpDX.Direct3D11;
|
||||
|
||||
#endregion // Using Statements
|
||||
|
||||
// This file is part of the ANX.Framework created by the
|
||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||
// For details see: http://anxframework.codeplex.com/license
|
||||
@ -16,26 +9,19 @@ namespace ANX.RenderSystem.Windows.DX11
|
||||
{
|
||||
public class EffectPass_DX11 : INativeEffectPass
|
||||
{
|
||||
private EffectPass nativePass;
|
||||
|
||||
public EffectPass NativePass
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.nativePass;
|
||||
}
|
||||
internal set
|
||||
{
|
||||
this.nativePass = value;
|
||||
}
|
||||
}
|
||||
private EffectPass nativePass;
|
||||
|
||||
public string Name
|
||||
{
|
||||
get
|
||||
{
|
||||
return nativePass.Description.Name;
|
||||
return nativePass.Description.Name;
|
||||
}
|
||||
}
|
||||
|
||||
internal EffectPass_DX11(EffectPass setNativePass)
|
||||
{
|
||||
nativePass = setNativePass;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,12 +1,8 @@
|
||||
#region Using Statements
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using ANX.BaseDirectX;
|
||||
using ANX.Framework.Graphics;
|
||||
using ANX.Framework.NonXNA;
|
||||
using SharpDX.Direct3D11;
|
||||
|
||||
#endregion // Using Statements
|
||||
using Dx11 = SharpDX.Direct3D11;
|
||||
|
||||
// This file is part of the ANX.Framework created by the
|
||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||
@ -14,56 +10,32 @@ using SharpDX.Direct3D11;
|
||||
|
||||
namespace ANX.RenderSystem.Windows.DX11
|
||||
{
|
||||
public class EffectTechnique_DX11 : INativeEffectTechnique
|
||||
{
|
||||
private EffectTechnique nativeTechnique;
|
||||
private ANX.Framework.Graphics.Effect parentEffect;
|
||||
public class EffectTechnique_DX11 : BaseEffectTechnique<Dx11.EffectTechnique>, INativeEffectTechnique
|
||||
{
|
||||
public string Name
|
||||
{
|
||||
get
|
||||
{
|
||||
return NativeTechnique.Description.Name;
|
||||
}
|
||||
}
|
||||
|
||||
internal EffectTechnique_DX11(ANX.Framework.Graphics.Effect parentEffect)
|
||||
{
|
||||
if (parentEffect == null)
|
||||
{
|
||||
throw new ArgumentNullException("parentEffect");
|
||||
}
|
||||
public IEnumerable<EffectPass> Passes
|
||||
{
|
||||
get
|
||||
{
|
||||
for (int i = 0; i < NativeTechnique.Description.PassCount; i++)
|
||||
{
|
||||
var passDx11 = new EffectPass_DX11(NativeTechnique.GetPassByIndex(i));
|
||||
// TODO: wire up native pass and managed pass?
|
||||
yield return new EffectPass(this.parentEffect);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.parentEffect = parentEffect;
|
||||
}
|
||||
|
||||
public EffectTechnique NativeTechnique
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.nativeTechnique;
|
||||
}
|
||||
internal set
|
||||
{
|
||||
this.nativeTechnique = value;
|
||||
}
|
||||
}
|
||||
|
||||
public string Name
|
||||
{
|
||||
get
|
||||
{
|
||||
return nativeTechnique.Description.Name;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public IEnumerable<ANX.Framework.Graphics.EffectPass> Passes
|
||||
{
|
||||
get
|
||||
{
|
||||
for (int i = 0; i < nativeTechnique.Description.PassCount; i++)
|
||||
{
|
||||
EffectPass_DX11 passDx11 = new EffectPass_DX11();
|
||||
passDx11.NativePass = nativeTechnique.GetPassByIndex(i);
|
||||
|
||||
ANX.Framework.Graphics.EffectPass pass = new ANX.Framework.Graphics.EffectPass(this.parentEffect);
|
||||
|
||||
yield return pass;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
public EffectTechnique_DX11(Effect parentEffect, Dx11.EffectTechnique nativeTechnique)
|
||||
: base(parentEffect, nativeTechnique)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,9 +1,10 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using SharpDX.D3DCompiler;
|
||||
using System.IO;
|
||||
using ANX.Framework.NonXNA;
|
||||
using ANX.Framework.Graphics;
|
||||
using ANX.Framework.NonXNA;
|
||||
using ANX.RenderSystem.Windows.DX11.Helpers;
|
||||
using SharpDX.D3DCompiler;
|
||||
using Dx11 = SharpDX.Direct3D11;
|
||||
|
||||
// This file is part of the ANX.Framework created by the
|
||||
@ -33,8 +34,7 @@ namespace ANX.RenderSystem.Windows.DX11
|
||||
{
|
||||
for (int i = 0; i < NativeEffect.Description.TechniqueCount; i++)
|
||||
{
|
||||
EffectTechnique_DX11 teqDx11 = new EffectTechnique_DX11(this.managedEffect);
|
||||
teqDx11.NativeTechnique = NativeEffect.GetTechniqueByIndex(i);
|
||||
var teqDx11 = new EffectTechnique_DX11(managedEffect, NativeEffect.GetTechniqueByIndex(i));
|
||||
yield return new EffectTechnique(this.managedEffect, teqDx11);
|
||||
}
|
||||
}
|
||||
|
@ -15,82 +15,6 @@ namespace ANX.RenderSystem.Windows.DX11
|
||||
{
|
||||
internal class FormatConverter
|
||||
{
|
||||
|
||||
public static int FormatSize(SurfaceFormat format)
|
||||
{
|
||||
switch (format)
|
||||
{
|
||||
case SurfaceFormat.Vector4:
|
||||
return 16;
|
||||
//case SurfaceFormat.Vector3:
|
||||
// return 12;
|
||||
case SurfaceFormat.Vector2:
|
||||
return 8;
|
||||
case SurfaceFormat.Single:
|
||||
case SurfaceFormat.Color:
|
||||
//case SurfaceFormat.RGBA1010102:
|
||||
//case SurfaceFormat.RG32:
|
||||
return 4;
|
||||
//case SurfaceFormat.BGR565:
|
||||
//case SurfaceFormat.BGRA5551:
|
||||
// return 2;
|
||||
case SurfaceFormat.Dxt1:
|
||||
case SurfaceFormat.Dxt3:
|
||||
case SurfaceFormat.Dxt5:
|
||||
case SurfaceFormat.Alpha8:
|
||||
return 1;
|
||||
default:
|
||||
throw new ArgumentException("Invalid format");
|
||||
}
|
||||
}
|
||||
|
||||
public static SharpDX.DXGI.Format Translate(SurfaceFormat surfaceFormat)
|
||||
{
|
||||
switch (surfaceFormat)
|
||||
{
|
||||
case SurfaceFormat.Color:
|
||||
return SharpDX.DXGI.Format.R8G8B8A8_UNorm;
|
||||
case SurfaceFormat.Dxt3:
|
||||
return SharpDX.DXGI.Format.BC2_UNorm;
|
||||
case SurfaceFormat.Dxt5:
|
||||
return SharpDX.DXGI.Format.BC3_UNorm;
|
||||
}
|
||||
|
||||
throw new Exception("can't translate SurfaceFormat: " + surfaceFormat.ToString());
|
||||
}
|
||||
|
||||
public static Format Translate(ANX.Framework.Graphics.DepthFormat depthFormat)
|
||||
{
|
||||
switch (depthFormat)
|
||||
{
|
||||
case DepthFormat.Depth16:
|
||||
return Format.D16_UNorm;
|
||||
case DepthFormat.Depth24:
|
||||
//TODO: no DirectX10 24Bit depth format???
|
||||
case DepthFormat.Depth24Stencil8:
|
||||
return Format.D24_UNorm_S8_UInt;
|
||||
case DepthFormat.None:
|
||||
return Format.Unknown;
|
||||
}
|
||||
|
||||
throw new Exception("can't translate DepthFormat: " + depthFormat.ToString());
|
||||
}
|
||||
|
||||
public static SurfaceFormat Translate(SharpDX.DXGI.Format format)
|
||||
{
|
||||
switch (format)
|
||||
{
|
||||
case SharpDX.DXGI.Format.R8G8B8A8_UNorm:
|
||||
return SurfaceFormat.Color;
|
||||
case SharpDX.DXGI.Format.BC2_UNorm:
|
||||
return SurfaceFormat.Dxt3;
|
||||
case SharpDX.DXGI.Format.BC3_UNorm:
|
||||
return SurfaceFormat.Dxt5;
|
||||
}
|
||||
|
||||
throw new Exception("can't translate Format: " + format.ToString());
|
||||
}
|
||||
|
||||
public static Filter Translate(TextureFilter filter)
|
||||
{
|
||||
switch (filter)
|
||||
@ -133,49 +57,6 @@ namespace ANX.RenderSystem.Windows.DX11
|
||||
return SharpDX.Direct3D11.TextureAddressMode.Clamp;
|
||||
}
|
||||
|
||||
public static 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());
|
||||
}
|
||||
}
|
||||
|
||||
public static 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());
|
||||
}
|
||||
}
|
||||
|
||||
public static string Translate(VertexElementUsage usage)
|
||||
{
|
||||
//TODO: map the other Usages
|
||||
if (usage == VertexElementUsage.TextureCoordinate)
|
||||
{
|
||||
return "TEXCOORD";
|
||||
}
|
||||
else
|
||||
{
|
||||
return usage.ToString().ToUpperInvariant();
|
||||
}
|
||||
}
|
||||
|
||||
public static BlendOperation Translate(BlendFunction blendFunction)
|
||||
{
|
||||
switch (blendFunction)
|
||||
@ -235,29 +116,19 @@ namespace ANX.RenderSystem.Windows.DX11
|
||||
ColorWriteMaskFlags mask = 0;
|
||||
|
||||
if ((colorWriteChannels & ColorWriteChannels.All) == ColorWriteChannels.All)
|
||||
{
|
||||
mask |= ColorWriteMaskFlags.All;
|
||||
}
|
||||
|
||||
if ((colorWriteChannels & ColorWriteChannels.Alpha) == ColorWriteChannels.Alpha)
|
||||
{
|
||||
mask |= ColorWriteMaskFlags.Alpha;
|
||||
}
|
||||
|
||||
if ((colorWriteChannels & ColorWriteChannels.Blue) == ColorWriteChannels.Blue)
|
||||
{
|
||||
mask |= ColorWriteMaskFlags.Blue;
|
||||
}
|
||||
|
||||
if ((colorWriteChannels & ColorWriteChannels.Green) == ColorWriteChannels.Green)
|
||||
{
|
||||
mask |= ColorWriteMaskFlags.Green;
|
||||
}
|
||||
|
||||
if ((colorWriteChannels & ColorWriteChannels.Red) == ColorWriteChannels.Red)
|
||||
{
|
||||
mask |= ColorWriteMaskFlags.Red;
|
||||
}
|
||||
|
||||
return mask;
|
||||
}
|
||||
|
@ -1,22 +1,19 @@
|
||||
#region Using Statements
|
||||
using System;
|
||||
using SharpDX.DXGI;
|
||||
using SharpDX.Direct3D;
|
||||
using SharpDX.D3DCompiler;
|
||||
using SharpDX.Direct3D11;
|
||||
using ANX.Framework;
|
||||
using ANX.Framework.NonXNA;
|
||||
using ANX.Framework.Graphics;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
#endregion // Using Statements
|
||||
using ANX.Framework.NonXNA;
|
||||
using ANX.RenderSystem.Windows.DX11.Helpers;
|
||||
using SharpDX.D3DCompiler;
|
||||
using SharpDX.Direct3D;
|
||||
using SharpDX.Direct3D11;
|
||||
using SharpDX.DXGI;
|
||||
using Device = SharpDX.Direct3D11.Device;
|
||||
using ANX.BaseDirectX;
|
||||
|
||||
// This file is part of the ANX.Framework created by the
|
||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||
// For details see: http://anxframework.codeplex.com/license
|
||||
|
||||
using Device = SharpDX.Direct3D11.Device;
|
||||
|
||||
namespace ANX.RenderSystem.Windows.DX11
|
||||
{
|
||||
public class GraphicsDeviceWindowsDX11 : INativeGraphicsDevice
|
||||
@ -25,30 +22,7 @@ namespace ANX.RenderSystem.Windows.DX11
|
||||
private const float ColorMultiplier = 1f / 255f;
|
||||
#endregion
|
||||
|
||||
#region Interop
|
||||
[DllImport("user32.dll")]
|
||||
private static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int width, int height, uint uFlags);
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
static extern bool GetClientRect(IntPtr hWnd, out RECT lpRect);
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct RECT
|
||||
{
|
||||
public int Left; // x position of upper-left corner
|
||||
public int Top; // y position of upper-left corner
|
||||
public int Right; // x position of lower-right corner
|
||||
public int Bottom; // y position of lower-right corner
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Private Members
|
||||
#region Private
|
||||
private DeviceContext deviceContext;
|
||||
private SwapChain swapChain;
|
||||
private RenderTargetView renderView;
|
||||
@ -62,19 +36,29 @@ namespace ANX.RenderSystem.Windows.DX11
|
||||
private SharpDX.Direct3D11.Viewport currentViewport;
|
||||
private uint lastClearColor;
|
||||
private SharpDX.Color4 clearColor;
|
||||
private bool vSyncEnabled;
|
||||
#endregion
|
||||
|
||||
#endregion // Private Members
|
||||
internal DeviceContext NativeDevice
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.deviceContext;
|
||||
}
|
||||
}
|
||||
|
||||
public bool VSync { get; set; }
|
||||
|
||||
public GraphicsDeviceWindowsDX11(PresentationParameters presentationParameters)
|
||||
{
|
||||
this.vSyncEnabled = true;
|
||||
VSync = true;
|
||||
|
||||
// SwapChain description
|
||||
var desc = new SwapChainDescription()
|
||||
{
|
||||
BufferCount = 1,
|
||||
ModeDescription = new ModeDescription(presentationParameters.BackBufferWidth, presentationParameters.BackBufferHeight, new Rational(60, 1), FormatConverter.Translate(presentationParameters.BackBufferFormat)),
|
||||
ModeDescription = new ModeDescription(presentationParameters.BackBufferWidth,
|
||||
presentationParameters.BackBufferHeight, new Rational(60, 1),
|
||||
BaseFormatConverter.Translate(presentationParameters.BackBufferFormat)),
|
||||
IsWindowed = true,
|
||||
OutputHandle = presentationParameters.DeviceWindowHandle,
|
||||
SampleDescription = new SampleDescription(1, 0),
|
||||
@ -97,7 +81,7 @@ namespace ANX.RenderSystem.Windows.DX11
|
||||
Factory factory = swapChain.GetParent<Factory>();
|
||||
factory.MakeWindowAssociation(presentationParameters.DeviceWindowHandle, WindowAssociationFlags.IgnoreAll);
|
||||
|
||||
ResizeRenderWindow(presentationParameters);
|
||||
WindowHelper.ResizeRenderWindow(presentationParameters);
|
||||
|
||||
// New RenderTargetView from the backbuffer
|
||||
backBuffer = SharpDX.Direct3D11.Texture2D.FromSwapChain<SharpDX.Direct3D11.Texture2D>(swapChain, 0);
|
||||
@ -108,7 +92,7 @@ namespace ANX.RenderSystem.Windows.DX11
|
||||
//
|
||||
// create the depth stencil buffer
|
||||
//
|
||||
Format depthFormat = FormatConverter.Translate(presentationParameters.DepthStencilFormat);
|
||||
Format depthFormat = BaseFormatConverter.Translate(presentationParameters.DepthStencilFormat);
|
||||
if (depthFormat != Format.Unknown)
|
||||
{
|
||||
CreateDepthStencilBuffer(depthFormat);
|
||||
@ -254,10 +238,9 @@ namespace ANX.RenderSystem.Windows.DX11
|
||||
#region Present
|
||||
public void Present()
|
||||
{
|
||||
swapChain.Present(this.vSyncEnabled ? 1 : 0, PresentFlags.None);
|
||||
swapChain.Present(VSync ? 1 : 0, PresentFlags.None);
|
||||
}
|
||||
|
||||
#endregion // Present
|
||||
#endregion
|
||||
|
||||
#region DrawPrimitives & DrawIndexedPrimitives
|
||||
public void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex,
|
||||
@ -271,7 +254,7 @@ namespace ANX.RenderSystem.Windows.DX11
|
||||
SetupInputLayout(passSignature);
|
||||
|
||||
// Prepare All the stages
|
||||
deviceContext.InputAssembler.PrimitiveTopology = FormatConverter.Translate(primitiveType);
|
||||
deviceContext.InputAssembler.PrimitiveTopology = BaseFormatConverter.Translate(primitiveType);
|
||||
deviceContext.Rasterizer.SetViewports(currentViewport);
|
||||
|
||||
deviceContext.OutputMerger.SetTargets(this.depthStencilView, this.renderView);
|
||||
@ -279,7 +262,7 @@ namespace ANX.RenderSystem.Windows.DX11
|
||||
for (int i = 0; i < technique.Description.PassCount; ++i)
|
||||
{
|
||||
pass.Apply(deviceContext);
|
||||
deviceContext.DrawIndexed(CalculateVertexCount(primitiveType, primitiveCount), startIndex, baseVertex);
|
||||
deviceContext.DrawIndexed(BaseFormatConverter.CalculateVertexCount(primitiveType, primitiveCount), startIndex, baseVertex);
|
||||
}
|
||||
}
|
||||
|
||||
@ -291,7 +274,7 @@ namespace ANX.RenderSystem.Windows.DX11
|
||||
SetupInputLayout(passSignature);
|
||||
|
||||
// Prepare All the stages
|
||||
deviceContext.InputAssembler.PrimitiveTopology = FormatConverter.Translate(primitiveType);
|
||||
deviceContext.InputAssembler.PrimitiveTopology = BaseFormatConverter.Translate(primitiveType);
|
||||
deviceContext.Rasterizer.SetViewports(currentViewport);
|
||||
|
||||
deviceContext.OutputMerger.SetTargets(this.depthStencilView, this.renderView);
|
||||
@ -358,7 +341,7 @@ namespace ANX.RenderSystem.Windows.DX11
|
||||
|
||||
deviceContext.InputAssembler.InputLayout = layout;
|
||||
// Prepare All the stages
|
||||
deviceContext.InputAssembler.PrimitiveTopology = FormatConverter.Translate(primitiveType);
|
||||
deviceContext.InputAssembler.PrimitiveTopology = BaseFormatConverter.Translate(primitiveType);
|
||||
deviceContext.Rasterizer.SetViewports(currentViewport);
|
||||
|
||||
//device.OutputMerger.SetTargets(this.depthStencilView, this.renderView);
|
||||
@ -372,14 +355,6 @@ namespace ANX.RenderSystem.Windows.DX11
|
||||
|
||||
#endregion // DrawUserPrimitives<T>
|
||||
|
||||
internal DeviceContext NativeDevice
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.deviceContext;
|
||||
}
|
||||
}
|
||||
|
||||
private void SetupEffectForDraw(out SharpDX.Direct3D11.EffectPass pass, out SharpDX.Direct3D11.EffectTechnique technique, out ShaderBytecode passSignature)
|
||||
{
|
||||
// get the current effect
|
||||
@ -404,30 +379,6 @@ namespace ANX.RenderSystem.Windows.DX11
|
||||
deviceContext.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 SetIndexBuffer(IndexBuffer indexBuffer)
|
||||
{
|
||||
if (indexBuffer == null)
|
||||
@ -441,7 +392,8 @@ namespace ANX.RenderSystem.Windows.DX11
|
||||
|
||||
if (nativeIndexBuffer != null)
|
||||
{
|
||||
deviceContext.InputAssembler.SetIndexBuffer(nativeIndexBuffer.NativeBuffer, FormatConverter.Translate(indexBuffer.IndexElementSize), 0);
|
||||
deviceContext.InputAssembler.SetIndexBuffer(nativeIndexBuffer.NativeBuffer,
|
||||
BaseFormatConverter.Translate(indexBuffer.IndexElementSize), 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -514,8 +466,8 @@ namespace ANX.RenderSystem.Windows.DX11
|
||||
}
|
||||
|
||||
private InputElement CreateInputElementFromVertexElement(VertexElement vertexElement)
|
||||
{
|
||||
string elementName = FormatConverter.Translate(vertexElement.VertexElementUsage);
|
||||
{
|
||||
string elementName = BaseFormatConverter.Translate(ref vertexElement);
|
||||
|
||||
Format elementFormat;
|
||||
switch (vertexElement.VertexElementFormat)
|
||||
@ -628,40 +580,14 @@ namespace ANX.RenderSystem.Windows.DX11
|
||||
//
|
||||
// create the depth stencil buffer
|
||||
//
|
||||
Format depthFormat = FormatConverter.Translate(presentationParameters.DepthStencilFormat);
|
||||
Format depthFormat = BaseFormatConverter.Translate(presentationParameters.DepthStencilFormat);
|
||||
if (depthFormat != Format.Unknown)
|
||||
{
|
||||
CreateDepthStencilBuffer(depthFormat);
|
||||
}
|
||||
}
|
||||
|
||||
ResizeRenderWindow(presentationParameters);
|
||||
}
|
||||
|
||||
private void ResizeRenderWindow(PresentationParameters presentationParameters)
|
||||
{
|
||||
RECT windowRect;
|
||||
RECT clientRect;
|
||||
if (GetWindowRect(presentationParameters.DeviceWindowHandle, out windowRect) &&
|
||||
GetClientRect(presentationParameters.DeviceWindowHandle, out clientRect))
|
||||
{
|
||||
int width = presentationParameters.BackBufferWidth + ((windowRect.Right - windowRect.Left) - clientRect.Right);
|
||||
int height = presentationParameters.BackBufferHeight + ((windowRect.Bottom - windowRect.Top) - clientRect.Bottom);
|
||||
|
||||
SetWindowPos(presentationParameters.DeviceWindowHandle, IntPtr.Zero, windowRect.Left, windowRect.Top, width, height, 0);
|
||||
}
|
||||
}
|
||||
|
||||
public bool VSync
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.vSyncEnabled;
|
||||
}
|
||||
set
|
||||
{
|
||||
this.vSyncEnabled = value;
|
||||
}
|
||||
WindowHelper.ResizeRenderWindow(presentationParameters);
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
|
@ -1,24 +1,18 @@
|
||||
#region Using Statements
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using SharpDX.D3DCompiler;
|
||||
using System.IO;
|
||||
using ANX.Framework.NonXNA;
|
||||
using ANX.Framework.Graphics;
|
||||
|
||||
#endregion // Using Statements
|
||||
using SharpDX.D3DCompiler;
|
||||
|
||||
// This file is part of the ANX.Framework created by the
|
||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||
// For details see: http://anxframework.codeplex.com/license
|
||||
|
||||
namespace ANX.RenderSystem.Windows.DX11
|
||||
namespace ANX.RenderSystem.Windows.DX11.Helpers
|
||||
{
|
||||
internal class IncludeHandler : Include
|
||||
{
|
||||
private string directory;
|
||||
private string directory;
|
||||
|
||||
public IDisposable Shadow { get; set; }
|
||||
|
||||
public IncludeHandler(string directory)
|
||||
{
|
||||
@ -34,13 +28,7 @@ namespace ANX.RenderSystem.Windows.DX11
|
||||
{
|
||||
//Console.WriteLine("Including {0} file {1} from directory {2}", type.ToString(), fileName, directory);
|
||||
|
||||
return System.IO.File.OpenRead(System.IO.Path.Combine(directory, fileName));
|
||||
}
|
||||
|
||||
public IDisposable Shadow
|
||||
{
|
||||
get;
|
||||
set;
|
||||
return File.OpenRead(Path.Combine(directory, fileName));
|
||||
}
|
||||
|
||||
public void Dispose()
|
@ -1,8 +1,9 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using ANX.BaseDirectX;
|
||||
using ANX.Framework.Graphics;
|
||||
using ANX.Framework.NonXNA.RenderSystem;
|
||||
using SharpDX.Direct3D11;
|
||||
using SharpDX;
|
||||
using Dx11 = SharpDX.Direct3D11;
|
||||
|
||||
// This file is part of the ANX.Framework created by the
|
||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||
@ -10,133 +11,63 @@ using SharpDX.Direct3D11;
|
||||
|
||||
namespace ANX.RenderSystem.Windows.DX11
|
||||
{
|
||||
public class IndexBuffer_DX11 : INativeIndexBuffer, IDisposable
|
||||
public class IndexBuffer_DX11 : BaseIndexBuffer<Dx11.Buffer>, INativeIndexBuffer, IDisposable
|
||||
{
|
||||
private IndexElementSize size;
|
||||
|
||||
public SharpDX.Direct3D11.Buffer NativeBuffer { get; private set; }
|
||||
|
||||
#region Constructor
|
||||
public IndexBuffer_DX11(GraphicsDevice graphics, IndexElementSize size, int indexCount, BufferUsage usage)
|
||||
{
|
||||
this.size = size;
|
||||
|
||||
//TODO: translate and use usage
|
||||
|
||||
elementSize = size;
|
||||
GraphicsDeviceWindowsDX11 gd11 = graphics.NativeDevice as GraphicsDeviceWindowsDX11;
|
||||
SharpDX.Direct3D11.DeviceContext context = gd11 != null ?
|
||||
gd11.NativeDevice as SharpDX.Direct3D11.DeviceContext :
|
||||
null;
|
||||
Dx11.DeviceContext context = gd11 != null ? gd11.NativeDevice as Dx11.DeviceContext : null;
|
||||
|
||||
InitializeBuffer(context.Device, size, indexCount, usage);
|
||||
}
|
||||
|
||||
internal IndexBuffer_DX11(SharpDX.Direct3D11.Device device, IndexElementSize size, int indexCount, BufferUsage usage)
|
||||
{
|
||||
this.size = size;
|
||||
elementSize = size;
|
||||
InitializeBuffer(device, size, indexCount, usage);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region InitializeBuffer
|
||||
private void InitializeBuffer(SharpDX.Direct3D11.Device device, IndexElementSize size, int indexCount, BufferUsage usage)
|
||||
private void InitializeBuffer(Dx11.Device device, IndexElementSize size, int indexCount, BufferUsage usage)
|
||||
{
|
||||
BufferDescription description = new BufferDescription()
|
||||
//TODO: translate and use usage
|
||||
var description = new Dx11.BufferDescription()
|
||||
{
|
||||
// TODO: translate usage
|
||||
Usage = ResourceUsage.Dynamic,
|
||||
SizeInBytes = (size == IndexElementSize.SixteenBits ? 2 : 4) * indexCount,
|
||||
BindFlags = BindFlags.IndexBuffer,
|
||||
CpuAccessFlags = CpuAccessFlags.Write,
|
||||
OptionFlags = ResourceOptionFlags.None
|
||||
Usage = Dx11.ResourceUsage.Dynamic,
|
||||
SizeInBytes = GetSizeInBytes(indexCount),
|
||||
BindFlags = Dx11.BindFlags.IndexBuffer,
|
||||
CpuAccessFlags = Dx11.CpuAccessFlags.Write,
|
||||
OptionFlags = Dx11.ResourceOptionFlags.None
|
||||
};
|
||||
|
||||
NativeBuffer = new SharpDX.Direct3D11.Buffer(device, description);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region SetData
|
||||
public void SetData<T>(GraphicsDevice graphicsDevice, T[] data) where T : struct
|
||||
protected override DataStream MapBufferWrite()
|
||||
{
|
||||
SetData<T>(graphicsDevice, data, 0, data.Length);
|
||||
Dx11.DeviceContext context = NativeBuffer.Device.ImmediateContext;
|
||||
DataStream stream;
|
||||
context.MapSubresource(NativeBuffer, Dx11.MapMode.WriteDiscard, Dx11.MapFlags.None, out stream);
|
||||
return stream;
|
||||
}
|
||||
|
||||
public void SetData<T>(GraphicsDevice graphicsDevice, int offsetInBytes, T[] data, int startIndex, int elementCount)
|
||||
where T : struct
|
||||
protected override DataStream MapBufferRead()
|
||||
{
|
||||
GraphicsDeviceWindowsDX11 dx11GraphicsDevice = graphicsDevice.NativeDevice as GraphicsDeviceWindowsDX11;
|
||||
DeviceContext context = dx11GraphicsDevice.NativeDevice;
|
||||
|
||||
//TODO: check offsetInBytes parameter for bounds etc.
|
||||
|
||||
SharpDX.DataStream stream;
|
||||
context.MapSubresource(NativeBuffer, MapMode.WriteDiscard, MapFlags.None, out stream);
|
||||
|
||||
if (offsetInBytes > 0)
|
||||
stream.Seek(offsetInBytes, SeekOrigin.Current);
|
||||
|
||||
if (startIndex > 0 || elementCount < data.Length)
|
||||
for (int i = startIndex; i < startIndex + elementCount; i++)
|
||||
stream.Write<T>(data[i]);
|
||||
else
|
||||
for (int i = 0; i < data.Length; i++)
|
||||
stream.Write<T>(data[i]);
|
||||
Dx11.DeviceContext context = NativeBuffer.Device.ImmediateContext;
|
||||
DataStream stream;
|
||||
context.MapSubresource(NativeBuffer, Dx11.MapMode.Read, Dx11.MapFlags.None, out stream);
|
||||
return stream;
|
||||
}
|
||||
|
||||
protected override void UnmapBuffer()
|
||||
{
|
||||
Dx11.DeviceContext context = NativeBuffer.Device.ImmediateContext;
|
||||
context.UnmapSubresource(NativeBuffer, 0);
|
||||
}
|
||||
|
||||
public void SetData<T>(GraphicsDevice graphicsDevice, T[] data, int startIndex, int elementCount) where T : struct
|
||||
{
|
||||
SetData<T>(graphicsDevice, 0, data, startIndex, elementCount);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Dispose
|
||||
public void Dispose()
|
||||
{
|
||||
if (NativeBuffer != null)
|
||||
{
|
||||
NativeBuffer.Dispose();
|
||||
NativeBuffer = null;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region GetData
|
||||
public void GetData<T>(T[] data) where T : struct
|
||||
{
|
||||
DeviceContext context = NativeBuffer.Device.ImmediateContext;
|
||||
|
||||
SharpDX.DataStream stream;
|
||||
context.MapSubresource(NativeBuffer, MapMode.Read, MapFlags.None, out stream);
|
||||
stream.ReadRange(data, 0, data.Length);
|
||||
context.UnmapSubresource(NativeBuffer, 0);
|
||||
}
|
||||
|
||||
public void GetData<T>(T[] data, int startIndex, int elementCount) where T : struct
|
||||
{
|
||||
DeviceContext context = NativeBuffer.Device.ImmediateContext;
|
||||
|
||||
SharpDX.DataStream stream;
|
||||
context.MapSubresource(NativeBuffer, MapMode.Read, MapFlags.None, out stream);
|
||||
stream.ReadRange(data, startIndex, elementCount);
|
||||
context.UnmapSubresource(NativeBuffer, 0);
|
||||
}
|
||||
|
||||
public void GetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount) where T : struct
|
||||
{
|
||||
DeviceContext context = NativeBuffer.Device.ImmediateContext;
|
||||
|
||||
SharpDX.DataStream stream;
|
||||
context.MapSubresource(NativeBuffer, MapMode.Read, MapFlags.None, out stream);
|
||||
|
||||
if (offsetInBytes > 0)
|
||||
stream.Seek(offsetInBytes, SeekOrigin.Current);
|
||||
|
||||
stream.ReadRange(data, startIndex, elementCount);
|
||||
context.UnmapSubresource(NativeBuffer, 0);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
@ -1,13 +1,8 @@
|
||||
#region Using Statements
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using SharpDX.Direct3D11;
|
||||
using ANX.BaseDirectX;
|
||||
using ANX.Framework.Graphics;
|
||||
using ANX.Framework.NonXNA;
|
||||
|
||||
#endregion // Using Statements
|
||||
using Dx11 = SharpDX.Direct3D11;
|
||||
|
||||
// This file is part of the ANX.Framework created by the
|
||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||
@ -15,155 +10,89 @@ using ANX.Framework.NonXNA;
|
||||
|
||||
namespace ANX.RenderSystem.Windows.DX11
|
||||
{
|
||||
public class RasterizerState_DX11 : INativeRasterizerState
|
||||
{
|
||||
#region Private Members
|
||||
private RasterizerStateDescription description;
|
||||
private SharpDX.Direct3D11.RasterizerState nativeRasterizerState;
|
||||
private bool nativeRasterizerStateDirty;
|
||||
private bool bound;
|
||||
public class RasterizerState_DX11 : BaseStateObject<Dx11.RasterizerState>, INativeRasterizerState
|
||||
{
|
||||
private Dx11.RasterizerStateDescription description;
|
||||
|
||||
private const int intMaxOver16 = int.MaxValue / 16;
|
||||
#region Public
|
||||
public CullMode CullMode
|
||||
{
|
||||
set
|
||||
{
|
||||
SharpDX.Direct3D11.CullMode cullMode = FormatConverter.Translate(value);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.CullMode, ref cullMode);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion // Private Members
|
||||
public float DepthBias
|
||||
{
|
||||
set
|
||||
{
|
||||
// XNA uses a float value in the range of 0f..16f as value
|
||||
// DirectX 10 uses a INT value
|
||||
|
||||
public RasterizerState_DX11()
|
||||
{
|
||||
this.description = new RasterizerStateDescription();
|
||||
int depthBiasValue = (int)(value * IntMaxOver16);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.DepthBias, ref depthBiasValue);
|
||||
}
|
||||
}
|
||||
|
||||
this.description.IsAntialiasedLineEnabled = false;
|
||||
public FillMode FillMode
|
||||
{
|
||||
set
|
||||
{
|
||||
SharpDX.Direct3D11.FillMode fillMode = FormatConverter.Translate(value);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.FillMode, ref fillMode);
|
||||
}
|
||||
}
|
||||
|
||||
this.nativeRasterizerStateDirty = true;
|
||||
}
|
||||
public bool MultiSampleAntiAlias
|
||||
{
|
||||
set
|
||||
{
|
||||
if (description.IsMultisampleEnabled != value)
|
||||
{
|
||||
isDirty = true;
|
||||
description.IsMultisampleEnabled = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Apply(ANX.Framework.Graphics.GraphicsDevice graphicsDevice)
|
||||
{
|
||||
GraphicsDeviceWindowsDX11 gdx11 = graphicsDevice.NativeDevice as GraphicsDeviceWindowsDX11;
|
||||
DeviceContext context = gdx11.NativeDevice;
|
||||
public bool ScissorTestEnable
|
||||
{
|
||||
set
|
||||
{
|
||||
if (description.IsScissorEnabled != value)
|
||||
{
|
||||
isDirty = true;
|
||||
description.IsScissorEnabled = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
UpdateNativeRasterizerState(context.Device);
|
||||
this.bound = true;
|
||||
public float SlopeScaleDepthBias
|
||||
{
|
||||
set
|
||||
{
|
||||
SetValueIfDifferentAndMarkDirty(ref description.SlopeScaledDepthBias, ref value);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
context.Rasterizer.State = this.nativeRasterizerState;
|
||||
}
|
||||
protected override void Init()
|
||||
{
|
||||
description.IsAntialiasedLineEnabled = false;
|
||||
}
|
||||
|
||||
public void Release()
|
||||
{
|
||||
this.bound = false;
|
||||
}
|
||||
protected override Dx11.RasterizerState CreateNativeState(GraphicsDevice graphics)
|
||||
{
|
||||
Dx11.DeviceContext context = (graphics.NativeDevice as GraphicsDeviceWindowsDX11).NativeDevice;
|
||||
return new Dx11.RasterizerState(context.Device, ref description);
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (this.nativeRasterizerState != null)
|
||||
{
|
||||
this.nativeRasterizerState.Dispose();
|
||||
this.nativeRasterizerState = null;
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsBound
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.bound;
|
||||
}
|
||||
}
|
||||
|
||||
public ANX.Framework.Graphics.CullMode CullMode
|
||||
{
|
||||
set
|
||||
{
|
||||
SharpDX.Direct3D11.CullMode cullMode = FormatConverter.Translate(value);
|
||||
|
||||
if (description.CullMode != cullMode)
|
||||
{
|
||||
nativeRasterizerStateDirty = true;
|
||||
description.CullMode = cullMode;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public float DepthBias
|
||||
{
|
||||
set
|
||||
{
|
||||
// XNA uses a float value in the range of 0f..16f as value
|
||||
// DirectX 10 uses a INT value
|
||||
|
||||
int depthBiasValue = (int)(value * intMaxOver16);
|
||||
|
||||
if (description.DepthBias != depthBiasValue)
|
||||
{
|
||||
nativeRasterizerStateDirty = true;
|
||||
description.DepthBias = depthBiasValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ANX.Framework.Graphics.FillMode FillMode
|
||||
{
|
||||
set
|
||||
{
|
||||
SharpDX.Direct3D11.FillMode fillMode = FormatConverter.Translate(value);
|
||||
|
||||
if (description.FillMode != fillMode)
|
||||
{
|
||||
nativeRasterizerStateDirty = true;
|
||||
description.FillMode = fillMode;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool MultiSampleAntiAlias
|
||||
{
|
||||
set
|
||||
{
|
||||
if (description.IsMultisampleEnabled != value)
|
||||
{
|
||||
nativeRasterizerStateDirty = true;
|
||||
description.IsMultisampleEnabled = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool ScissorTestEnable
|
||||
{
|
||||
set
|
||||
{
|
||||
if (description.IsScissorEnabled != value)
|
||||
{
|
||||
nativeRasterizerStateDirty = true;
|
||||
description.IsScissorEnabled = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public float SlopeScaleDepthBias
|
||||
{
|
||||
set
|
||||
{
|
||||
if (description.SlopeScaledDepthBias != value)
|
||||
{
|
||||
nativeRasterizerStateDirty = true;
|
||||
description.SlopeScaledDepthBias = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateNativeRasterizerState(Device device)
|
||||
{
|
||||
if (this.nativeRasterizerStateDirty == true || this.nativeRasterizerState == null)
|
||||
{
|
||||
if (this.nativeRasterizerState != null)
|
||||
{
|
||||
this.nativeRasterizerState.Dispose();
|
||||
this.nativeRasterizerState = null;
|
||||
}
|
||||
|
||||
this.nativeRasterizerState = new SharpDX.Direct3D11.RasterizerState(device, ref this.description);
|
||||
|
||||
this.nativeRasterizerStateDirty = false;
|
||||
}
|
||||
}
|
||||
protected override void ApplyNativeState(GraphicsDevice graphics)
|
||||
{
|
||||
Dx11.DeviceContext context = (graphics.NativeDevice as GraphicsDeviceWindowsDX11).NativeDevice;
|
||||
context.Rasterizer.State = nativeState;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,13 +1,7 @@
|
||||
#region Using Statements
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using ANX.BaseDirectX;
|
||||
using ANX.Framework.Graphics;
|
||||
using ANX.Framework.NonXNA.RenderSystem;
|
||||
using SharpDX.Direct3D11;
|
||||
|
||||
#endregion // Using Statements
|
||||
|
||||
// This file is part of the ANX.Framework created by the
|
||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||
@ -15,46 +9,32 @@ using SharpDX.Direct3D11;
|
||||
|
||||
namespace ANX.RenderSystem.Windows.DX11
|
||||
{
|
||||
public class RenderTarget2D_DX11 : Texture2D_DX11, INativeRenderTarget2D, INativeTexture2D
|
||||
{
|
||||
#region Private Members
|
||||
public class RenderTarget2D_DX11 : Texture2D_DX11, INativeRenderTarget2D, INativeTexture2D
|
||||
{
|
||||
public RenderTarget2D_DX11(GraphicsDevice graphics, int width, int height, bool mipMap, SurfaceFormat surfaceFormat,
|
||||
DepthFormat preferredDepthFormat, int preferredMultiSampleCount, RenderTargetUsage usage)
|
||||
: base(graphics, surfaceFormat)
|
||||
{
|
||||
if (mipMap)
|
||||
throw new NotImplementedException("creating RenderTargets with mip map not yet implemented");
|
||||
|
||||
#endregion // Private Members
|
||||
var description = new SharpDX.Direct3D11.Texture2DDescription()
|
||||
{
|
||||
Width = width,
|
||||
Height = height,
|
||||
MipLevels = 1,
|
||||
ArraySize = 1,
|
||||
Format = BaseFormatConverter.Translate(surfaceFormat),
|
||||
SampleDescription = new SharpDX.DXGI.SampleDescription(1, 0),
|
||||
Usage = SharpDX.Direct3D11.ResourceUsage.Default,
|
||||
BindFlags = SharpDX.Direct3D11.BindFlags.ShaderResource | SharpDX.Direct3D11.BindFlags.RenderTarget,
|
||||
CpuAccessFlags = SharpDX.Direct3D11.CpuAccessFlags.None,
|
||||
OptionFlags = SharpDX.Direct3D11.ResourceOptionFlags.None,
|
||||
};
|
||||
|
||||
public RenderTarget2D_DX11(GraphicsDevice graphics, int width, int height, bool mipMap, SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount, RenderTargetUsage usage)
|
||||
: base(graphics)
|
||||
{
|
||||
if (mipMap)
|
||||
{
|
||||
throw new NotImplementedException("creating RenderTargets with mip map not yet implemented");
|
||||
}
|
||||
|
||||
this.surfaceFormat = surfaceFormat;
|
||||
|
||||
GraphicsDeviceWindowsDX11 graphicsDX11 = graphicsDevice.NativeDevice as GraphicsDeviceWindowsDX11;
|
||||
SharpDX.Direct3D11.DeviceContext device = graphicsDX11.NativeDevice;
|
||||
|
||||
SharpDX.Direct3D11.Texture2DDescription description = new SharpDX.Direct3D11.Texture2DDescription()
|
||||
{
|
||||
Width = width,
|
||||
Height = height,
|
||||
MipLevels = 1,
|
||||
ArraySize = 1,
|
||||
Format = FormatConverter.Translate(preferredFormat),
|
||||
SampleDescription = new SharpDX.DXGI.SampleDescription(1, 0),
|
||||
Usage = SharpDX.Direct3D11.ResourceUsage.Default,
|
||||
BindFlags = SharpDX.Direct3D11.BindFlags.ShaderResource | SharpDX.Direct3D11.BindFlags.RenderTarget,
|
||||
CpuAccessFlags = SharpDX.Direct3D11.CpuAccessFlags.None,
|
||||
OptionFlags = SharpDX.Direct3D11.ResourceOptionFlags.None,
|
||||
};
|
||||
this.nativeTexture = new SharpDX.Direct3D11.Texture2D(graphicsDX11.NativeDevice.Device, description);
|
||||
this.nativeShaderResourceView = new SharpDX.Direct3D11.ShaderResourceView(graphicsDX11.NativeDevice.Device, this.nativeTexture);
|
||||
|
||||
// description of texture formats of DX10: http://msdn.microsoft.com/en-us/library/bb694531(v=VS.85).aspx
|
||||
// more helpfull information on DX10 textures: http://msdn.microsoft.com/en-us/library/windows/desktop/bb205131(v=vs.85).aspx
|
||||
|
||||
this.formatSize = FormatConverter.FormatSize(surfaceFormat);
|
||||
}
|
||||
|
||||
}
|
||||
SharpDX.Direct3D11.DeviceContext device = (GraphicsDevice.NativeDevice as GraphicsDeviceWindowsDX11).NativeDevice;
|
||||
NativeTexture = new SharpDX.Direct3D11.Texture2D(device.Device, description);
|
||||
NativeShaderResourceView = new SharpDX.Direct3D11.ShaderResourceView(device.Device, NativeTexture);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,10 +1,8 @@
|
||||
#region Using Statements
|
||||
using System;
|
||||
using ANX.BaseDirectX;
|
||||
using ANX.Framework.Graphics;
|
||||
using ANX.Framework.NonXNA;
|
||||
using SharpDX.Direct3D11;
|
||||
|
||||
#endregion // Using Statements
|
||||
using Dx11 = SharpDX.Direct3D11;
|
||||
using System;
|
||||
|
||||
// This file is part of the ANX.Framework created by the
|
||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||
@ -12,162 +10,107 @@ using SharpDX.Direct3D11;
|
||||
|
||||
namespace ANX.RenderSystem.Windows.DX11
|
||||
{
|
||||
public class SamplerState_DX11 : INativeSamplerState
|
||||
public class SamplerState_DX11 : BaseStateObject<Dx11.SamplerState>, INativeSamplerState
|
||||
{
|
||||
#region Private Members
|
||||
private SamplerStateDescription description;
|
||||
private SharpDX.Direct3D11.SamplerState nativeSamplerState;
|
||||
private bool nativeSamplerStateDirty;
|
||||
private bool bound;
|
||||
private Dx11.SamplerStateDescription description;
|
||||
|
||||
#endregion // Private Members
|
||||
#region Public
|
||||
public TextureAddressMode AddressU
|
||||
{
|
||||
set
|
||||
{
|
||||
Dx11.TextureAddressMode mode = FormatConverter.Translate(value);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.AddressU, ref mode);
|
||||
}
|
||||
}
|
||||
|
||||
public SamplerState_DX11()
|
||||
public TextureAddressMode AddressV
|
||||
{
|
||||
set
|
||||
{
|
||||
Dx11.TextureAddressMode mode = FormatConverter.Translate(value);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.AddressV, ref mode);
|
||||
}
|
||||
}
|
||||
|
||||
public TextureAddressMode AddressW
|
||||
{
|
||||
set
|
||||
{
|
||||
Dx11.TextureAddressMode mode = FormatConverter.Translate(value);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.AddressW, ref mode);
|
||||
}
|
||||
}
|
||||
|
||||
public TextureFilter Filter
|
||||
{
|
||||
set
|
||||
{
|
||||
Dx11.Filter filter = FormatConverter.Translate(value);
|
||||
SetValueIfDifferentAndMarkDirty(ref description.Filter, ref filter);
|
||||
}
|
||||
}
|
||||
|
||||
public int MaxAnisotropy
|
||||
{
|
||||
set
|
||||
{
|
||||
SetValueIfDifferentAndMarkDirty(ref description.MaximumAnisotropy, ref value);
|
||||
}
|
||||
}
|
||||
|
||||
public int MaxMipLevel
|
||||
{
|
||||
set
|
||||
{
|
||||
if (description.MaximumLod != value)
|
||||
{
|
||||
description.MaximumLod = value;
|
||||
isDirty = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public float MipMapLevelOfDetailBias
|
||||
{
|
||||
set
|
||||
{
|
||||
SetValueIfDifferentAndMarkDirty(ref description.MipLodBias, ref value);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Apply
|
||||
public void Apply(GraphicsDevice graphicsDevice, int index)
|
||||
{
|
||||
this.description = new SamplerStateDescription();
|
||||
|
||||
this.nativeSamplerStateDirty = true;
|
||||
}
|
||||
|
||||
public void Apply(GraphicsDevice graphicsDevice, int index)
|
||||
{
|
||||
GraphicsDeviceWindowsDX11 gdx11 = graphicsDevice.NativeDevice as GraphicsDeviceWindowsDX11;
|
||||
DeviceContext context = gdx11.NativeDevice;
|
||||
Dx11.DeviceContext context = (graphicsDevice.NativeDevice as GraphicsDeviceWindowsDX11).NativeDevice;
|
||||
|
||||
UpdateNativeSamplerState(context.Device);
|
||||
this.bound = true;
|
||||
IsBound = true;
|
||||
|
||||
context.PixelShader.SetSampler(index, this.nativeSamplerState);
|
||||
}
|
||||
context.PixelShader.SetSampler(index, nativeState);
|
||||
}
|
||||
#endregion
|
||||
|
||||
public void Release()
|
||||
#region UpdateNativeSamplerState
|
||||
private void UpdateNativeSamplerState(Dx11.Device device)
|
||||
{
|
||||
this.bound = false;
|
||||
}
|
||||
|
||||
public bool IsBound
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.bound;
|
||||
}
|
||||
}
|
||||
|
||||
public ANX.Framework.Graphics.TextureAddressMode AddressU
|
||||
{
|
||||
set
|
||||
if (isDirty || nativeState == null)
|
||||
{
|
||||
SharpDX.Direct3D11.TextureAddressMode mode = FormatConverter.Translate(value);
|
||||
|
||||
if (description.AddressU != mode)
|
||||
{
|
||||
description.AddressU = mode;
|
||||
nativeSamplerStateDirty = true;
|
||||
}
|
||||
Dispose();
|
||||
nativeState = new Dx11.SamplerState(device, ref description);
|
||||
isDirty = false;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
public ANX.Framework.Graphics.TextureAddressMode AddressV
|
||||
{
|
||||
set
|
||||
{
|
||||
SharpDX.Direct3D11.TextureAddressMode mode = FormatConverter.Translate(value);
|
||||
protected override Dx11.SamplerState CreateNativeState(GraphicsDevice graphics)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if (description.AddressV != mode)
|
||||
{
|
||||
description.AddressV = mode;
|
||||
nativeSamplerStateDirty = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ANX.Framework.Graphics.TextureAddressMode AddressW
|
||||
{
|
||||
set
|
||||
{
|
||||
SharpDX.Direct3D11.TextureAddressMode mode = FormatConverter.Translate(value);
|
||||
|
||||
if (description.AddressW != mode)
|
||||
{
|
||||
description.AddressW = mode;
|
||||
nativeSamplerStateDirty = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public TextureFilter Filter
|
||||
{
|
||||
set
|
||||
{
|
||||
SharpDX.Direct3D11.Filter filter = FormatConverter.Translate(value);
|
||||
|
||||
if (description.Filter != filter)
|
||||
{
|
||||
description.Filter = filter;
|
||||
nativeSamplerStateDirty = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int MaxAnisotropy
|
||||
{
|
||||
set
|
||||
{
|
||||
if (description.MaximumAnisotropy != value)
|
||||
{
|
||||
description.MaximumAnisotropy = value;
|
||||
nativeSamplerStateDirty = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int MaxMipLevel
|
||||
{
|
||||
set
|
||||
{
|
||||
if (description.MaximumLod != value)
|
||||
{
|
||||
description.MaximumLod = value;
|
||||
nativeSamplerStateDirty = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public float MipMapLevelOfDetailBias
|
||||
{
|
||||
set
|
||||
{
|
||||
if (description.MipLodBias != value)
|
||||
{
|
||||
description.MipLodBias = value;
|
||||
nativeSamplerStateDirty = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (this.nativeSamplerState != null)
|
||||
{
|
||||
this.nativeSamplerState.Dispose();
|
||||
this.nativeSamplerState = null;
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateNativeSamplerState(Device device)
|
||||
{
|
||||
if (this.nativeSamplerStateDirty == true || this.nativeSamplerState == null)
|
||||
{
|
||||
if (this.nativeSamplerState != null)
|
||||
{
|
||||
this.nativeSamplerState.Dispose();
|
||||
this.nativeSamplerState = null;
|
||||
}
|
||||
|
||||
this.nativeSamplerState = new SharpDX.Direct3D11.SamplerState(device, ref this.description);
|
||||
|
||||
this.nativeSamplerStateDirty = false;
|
||||
}
|
||||
}
|
||||
protected override void ApplyNativeState(GraphicsDevice graphics)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,15 +1,10 @@
|
||||
#region Using Statements
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using ANX.Framework.Graphics;
|
||||
using SharpDX.Direct3D11;
|
||||
using ANX.Framework.NonXNA.RenderSystem;
|
||||
using System.IO;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
#endregion // Using Statements
|
||||
using ANX.BaseDirectX;
|
||||
using ANX.Framework.Graphics;
|
||||
using ANX.Framework.NonXNA.RenderSystem;
|
||||
using SharpDX;
|
||||
using Dx11 = SharpDX.Direct3D11;
|
||||
|
||||
// This file is part of the ANX.Framework created by the
|
||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||
@ -17,301 +12,139 @@ using System.Runtime.InteropServices;
|
||||
|
||||
namespace ANX.RenderSystem.Windows.DX11
|
||||
{
|
||||
public class Texture2D_DX11 : INativeTexture2D
|
||||
{
|
||||
#region Private Members
|
||||
protected internal SharpDX.Direct3D11.Texture2D nativeTexture;
|
||||
protected internal SharpDX.Direct3D11.ShaderResourceView nativeShaderResourceView;
|
||||
protected internal int formatSize;
|
||||
protected internal SurfaceFormat surfaceFormat;
|
||||
protected internal GraphicsDevice graphicsDevice;
|
||||
|
||||
#endregion // Private Members
|
||||
|
||||
internal Texture2D_DX11(GraphicsDevice graphicsDevice)
|
||||
{
|
||||
this.graphicsDevice = graphicsDevice;
|
||||
}
|
||||
|
||||
public Texture2D_DX11(GraphicsDevice graphicsDevice, int width, int height, SurfaceFormat surfaceFormat, int mipCount)
|
||||
{
|
||||
if (mipCount > 1)
|
||||
{
|
||||
throw new Exception("creating textures with mip map not yet implemented");
|
||||
}
|
||||
|
||||
this.graphicsDevice = graphicsDevice;
|
||||
this.surfaceFormat = surfaceFormat;
|
||||
|
||||
GraphicsDeviceWindowsDX11 graphicsDX11 = graphicsDevice.NativeDevice as GraphicsDeviceWindowsDX11;
|
||||
SharpDX.Direct3D11.DeviceContext context = graphicsDX11.NativeDevice;
|
||||
|
||||
SharpDX.Direct3D11.Texture2DDescription description = new SharpDX.Direct3D11.Texture2DDescription()
|
||||
{
|
||||
Width = width,
|
||||
Height = height,
|
||||
MipLevels = mipCount,
|
||||
ArraySize = mipCount,
|
||||
Format = FormatConverter.Translate(surfaceFormat),
|
||||
SampleDescription = new SharpDX.DXGI.SampleDescription(1, 0),
|
||||
Usage = SharpDX.Direct3D11.ResourceUsage.Dynamic,
|
||||
BindFlags = SharpDX.Direct3D11.BindFlags.ShaderResource,
|
||||
CpuAccessFlags = SharpDX.Direct3D11.CpuAccessFlags.Write,
|
||||
OptionFlags = SharpDX.Direct3D11.ResourceOptionFlags.None,
|
||||
};
|
||||
this.nativeTexture = new SharpDX.Direct3D11.Texture2D(context.Device, description);
|
||||
this.nativeShaderResourceView = new SharpDX.Direct3D11.ShaderResourceView(context.Device, this.nativeTexture);
|
||||
|
||||
// description of texture formats of DX10: http://msdn.microsoft.com/en-us/library/bb694531(v=VS.85).aspx
|
||||
// more helpfull information on DX10 textures: http://msdn.microsoft.com/en-us/library/windows/desktop/bb205131(v=vs.85).aspx
|
||||
|
||||
this.formatSize = FormatConverter.FormatSize(surfaceFormat);
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return NativeTexture.NativePointer.ToInt32();
|
||||
}
|
||||
|
||||
internal SharpDX.Direct3D11.Texture2D NativeTexture
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.nativeTexture;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (this.nativeTexture != value)
|
||||
{
|
||||
if (this.nativeTexture != null)
|
||||
{
|
||||
this.nativeTexture.Dispose();
|
||||
}
|
||||
|
||||
this.nativeTexture = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal SharpDX.Direct3D11.ShaderResourceView NativeShaderResourceView
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.nativeShaderResourceView;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (this.nativeShaderResourceView != value)
|
||||
{
|
||||
if (this.nativeShaderResourceView != null)
|
||||
{
|
||||
this.nativeShaderResourceView.Dispose();
|
||||
}
|
||||
|
||||
this.nativeShaderResourceView = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void SetData<T>(GraphicsDevice graphicsDevice, T[] data) where T : struct
|
||||
{
|
||||
SetData<T>(graphicsDevice, 0, 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 void SetData<T>(GraphicsDevice graphicsDevice, int offsetInBytes, T[] data, int startIndex, int elementCount) where T : struct
|
||||
{
|
||||
//TODO: handle offsetInBytes parameter
|
||||
//TODO: handle startIndex parameter
|
||||
//TODO: handle elementCount parameter
|
||||
|
||||
GraphicsDeviceWindowsDX11 dx11GraphicsDevice = graphicsDevice.NativeDevice as GraphicsDeviceWindowsDX11;
|
||||
DeviceContext context = dx11GraphicsDevice.NativeDevice;
|
||||
|
||||
if (this.surfaceFormat == SurfaceFormat.Color)
|
||||
{
|
||||
int subresource = SharpDX.Direct3D11.Texture2D.CalculateSubResourceIndex(0, 0, 1);
|
||||
SharpDX.DataBox rectangle = context.MapSubresource(this.nativeTexture, subresource, MapMode.WriteDiscard, MapFlags.None);
|
||||
int rowPitch = rectangle.RowPitch;
|
||||
|
||||
unsafe
|
||||
{
|
||||
GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned);
|
||||
byte* colorData = (byte*)handle.AddrOfPinnedObject();
|
||||
|
||||
byte* pTexels = (byte*)rectangle.DataPointer;
|
||||
int srcIndex = 0;
|
||||
|
||||
for (int row = 0; row < Height; row++)
|
||||
{
|
||||
int rowStart = row * rowPitch;
|
||||
|
||||
for (int col = 0; col < Width; col++)
|
||||
{
|
||||
int colStart = col * formatSize;
|
||||
pTexels[rowStart + colStart + 0] = colorData[srcIndex++];
|
||||
pTexels[rowStart + colStart + 1] = colorData[srcIndex++];
|
||||
pTexels[rowStart + colStart + 2] = colorData[srcIndex++];
|
||||
pTexels[rowStart + colStart + 3] = colorData[srcIndex++];
|
||||
}
|
||||
}
|
||||
|
||||
handle.Free();
|
||||
}
|
||||
|
||||
context.UnmapSubresource(this.nativeTexture, subresource);
|
||||
}
|
||||
else if (surfaceFormat == SurfaceFormat.Dxt5 || surfaceFormat == SurfaceFormat.Dxt3 || surfaceFormat == SurfaceFormat.Dxt1)
|
||||
{
|
||||
unsafe
|
||||
{
|
||||
GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned);
|
||||
byte* colorData = (byte*)handle.AddrOfPinnedObject();
|
||||
|
||||
int w = (Width + 3) >> 2;
|
||||
int h = (Height + 3) >> 2;
|
||||
formatSize = (surfaceFormat == SurfaceFormat.Dxt1) ? 8 : 16;
|
||||
|
||||
int subresource = SharpDX.Direct3D11.Texture2D.CalculateSubResourceIndex(0, 0, 1);
|
||||
SharpDX.DataBox rectangle = context.MapSubresource(this.nativeTexture, subresource, MapMode.WriteDiscard, MapFlags.None);
|
||||
SharpDX.DataStream ds = new SharpDX.DataStream(rectangle.DataPointer, Width * Height * 4 * 2, true, true);
|
||||
int pitch = rectangle.RowPitch;
|
||||
int col = 0;
|
||||
int index = 0; // startIndex
|
||||
int count = data.Length; // elementCount
|
||||
int actWidth = w * formatSize;
|
||||
|
||||
for (int i = 0; i < h; i++)
|
||||
{
|
||||
ds.Position = (i * pitch) + (col * formatSize);
|
||||
if (count <= 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
else if (count < actWidth)
|
||||
{
|
||||
for (int idx = index; idx < index + count; idx++)
|
||||
{
|
||||
ds.WriteByte(colorData[idx]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
for (int idx = index; idx < index + actWidth; idx++)
|
||||
{
|
||||
ds.WriteByte(colorData[idx]);
|
||||
}
|
||||
|
||||
index += actWidth;
|
||||
count -= actWidth;
|
||||
}
|
||||
|
||||
handle.Free();
|
||||
|
||||
context.UnmapSubresource(this.nativeTexture, subresource);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Exception(string.Format("creating textures of format {0} not yet implemented...", surfaceFormat.ToString()));
|
||||
}
|
||||
}
|
||||
|
||||
public int Width
|
||||
{
|
||||
get
|
||||
{
|
||||
if (this.nativeTexture != null)
|
||||
{
|
||||
return this.nativeTexture.Description.Width;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public int Height
|
||||
{
|
||||
get
|
||||
{
|
||||
if (this.nativeTexture != null)
|
||||
{
|
||||
return this.nativeTexture.Description.Height;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public GraphicsDevice GraphicsDevice
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.graphicsDevice;
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (this.nativeShaderResourceView != null)
|
||||
{
|
||||
this.nativeShaderResourceView.Dispose();
|
||||
this.nativeShaderResourceView = null;
|
||||
}
|
||||
|
||||
if (this.nativeTexture != null)
|
||||
{
|
||||
this.nativeTexture.Dispose();
|
||||
this.nativeTexture = null;
|
||||
}
|
||||
}
|
||||
|
||||
#region SaveAsJpeg (TODO)
|
||||
public void SaveAsJpeg(Stream stream, int width, int height)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region SaveAsPng (TODO)
|
||||
public void SaveAsPng(Stream stream, int width, int height)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region INativeTexture2D Member
|
||||
|
||||
|
||||
public void GetData<T>(int level, Framework.Rectangle? rect, T[] data, int startIndex, int elementCount) where T : struct
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void SetData<T>(int level, Framework.Rectangle? rect, T[] data, int startIndex, int elementCount) where T : struct
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region INativeBuffer Member
|
||||
|
||||
|
||||
public void GetData<T>(T[] data) where T : struct
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void GetData<T>(T[] data, int startIndex, int elementCount) where T : struct
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
#endregion
|
||||
public class Texture2D_DX11 : BaseTexture2D<Dx11.Texture2D>, INativeTexture2D
|
||||
{
|
||||
#region Public
|
||||
public override int Width
|
||||
{
|
||||
get
|
||||
{
|
||||
return NativeTexture != null ? NativeTexture.Description.Width : 0;
|
||||
}
|
||||
}
|
||||
|
||||
public override int Height
|
||||
{
|
||||
get
|
||||
{
|
||||
return NativeTexture != null ? NativeTexture.Description.Height : 0;
|
||||
}
|
||||
}
|
||||
|
||||
protected internal Dx11.ShaderResourceView NativeShaderResourceView { get; protected set; }
|
||||
#endregion
|
||||
|
||||
#region Constructor
|
||||
internal Texture2D_DX11(GraphicsDevice graphicsDevice, SurfaceFormat surfaceFormat)
|
||||
: base(graphicsDevice, surfaceFormat)
|
||||
{
|
||||
}
|
||||
|
||||
public Texture2D_DX11(GraphicsDevice graphicsDevice, int width, int height, SurfaceFormat surfaceFormat, int mipCount)
|
||||
: base(graphicsDevice, surfaceFormat)
|
||||
{
|
||||
if (mipCount > 1)
|
||||
throw new Exception("creating textures with mip map not yet implemented");
|
||||
|
||||
var description = new Dx11.Texture2DDescription()
|
||||
{
|
||||
Width = width,
|
||||
Height = height,
|
||||
MipLevels = mipCount,
|
||||
ArraySize = mipCount,
|
||||
Format = BaseFormatConverter.Translate(surfaceFormat),
|
||||
SampleDescription = new SharpDX.DXGI.SampleDescription(1, 0),
|
||||
Usage = Dx11.ResourceUsage.Dynamic,
|
||||
BindFlags = Dx11.BindFlags.ShaderResource,
|
||||
CpuAccessFlags = Dx11.CpuAccessFlags.Write,
|
||||
OptionFlags = Dx11.ResourceOptionFlags.None,
|
||||
};
|
||||
|
||||
Dx11.DeviceContext context = (graphicsDevice.NativeDevice as GraphicsDeviceWindowsDX11).NativeDevice;
|
||||
NativeTexture = new Dx11.Texture2D(context.Device, description);
|
||||
NativeShaderResourceView = new Dx11.ShaderResourceView(context.Device, NativeTexture);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region GetHashCode
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return NativeTexture.NativePointer.ToInt32();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Dispose
|
||||
public override void Dispose()
|
||||
{
|
||||
if (NativeShaderResourceView != null)
|
||||
{
|
||||
NativeShaderResourceView.Dispose();
|
||||
NativeShaderResourceView = null;
|
||||
}
|
||||
|
||||
base.Dispose();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region SaveAsJpeg (TODO)
|
||||
public void SaveAsJpeg(Stream stream, int width, int height)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region SaveAsPng (TODO)
|
||||
public void SaveAsPng(Stream stream, int width, int height)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region GetData (TODO)
|
||||
public void GetData<T>(T[] data) where T : struct
|
||||
{
|
||||
GetData(data, 0, data.Length);
|
||||
}
|
||||
|
||||
public void GetData<T>(T[] data, int startIndex, int elementCount) where T : struct
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void GetData<T>(int level, Framework.Rectangle? rect, T[] data, int startIndex, int elementCount) where T : struct
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region MapWrite
|
||||
protected override IntPtr MapWrite()
|
||||
{
|
||||
Dx11.DeviceContext context = (GraphicsDevice.NativeDevice as GraphicsDeviceWindowsDX11).NativeDevice;
|
||||
tempSubresource = Dx11.Texture2D.CalculateSubResourceIndex(0, 0, 1);
|
||||
DataBox box = context.MapSubresource(NativeTexture, tempSubresource, Dx11.MapMode.WriteDiscard, Dx11.MapFlags.None);
|
||||
pitch = box.RowPitch;
|
||||
return box.DataPointer;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region MapRead
|
||||
protected override IntPtr MapRead()
|
||||
{
|
||||
Dx11.DeviceContext context = (GraphicsDevice.NativeDevice as GraphicsDeviceWindowsDX11).NativeDevice;
|
||||
tempSubresource = Dx11.Texture2D.CalculateSubResourceIndex(0, 0, 1);
|
||||
DataBox box = context.MapSubresource(NativeTexture, tempSubresource, Dx11.MapMode.Read, Dx11.MapFlags.None);
|
||||
pitch = box.RowPitch;
|
||||
return box.DataPointer;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Unmap
|
||||
protected override void Unmap()
|
||||
{
|
||||
Dx11.DeviceContext context = (GraphicsDevice.NativeDevice as GraphicsDeviceWindowsDX11).NativeDevice;
|
||||
context.UnmapSubresource(NativeTexture, tempSubresource);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,9 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using ANX.BaseDirectX;
|
||||
using ANX.Framework.Graphics;
|
||||
using ANX.Framework.NonXNA.RenderSystem;
|
||||
using SharpDX.Direct3D11;
|
||||
using SharpDX;
|
||||
using Dx11 = SharpDX.Direct3D11;
|
||||
|
||||
// This file is part of the ANX.Framework created by the
|
||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||
@ -10,141 +11,66 @@ using SharpDX.Direct3D11;
|
||||
|
||||
namespace ANX.RenderSystem.Windows.DX11
|
||||
{
|
||||
public class VertexBuffer_DX11 : INativeVertexBuffer, IDisposable
|
||||
public class VertexBuffer_DX11 : BaseVertexBuffer<Dx11.Buffer>, INativeVertexBuffer, IDisposable
|
||||
{
|
||||
int vertexStride;
|
||||
|
||||
public SharpDX.Direct3D11.Buffer NativeBuffer { get; private set; }
|
||||
|
||||
#region Constructor
|
||||
public VertexBuffer_DX11(GraphicsDevice graphics, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage)
|
||||
{
|
||||
var gd11 = graphics.NativeDevice as GraphicsDeviceWindowsDX11;
|
||||
SharpDX.Direct3D11.DeviceContext context = gd11 != null ?
|
||||
gd11.NativeDevice as SharpDX.Direct3D11.DeviceContext :
|
||||
null;
|
||||
Dx11.DeviceContext context = gd11 != null ? gd11.NativeDevice as Dx11.DeviceContext : null;
|
||||
|
||||
InitializeBuffer(context.Device, vertexDeclaration, vertexCount, usage);
|
||||
}
|
||||
|
||||
internal VertexBuffer_DX11(SharpDX.Direct3D11.Device device, VertexDeclaration vertexDeclaration, int vertexCount,
|
||||
BufferUsage usage)
|
||||
internal VertexBuffer_DX11(Dx11.Device device, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage)
|
||||
{
|
||||
InitializeBuffer(device, vertexDeclaration, vertexCount, usage);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region InitializeBuffer (TODO)
|
||||
private void InitializeBuffer(SharpDX.Direct3D11.Device device, VertexDeclaration vertexDeclaration, int vertexCount,
|
||||
BufferUsage usage)
|
||||
private void InitializeBuffer(Dx11.Device device, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage)
|
||||
{
|
||||
this.vertexStride = vertexDeclaration.VertexStride;
|
||||
vertexStride = vertexDeclaration.VertexStride;
|
||||
|
||||
//TODO: translate and use usage
|
||||
|
||||
if (device != null)
|
||||
{
|
||||
BufferDescription description = new BufferDescription()
|
||||
var description = new Dx11.BufferDescription()
|
||||
{
|
||||
Usage = ResourceUsage.Dynamic,
|
||||
Usage = Dx11.ResourceUsage.Dynamic,
|
||||
SizeInBytes = vertexDeclaration.VertexStride * vertexCount,
|
||||
BindFlags = BindFlags.VertexBuffer,
|
||||
CpuAccessFlags = CpuAccessFlags.Write,
|
||||
OptionFlags = ResourceOptionFlags.None
|
||||
BindFlags = Dx11.BindFlags.VertexBuffer,
|
||||
CpuAccessFlags = Dx11.CpuAccessFlags.Write,
|
||||
OptionFlags = Dx11.ResourceOptionFlags.None
|
||||
};
|
||||
|
||||
NativeBuffer = new SharpDX.Direct3D11.Buffer(device, description);
|
||||
NativeBuffer = new Dx11.Buffer(device, description);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region SetData (TODO)
|
||||
public void SetData<T>(GraphicsDevice graphicsDevice, int offsetInBytes, T[] data, int startIndex, int elementCount)
|
||||
where T : struct
|
||||
protected override SharpDX.DataStream MapBufferWrite()
|
||||
{
|
||||
GraphicsDeviceWindowsDX11 dx11GraphicsDevice = graphicsDevice.NativeDevice as GraphicsDeviceWindowsDX11;
|
||||
DeviceContext context = dx11GraphicsDevice.NativeDevice;
|
||||
Dx11.DeviceContext context = NativeBuffer.Device.ImmediateContext;
|
||||
DataStream stream;
|
||||
context.MapSubresource(NativeBuffer, Dx11.MapMode.WriteDiscard, Dx11.MapFlags.None, out stream);
|
||||
return stream;
|
||||
}
|
||||
|
||||
//TODO: check offsetInBytes parameter for bounds etc.
|
||||
|
||||
SharpDX.DataStream stream;
|
||||
context.MapSubresource(NativeBuffer, MapMode.WriteDiscard, MapFlags.None, out stream);
|
||||
|
||||
if (offsetInBytes > 0)
|
||||
stream.Seek(offsetInBytes, SeekOrigin.Current);
|
||||
|
||||
if (startIndex > 0 || elementCount < data.Length)
|
||||
for (int i = startIndex; i < startIndex + elementCount; i++)
|
||||
stream.Write<T>(data[i]);
|
||||
else
|
||||
for (int i = 0; i < data.Length; i++)
|
||||
stream.Write<T>(data[i]);
|
||||
protected override SharpDX.DataStream MapBufferRead()
|
||||
{
|
||||
Dx11.DeviceContext context = NativeBuffer.Device.ImmediateContext;
|
||||
DataStream stream;
|
||||
context.MapSubresource(NativeBuffer, Dx11.MapMode.Read, Dx11.MapFlags.None, out stream);
|
||||
return stream;
|
||||
}
|
||||
|
||||
protected override void UnmapBuffer()
|
||||
{
|
||||
Dx11.DeviceContext context = NativeBuffer.Device.ImmediateContext;
|
||||
context.UnmapSubresource(NativeBuffer, 0);
|
||||
}
|
||||
|
||||
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 void SetData<T>(GraphicsDevice graphicsDevice, int offsetInBytes, T[] data, int startIndex, int elementCount,
|
||||
int vertexStride) where T : struct
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Dispose
|
||||
public void Dispose()
|
||||
{
|
||||
if (NativeBuffer != null)
|
||||
{
|
||||
NativeBuffer.Dispose();
|
||||
NativeBuffer = null;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region GetData
|
||||
public void GetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride) where T : struct
|
||||
{
|
||||
DeviceContext context = NativeBuffer.Device.ImmediateContext;
|
||||
|
||||
SharpDX.DataStream stream;
|
||||
context.MapSubresource(NativeBuffer, MapMode.Read, MapFlags.None, out stream);
|
||||
|
||||
if (offsetInBytes > 0)
|
||||
stream.Seek(offsetInBytes, SeekOrigin.Current);
|
||||
|
||||
stream.ReadRange(data, startIndex, elementCount);
|
||||
context.UnmapSubresource(NativeBuffer, 0);
|
||||
}
|
||||
|
||||
public void GetData<T>(T[] data) where T : struct
|
||||
{
|
||||
DeviceContext context = NativeBuffer.Device.ImmediateContext;
|
||||
|
||||
SharpDX.DataStream stream;
|
||||
context.MapSubresource(NativeBuffer, MapMode.Read, MapFlags.None, out stream);
|
||||
stream.ReadRange(data, 0, data.Length);
|
||||
context.UnmapSubresource(NativeBuffer, 0);
|
||||
}
|
||||
|
||||
public void GetData<T>(T[] data, int startIndex, int elementCount) where T : struct
|
||||
{
|
||||
DeviceContext context = NativeBuffer.Device.ImmediateContext;
|
||||
|
||||
SharpDX.DataStream stream;
|
||||
context.MapSubresource(NativeBuffer, MapMode.Read, MapFlags.None, out stream);
|
||||
stream.ReadRange(data, startIndex, elementCount);
|
||||
context.UnmapSubresource(NativeBuffer, 0);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
@ -86,7 +86,6 @@ namespace ANX.RenderSystem.Windows.Metro
|
||||
public SamplerState_Metro()
|
||||
: base()
|
||||
{
|
||||
description = new Dx11.SamplerStateDescription();
|
||||
}
|
||||
#endregion
|
||||
|
||||
@ -96,8 +95,7 @@ namespace ANX.RenderSystem.Windows.Metro
|
||||
UpdateNativeSamplerState();
|
||||
bound = true;
|
||||
|
||||
NativeDxDevice.Current.NativeContext.PixelShader.SetSampler(
|
||||
index, this.nativeSamplerState);
|
||||
NativeDxDevice.Current.NativeContext.PixelShader.SetSampler(index, this.nativeSamplerState);
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
@ -125,7 +125,7 @@ namespace DualTextureSample
|
||||
dualTextureEffect.FogEnabled = (mode == DualTextureMode.VertexColorFog || mode == DualTextureMode.Fog);
|
||||
dualTextureEffect.FogColor = Color.Red.ToVector3();
|
||||
dualTextureEffect.FogStart = 0f;
|
||||
dualTextureEffect.FogEnd = 50f;
|
||||
dualTextureEffect.FogEnd = 25f;
|
||||
dualTextureEffect.Alpha = 1f;
|
||||
|
||||
dualTextureEffect.Texture = texture1;
|
||||
|
Loading…
x
Reference in New Issue
Block a user