- Wrote the DualTexture shader for GL3 but the rendering is not working yet
- Huge refactoring in the Dx10 RenderSystem + increasing much performance
This commit is contained in:
parent
e1a2a05e88
commit
dd173478d6
@ -45,7 +45,6 @@ namespace ANX.Framework
|
|||||||
|
|
||||||
private ContentManager content;
|
private ContentManager content;
|
||||||
|
|
||||||
private GameComponentCollection components;
|
|
||||||
private List<IGameComponent> drawableGameComponents;
|
private List<IGameComponent> drawableGameComponents;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@ -93,9 +92,9 @@ namespace ANX.Framework
|
|||||||
this.TargetElapsedTime = TimeSpan.FromTicks(TimeSpan.TicksPerSecond / 60L); // default is 1/60s
|
this.TargetElapsedTime = TimeSpan.FromTicks(TimeSpan.TicksPerSecond / 60L); // default is 1/60s
|
||||||
|
|
||||||
//TODO: implement draw- and update-order handling of GameComponents
|
//TODO: implement draw- and update-order handling of GameComponents
|
||||||
this.components = new GameComponentCollection();
|
this.Components = new GameComponentCollection();
|
||||||
this.components.ComponentAdded += components_ComponentAdded;
|
this.Components.ComponentAdded += components_ComponentAdded;
|
||||||
this.components.ComponentRemoved += components_ComponentRemoved;
|
this.Components.ComponentRemoved += components_ComponentRemoved;
|
||||||
this.drawableGameComponents = new List<IGameComponent>();
|
this.drawableGameComponents = new List<IGameComponent>();
|
||||||
|
|
||||||
Logger.Info("finished initializing new Game class");
|
Logger.Info("finished initializing new Game class");
|
||||||
@ -105,8 +104,8 @@ namespace ANX.Framework
|
|||||||
|
|
||||||
~Game()
|
~Game()
|
||||||
{
|
{
|
||||||
this.components.ComponentAdded -= components_ComponentAdded;
|
this.Components.ComponentAdded -= components_ComponentAdded;
|
||||||
this.components.ComponentRemoved -= components_ComponentRemoved;
|
this.Components.ComponentRemoved -= components_ComponentRemoved;
|
||||||
|
|
||||||
Dispose(false);
|
Dispose(false);
|
||||||
}
|
}
|
||||||
@ -150,7 +149,7 @@ namespace ANX.Framework
|
|||||||
|
|
||||||
protected virtual void Update(GameTime gameTime)
|
protected virtual void Update(GameTime gameTime)
|
||||||
{
|
{
|
||||||
foreach (IUpdateable updateable in this.components)
|
foreach (IUpdateable updateable in this.Components)
|
||||||
{
|
{
|
||||||
if (updateable.Enabled)
|
if (updateable.Enabled)
|
||||||
{
|
{
|
||||||
@ -478,8 +477,8 @@ namespace ANX.Framework
|
|||||||
if (disposing)
|
if (disposing)
|
||||||
{
|
{
|
||||||
IDisposable disposable;
|
IDisposable disposable;
|
||||||
var array = new IGameComponent[components.Count];
|
var array = new IGameComponent[Components.Count];
|
||||||
components.CopyTo(array, 0);
|
Components.CopyTo(array, 0);
|
||||||
for (int i = 0; i < array.Length; i++)
|
for (int i = 0; i < array.Length; i++)
|
||||||
{
|
{
|
||||||
disposable = (IDisposable)array[i];
|
disposable = (IDisposable)array[i];
|
||||||
|
@ -30,9 +30,7 @@ namespace ANX.Framework
|
|||||||
protected override void ClearItems()
|
protected override void ClearItems()
|
||||||
{
|
{
|
||||||
for (int i = 0; i < base.Count; i++)
|
for (int i = 0; i < base.Count; i++)
|
||||||
{
|
|
||||||
OnComponentRemoved(base[i]);
|
OnComponentRemoved(base[i]);
|
||||||
}
|
|
||||||
|
|
||||||
base.Clear();
|
base.Clear();
|
||||||
}
|
}
|
||||||
@ -40,9 +38,7 @@ namespace ANX.Framework
|
|||||||
protected override void InsertItem(int index, IGameComponent item)
|
protected override void InsertItem(int index, IGameComponent item)
|
||||||
{
|
{
|
||||||
if (item == null)
|
if (item == null)
|
||||||
{
|
|
||||||
throw new ArgumentNullException("item");
|
throw new ArgumentNullException("item");
|
||||||
}
|
|
||||||
|
|
||||||
base.Insert(index, item);
|
base.Insert(index, item);
|
||||||
OnComponentAdded(item);
|
OnComponentAdded(item);
|
||||||
@ -64,17 +60,13 @@ namespace ANX.Framework
|
|||||||
private void OnComponentAdded(IGameComponent component)
|
private void OnComponentAdded(IGameComponent component)
|
||||||
{
|
{
|
||||||
if (ComponentAdded != null)
|
if (ComponentAdded != null)
|
||||||
{
|
|
||||||
ComponentAdded(this, new GameComponentCollectionEventArgs(component));
|
ComponentAdded(this, new GameComponentCollectionEventArgs(component));
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnComponentRemoved(IGameComponent component)
|
private void OnComponentRemoved(IGameComponent component)
|
||||||
{
|
{
|
||||||
if (ComponentRemoved != null)
|
if (ComponentRemoved != null)
|
||||||
{
|
|
||||||
ComponentRemoved(this, new GameComponentCollectionEventArgs(component));
|
ComponentRemoved(this, new GameComponentCollectionEventArgs(component));
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,9 +9,8 @@ namespace ANX.Framework.Graphics
|
|||||||
{
|
{
|
||||||
public class AlphaTestEffect : Effect, IEffectMatrices, IEffectFog, IGraphicsResource
|
public class AlphaTestEffect : Effect, IEffectMatrices, IEffectFog, IGraphicsResource
|
||||||
{
|
{
|
||||||
public AlphaTestEffect(GraphicsDevice device)
|
public AlphaTestEffect(GraphicsDevice device)
|
||||||
: base(device, AddInSystemFactory.Instance.GetDefaultCreator<IRenderSystemCreator>().GetShaderByteCode(
|
: base(device, GetByteCode(), GetSourceLanguage())
|
||||||
NonXNA.PreDefinedShader.AlphaTestEffect))
|
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
@ -20,7 +19,23 @@ namespace ANX.Framework.Graphics
|
|||||||
: base(cloneSource)
|
: base(cloneSource)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region GetByteCode
|
||||||
|
private static byte[] GetByteCode()
|
||||||
|
{
|
||||||
|
var creator = AddInSystemFactory.Instance.GetDefaultCreator<IRenderSystemCreator>();
|
||||||
|
return creator.GetShaderByteCode(PreDefinedShader.AlphaTestEffect);
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region GetSourceLanguage
|
||||||
|
private static EffectSourceLanguage GetSourceLanguage()
|
||||||
|
{
|
||||||
|
var creator = AddInSystemFactory.Instance.GetDefaultCreator<IRenderSystemCreator>();
|
||||||
|
return creator.GetStockShaderSourceLanguage;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
public override Effect Clone()
|
public override Effect Clone()
|
||||||
{
|
{
|
||||||
|
@ -30,8 +30,8 @@ namespace ANX.Framework.Graphics
|
|||||||
private DirectionalLight[] directionalLight;
|
private DirectionalLight[] directionalLight;
|
||||||
private Vector3 ambientLightColor;
|
private Vector3 ambientLightColor;
|
||||||
|
|
||||||
public BasicEffect(GraphicsDevice graphics)
|
public BasicEffect(GraphicsDevice graphics)
|
||||||
: base(graphics, AddInSystemFactory.Instance.GetDefaultCreator<IRenderSystemCreator>().GetShaderByteCode(NonXNA.PreDefinedShader.BasicEffect))
|
: base(graphics, GetByteCode(), GetSourceLanguage())
|
||||||
{
|
{
|
||||||
world = base.Parameters["World"];
|
world = base.Parameters["World"];
|
||||||
view = base.Parameters["View"];
|
view = base.Parameters["View"];
|
||||||
@ -54,7 +54,23 @@ namespace ANX.Framework.Graphics
|
|||||||
: base(cloneSource)
|
: base(cloneSource)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region GetByteCode
|
||||||
|
private static byte[] GetByteCode()
|
||||||
|
{
|
||||||
|
var creator = AddInSystemFactory.Instance.GetDefaultCreator<IRenderSystemCreator>();
|
||||||
|
return creator.GetShaderByteCode(PreDefinedShader.BasicEffect);
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region GetSourceLanguage
|
||||||
|
private static EffectSourceLanguage GetSourceLanguage()
|
||||||
|
{
|
||||||
|
var creator = AddInSystemFactory.Instance.GetDefaultCreator<IRenderSystemCreator>();
|
||||||
|
return creator.GetStockShaderSourceLanguage;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
public bool PreferPerPixelLighting
|
public bool PreferPerPixelLighting
|
||||||
{
|
{
|
||||||
|
@ -83,8 +83,7 @@ namespace ANX.Framework.Graphics
|
|||||||
|
|
||||||
#region Constructor
|
#region Constructor
|
||||||
public DualTextureEffect(GraphicsDevice graphics)
|
public DualTextureEffect(GraphicsDevice graphics)
|
||||||
: base(graphics, AddInSystemFactory.Instance.GetDefaultCreator<IRenderSystemCreator>().GetShaderByteCode(
|
: base(graphics, GetByteCode(), GetSourceLanguage())
|
||||||
NonXNA.PreDefinedShader.DualTextureEffect))
|
|
||||||
{
|
{
|
||||||
diffuseColor = Vector3.One;
|
diffuseColor = Vector3.One;
|
||||||
Alpha = 1f;
|
Alpha = 1f;
|
||||||
@ -114,6 +113,22 @@ namespace ANX.Framework.Graphics
|
|||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region GetByteCode
|
||||||
|
private static byte[] GetByteCode()
|
||||||
|
{
|
||||||
|
var creator = AddInSystemFactory.Instance.GetDefaultCreator<IRenderSystemCreator>();
|
||||||
|
return creator.GetShaderByteCode(PreDefinedShader.DualTextureEffect);
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region GetSourceLanguage
|
||||||
|
private static EffectSourceLanguage GetSourceLanguage()
|
||||||
|
{
|
||||||
|
var creator = AddInSystemFactory.Instance.GetDefaultCreator<IRenderSystemCreator>();
|
||||||
|
return creator.GetStockShaderSourceLanguage;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region Clone
|
#region Clone
|
||||||
public override Effect Clone()
|
public override Effect Clone()
|
||||||
{
|
{
|
||||||
|
@ -15,8 +15,8 @@ namespace ANX.Framework.Graphics
|
|||||||
{
|
{
|
||||||
public class EnvironmentMapEffect : Effect, IEffectMatrices, IEffectLights, IEffectFog
|
public class EnvironmentMapEffect : Effect, IEffectMatrices, IEffectLights, IEffectFog
|
||||||
{
|
{
|
||||||
public EnvironmentMapEffect(GraphicsDevice graphics)
|
public EnvironmentMapEffect(GraphicsDevice graphics)
|
||||||
: base(graphics, AddInSystemFactory.Instance.GetDefaultCreator<IRenderSystemCreator>().GetShaderByteCode(NonXNA.PreDefinedShader.EnvironmentMapEffect))
|
: base(graphics, GetByteCode(), GetSourceLanguage())
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
@ -25,7 +25,23 @@ namespace ANX.Framework.Graphics
|
|||||||
: base(cloneSource)
|
: base(cloneSource)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region GetByteCode
|
||||||
|
private static byte[] GetByteCode()
|
||||||
|
{
|
||||||
|
var creator = AddInSystemFactory.Instance.GetDefaultCreator<IRenderSystemCreator>();
|
||||||
|
return creator.GetShaderByteCode(PreDefinedShader.EnvironmentMapEffect);
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region GetSourceLanguage
|
||||||
|
private static EffectSourceLanguage GetSourceLanguage()
|
||||||
|
{
|
||||||
|
var creator = AddInSystemFactory.Instance.GetDefaultCreator<IRenderSystemCreator>();
|
||||||
|
return creator.GetStockShaderSourceLanguage;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
public override Effect Clone()
|
public override Effect Clone()
|
||||||
{
|
{
|
||||||
|
@ -18,8 +18,8 @@ namespace ANX.Framework.Graphics
|
|||||||
{
|
{
|
||||||
public class SkinnedEffect : Effect, IEffectMatrices, IEffectLights, IEffectFog
|
public class SkinnedEffect : Effect, IEffectMatrices, IEffectLights, IEffectFog
|
||||||
{
|
{
|
||||||
public SkinnedEffect(GraphicsDevice graphics)
|
public SkinnedEffect(GraphicsDevice graphics)
|
||||||
: base(graphics, AddInSystemFactory.Instance.GetDefaultCreator<IRenderSystemCreator>().GetShaderByteCode(NonXNA.PreDefinedShader.SkinnedEffect))
|
: base(graphics, GetByteCode(), GetSourceLanguage())
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
@ -28,7 +28,23 @@ namespace ANX.Framework.Graphics
|
|||||||
: base(cloneSource)
|
: base(cloneSource)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region GetByteCode
|
||||||
|
private static byte[] GetByteCode()
|
||||||
|
{
|
||||||
|
var creator = AddInSystemFactory.Instance.GetDefaultCreator<IRenderSystemCreator>();
|
||||||
|
return creator.GetShaderByteCode(PreDefinedShader.SkinnedEffect);
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region GetSourceLanguage
|
||||||
|
private static EffectSourceLanguage GetSourceLanguage()
|
||||||
|
{
|
||||||
|
var creator = AddInSystemFactory.Instance.GetDefaultCreator<IRenderSystemCreator>();
|
||||||
|
return creator.GetStockShaderSourceLanguage;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
public override Effect Clone()
|
public override Effect Clone()
|
||||||
{
|
{
|
||||||
|
@ -82,9 +82,10 @@
|
|||||||
<Compile Include="EffectParameter_DX10.cs" />
|
<Compile Include="EffectParameter_DX10.cs" />
|
||||||
<Compile Include="EffectTechnique_DX10.cs" />
|
<Compile Include="EffectTechnique_DX10.cs" />
|
||||||
<Compile Include="Effect_DX10.cs" />
|
<Compile Include="Effect_DX10.cs" />
|
||||||
<Compile Include="FormatConverter.cs" />
|
<Compile Include="Helpers\FormatConverter.cs" />
|
||||||
<Compile Include="GraphicsDeviceWindowsDX10.cs" />
|
<Compile Include="GraphicsDeviceWindowsDX10.cs" />
|
||||||
<Compile Include="IncludeHandler.cs" />
|
<Compile Include="Helpers\IncludeHandler.cs" />
|
||||||
|
<Compile Include="Helpers\WindowHelper.cs" />
|
||||||
<Compile Include="IndexBuffer_DX10.cs" />
|
<Compile Include="IndexBuffer_DX10.cs" />
|
||||||
<Compile Include="EffectPass_DX10.cs" />
|
<Compile Include="EffectPass_DX10.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
@ -82,9 +82,10 @@
|
|||||||
<Compile Include="EffectParameter_DX10.cs" />
|
<Compile Include="EffectParameter_DX10.cs" />
|
||||||
<Compile Include="EffectTechnique_DX10.cs" />
|
<Compile Include="EffectTechnique_DX10.cs" />
|
||||||
<Compile Include="Effect_DX10.cs" />
|
<Compile Include="Effect_DX10.cs" />
|
||||||
<Compile Include="FormatConverter.cs" />
|
<Compile Include="Helpers\FormatConverter.cs" />
|
||||||
<Compile Include="GraphicsDeviceWindowsDX10.cs" />
|
<Compile Include="GraphicsDeviceWindowsDX10.cs" />
|
||||||
<Compile Include="IncludeHandler.cs" />
|
<Compile Include="Helpers\IncludeHandler.cs" />
|
||||||
|
<Compile Include="Helpers\WindowHelper.cs" />
|
||||||
<Compile Include="IndexBuffer_DX10.cs" />
|
<Compile Include="IndexBuffer_DX10.cs" />
|
||||||
<Compile Include="EffectPass_DX10.cs" />
|
<Compile Include="EffectPass_DX10.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
@ -83,9 +83,10 @@
|
|||||||
<Compile Include="EffectParameter_DX10.cs" />
|
<Compile Include="EffectParameter_DX10.cs" />
|
||||||
<Compile Include="EffectTechnique_DX10.cs" />
|
<Compile Include="EffectTechnique_DX10.cs" />
|
||||||
<Compile Include="Effect_DX10.cs" />
|
<Compile Include="Effect_DX10.cs" />
|
||||||
<Compile Include="FormatConverter.cs" />
|
<Compile Include="Helpers\FormatConverter.cs" />
|
||||||
<Compile Include="GraphicsDeviceWindowsDX10.cs" />
|
<Compile Include="GraphicsDeviceWindowsDX10.cs" />
|
||||||
<Compile Include="IncludeHandler.cs" />
|
<Compile Include="Helpers\IncludeHandler.cs" />
|
||||||
|
<Compile Include="Helpers\WindowHelper.cs" />
|
||||||
<Compile Include="IndexBuffer_DX10.cs" />
|
<Compile Include="IndexBuffer_DX10.cs" />
|
||||||
<Compile Include="EffectPass_DX10.cs" />
|
<Compile Include="EffectPass_DX10.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
@ -84,9 +84,10 @@
|
|||||||
<Compile Include="EffectParameter_DX10.cs" />
|
<Compile Include="EffectParameter_DX10.cs" />
|
||||||
<Compile Include="EffectTechnique_DX10.cs" />
|
<Compile Include="EffectTechnique_DX10.cs" />
|
||||||
<Compile Include="Effect_DX10.cs" />
|
<Compile Include="Effect_DX10.cs" />
|
||||||
<Compile Include="FormatConverter.cs" />
|
<Compile Include="Helpers\FormatConverter.cs" />
|
||||||
<Compile Include="GraphicsDeviceWindowsDX10.cs" />
|
<Compile Include="GraphicsDeviceWindowsDX10.cs" />
|
||||||
<Compile Include="IncludeHandler.cs" />
|
<Compile Include="Helpers\IncludeHandler.cs" />
|
||||||
|
<Compile Include="Helpers\WindowHelper.cs" />
|
||||||
<Compile Include="IndexBuffer_DX10.cs" />
|
<Compile Include="IndexBuffer_DX10.cs" />
|
||||||
<Compile Include="EffectPass_DX10.cs" />
|
<Compile Include="EffectPass_DX10.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
@ -1,14 +1,8 @@
|
|||||||
#region Using Statements
|
using ANX.Framework;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using SharpDX.Direct3D10;
|
|
||||||
using ANX.Framework.Graphics;
|
using ANX.Framework.Graphics;
|
||||||
using ANX.Framework.NonXNA;
|
using ANX.Framework.NonXNA;
|
||||||
using ANX.Framework;
|
using ANX.RenderSystem.Windows.DX10.Helpers;
|
||||||
|
using Dx10 = SharpDX.Direct3D10;
|
||||||
#endregion // Using Statements
|
|
||||||
|
|
||||||
// This file is part of the ANX.Framework created by the
|
// This file is part of the ANX.Framework created by the
|
||||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||||
@ -18,236 +12,193 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
{
|
{
|
||||||
public class BlendState_DX10 : INativeBlendState
|
public class BlendState_DX10 : INativeBlendState
|
||||||
{
|
{
|
||||||
#region Private Members
|
private const float ColorByteToFloatFactor = 1f / 255f;
|
||||||
private BlendStateDescription description;
|
|
||||||
private SharpDX.Direct3D10.BlendState nativeBlendState;
|
#region Private
|
||||||
private bool nativeBlendStateDirty;
|
private Dx10.BlendStateDescription description;
|
||||||
|
private Dx10.BlendState nativeBlendState;
|
||||||
|
private bool isDirty;
|
||||||
private SharpDX.Color4 blendFactor;
|
private SharpDX.Color4 blendFactor;
|
||||||
private int multiSampleMask;
|
private int multiSampleMask;
|
||||||
private bool bound;
|
#endregion
|
||||||
|
|
||||||
#endregion // Private Members
|
#region Public
|
||||||
|
public bool IsBound
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
private set;
|
||||||
|
}
|
||||||
|
|
||||||
public BlendState_DX10()
|
public Color BlendFactor
|
||||||
{
|
{
|
||||||
this.description = new BlendStateDescription();
|
set
|
||||||
|
{
|
||||||
|
blendFactor.Red = value.R * ColorByteToFloatFactor;
|
||||||
|
blendFactor.Green = value.G * ColorByteToFloatFactor;
|
||||||
|
blendFactor.Blue = value.B * ColorByteToFloatFactor;
|
||||||
|
blendFactor.Alpha = value.A * ColorByteToFloatFactor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int MultiSampleMask
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
multiSampleMask = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public BlendFunction AlphaBlendFunction
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Dx10.BlendOperation alphaBlendOperation = FormatConverter.Translate(value);
|
||||||
|
UpdateValueAndMarkDirtyIfNeeded(ref description.AlphaBlendOperation, ref alphaBlendOperation);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public BlendFunction ColorBlendFunction
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Dx10.BlendOperation blendOperation = FormatConverter.Translate(value);
|
||||||
|
UpdateValueAndMarkDirtyIfNeeded(ref description.BlendOperation, ref blendOperation);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Blend AlphaDestinationBlend
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Dx10.BlendOption destinationAlphaBlend = FormatConverter.Translate(value);
|
||||||
|
UpdateValueAndMarkDirtyIfNeeded(ref description.DestinationAlphaBlend, ref destinationAlphaBlend);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Blend ColorDestinationBlend
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Dx10.BlendOption destinationBlend = FormatConverter.Translate(value);
|
||||||
|
UpdateValueAndMarkDirtyIfNeeded(ref description.DestinationBlend, ref destinationBlend);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ColorWriteChannels ColorWriteChannels
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Dx10.ColorWriteMaskFlags writeMask = FormatConverter.Translate(value);
|
||||||
|
UpdateValueAndMarkDirtyIfNeeded(ref description.RenderTargetWriteMask[0], ref writeMask);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ColorWriteChannels ColorWriteChannels1
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Dx10.ColorWriteMaskFlags writeMask = FormatConverter.Translate(value);
|
||||||
|
UpdateValueAndMarkDirtyIfNeeded(ref description.RenderTargetWriteMask[1], ref writeMask);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ColorWriteChannels ColorWriteChannels2
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Dx10.ColorWriteMaskFlags writeMask = FormatConverter.Translate(value);
|
||||||
|
UpdateValueAndMarkDirtyIfNeeded(ref description.RenderTargetWriteMask[2], ref writeMask);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ColorWriteChannels ColorWriteChannels3
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Dx10.ColorWriteMaskFlags writeMask = FormatConverter.Translate(value);
|
||||||
|
UpdateValueAndMarkDirtyIfNeeded(ref description.RenderTargetWriteMask[3], ref writeMask);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Blend AlphaSourceBlend
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Dx10.BlendOption sourceAlphaBlend = FormatConverter.Translate(value);
|
||||||
|
UpdateValueAndMarkDirtyIfNeeded(ref description.SourceAlphaBlend, ref sourceAlphaBlend);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Blend ColorSourceBlend
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Dx10.BlendOption sourceBlend = FormatConverter.Translate(value);
|
||||||
|
UpdateValueAndMarkDirtyIfNeeded(ref description.SourceBlend, ref sourceBlend);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Constructor
|
||||||
|
public BlendState_DX10()
|
||||||
|
{
|
||||||
|
isDirty = true;
|
||||||
for (int i = 0; i < description.IsBlendEnabled.Length; i++)
|
for (int i = 0; i < description.IsBlendEnabled.Length; i++)
|
||||||
{
|
|
||||||
description.IsBlendEnabled[i] = (i < 4);
|
description.IsBlendEnabled[i] = (i < 4);
|
||||||
}
|
|
||||||
|
|
||||||
nativeBlendStateDirty = true;
|
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
public void Apply(GraphicsDevice graphics)
|
#region Apply
|
||||||
|
public void Apply(GraphicsDevice graphics)
|
||||||
{
|
{
|
||||||
GraphicsDeviceWindowsDX10 gdx10 = graphics.NativeDevice as GraphicsDeviceWindowsDX10;
|
Dx10.Device device = (graphics.NativeDevice as GraphicsDeviceWindowsDX10).NativeDevice;
|
||||||
SharpDX.Direct3D10.Device device = gdx10.NativeDevice;
|
|
||||||
|
|
||||||
UpdateNativeBlendState(device);
|
UpdateNativeBlendState(device);
|
||||||
this.bound = true;
|
IsBound = true;
|
||||||
|
|
||||||
device.OutputMerger.SetBlendState(nativeBlendState, this.blendFactor, this.multiSampleMask);
|
device.OutputMerger.SetBlendState(nativeBlendState, blendFactor, multiSampleMask);
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
public void Release()
|
#region Release
|
||||||
|
public void Release()
|
||||||
{
|
{
|
||||||
this.bound = false;
|
IsBound = false;
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
public void Dispose()
|
#region Dispose
|
||||||
|
public void Dispose()
|
||||||
{
|
{
|
||||||
if (this.nativeBlendState != null)
|
if (nativeBlendState != null)
|
||||||
{
|
{
|
||||||
this.nativeBlendState.Dispose();
|
nativeBlendState.Dispose();
|
||||||
this.nativeBlendState = null;
|
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
|
||||||
|
|
||||||
public bool IsBound
|
#region UpdateValueAndMarkDirtyIfNeeded
|
||||||
{
|
private void UpdateValueAndMarkDirtyIfNeeded<T>(ref T currentValue, ref T value)
|
||||||
get
|
{
|
||||||
{
|
if (value.Equals(currentValue) == false)
|
||||||
return this.bound;
|
{
|
||||||
}
|
isDirty = true;
|
||||||
}
|
currentValue = value;
|
||||||
|
}
|
||||||
public Color BlendFactor
|
}
|
||||||
{
|
#endregion
|
||||||
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 BlendFunction AlphaBlendFunction
|
|
||||||
{
|
|
||||||
set
|
|
||||||
{
|
|
||||||
BlendOperation alphaBlendOperation = FormatConverter.Translate(value);
|
|
||||||
|
|
||||||
if (description.AlphaBlendOperation != alphaBlendOperation)
|
|
||||||
{
|
|
||||||
nativeBlendStateDirty = true;
|
|
||||||
description.AlphaBlendOperation = alphaBlendOperation;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public BlendFunction ColorBlendFunction
|
|
||||||
{
|
|
||||||
set
|
|
||||||
{
|
|
||||||
BlendOperation blendOperation = FormatConverter.Translate(value);
|
|
||||||
|
|
||||||
if (description.BlendOperation != blendOperation)
|
|
||||||
{
|
|
||||||
nativeBlendStateDirty = true;
|
|
||||||
description.BlendOperation = blendOperation;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Blend AlphaDestinationBlend
|
|
||||||
{
|
|
||||||
set
|
|
||||||
{
|
|
||||||
BlendOption destinationAlphaBlend = FormatConverter.Translate(value);
|
|
||||||
|
|
||||||
if (description.DestinationAlphaBlend != destinationAlphaBlend)
|
|
||||||
{
|
|
||||||
nativeBlendStateDirty = true;
|
|
||||||
description.DestinationAlphaBlend = destinationAlphaBlend;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Blend ColorDestinationBlend
|
|
||||||
{
|
|
||||||
set
|
|
||||||
{
|
|
||||||
BlendOption destinationBlend = FormatConverter.Translate(value);
|
|
||||||
|
|
||||||
if (description.DestinationBlend != destinationBlend)
|
|
||||||
{
|
|
||||||
nativeBlendStateDirty = true;
|
|
||||||
description.DestinationBlend = destinationBlend;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public ColorWriteChannels ColorWriteChannels
|
|
||||||
{
|
|
||||||
set
|
|
||||||
{
|
|
||||||
ColorWriteMaskFlags renderTargetWriteMask = FormatConverter.Translate(value);
|
|
||||||
|
|
||||||
if (description.RenderTargetWriteMask[0] != renderTargetWriteMask)
|
|
||||||
{
|
|
||||||
nativeBlendStateDirty = true;
|
|
||||||
description.RenderTargetWriteMask[0] = renderTargetWriteMask;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public ColorWriteChannels ColorWriteChannels1
|
|
||||||
{
|
|
||||||
set
|
|
||||||
{
|
|
||||||
ColorWriteMaskFlags renderTargetWriteMask = FormatConverter.Translate(value);
|
|
||||||
|
|
||||||
if (description.RenderTargetWriteMask[1] != renderTargetWriteMask)
|
|
||||||
{
|
|
||||||
nativeBlendStateDirty = true;
|
|
||||||
description.RenderTargetWriteMask[1] = renderTargetWriteMask;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public ColorWriteChannels ColorWriteChannels2
|
|
||||||
{
|
|
||||||
set
|
|
||||||
{
|
|
||||||
ColorWriteMaskFlags renderTargetWriteMask = FormatConverter.Translate(value);
|
|
||||||
|
|
||||||
if (description.RenderTargetWriteMask[2] != renderTargetWriteMask)
|
|
||||||
{
|
|
||||||
nativeBlendStateDirty = true;
|
|
||||||
description.RenderTargetWriteMask[2] = renderTargetWriteMask;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public ColorWriteChannels ColorWriteChannels3
|
|
||||||
{
|
|
||||||
set
|
|
||||||
{
|
|
||||||
ColorWriteMaskFlags renderTargetWriteMask = FormatConverter.Translate(value);
|
|
||||||
|
|
||||||
if (description.RenderTargetWriteMask[3] != renderTargetWriteMask)
|
|
||||||
{
|
|
||||||
nativeBlendStateDirty = true;
|
|
||||||
description.RenderTargetWriteMask[3] = renderTargetWriteMask;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Blend AlphaSourceBlend
|
|
||||||
{
|
|
||||||
set
|
|
||||||
{
|
|
||||||
BlendOption sourceAlphaBlend = FormatConverter.Translate(value);
|
|
||||||
|
|
||||||
if (description.SourceAlphaBlend != sourceAlphaBlend)
|
|
||||||
{
|
|
||||||
nativeBlendStateDirty = true;
|
|
||||||
description.SourceAlphaBlend = sourceAlphaBlend;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Blend ColorSourceBlend
|
|
||||||
{
|
|
||||||
set
|
|
||||||
{
|
|
||||||
BlendOption sourceBlend = FormatConverter.Translate(value);
|
|
||||||
|
|
||||||
if (description.SourceBlend != sourceBlend)
|
|
||||||
{
|
|
||||||
nativeBlendStateDirty = true;
|
|
||||||
description.SourceBlend = sourceBlend;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void UpdateNativeBlendState(SharpDX.Direct3D10.Device device)
|
|
||||||
{
|
|
||||||
if (this.nativeBlendStateDirty == true || this.nativeBlendState == null)
|
|
||||||
{
|
|
||||||
if (this.nativeBlendState != null)
|
|
||||||
{
|
|
||||||
this.nativeBlendState.Dispose();
|
|
||||||
this.nativeBlendState = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.nativeBlendState = new SharpDX.Direct3D10.BlendState(device, ref this.description);
|
|
||||||
|
|
||||||
this.nativeBlendStateDirty = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -6,8 +6,8 @@ using ANX.Framework;
|
|||||||
using ANX.Framework.Graphics;
|
using ANX.Framework.Graphics;
|
||||||
using ANX.Framework.NonXNA;
|
using ANX.Framework.NonXNA;
|
||||||
using ANX.Framework.NonXNA.RenderSystem;
|
using ANX.Framework.NonXNA.RenderSystem;
|
||||||
|
using ANX.RenderSystem.Windows.DX10.Helpers;
|
||||||
using SharpDX.DXGI;
|
using SharpDX.DXGI;
|
||||||
using Dx10 = SharpDX.Direct3D10;
|
|
||||||
|
|
||||||
// This file is part of the ANX.Framework created by the
|
// This file is part of the ANX.Framework created by the
|
||||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||||
|
@ -1,301 +1,236 @@
|
|||||||
#region Using Statements
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using SharpDX.Direct3D10;
|
|
||||||
using ANX.Framework.Graphics;
|
using ANX.Framework.Graphics;
|
||||||
using ANX.Framework.NonXNA;
|
using ANX.Framework.NonXNA;
|
||||||
using ANX.Framework;
|
using ANX.RenderSystem.Windows.DX10.Helpers;
|
||||||
|
using Dx10 = SharpDX.Direct3D10;
|
||||||
#endregion // Using Statements
|
|
||||||
|
|
||||||
// This file is part of the ANX.Framework created by the
|
// This file is part of the ANX.Framework created by the
|
||||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||||
// For details see: http://anxframework.codeplex.com/license
|
// For details see: http://anxframework.codeplex.com/license
|
||||||
|
|
||||||
using StencilOperation = ANX.Framework.Graphics.StencilOperation;
|
|
||||||
|
|
||||||
namespace ANX.RenderSystem.Windows.DX10
|
namespace ANX.RenderSystem.Windows.DX10
|
||||||
{
|
{
|
||||||
public class DepthStencilState_DX10 : INativeDepthStencilState
|
public class DepthStencilState_DX10 : INativeDepthStencilState
|
||||||
{
|
{
|
||||||
#region Private Members
|
#region Private
|
||||||
private DepthStencilStateDescription description;
|
private Dx10.DepthStencilStateDescription description;
|
||||||
private SharpDX.Direct3D10.DepthStencilState nativeDepthStencilState;
|
private Dx10.DepthStencilState nativeDepthStencilState;
|
||||||
private bool nativeDepthStencilStateDirty;
|
private bool isDirty;
|
||||||
private bool bound;
|
|
||||||
|
|
||||||
private int referenceStencil;
|
private int referenceStencil;
|
||||||
|
#endregion
|
||||||
|
|
||||||
#endregion // Private Members
|
#region Public (TODO)
|
||||||
|
public bool IsBound
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
private set;
|
||||||
|
}
|
||||||
|
|
||||||
public DepthStencilState_DX10()
|
public StencilOperation CounterClockwiseStencilDepthBufferFail
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Dx10.StencilOperation operation = FormatConverter.Translate(value);
|
||||||
|
UpdateValueAndMarkDirtyIfNeeded(ref description.BackFace.DepthFailOperation, ref operation);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public StencilOperation CounterClockwiseStencilFail
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Dx10.StencilOperation operation = FormatConverter.Translate(value);
|
||||||
|
UpdateValueAndMarkDirtyIfNeeded(ref description.BackFace.FailOperation, ref operation);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public CompareFunction CounterClockwiseStencilFunction
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Dx10.Comparison comparison = FormatConverter.Translate(value);
|
||||||
|
UpdateValueAndMarkDirtyIfNeeded(ref description.BackFace.Comparison, ref comparison);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public StencilOperation CounterClockwiseStencilPass
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Dx10.StencilOperation operation = FormatConverter.Translate(value);
|
||||||
|
UpdateValueAndMarkDirtyIfNeeded(ref description.BackFace.PassOperation, ref operation);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool DepthBufferEnable
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (description.IsDepthEnabled != value)
|
||||||
|
{
|
||||||
|
description.IsDepthEnabled = value;
|
||||||
|
isDirty = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public CompareFunction DepthBufferFunction
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Dx10.Comparison comparison = FormatConverter.Translate(value);
|
||||||
|
UpdateValueAndMarkDirtyIfNeeded(ref description.DepthComparison, ref comparison);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool DepthBufferWriteEnable
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Dx10.DepthWriteMask writeMask = value ? Dx10.DepthWriteMask.All : Dx10.DepthWriteMask.Zero;
|
||||||
|
UpdateValueAndMarkDirtyIfNeeded(ref description.DepthWriteMask, ref writeMask);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int ReferenceStencil
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
UpdateValueAndMarkDirtyIfNeeded(ref referenceStencil, ref value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public StencilOperation StencilDepthBufferFail
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Dx10.StencilOperation operation = FormatConverter.Translate(value);
|
||||||
|
UpdateValueAndMarkDirtyIfNeeded(ref description.FrontFace.DepthFailOperation, ref operation);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool StencilEnable
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (description.IsStencilEnabled != value)
|
||||||
|
{
|
||||||
|
description.IsStencilEnabled = value;
|
||||||
|
isDirty = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public StencilOperation StencilFail
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Dx10.StencilOperation operation = FormatConverter.Translate(value);
|
||||||
|
UpdateValueAndMarkDirtyIfNeeded(ref description.FrontFace.FailOperation, ref operation);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public CompareFunction StencilFunction
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Dx10.Comparison comparison = FormatConverter.Translate(value);
|
||||||
|
UpdateValueAndMarkDirtyIfNeeded(ref description.FrontFace.Comparison, ref comparison);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int StencilMask
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
byte stencilMask = (byte)value; //TODO: check range
|
||||||
|
UpdateValueAndMarkDirtyIfNeeded(ref description.StencilReadMask, ref stencilMask);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public StencilOperation StencilPass
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Dx10.StencilOperation operation = FormatConverter.Translate(value);
|
||||||
|
UpdateValueAndMarkDirtyIfNeeded(ref description.FrontFace.PassOperation, ref operation);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int StencilWriteMask
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
byte stencilWriteMask = (byte)value; //TODO: check range
|
||||||
|
UpdateValueAndMarkDirtyIfNeeded(ref description.StencilWriteMask, ref stencilWriteMask);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool TwoSidedStencilMode
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
//TODO: check if we really need in xna this enables only counter clockwise stencil operations
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Constructor
|
||||||
|
public DepthStencilState_DX10()
|
||||||
{
|
{
|
||||||
this.description = new DepthStencilStateDescription();
|
isDirty = true;
|
||||||
|
|
||||||
this.nativeDepthStencilStateDirty = true;
|
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Apply
|
||||||
public void Apply(GraphicsDevice graphicsDevice)
|
public void Apply(GraphicsDevice graphicsDevice)
|
||||||
{
|
{
|
||||||
GraphicsDeviceWindowsDX10 gdx10 = graphicsDevice.NativeDevice as GraphicsDeviceWindowsDX10;
|
Dx10.Device device = (graphicsDevice.NativeDevice as GraphicsDeviceWindowsDX10).NativeDevice;
|
||||||
Device device = gdx10.NativeDevice;
|
|
||||||
|
|
||||||
UpdateNativeDepthStencilState(device);
|
UpdateNativeDepthStencilState(device);
|
||||||
this.bound = true;
|
IsBound = true;
|
||||||
|
|
||||||
device.OutputMerger.SetDepthStencilState(nativeDepthStencilState, this.referenceStencil);
|
device.OutputMerger.SetDepthStencilState(nativeDepthStencilState, referenceStencil);
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Release
|
||||||
public void Release()
|
public void Release()
|
||||||
{
|
{
|
||||||
this.bound = false;
|
IsBound = false;
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Dispose
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
if (this.nativeDepthStencilState != null)
|
if (nativeDepthStencilState != null)
|
||||||
{
|
{
|
||||||
this.nativeDepthStencilState.Dispose();
|
nativeDepthStencilState.Dispose();
|
||||||
this.nativeDepthStencilState = null;
|
nativeDepthStencilState = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
public bool IsBound
|
#region UpdateNativeDepthStencilState
|
||||||
|
private void UpdateNativeDepthStencilState(Dx10.Device device)
|
||||||
{
|
{
|
||||||
get
|
if (isDirty == true || nativeDepthStencilState == null)
|
||||||
{
|
{
|
||||||
return this.bound;
|
Dispose();
|
||||||
|
nativeDepthStencilState = new Dx10.DepthStencilState(device, ref description);
|
||||||
|
isDirty = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
public StencilOperation CounterClockwiseStencilDepthBufferFail
|
#region UpdateValueAndMarkDirtyIfNeeded
|
||||||
{
|
private void UpdateValueAndMarkDirtyIfNeeded<T>(ref T currentValue, ref T value)
|
||||||
set
|
{
|
||||||
{
|
if (value.Equals(currentValue) == false)
|
||||||
SharpDX.Direct3D10.StencilOperation operation = FormatConverter.Translate(value);
|
{
|
||||||
|
isDirty = true;
|
||||||
if (description.BackFace.DepthFailOperation != operation)
|
currentValue = value;
|
||||||
{
|
}
|
||||||
description.BackFace.DepthFailOperation = operation;
|
}
|
||||||
nativeDepthStencilStateDirty = true;
|
#endregion
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public StencilOperation CounterClockwiseStencilFail
|
|
||||||
{
|
|
||||||
set
|
|
||||||
{
|
|
||||||
SharpDX.Direct3D10.StencilOperation operation = FormatConverter.Translate(value);
|
|
||||||
|
|
||||||
if (description.BackFace.FailOperation != operation)
|
|
||||||
{
|
|
||||||
description.BackFace.FailOperation = operation;
|
|
||||||
nativeDepthStencilStateDirty = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public CompareFunction CounterClockwiseStencilFunction
|
|
||||||
{
|
|
||||||
set
|
|
||||||
{
|
|
||||||
SharpDX.Direct3D10.Comparison comparison = FormatConverter.Translate(value);
|
|
||||||
|
|
||||||
if (description.BackFace.Comparison != comparison)
|
|
||||||
{
|
|
||||||
description.BackFace.Comparison = comparison;
|
|
||||||
nativeDepthStencilStateDirty = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public StencilOperation CounterClockwiseStencilPass
|
|
||||||
{
|
|
||||||
set
|
|
||||||
{
|
|
||||||
SharpDX.Direct3D10.StencilOperation operation = FormatConverter.Translate(value);
|
|
||||||
|
|
||||||
if (description.BackFace.PassOperation != operation)
|
|
||||||
{
|
|
||||||
description.BackFace.PassOperation = operation;
|
|
||||||
nativeDepthStencilStateDirty = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool DepthBufferEnable
|
|
||||||
{
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (description.IsDepthEnabled != value)
|
|
||||||
{
|
|
||||||
description.IsDepthEnabled = value;
|
|
||||||
nativeDepthStencilStateDirty = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public CompareFunction DepthBufferFunction
|
|
||||||
{
|
|
||||||
set
|
|
||||||
{
|
|
||||||
SharpDX.Direct3D10.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 StencilOperation StencilDepthBufferFail
|
|
||||||
{
|
|
||||||
set
|
|
||||||
{
|
|
||||||
SharpDX.Direct3D10.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 StencilOperation StencilFail
|
|
||||||
{
|
|
||||||
set
|
|
||||||
{
|
|
||||||
SharpDX.Direct3D10.StencilOperation operation = FormatConverter.Translate(value);
|
|
||||||
|
|
||||||
if (description.FrontFace.FailOperation != operation)
|
|
||||||
{
|
|
||||||
description.FrontFace.FailOperation = operation;
|
|
||||||
nativeDepthStencilStateDirty = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public CompareFunction StencilFunction
|
|
||||||
{
|
|
||||||
set
|
|
||||||
{
|
|
||||||
SharpDX.Direct3D10.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 StencilOperation StencilPass
|
|
||||||
{
|
|
||||||
set
|
|
||||||
{
|
|
||||||
SharpDX.Direct3D10.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.Direct3D10.DepthStencilState(device, ref this.description);
|
|
||||||
|
|
||||||
this.nativeDepthStencilStateDirty = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,299 +1,278 @@
|
|||||||
#region Using Statements
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using ANX.Framework.NonXNA;
|
|
||||||
using SharpDX.Direct3D10;
|
|
||||||
using ANX.Framework.Graphics;
|
|
||||||
using ANX.Framework.NonXNA.RenderSystem;
|
|
||||||
using ANX.Framework;
|
using ANX.Framework;
|
||||||
|
using ANX.Framework.Graphics;
|
||||||
#endregion // Using Statements
|
using ANX.Framework.NonXNA;
|
||||||
|
using Dx10 = SharpDX.Direct3D10;
|
||||||
|
|
||||||
// This file is part of the ANX.Framework created by the
|
// This file is part of the ANX.Framework created by the
|
||||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||||
// For details see: http://anxframework.codeplex.com/license
|
// For details see: http://anxframework.codeplex.com/license
|
||||||
|
|
||||||
using Texture2D = ANX.Framework.Graphics.Texture2D;
|
|
||||||
using Texture3D = ANX.Framework.Graphics.Texture3D;
|
|
||||||
|
|
||||||
namespace ANX.RenderSystem.Windows.DX10
|
namespace ANX.RenderSystem.Windows.DX10
|
||||||
{
|
{
|
||||||
public class EffectParameter_DX10 : INativeEffectParameter
|
public class EffectParameter_DX10 : INativeEffectParameter
|
||||||
{
|
{
|
||||||
private EffectVariable nativeEffectVariable;
|
#region Public
|
||||||
|
public Dx10.EffectVariable NativeParameter
|
||||||
public EffectVariable NativeParameter
|
{
|
||||||
{
|
get;
|
||||||
get
|
internal set;
|
||||||
{
|
|
||||||
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)
|
|
||||||
{
|
|
||||||
if (value == null)
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException("value");
|
|
||||||
}
|
|
||||||
|
|
||||||
Texture2D_DX10 tex = value.NativeTexture as Texture2D_DX10;
|
|
||||||
GraphicsDeviceWindowsDX10 graphicsDX10 = tex.GraphicsDevice.NativeDevice as GraphicsDeviceWindowsDX10;
|
|
||||||
SharpDX.Direct3D10.Device device = graphicsDX10.NativeDevice;
|
|
||||||
|
|
||||||
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 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
|
|
||||||
|
|
||||||
#region INativeEffectParameter Member
|
|
||||||
|
|
||||||
|
|
||||||
public void SetValue(string value)
|
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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_DX10;
|
||||||
|
var graphicsDX10 = tex.GraphicsDevice.NativeDevice as GraphicsDeviceWindowsDX10;
|
||||||
|
Dx10.Device device = graphicsDX10.NativeDevice;
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ using System.Collections.Generic;
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using ANX.Framework.Graphics;
|
using ANX.Framework.Graphics;
|
||||||
using ANX.Framework.NonXNA;
|
using ANX.Framework.NonXNA;
|
||||||
|
using ANX.RenderSystem.Windows.DX10.Helpers;
|
||||||
using SharpDX.D3DCompiler;
|
using SharpDX.D3DCompiler;
|
||||||
using Dx10 = SharpDX.Direct3D10;
|
using Dx10 = SharpDX.Direct3D10;
|
||||||
|
|
||||||
@ -92,35 +93,46 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region GetCurrentTechnique
|
||||||
public EffectTechnique_DX10 GetCurrentTechnique()
|
public EffectTechnique_DX10 GetCurrentTechnique()
|
||||||
{
|
{
|
||||||
return managedEffect.CurrentTechnique.NativeTechnique as EffectTechnique_DX10;
|
return managedEffect.CurrentTechnique.NativeTechnique as EffectTechnique_DX10;
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Apply
|
||||||
public void Apply(GraphicsDevice graphicsDevice)
|
public void Apply(GraphicsDevice graphicsDevice)
|
||||||
{
|
{
|
||||||
((GraphicsDeviceWindowsDX10)graphicsDevice.NativeDevice).currentEffect = this;
|
((GraphicsDeviceWindowsDX10)graphicsDevice.NativeDevice).currentEffect = this;
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
public static byte[] CompileVertexShader(string effectCode, string directory = "")
|
#region CompileVertexShader (TODO)
|
||||||
|
public static byte[] CompileVertexShader(string effectCode, string directory = "")
|
||||||
{
|
{
|
||||||
|
// TODO: not all entry points are named VS!
|
||||||
ShaderBytecode vertexShaderByteCode = ShaderBytecode.Compile(effectCode, "VS", "vs_4_0", ShaderFlags.None,
|
ShaderBytecode vertexShaderByteCode = ShaderBytecode.Compile(effectCode, "VS", "vs_4_0", ShaderFlags.None,
|
||||||
EffectFlags.None, null, new IncludeHandler(directory), "unknown");
|
EffectFlags.None, null, new IncludeHandler(directory), "unknown");
|
||||||
byte[] bytecode = new byte[vertexShaderByteCode.BufferSize];
|
byte[] bytecode = new byte[vertexShaderByteCode.BufferSize];
|
||||||
vertexShaderByteCode.Data.Read(bytecode, 0, bytecode.Length);
|
vertexShaderByteCode.Data.Read(bytecode, 0, bytecode.Length);
|
||||||
return bytecode;
|
return bytecode;
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
public static byte[] CompilePixelShader(string effectCode, string directory = "")
|
#region CompilePixelShader (TODO)
|
||||||
{
|
public static byte[] CompilePixelShader(string effectCode, string directory = "")
|
||||||
|
{
|
||||||
|
// TODO: not all entry points are named PS!
|
||||||
ShaderBytecode pixelShaderByteCode = ShaderBytecode.Compile(effectCode, "PS", "ps_4_0", ShaderFlags.None,
|
ShaderBytecode pixelShaderByteCode = ShaderBytecode.Compile(effectCode, "PS", "ps_4_0", ShaderFlags.None,
|
||||||
EffectFlags.None, null, new IncludeHandler(directory), "unknown");
|
EffectFlags.None, null, new IncludeHandler(directory), "unknown");
|
||||||
byte[] bytecode = new byte[pixelShaderByteCode.BufferSize];
|
byte[] bytecode = new byte[pixelShaderByteCode.BufferSize];
|
||||||
pixelShaderByteCode.Data.Read(bytecode, 0, bytecode.Length);
|
pixelShaderByteCode.Data.Read(bytecode, 0, bytecode.Length);
|
||||||
return bytecode;
|
return bytecode;
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
public static byte[] CompileFXShader(string effectCode, string directory = "")
|
#region CompileFXShader
|
||||||
|
public static byte[] CompileFXShader(string effectCode, string directory = "")
|
||||||
{
|
{
|
||||||
ShaderBytecode effectByteCode = ShaderBytecode.Compile(effectCode, "fx_4_0", ShaderFlags.None, EffectFlags.None,
|
ShaderBytecode effectByteCode = ShaderBytecode.Compile(effectCode, "fx_4_0", ShaderFlags.None, EffectFlags.None,
|
||||||
null, new IncludeHandler(directory), "unknown");
|
null, new IncludeHandler(directory), "unknown");
|
||||||
@ -128,6 +140,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
effectByteCode.Data.Read(bytecode, 0, bytecode.Length);
|
effectByteCode.Data.Read(bytecode, 0, bytecode.Length);
|
||||||
return bytecode;
|
return bytecode;
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region Dispose
|
#region Dispose
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
|
@ -1,345 +0,0 @@
|
|||||||
#region Using Statements
|
|
||||||
using System;
|
|
||||||
using ANX.Framework.Graphics;
|
|
||||||
using SharpDX.Direct3D10;
|
|
||||||
using SharpDX.Direct3D;
|
|
||||||
using SharpDX.DXGI;
|
|
||||||
|
|
||||||
#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
|
|
||||||
|
|
||||||
using TextureAddressMode = ANX.Framework.Graphics.TextureAddressMode;
|
|
||||||
using StencilOperation = ANX.Framework.Graphics.StencilOperation;
|
|
||||||
using CullMode = ANX.Framework.Graphics.CullMode;
|
|
||||||
using FillMode = ANX.Framework.Graphics.FillMode;
|
|
||||||
|
|
||||||
namespace ANX.RenderSystem.Windows.DX10
|
|
||||||
{
|
|
||||||
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)
|
|
||||||
{
|
|
||||||
case TextureFilter.Anisotropic:
|
|
||||||
return Filter.Anisotropic;
|
|
||||||
case TextureFilter.Linear:
|
|
||||||
return Filter.MinMagMipLinear;
|
|
||||||
case TextureFilter.LinearMipPoint:
|
|
||||||
return Filter.MinMagMipPoint;
|
|
||||||
case TextureFilter.MinLinearMagPointMipLinear:
|
|
||||||
return Filter.MinLinearMagPointMipLinear;
|
|
||||||
case TextureFilter.MinLinearMagPointMipPoint:
|
|
||||||
return Filter.MinLinearMagMipPoint;
|
|
||||||
case TextureFilter.MinPointMagLinearMipLinear:
|
|
||||||
return Filter.MinPointMagMipLinear;
|
|
||||||
case TextureFilter.MinPointMagLinearMipPoint:
|
|
||||||
return Filter.MinPointMagLinearMipPoint;
|
|
||||||
case TextureFilter.Point:
|
|
||||||
return Filter.MinMagMipPoint;
|
|
||||||
case TextureFilter.PointMipLinear:
|
|
||||||
return Filter.MinMagPointMipLinear;
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static SharpDX.Direct3D10.TextureAddressMode Translate(ANX.Framework.Graphics.TextureAddressMode addressMode)
|
|
||||||
{
|
|
||||||
switch (addressMode)
|
|
||||||
{
|
|
||||||
case TextureAddressMode.Clamp:
|
|
||||||
return SharpDX.Direct3D10.TextureAddressMode.Clamp;
|
|
||||||
case TextureAddressMode.Mirror:
|
|
||||||
return SharpDX.Direct3D10.TextureAddressMode.Mirror;
|
|
||||||
case TextureAddressMode.Wrap:
|
|
||||||
return SharpDX.Direct3D10.TextureAddressMode.Wrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
return SharpDX.Direct3D10.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(ref VertexElement element)
|
|
||||||
{
|
|
||||||
//TODO: map the other Usages
|
|
||||||
if (element.VertexElementUsage == VertexElementUsage.TextureCoordinate)
|
|
||||||
return "TEXCOORD";
|
|
||||||
else
|
|
||||||
return element.VertexElementUsage.ToString().ToUpperInvariant();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static BlendOperation Translate(BlendFunction blendFunction)
|
|
||||||
{
|
|
||||||
switch (blendFunction)
|
|
||||||
{
|
|
||||||
case BlendFunction.Add:
|
|
||||||
return BlendOperation.Add;
|
|
||||||
case BlendFunction.Max:
|
|
||||||
return BlendOperation.Maximum;
|
|
||||||
case BlendFunction.Min:
|
|
||||||
return BlendOperation.Minimum;
|
|
||||||
case BlendFunction.ReverseSubtract:
|
|
||||||
return BlendOperation.ReverseSubtract;
|
|
||||||
case BlendFunction.Subtract:
|
|
||||||
return BlendOperation.Subtract;
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static BlendOption Translate(Blend blend)
|
|
||||||
{
|
|
||||||
switch (blend)
|
|
||||||
{
|
|
||||||
case Blend.BlendFactor:
|
|
||||||
return BlendOption.BlendFactor;
|
|
||||||
case Blend.DestinationAlpha:
|
|
||||||
return BlendOption.DestinationAlpha;
|
|
||||||
case Blend.DestinationColor:
|
|
||||||
return BlendOption.DestinationColor;
|
|
||||||
case Blend.InverseBlendFactor:
|
|
||||||
return BlendOption.InverseBlendFactor;
|
|
||||||
case Blend.InverseDestinationAlpha:
|
|
||||||
return BlendOption.InverseDestinationAlpha;
|
|
||||||
case Blend.InverseDestinationColor:
|
|
||||||
return BlendOption.InverseDestinationColor;
|
|
||||||
case Blend.InverseSourceAlpha:
|
|
||||||
return BlendOption.InverseSourceAlpha;
|
|
||||||
case Blend.InverseSourceColor:
|
|
||||||
return BlendOption.InverseSourceColor;
|
|
||||||
case Blend.One:
|
|
||||||
return BlendOption.One;
|
|
||||||
case Blend.SourceAlpha:
|
|
||||||
return BlendOption.SourceAlpha;
|
|
||||||
case Blend.SourceAlphaSaturation:
|
|
||||||
return BlendOption.SourceAlphaSaturate;
|
|
||||||
case Blend.SourceColor:
|
|
||||||
return BlendOption.SourceColor;
|
|
||||||
case Blend.Zero:
|
|
||||||
return BlendOption.Zero;
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ColorWriteMaskFlags Translate(ColorWriteChannels colorWriteChannels)
|
|
||||||
{
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static SharpDX.Direct3D10.StencilOperation Translate(ANX.Framework.Graphics.StencilOperation stencilOperation)
|
|
||||||
{
|
|
||||||
switch (stencilOperation)
|
|
||||||
{
|
|
||||||
case StencilOperation.Decrement:
|
|
||||||
return SharpDX.Direct3D10.StencilOperation.Decrement;
|
|
||||||
case StencilOperation.DecrementSaturation:
|
|
||||||
return SharpDX.Direct3D10.StencilOperation.DecrementAndClamp;
|
|
||||||
case StencilOperation.Increment:
|
|
||||||
return SharpDX.Direct3D10.StencilOperation.Increment;
|
|
||||||
case StencilOperation.IncrementSaturation:
|
|
||||||
return SharpDX.Direct3D10.StencilOperation.IncrementAndClamp;
|
|
||||||
case StencilOperation.Invert:
|
|
||||||
return SharpDX.Direct3D10.StencilOperation.Invert;
|
|
||||||
case StencilOperation.Keep:
|
|
||||||
return SharpDX.Direct3D10.StencilOperation.Keep;
|
|
||||||
case StencilOperation.Replace:
|
|
||||||
return SharpDX.Direct3D10.StencilOperation.Replace;
|
|
||||||
case StencilOperation.Zero:
|
|
||||||
return SharpDX.Direct3D10.StencilOperation.Zero;
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new NotImplementedException("unknown StencilOperation");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Comparison Translate(ANX.Framework.Graphics.CompareFunction compareFunction)
|
|
||||||
{
|
|
||||||
switch (compareFunction)
|
|
||||||
{
|
|
||||||
case ANX.Framework.Graphics.CompareFunction.Always:
|
|
||||||
return Comparison.Always;
|
|
||||||
case ANX.Framework.Graphics.CompareFunction.Equal:
|
|
||||||
return Comparison.Equal;
|
|
||||||
case ANX.Framework.Graphics.CompareFunction.Greater:
|
|
||||||
return Comparison.Greater;
|
|
||||||
case ANX.Framework.Graphics.CompareFunction.GreaterEqual:
|
|
||||||
return Comparison.GreaterEqual;
|
|
||||||
case ANX.Framework.Graphics.CompareFunction.Less:
|
|
||||||
return Comparison.Less;
|
|
||||||
case ANX.Framework.Graphics.CompareFunction.LessEqual:
|
|
||||||
return Comparison.LessEqual;
|
|
||||||
case ANX.Framework.Graphics.CompareFunction.Never:
|
|
||||||
return Comparison.Never;
|
|
||||||
case ANX.Framework.Graphics.CompareFunction.NotEqual:
|
|
||||||
return Comparison.NotEqual;
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new NotImplementedException("unknown CompareFunction");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static SharpDX.Direct3D10.CullMode Translate(CullMode cullMode)
|
|
||||||
{
|
|
||||||
if (cullMode == CullMode.CullClockwiseFace)
|
|
||||||
{
|
|
||||||
return SharpDX.Direct3D10.CullMode.Front;
|
|
||||||
}
|
|
||||||
else if (cullMode == CullMode.CullCounterClockwiseFace)
|
|
||||||
{
|
|
||||||
return SharpDX.Direct3D10.CullMode.Back;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return SharpDX.Direct3D10.CullMode.None;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static SharpDX.Direct3D10.FillMode Translate(FillMode fillMode)
|
|
||||||
{
|
|
||||||
if (fillMode == FillMode.WireFrame)
|
|
||||||
{
|
|
||||||
return SharpDX.Direct3D10.FillMode.Wireframe;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return SharpDX.Direct3D10.FillMode.Solid;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,25 +1,16 @@
|
|||||||
#region Using Statements
|
|
||||||
using System;
|
using System;
|
||||||
using SharpDX.DXGI;
|
|
||||||
using SharpDX.D3DCompiler;
|
|
||||||
using SharpDX.Direct3D10;
|
|
||||||
using ANX.Framework;
|
using ANX.Framework;
|
||||||
using ANX.Framework.NonXNA;
|
|
||||||
using ANX.Framework.Graphics;
|
using ANX.Framework.Graphics;
|
||||||
using System.Runtime.InteropServices;
|
using ANX.Framework.NonXNA;
|
||||||
|
using ANX.RenderSystem.Windows.DX10.Helpers;
|
||||||
#endregion // Using Statements
|
using SharpDX.D3DCompiler;
|
||||||
|
using SharpDX.DXGI;
|
||||||
|
using Dx10 = SharpDX.Direct3D10;
|
||||||
|
|
||||||
// This file is part of the ANX.Framework created by the
|
// This file is part of the ANX.Framework created by the
|
||||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||||
// For details see: http://anxframework.codeplex.com/license
|
// For details see: http://anxframework.codeplex.com/license
|
||||||
|
|
||||||
using Device = SharpDX.Direct3D10.Device;
|
|
||||||
using Rectangle = ANX.Framework.Rectangle;
|
|
||||||
using Vector4 = ANX.Framework.Vector4;
|
|
||||||
using VertexBufferBinding = ANX.Framework.Graphics.VertexBufferBinding;
|
|
||||||
using Viewport = ANX.Framework.Graphics.Viewport;
|
|
||||||
|
|
||||||
namespace ANX.RenderSystem.Windows.DX10
|
namespace ANX.RenderSystem.Windows.DX10
|
||||||
{
|
{
|
||||||
public class GraphicsDeviceWindowsDX10 : INativeGraphicsDevice
|
public class GraphicsDeviceWindowsDX10 : INativeGraphicsDevice
|
||||||
@ -28,48 +19,24 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
private const float ColorMultiplier = 1f / 255f;
|
private const float ColorMultiplier = 1f / 255f;
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Interop
|
#region Private
|
||||||
[DllImport("user32.dll")]
|
private Dx10.Device device;
|
||||||
private static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int width, int height, uint uFlags);
|
private SwapChain swapChain;
|
||||||
|
private Dx10.RenderTargetView renderView;
|
||||||
[DllImport("user32.dll")]
|
private Dx10.RenderTargetView[] renderTargetView = new Dx10.RenderTargetView[1];
|
||||||
[return: MarshalAs(UnmanagedType.Bool)]
|
private Dx10.DepthStencilView depthStencilView;
|
||||||
static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);
|
private Dx10.Texture2D depthStencilBuffer;
|
||||||
|
private Dx10.Texture2D backBuffer;
|
||||||
[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
|
|
||||||
private Device device;
|
|
||||||
private SwapChain swapChain;
|
|
||||||
private RenderTargetView renderView;
|
|
||||||
private RenderTargetView[] renderTargetView = new RenderTargetView[1];
|
|
||||||
private DepthStencilView depthStencilView;
|
|
||||||
private SharpDX.Direct3D10.Texture2D depthStencilBuffer;
|
|
||||||
private SharpDX.Direct3D10.Texture2D backBuffer;
|
|
||||||
internal Effect_DX10 currentEffect;
|
internal Effect_DX10 currentEffect;
|
||||||
private VertexBuffer currentVertexBuffer;
|
private VertexBuffer currentVertexBuffer;
|
||||||
private IndexBuffer currentIndexBuffer;
|
private IndexBuffer currentIndexBuffer;
|
||||||
private SharpDX.Direct3D10.Viewport currentViewport;
|
private Dx10.Viewport currentViewport;
|
||||||
private uint lastClearColor;
|
private uint lastClearColor;
|
||||||
private SharpDX.Color4 clearColor;
|
private SharpDX.Color4 clearColor;
|
||||||
private bool vSyncEnabled;
|
#endregion
|
||||||
|
|
||||||
#endregion // Private Members
|
#region Public
|
||||||
|
internal Dx10.Device NativeDevice
|
||||||
internal Device NativeDevice
|
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
@ -77,15 +44,21 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public GraphicsDeviceWindowsDX10(PresentationParameters presentationParameters)
|
public bool VSync { get; set; }
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Constructor
|
||||||
|
public GraphicsDeviceWindowsDX10(PresentationParameters presentationParameters)
|
||||||
{
|
{
|
||||||
this.vSyncEnabled = true;
|
VSync = true;
|
||||||
|
|
||||||
// SwapChain description
|
// SwapChain description
|
||||||
var desc = new SwapChainDescription()
|
var desc = new SwapChainDescription()
|
||||||
{
|
{
|
||||||
BufferCount = 1,
|
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),
|
||||||
|
FormatConverter.Translate(presentationParameters.BackBufferFormat)),
|
||||||
IsWindowed = true,
|
IsWindowed = true,
|
||||||
OutputHandle = presentationParameters.DeviceWindowHandle,
|
OutputHandle = presentationParameters.DeviceWindowHandle,
|
||||||
SampleDescription = new SampleDescription(1, 0),
|
SampleDescription = new SampleDescription(1, 0),
|
||||||
@ -96,34 +69,36 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
// Create Device and SwapChain
|
// Create Device and SwapChain
|
||||||
#if DIRECTX_DEBUG_LAYER
|
#if DIRECTX_DEBUG_LAYER
|
||||||
// http://msdn.microsoft.com/en-us/library/windows/desktop/bb205068(v=vs.85).aspx
|
// http://msdn.microsoft.com/en-us/library/windows/desktop/bb205068(v=vs.85).aspx
|
||||||
Device.CreateWithSwapChain(SharpDX.Direct3D10.DriverType.Hardware, DeviceCreationFlags.Debug, desc, out device, out swapChain);
|
Dx10.Device.CreateWithSwapChain(Dx10.DriverType.Hardware, Dx10.DeviceCreationFlags.Debug, desc, out device,
|
||||||
|
out swapChain);
|
||||||
#else
|
#else
|
||||||
Device.CreateWithSwapChain(SharpDX.Direct3D10.DriverType.Hardware, DeviceCreationFlags.None, desc, out device, out swapChain);
|
Dx10.Device.CreateWithSwapChain(Dx10.DriverType.Hardware, Dx10.DeviceCreationFlags.None, desc, out device,
|
||||||
|
out swapChain);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Ignore all windows events
|
// Ignore all windows events
|
||||||
Factory factory = swapChain.GetParent<Factory>();
|
Factory factory = swapChain.GetParent<Factory>();
|
||||||
factory.MakeWindowAssociation(presentationParameters.DeviceWindowHandle, WindowAssociationFlags.IgnoreAll);
|
factory.MakeWindowAssociation(presentationParameters.DeviceWindowHandle, WindowAssociationFlags.IgnoreAll);
|
||||||
|
|
||||||
ResizeRenderWindow(presentationParameters);
|
WindowHelper.ResizeRenderWindow(presentationParameters);
|
||||||
|
|
||||||
// New RenderTargetView from the backbuffer
|
// New RenderTargetView from the backbuffer
|
||||||
backBuffer = SharpDX.Direct3D10.Texture2D.FromSwapChain<SharpDX.Direct3D10.Texture2D>(swapChain, 0);
|
backBuffer = Dx10.Texture2D.FromSwapChain<Dx10.Texture2D>(swapChain, 0);
|
||||||
renderView = new RenderTargetView(device, backBuffer);
|
renderView = new Dx10.RenderTargetView(device, backBuffer);
|
||||||
|
|
||||||
currentViewport = new SharpDX.Direct3D10.Viewport(0, 0, presentationParameters.BackBufferWidth, presentationParameters.BackBufferHeight);
|
currentViewport = new Dx10.Viewport(0, 0, presentationParameters.BackBufferWidth, presentationParameters.BackBufferHeight);
|
||||||
|
|
||||||
//
|
//
|
||||||
// create the depth stencil buffer
|
// create the depth stencil buffer
|
||||||
//
|
//
|
||||||
Format depthFormat = FormatConverter.Translate(presentationParameters.DepthStencilFormat);
|
Format depthFormat = FormatConverter.Translate(presentationParameters.DepthStencilFormat);
|
||||||
if (depthFormat != Format.Unknown)
|
if (depthFormat != Format.Unknown)
|
||||||
{
|
|
||||||
CreateDepthStencilBuffer(depthFormat);
|
CreateDepthStencilBuffer(depthFormat);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
private void CreateDepthStencilBuffer(Format depthFormat)
|
#region CreateDepthStencilBuffer
|
||||||
|
private void CreateDepthStencilBuffer(Format depthFormat)
|
||||||
{
|
{
|
||||||
if (this.depthStencilBuffer != null &&
|
if (this.depthStencilBuffer != null &&
|
||||||
this.depthStencilBuffer.Description.Format == depthFormat &&
|
this.depthStencilBuffer.Description.Format == depthFormat &&
|
||||||
@ -152,12 +127,12 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
DepthStencilViewDescription depthStencilViewDesc = new DepthStencilViewDescription()
|
var depthStencilViewDesc = new Dx10.DepthStencilViewDescription()
|
||||||
{
|
{
|
||||||
Format = depthFormat,
|
Format = depthFormat,
|
||||||
};
|
};
|
||||||
|
|
||||||
Texture2DDescription depthStencilTextureDesc = new Texture2DDescription()
|
var depthStencilTextureDesc = new Dx10.Texture2DDescription()
|
||||||
{
|
{
|
||||||
Width = this.backBuffer.Description.Width,
|
Width = this.backBuffer.Description.Width,
|
||||||
Height = this.backBuffer.Description.Height,
|
Height = this.backBuffer.Description.Height,
|
||||||
@ -165,17 +140,19 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
ArraySize = 1,
|
ArraySize = 1,
|
||||||
Format = depthFormat,
|
Format = depthFormat,
|
||||||
SampleDescription = new SampleDescription(1, 0),
|
SampleDescription = new SampleDescription(1, 0),
|
||||||
Usage = ResourceUsage.Default,
|
Usage = Dx10.ResourceUsage.Default,
|
||||||
BindFlags = BindFlags.DepthStencil,
|
BindFlags = Dx10.BindFlags.DepthStencil,
|
||||||
CpuAccessFlags = CpuAccessFlags.None,
|
CpuAccessFlags = Dx10.CpuAccessFlags.None,
|
||||||
OptionFlags = ResourceOptionFlags.None
|
OptionFlags = Dx10.ResourceOptionFlags.None
|
||||||
};
|
};
|
||||||
this.depthStencilBuffer = new SharpDX.Direct3D10.Texture2D(device, depthStencilTextureDesc);
|
this.depthStencilBuffer = new Dx10.Texture2D(device, depthStencilTextureDesc);
|
||||||
|
|
||||||
this.depthStencilView = new DepthStencilView(device, this.depthStencilBuffer);
|
this.depthStencilView = new Dx10.DepthStencilView(device, this.depthStencilBuffer);
|
||||||
|
|
||||||
Clear(ClearOptions.DepthBuffer | ClearOptions.Stencil, Vector4.Zero, 1.0f, 0); // this workaround is working but maybe not the best solution to issue #472
|
// this workaround is working but maybe not the best solution to issue #472
|
||||||
|
Clear(ClearOptions.DepthBuffer | ClearOptions.Stencil, Vector4.Zero, 1.0f, 0);
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region Clear
|
#region Clear
|
||||||
public void Clear(ref Color color)
|
public void Clear(ref Color color)
|
||||||
@ -243,122 +220,117 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
if ((options | ClearOptions.Stencil | ClearOptions.DepthBuffer) == options)
|
if ((options | ClearOptions.Stencil | ClearOptions.DepthBuffer) == options)
|
||||||
{
|
{
|
||||||
// Clear the stencil buffer
|
// Clear the stencil buffer
|
||||||
device.ClearDepthStencilView(this.depthStencilView, DepthStencilClearFlags.Depth | DepthStencilClearFlags.Stencil, depth, (byte)stencil);
|
device.ClearDepthStencilView(this.depthStencilView, Dx10.DepthStencilClearFlags.Depth |
|
||||||
|
Dx10.DepthStencilClearFlags.Stencil, depth, (byte)stencil);
|
||||||
}
|
}
|
||||||
else if ((options | ClearOptions.Stencil) == options)
|
else if ((options | ClearOptions.Stencil) == options)
|
||||||
{
|
{
|
||||||
device.ClearDepthStencilView(this.depthStencilView, DepthStencilClearFlags.Stencil, depth, (byte)stencil);
|
device.ClearDepthStencilView(this.depthStencilView, Dx10.DepthStencilClearFlags.Stencil, depth,
|
||||||
|
(byte)stencil);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
device.ClearDepthStencilView(this.depthStencilView, DepthStencilClearFlags.Depth, depth, (byte)stencil);
|
device.ClearDepthStencilView(this.depthStencilView, Dx10.DepthStencilClearFlags.Depth, depth, (byte)stencil);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Present
|
#region Present
|
||||||
public void Present()
|
public void Present()
|
||||||
{
|
{
|
||||||
swapChain.Present(this.vSyncEnabled ? 1 : 0, PresentFlags.None);
|
swapChain.Present(VSync ? 1 : 0, PresentFlags.None);
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
#endregion // Present
|
#region DrawIndexedPrimitives
|
||||||
|
public void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices,
|
||||||
|
int startIndex, int primitiveCount)
|
||||||
|
{
|
||||||
|
Dx10.EffectTechnique technique = SetupEffectForDraw();
|
||||||
|
int vertexCount = FormatConverter.CalculateVertexCount(primitiveType, primitiveCount);
|
||||||
|
|
||||||
#region DrawPrimitives & DrawIndexedPrimitives
|
|
||||||
public void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices, int startIndex, int primitiveCount)
|
|
||||||
{
|
|
||||||
SharpDX.Direct3D10.EffectPass pass; SharpDX.Direct3D10.EffectTechnique technique; ShaderBytecode passSignature;
|
|
||||||
SetupEffectForDraw(out pass, out technique, out passSignature);
|
|
||||||
|
|
||||||
SetupInputLayout(passSignature);
|
|
||||||
|
|
||||||
// Prepare All the stages
|
|
||||||
device.InputAssembler.PrimitiveTopology = FormatConverter.Translate(primitiveType);
|
device.InputAssembler.PrimitiveTopology = FormatConverter.Translate(primitiveType);
|
||||||
device.Rasterizer.SetViewports(currentViewport);
|
device.Rasterizer.SetViewports(currentViewport);
|
||||||
|
|
||||||
device.OutputMerger.SetTargets(this.depthStencilView, this.renderView);
|
device.OutputMerger.SetTargets(this.depthStencilView, this.renderView);
|
||||||
|
|
||||||
for (int i = 0; i < technique.Description.PassCount; ++i)
|
for (int i = 0; i < technique.Description.PassCount; ++i)
|
||||||
{
|
{
|
||||||
pass.Apply();
|
technique.GetPassByIndex(i).Apply();
|
||||||
device.DrawIndexed(CalculateVertexCount(primitiveType, primitiveCount), startIndex, baseVertex);
|
device.DrawIndexed(vertexCount, startIndex, baseVertex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
public void DrawPrimitives(PrimitiveType primitiveType, int vertexOffset, int primitiveCount)
|
#region DrawPrimitives
|
||||||
{
|
public void DrawPrimitives(PrimitiveType primitiveType, int vertexOffset, int primitiveCount)
|
||||||
SharpDX.Direct3D10.EffectPass pass; SharpDX.Direct3D10.EffectTechnique technique; ShaderBytecode passSignature;
|
{
|
||||||
SetupEffectForDraw(out pass, out technique, out passSignature);
|
Dx10.EffectTechnique technique = SetupEffectForDraw();
|
||||||
|
|
||||||
SetupInputLayout(passSignature);
|
|
||||||
|
|
||||||
// Prepare All the stages
|
|
||||||
device.InputAssembler.PrimitiveTopology = FormatConverter.Translate(primitiveType);
|
device.InputAssembler.PrimitiveTopology = FormatConverter.Translate(primitiveType);
|
||||||
device.Rasterizer.SetViewports(currentViewport);
|
device.Rasterizer.SetViewports(currentViewport);
|
||||||
|
|
||||||
device.OutputMerger.SetTargets(this.depthStencilView, this.renderView);
|
device.OutputMerger.SetTargets(this.depthStencilView, this.renderView);
|
||||||
|
|
||||||
for (int i = 0; i < technique.Description.PassCount; ++i)
|
for (int i = 0; i < technique.Description.PassCount; ++i)
|
||||||
{
|
{
|
||||||
pass.Apply();
|
technique.GetPassByIndex(i).Apply();
|
||||||
device.Draw(primitiveCount, vertexOffset);
|
device.Draw(primitiveCount, vertexOffset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
#endregion // DrawPrimitives & DrawIndexedPrimitives
|
|
||||||
|
|
||||||
#region DrawInstancedPrimitives
|
#region DrawInstancedPrimitives
|
||||||
public void DrawInstancedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices, int startIndex, int primitiveCount, int instanceCount)
|
public void DrawInstancedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices,
|
||||||
|
int startIndex, int primitiveCount, int instanceCount)
|
||||||
{
|
{
|
||||||
device.DrawIndexedInstanced(numVertices, instanceCount, startIndex, baseVertex, 0);
|
device.DrawIndexedInstanced(numVertices, instanceCount, startIndex, baseVertex, 0);
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
#endregion // DrawInstancedPrimitives
|
|
||||||
|
|
||||||
#region DrawUserIndexedPrimitives<T>
|
#region DrawUserIndexedPrimitives<T>
|
||||||
public void DrawUserIndexedPrimitives<T>(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, Array indexData, int indexOffset, int primitiveCount, VertexDeclaration vertexDeclaration, IndexElementSize indexFormat) where T : struct, IVertexType
|
public void DrawUserIndexedPrimitives<T>(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices,
|
||||||
|
Array indexData, int indexOffset, int primitiveCount, VertexDeclaration vertexDeclaration,
|
||||||
|
IndexElementSize indexFormat) where T : struct, IVertexType
|
||||||
{
|
{
|
||||||
int vertexCount = vertexData.Length;
|
int vertexCount = vertexData.Length;
|
||||||
int indexCount = indexData.Length;
|
int indexCount = indexData.Length;
|
||||||
VertexBuffer_DX10 vb10 = new VertexBuffer_DX10(this.device, vertexDeclaration, vertexCount, BufferUsage.None);
|
VertexBuffer_DX10 vb10 = new VertexBuffer_DX10(this.device, vertexDeclaration, vertexCount, BufferUsage.None);
|
||||||
vb10.SetData<T>(null, vertexData);
|
vb10.SetData<T>(null, vertexData);
|
||||||
|
|
||||||
SharpDX.Direct3D10.VertexBufferBinding nativeVertexBufferBindings = new SharpDX.Direct3D10.VertexBufferBinding(vb10.NativeBuffer, vertexDeclaration.VertexStride, 0);
|
Dx10.VertexBufferBinding nativeVertexBufferBindings = new Dx10.VertexBufferBinding(vb10.NativeBuffer,
|
||||||
|
vertexDeclaration.VertexStride, 0);
|
||||||
|
|
||||||
device.InputAssembler.SetVertexBuffers(0, nativeVertexBufferBindings);
|
device.InputAssembler.SetVertexBuffers(0, nativeVertexBufferBindings);
|
||||||
|
|
||||||
IndexBuffer_DX10 idx10 = new IndexBuffer_DX10(this.device, indexFormat, indexCount, BufferUsage.None);
|
IndexBuffer_DX10 idx10 = new IndexBuffer_DX10(this.device, indexFormat, indexCount, BufferUsage.None);
|
||||||
if (indexData.GetType() == typeof(Int16[]))
|
if (indexData.GetType() == typeof(Int16[]))
|
||||||
{
|
|
||||||
idx10.SetData<short>(null, (short[])indexData);
|
idx10.SetData<short>(null, (short[])indexData);
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
idx10.SetData<int>(null, (int[])indexData);
|
idx10.SetData<int>(null, (int[])indexData);
|
||||||
}
|
|
||||||
|
|
||||||
DrawIndexedPrimitives(primitiveType, 0, vertexOffset, numVertices, indexOffset, primitiveCount);
|
DrawIndexedPrimitives(primitiveType, 0, vertexOffset, numVertices, indexOffset, primitiveCount);
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
#endregion // DrawUserIndexedPrimitives<T>
|
|
||||||
|
|
||||||
#region DrawUserPrimitives<T>
|
#region DrawUserPrimitives<T>
|
||||||
public void DrawUserPrimitives<T>(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int primitiveCount, VertexDeclaration vertexDeclaration) where T : struct, IVertexType
|
public void DrawUserPrimitives<T>(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int primitiveCount,
|
||||||
|
VertexDeclaration vertexDeclaration) where T : struct, IVertexType
|
||||||
{
|
{
|
||||||
int vertexCount = vertexData.Length;
|
int vertexCount = vertexData.Length;
|
||||||
VertexBuffer_DX10 vb10 = new VertexBuffer_DX10(this.device, vertexDeclaration, vertexCount, BufferUsage.None);
|
VertexBuffer_DX10 vb10 = new VertexBuffer_DX10(this.device, vertexDeclaration, vertexCount, BufferUsage.None);
|
||||||
vb10.SetData<T>(null, vertexData);
|
vb10.SetData<T>(null, vertexData);
|
||||||
|
|
||||||
SharpDX.Direct3D10.VertexBufferBinding nativeVertexBufferBindings = new SharpDX.Direct3D10.VertexBufferBinding(vb10.NativeBuffer, vertexDeclaration.VertexStride, 0);
|
Dx10.VertexBufferBinding nativeVertexBufferBindings = new Dx10.VertexBufferBinding(vb10.NativeBuffer,
|
||||||
|
vertexDeclaration.VertexStride, 0);
|
||||||
|
|
||||||
device.InputAssembler.SetVertexBuffers(0, nativeVertexBufferBindings);
|
device.InputAssembler.SetVertexBuffers(0, nativeVertexBufferBindings);
|
||||||
|
|
||||||
SharpDX.Direct3D10.EffectPass pass; SharpDX.Direct3D10.EffectTechnique technique; ShaderBytecode passSignature;
|
//TODO: check for currentEffect null and throw exception
|
||||||
SetupEffectForDraw(out pass, out technique, out passSignature);
|
// TODO: check for null's and throw exceptions
|
||||||
|
// TODO: get the correct pass index!
|
||||||
var layout = CreateInputLayout(device, passSignature, vertexDeclaration);
|
var technique = currentEffect.GetCurrentTechnique().NativeTechnique;
|
||||||
|
var pass = technique.GetPassByIndex(0);
|
||||||
|
var layout = CreateInputLayout(device, pass.Description.Signature, vertexDeclaration);
|
||||||
|
|
||||||
device.InputAssembler.InputLayout = layout;
|
device.InputAssembler.InputLayout = layout;
|
||||||
// Prepare All the stages
|
// Prepare All the stages
|
||||||
@ -373,28 +345,25 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
device.Draw(primitiveCount, vertexOffset);
|
device.Draw(primitiveCount, vertexOffset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
#endregion // DrawUserPrimitives<T>
|
#region SetupEffectForDraw
|
||||||
|
private Dx10.EffectTechnique SetupEffectForDraw()
|
||||||
private void SetupEffectForDraw(out SharpDX.Direct3D10.EffectPass pass, out SharpDX.Direct3D10.EffectTechnique technique,
|
|
||||||
out ShaderBytecode passSignature)
|
|
||||||
{
|
{
|
||||||
// get the current effect
|
//TODO: check for currentEffect null and throw exception
|
||||||
//TODO: check for null and throw exception
|
|
||||||
Effect_DX10 effect = this.currentEffect;
|
|
||||||
|
|
||||||
// get the input semantic of the current effect / technique that is used
|
|
||||||
// TODO: check for null's and throw exceptions
|
// TODO: check for null's and throw exceptions
|
||||||
// TODO: get the correct pass index!
|
// TODO: get the correct pass index!
|
||||||
technique = effect.GetCurrentTechnique().NativeTechnique;
|
var technique = currentEffect.GetCurrentTechnique().NativeTechnique;
|
||||||
pass = technique.GetPassByIndex(0);
|
var pass = technique.GetPassByIndex(0);
|
||||||
passSignature = pass.Description.Signature;
|
SetupInputLayout(pass.Description.Signature);
|
||||||
}
|
|
||||||
|
|
||||||
private void SetupInputLayout(ShaderBytecode passSignature)
|
return technique;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region SetupInputLayout
|
||||||
|
private void SetupInputLayout(ShaderBytecode passSignature)
|
||||||
{
|
{
|
||||||
// get the VertexDeclaration from current VertexBuffer to create input layout for the input assembler
|
|
||||||
|
|
||||||
if (currentVertexBuffer == null)
|
if (currentVertexBuffer == null)
|
||||||
throw new ArgumentNullException("passSignature");
|
throw new ArgumentNullException("passSignature");
|
||||||
|
|
||||||
@ -403,31 +372,9 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
|
|
||||||
device.InputAssembler.InputLayout = layout;
|
device.InputAssembler.InputLayout = layout;
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
private int CalculateVertexCount(PrimitiveType type, int primitiveCount)
|
|
||||||
{
|
#region SetIndexBuffer
|
||||||
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)
|
public void SetIndexBuffer(IndexBuffer indexBuffer)
|
||||||
{
|
{
|
||||||
if (indexBuffer == null)
|
if (indexBuffer == null)
|
||||||
@ -448,30 +395,30 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
throw new Exception("couldn't fetch native DirectX10 IndexBuffer");
|
throw new Exception("couldn't fetch native DirectX10 IndexBuffer");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
#if XNAEXT
|
#if XNAEXT
|
||||||
|
#region SetConstantBuffer
|
||||||
public void SetConstantBuffer(int slot, ANX.Framework.Graphics.ConstantBuffer constantBuffer)
|
public void SetConstantBuffer(int slot, ANX.Framework.Graphics.ConstantBuffer constantBuffer)
|
||||||
{
|
{
|
||||||
if (constantBuffer == null)
|
if (constantBuffer == null)
|
||||||
{
|
|
||||||
throw new ArgumentNullException("constantBuffer");
|
throw new ArgumentNullException("constantBuffer");
|
||||||
}
|
|
||||||
|
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
public void SetVertexBuffers(VertexBufferBinding[] vertexBuffers)
|
#region SetVertexBuffers
|
||||||
|
public void SetVertexBuffers(VertexBufferBinding[] vertexBuffers)
|
||||||
{
|
{
|
||||||
if (vertexBuffers == null)
|
if (vertexBuffers == null)
|
||||||
{
|
|
||||||
throw new ArgumentNullException("vertexBuffers");
|
throw new ArgumentNullException("vertexBuffers");
|
||||||
}
|
|
||||||
|
|
||||||
this.currentVertexBuffer = vertexBuffers[0].VertexBuffer; //TODO: hmmmmm, not nice :-)
|
this.currentVertexBuffer = vertexBuffers[0].VertexBuffer; //TODO: hmmmmm, not nice :-)
|
||||||
|
|
||||||
SharpDX.Direct3D10.VertexBufferBinding[] nativeVertexBufferBindings =
|
Dx10.VertexBufferBinding[] nativeVertexBufferBindings =
|
||||||
new SharpDX.Direct3D10.VertexBufferBinding[vertexBuffers.Length];
|
new Dx10.VertexBufferBinding[vertexBuffers.Length];
|
||||||
for (int i = 0; i < vertexBuffers.Length; i++)
|
for (int i = 0; i < vertexBuffers.Length; i++)
|
||||||
{
|
{
|
||||||
ANX.Framework.Graphics.VertexBufferBinding anxVertexBufferBinding = vertexBuffers[i];
|
ANX.Framework.Graphics.VertexBufferBinding anxVertexBufferBinding = vertexBuffers[i];
|
||||||
@ -479,7 +426,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
|
|
||||||
if (nativeVertexBuffer != null)
|
if (nativeVertexBuffer != null)
|
||||||
{
|
{
|
||||||
nativeVertexBufferBindings[i] = new SharpDX.Direct3D10.VertexBufferBinding(nativeVertexBuffer.NativeBuffer,
|
nativeVertexBufferBindings[i] = new Dx10.VertexBufferBinding(nativeVertexBuffer.NativeBuffer,
|
||||||
anxVertexBufferBinding.VertexBuffer.VertexDeclaration.VertexStride, anxVertexBufferBinding.VertexOffset);
|
anxVertexBufferBinding.VertexBuffer.VertexDeclaration.VertexStride, anxVertexBufferBinding.VertexOffset);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -489,37 +436,46 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
}
|
}
|
||||||
|
|
||||||
device.InputAssembler.SetVertexBuffers(0, nativeVertexBufferBindings);
|
device.InputAssembler.SetVertexBuffers(0, nativeVertexBufferBindings);
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
public void SetViewport(Viewport viewport)
|
#region SetViewport
|
||||||
|
public void SetViewport(Viewport viewport)
|
||||||
{
|
{
|
||||||
this.currentViewport = new SharpDX.Direct3D10.Viewport(viewport.X, viewport.Y, viewport.Width, viewport.Height,
|
this.currentViewport = new Dx10.Viewport(viewport.X, viewport.Y, viewport.Width, viewport.Height,
|
||||||
viewport.MinDepth, viewport.MaxDepth);
|
viewport.MinDepth, viewport.MaxDepth);
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
/// <summary>
|
#region CreateInputLayout
|
||||||
|
/// <summary>
|
||||||
/// This method creates a InputLayout which is needed by DirectX 10 for rendering primitives.
|
/// This method creates a InputLayout which is needed by DirectX 10 for rendering primitives.
|
||||||
/// The VertexDeclaration of ANX/XNA needs to be mapped to the DirectX 10 types.
|
/// The VertexDeclaration of ANX/XNA needs to be mapped to the DirectX 10 types.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private InputLayout CreateInputLayout(Device device, ShaderBytecode passSignature, VertexDeclaration vertexDeclaration)
|
private Dx10.InputLayout CreateInputLayout(Dx10.Device device, ShaderBytecode passSignature,
|
||||||
|
VertexDeclaration vertexDeclaration)
|
||||||
{
|
{
|
||||||
VertexElement[] vertexElements = vertexDeclaration.GetVertexElements();
|
VertexElement[] vertexElements = vertexDeclaration.GetVertexElements();
|
||||||
int elementCount = vertexElements.Length;
|
int elementCount = vertexElements.Length;
|
||||||
InputElement[] inputElements = new InputElement[elementCount];
|
var inputElements = new Dx10.InputElement[elementCount];
|
||||||
|
|
||||||
for (int i = 0; i < elementCount; i++)
|
for (int i = 0; i < elementCount; i++)
|
||||||
inputElements[i] = CreateInputElementFromVertexElement(vertexElements[i]);
|
inputElements[i] = CreateInputElementFromVertexElement(vertexElements[i]);
|
||||||
|
|
||||||
return new InputLayout(device, passSignature, inputElements);
|
return new Dx10.InputLayout(device, passSignature, inputElements);
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
private InputElement CreateInputElementFromVertexElement(VertexElement vertexElement)
|
#region CreateInputElementFromVertexElement
|
||||||
|
private Dx10.InputElement CreateInputElementFromVertexElement(VertexElement vertexElement)
|
||||||
{
|
{
|
||||||
string elementName = FormatConverter.Translate(ref vertexElement);
|
string elementName = FormatConverter.Translate(ref vertexElement);
|
||||||
Format elementFormat = ConvertVertexElementFormat(vertexElement.VertexElementFormat);
|
Format elementFormat = ConvertVertexElementFormat(vertexElement.VertexElementFormat);
|
||||||
return new InputElement(elementName, vertexElement.UsageIndex, elementFormat, vertexElement.Offset, 0);
|
return new Dx10.InputElement(elementName, vertexElement.UsageIndex, elementFormat, vertexElement.Offset, 0);
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region ConvertVertexElementFormat
|
||||||
private Format ConvertVertexElementFormat(VertexElementFormat format)
|
private Format ConvertVertexElementFormat(VertexElementFormat format)
|
||||||
{
|
{
|
||||||
switch (format)
|
switch (format)
|
||||||
@ -543,6 +499,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
|
|
||||||
throw new Exception("Can't map '" + format + "' to DXGI.Format in Dx10 CreateInputElementFromVertexElement.");
|
throw new Exception("Can't map '" + format + "' to DXGI.Format in Dx10 CreateInputElementFromVertexElement.");
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region SetRenderTargets
|
#region SetRenderTargets
|
||||||
public void SetRenderTargets(params RenderTargetBinding[] renderTargets)
|
public void SetRenderTargets(params RenderTargetBinding[] renderTargets)
|
||||||
@ -559,7 +516,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
device.OutputMerger.SetRenderTargets(1, new RenderTargetView[] { this.renderView }, this.depthStencilView);
|
device.OutputMerger.SetRenderTargets(1, new Dx10.RenderTargetView[] { this.renderView }, this.depthStencilView);
|
||||||
device.OutputMerger.SetTargets(this.depthStencilView, this.renderView);
|
device.OutputMerger.SetTargets(this.depthStencilView, this.renderView);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -576,7 +533,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.renderTargetView = new RenderTargetView[renderTargetCount];
|
this.renderTargetView = new Dx10.RenderTargetView[renderTargetCount];
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < renderTargetCount; i++)
|
for (int i = 0; i < renderTargetCount; i++)
|
||||||
@ -591,7 +548,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
renderTargetView[i].Dispose();
|
renderTargetView[i].Dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
renderTargetView[i] = new RenderTargetView(device, ((Texture2D_DX10)nativeRenderTarget).NativeShaderResourceView.Resource);
|
renderTargetView[i] = new Dx10.RenderTargetView(device, ((Texture2D_DX10)nativeRenderTarget).NativeShaderResourceView.Resource);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -622,7 +579,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region GetBackBufferData
|
#region GetBackBufferData (TODO)
|
||||||
public void GetBackBufferData<T>(Rectangle? rect, T[] data, int startIndex, int elementCount) where T : struct
|
public void GetBackBufferData<T>(Rectangle? rect, T[] data, int startIndex, int elementCount) where T : struct
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
@ -652,53 +609,22 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
swapChain.ResizeBuffers(swapChain.Description.BufferCount, presentationParameters.BackBufferWidth,
|
swapChain.ResizeBuffers(swapChain.Description.BufferCount, presentationParameters.BackBufferWidth,
|
||||||
presentationParameters.BackBufferHeight, Format.R8G8B8A8_UNorm, swapChain.Description.Flags);
|
presentationParameters.BackBufferHeight, Format.R8G8B8A8_UNorm, swapChain.Description.Flags);
|
||||||
|
|
||||||
backBuffer = SharpDX.Direct3D10.Texture2D.FromSwapChain<SharpDX.Direct3D10.Texture2D>(swapChain, 0);
|
backBuffer = Dx10.Texture2D.FromSwapChain<Dx10.Texture2D>(swapChain, 0);
|
||||||
renderView = new RenderTargetView(device, backBuffer);
|
renderView = new Dx10.RenderTargetView(device, backBuffer);
|
||||||
|
|
||||||
currentViewport = new SharpDX.Direct3D10.Viewport(0, 0, presentationParameters.BackBufferWidth,
|
currentViewport = new Dx10.Viewport(0, 0, presentationParameters.BackBufferWidth,
|
||||||
presentationParameters.BackBufferHeight);
|
presentationParameters.BackBufferHeight);
|
||||||
|
|
||||||
// create the depth stencil buffer
|
// create the depth stencil buffer
|
||||||
Format depthFormat = FormatConverter.Translate(presentationParameters.DepthStencilFormat);
|
Format depthFormat = FormatConverter.Translate(presentationParameters.DepthStencilFormat);
|
||||||
if (depthFormat != Format.Unknown)
|
if (depthFormat != Format.Unknown)
|
||||||
{
|
|
||||||
CreateDepthStencilBuffer(depthFormat);
|
CreateDepthStencilBuffer(depthFormat);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ResizeRenderWindow(presentationParameters);
|
WindowHelper.ResizeRenderWindow(presentationParameters);
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region ResizeRenderWindow
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
public bool VSync
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return this.vSyncEnabled;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
this.vSyncEnabled = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Dispose
|
#region Dispose
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
|
@ -0,0 +1,360 @@
|
|||||||
|
using System;
|
||||||
|
using ANX.Framework.Graphics;
|
||||||
|
using SharpDX.Direct3D;
|
||||||
|
using SharpDX.DXGI;
|
||||||
|
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.
|
||||||
|
// For details see: http://anxframework.codeplex.com/license
|
||||||
|
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
switch (filter)
|
||||||
|
{
|
||||||
|
case TextureFilter.Anisotropic:
|
||||||
|
return Dx10.Filter.Anisotropic;
|
||||||
|
case TextureFilter.Linear:
|
||||||
|
return Dx10.Filter.MinMagMipLinear;
|
||||||
|
case TextureFilter.LinearMipPoint:
|
||||||
|
return Dx10.Filter.MinMagMipPoint;
|
||||||
|
case TextureFilter.MinLinearMagPointMipLinear:
|
||||||
|
return Dx10.Filter.MinLinearMagPointMipLinear;
|
||||||
|
case TextureFilter.MinLinearMagPointMipPoint:
|
||||||
|
return Dx10.Filter.MinLinearMagMipPoint;
|
||||||
|
case TextureFilter.MinPointMagLinearMipLinear:
|
||||||
|
return Dx10.Filter.MinPointMagMipLinear;
|
||||||
|
case TextureFilter.MinPointMagLinearMipPoint:
|
||||||
|
return Dx10.Filter.MinPointMagLinearMipPoint;
|
||||||
|
case TextureFilter.Point:
|
||||||
|
return Dx10.Filter.MinMagMipPoint;
|
||||||
|
case TextureFilter.PointMipLinear:
|
||||||
|
return Dx10.Filter.MinMagPointMipLinear;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Translate (TextureAddressMode)
|
||||||
|
public static Dx10.TextureAddressMode Translate(TextureAddressMode addressMode)
|
||||||
|
{
|
||||||
|
switch (addressMode)
|
||||||
|
{
|
||||||
|
case TextureAddressMode.Clamp:
|
||||||
|
return Dx10.TextureAddressMode.Clamp;
|
||||||
|
case TextureAddressMode.Mirror:
|
||||||
|
return Dx10.TextureAddressMode.Mirror;
|
||||||
|
case TextureAddressMode.Wrap:
|
||||||
|
return Dx10.TextureAddressMode.Wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Dx10.TextureAddressMode.Clamp;
|
||||||
|
}
|
||||||
|
#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)
|
||||||
|
{
|
||||||
|
switch (blendFunction)
|
||||||
|
{
|
||||||
|
case BlendFunction.Add:
|
||||||
|
return Dx10.BlendOperation.Add;
|
||||||
|
case BlendFunction.Max:
|
||||||
|
return Dx10.BlendOperation.Maximum;
|
||||||
|
case BlendFunction.Min:
|
||||||
|
return Dx10.BlendOperation.Minimum;
|
||||||
|
case BlendFunction.ReverseSubtract:
|
||||||
|
return Dx10.BlendOperation.ReverseSubtract;
|
||||||
|
case BlendFunction.Subtract:
|
||||||
|
return Dx10.BlendOperation.Subtract;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Translate (Blend)
|
||||||
|
public static Dx10.BlendOption Translate(Blend blend)
|
||||||
|
{
|
||||||
|
switch (blend)
|
||||||
|
{
|
||||||
|
case Blend.BlendFactor:
|
||||||
|
return Dx10.BlendOption.BlendFactor;
|
||||||
|
case Blend.DestinationAlpha:
|
||||||
|
return Dx10.BlendOption.DestinationAlpha;
|
||||||
|
case Blend.DestinationColor:
|
||||||
|
return Dx10.BlendOption.DestinationColor;
|
||||||
|
case Blend.InverseBlendFactor:
|
||||||
|
return Dx10.BlendOption.InverseBlendFactor;
|
||||||
|
case Blend.InverseDestinationAlpha:
|
||||||
|
return Dx10.BlendOption.InverseDestinationAlpha;
|
||||||
|
case Blend.InverseDestinationColor:
|
||||||
|
return Dx10.BlendOption.InverseDestinationColor;
|
||||||
|
case Blend.InverseSourceAlpha:
|
||||||
|
return Dx10.BlendOption.InverseSourceAlpha;
|
||||||
|
case Blend.InverseSourceColor:
|
||||||
|
return Dx10.BlendOption.InverseSourceColor;
|
||||||
|
case Blend.One:
|
||||||
|
return Dx10.BlendOption.One;
|
||||||
|
case Blend.SourceAlpha:
|
||||||
|
return Dx10.BlendOption.SourceAlpha;
|
||||||
|
case Blend.SourceAlphaSaturation:
|
||||||
|
return Dx10.BlendOption.SourceAlphaSaturate;
|
||||||
|
case Blend.SourceColor:
|
||||||
|
return Dx10.BlendOption.SourceColor;
|
||||||
|
case Blend.Zero:
|
||||||
|
return Dx10.BlendOption.Zero;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Translate (ColorWriteChannels)
|
||||||
|
public static Dx10.ColorWriteMaskFlags Translate(ColorWriteChannels colorWriteChannels)
|
||||||
|
{
|
||||||
|
Dx10.ColorWriteMaskFlags mask = 0;
|
||||||
|
|
||||||
|
if ((colorWriteChannels & ColorWriteChannels.All) == ColorWriteChannels.All)
|
||||||
|
mask |= Dx10.ColorWriteMaskFlags.All;
|
||||||
|
|
||||||
|
if ((colorWriteChannels & ColorWriteChannels.Alpha) == ColorWriteChannels.Alpha)
|
||||||
|
mask |= Dx10.ColorWriteMaskFlags.Alpha;
|
||||||
|
|
||||||
|
if ((colorWriteChannels & ColorWriteChannels.Blue) == ColorWriteChannels.Blue)
|
||||||
|
mask |= Dx10.ColorWriteMaskFlags.Blue;
|
||||||
|
|
||||||
|
if ((colorWriteChannels & ColorWriteChannels.Green) == ColorWriteChannels.Green)
|
||||||
|
mask |= Dx10.ColorWriteMaskFlags.Green;
|
||||||
|
|
||||||
|
if ((colorWriteChannels & ColorWriteChannels.Red) == ColorWriteChannels.Red)
|
||||||
|
mask |= Dx10.ColorWriteMaskFlags.Red;
|
||||||
|
|
||||||
|
return mask;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Translate (StencilOperation)
|
||||||
|
public static Dx10.StencilOperation Translate(StencilOperation stencilOperation)
|
||||||
|
{
|
||||||
|
switch (stencilOperation)
|
||||||
|
{
|
||||||
|
case StencilOperation.Decrement:
|
||||||
|
return Dx10.StencilOperation.Decrement;
|
||||||
|
case StencilOperation.DecrementSaturation:
|
||||||
|
return Dx10.StencilOperation.DecrementAndClamp;
|
||||||
|
case StencilOperation.Increment:
|
||||||
|
return Dx10.StencilOperation.Increment;
|
||||||
|
case StencilOperation.IncrementSaturation:
|
||||||
|
return Dx10.StencilOperation.IncrementAndClamp;
|
||||||
|
case StencilOperation.Invert:
|
||||||
|
return Dx10.StencilOperation.Invert;
|
||||||
|
case StencilOperation.Keep:
|
||||||
|
return Dx10.StencilOperation.Keep;
|
||||||
|
case StencilOperation.Replace:
|
||||||
|
return Dx10.StencilOperation.Replace;
|
||||||
|
case StencilOperation.Zero:
|
||||||
|
return Dx10.StencilOperation.Zero;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new NotImplementedException("unknown StencilOperation");
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Translate (CompareFunction)
|
||||||
|
public static Dx10.Comparison Translate(CompareFunction compareFunction)
|
||||||
|
{
|
||||||
|
switch (compareFunction)
|
||||||
|
{
|
||||||
|
case CompareFunction.Always:
|
||||||
|
return Dx10.Comparison.Always;
|
||||||
|
case CompareFunction.Equal:
|
||||||
|
return Dx10.Comparison.Equal;
|
||||||
|
case CompareFunction.Greater:
|
||||||
|
return Dx10.Comparison.Greater;
|
||||||
|
case CompareFunction.GreaterEqual:
|
||||||
|
return Dx10.Comparison.GreaterEqual;
|
||||||
|
case CompareFunction.Less:
|
||||||
|
return Dx10.Comparison.Less;
|
||||||
|
case CompareFunction.LessEqual:
|
||||||
|
return Dx10.Comparison.LessEqual;
|
||||||
|
case CompareFunction.Never:
|
||||||
|
return Dx10.Comparison.Never;
|
||||||
|
case CompareFunction.NotEqual:
|
||||||
|
return Dx10.Comparison.NotEqual;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new NotImplementedException("unknown CompareFunction");
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Translate (CullMode)
|
||||||
|
public static Dx10.CullMode Translate(CullMode cullMode)
|
||||||
|
{
|
||||||
|
if (cullMode == CullMode.CullClockwiseFace)
|
||||||
|
return Dx10.CullMode.Front;
|
||||||
|
else if (cullMode == CullMode.CullCounterClockwiseFace)
|
||||||
|
return Dx10.CullMode.Back;
|
||||||
|
else
|
||||||
|
return Dx10.CullMode.None;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Translate (FillMode)
|
||||||
|
public static Dx10.FillMode Translate(FillMode fillMode)
|
||||||
|
{
|
||||||
|
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,26 +1,19 @@
|
|||||||
#region Using Statements
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using SharpDX.Direct3D10;
|
|
||||||
using SharpDX.D3DCompiler;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using ANX.Framework.NonXNA;
|
using SharpDX.D3DCompiler;
|
||||||
using ANX.Framework.Graphics;
|
|
||||||
|
|
||||||
#endregion // Using Statements
|
|
||||||
|
|
||||||
// This file is part of the ANX.Framework created by the
|
// This file is part of the ANX.Framework created by the
|
||||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||||
// For details see: http://anxframework.codeplex.com/license
|
// For details see: http://anxframework.codeplex.com/license
|
||||||
|
|
||||||
namespace ANX.RenderSystem.Windows.DX10
|
namespace ANX.RenderSystem.Windows.DX10.Helpers
|
||||||
{
|
{
|
||||||
internal class IncludeHandler : Include
|
internal class IncludeHandler : Include
|
||||||
{
|
{
|
||||||
private string directory;
|
private string directory;
|
||||||
|
|
||||||
|
public IDisposable Shadow { get; set; }
|
||||||
|
|
||||||
public IncludeHandler(string directory)
|
public IncludeHandler(string directory)
|
||||||
{
|
{
|
||||||
this.directory = directory;
|
this.directory = directory;
|
||||||
@ -35,13 +28,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
{
|
{
|
||||||
//Console.WriteLine("Including {0} file {1} from directory {2}", type.ToString(), fileName, directory);
|
//Console.WriteLine("Including {0} file {1} from directory {2}", type.ToString(), fileName, directory);
|
||||||
|
|
||||||
return System.IO.File.OpenRead(System.IO.Path.Combine(directory, fileName));
|
return File.OpenRead(Path.Combine(directory, fileName));
|
||||||
}
|
|
||||||
|
|
||||||
public IDisposable Shadow
|
|
||||||
{
|
|
||||||
get;
|
|
||||||
set;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
@ -0,0 +1,47 @@
|
|||||||
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using ANX.Framework.Graphics;
|
||||||
|
|
||||||
|
namespace ANX.RenderSystem.Windows.DX10.Helpers
|
||||||
|
{
|
||||||
|
internal 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
|
||||||
|
}
|
||||||
|
|
||||||
|
[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)]
|
||||||
|
private static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);
|
||||||
|
|
||||||
|
[DllImport("user32.dll")]
|
||||||
|
[return: MarshalAs(UnmanagedType.Bool)]
|
||||||
|
private static extern bool GetClientRect(IntPtr hWnd, out RECT lpRect);
|
||||||
|
|
||||||
|
#region ResizeRenderWindow
|
||||||
|
public static 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
@ -1,172 +1,149 @@
|
|||||||
#region Using Statements
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using SharpDX.Direct3D10;
|
|
||||||
using ANX.Framework.Graphics;
|
using ANX.Framework.Graphics;
|
||||||
using ANX.Framework.NonXNA;
|
using ANX.Framework.NonXNA;
|
||||||
|
using ANX.RenderSystem.Windows.DX10.Helpers;
|
||||||
#endregion // Using Statements
|
using Dx10 = SharpDX.Direct3D10;
|
||||||
|
|
||||||
// This file is part of the ANX.Framework created by the
|
// This file is part of the ANX.Framework created by the
|
||||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||||
// For details see: http://anxframework.codeplex.com/license
|
// For details see: http://anxframework.codeplex.com/license
|
||||||
|
|
||||||
using CullMode = ANX.Framework.Graphics.CullMode;
|
|
||||||
using FillMode = ANX.Framework.Graphics.FillMode;
|
|
||||||
|
|
||||||
namespace ANX.RenderSystem.Windows.DX10
|
namespace ANX.RenderSystem.Windows.DX10
|
||||||
{
|
{
|
||||||
public class RasterizerState_DX10 : INativeRasterizerState
|
public class RasterizerState_DX10 : INativeRasterizerState
|
||||||
{
|
{
|
||||||
#region Private Members
|
private const int intMaxOver16 = int.MaxValue / 16;
|
||||||
private RasterizerStateDescription description;
|
|
||||||
private SharpDX.Direct3D10.RasterizerState nativeRasterizerState;
|
|
||||||
private bool nativeRasterizerStateDirty;
|
|
||||||
private bool bound;
|
|
||||||
|
|
||||||
private const int intMaxOver16 = int.MaxValue / 16;
|
#region Private
|
||||||
|
private Dx10.RasterizerStateDescription description;
|
||||||
|
private Dx10.RasterizerState nativeRasterizerState;
|
||||||
|
private bool isDirty;
|
||||||
|
#endregion
|
||||||
|
|
||||||
#endregion // Private Members
|
#region Public
|
||||||
|
public bool IsBound { get; private set; }
|
||||||
|
|
||||||
public RasterizerState_DX10()
|
public CullMode CullMode
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Dx10.CullMode cullMode = FormatConverter.Translate(value);
|
||||||
|
UpdateValueAndMarkDirtyIfNeeded(ref description.CullMode, ref 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);
|
||||||
|
UpdateValueAndMarkDirtyIfNeeded(ref description.DepthBias, ref depthBiasValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public FillMode FillMode
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Dx10.FillMode fillMode = FormatConverter.Translate(value);
|
||||||
|
UpdateValueAndMarkDirtyIfNeeded(ref description.FillMode, ref fillMode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool MultiSampleAntiAlias
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (description.IsMultisampleEnabled != value)
|
||||||
|
{
|
||||||
|
isDirty = true;
|
||||||
|
description.IsMultisampleEnabled = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool ScissorTestEnable
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (description.IsScissorEnabled != value)
|
||||||
|
{
|
||||||
|
isDirty = true;
|
||||||
|
description.IsScissorEnabled = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float SlopeScaleDepthBias
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
UpdateValueAndMarkDirtyIfNeeded(ref description.SlopeScaledDepthBias, ref value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Constructor
|
||||||
|
public RasterizerState_DX10()
|
||||||
{
|
{
|
||||||
this.description = new RasterizerStateDescription();
|
description.IsAntialiasedLineEnabled = false;
|
||||||
|
isDirty = true;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
this.description.IsAntialiasedLineEnabled = false;
|
#region Apply
|
||||||
|
public void Apply(GraphicsDevice graphicsDevice)
|
||||||
this.nativeRasterizerStateDirty = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Apply(ANX.Framework.Graphics.GraphicsDevice graphicsDevice)
|
|
||||||
{
|
{
|
||||||
GraphicsDeviceWindowsDX10 gdx10 = graphicsDevice.NativeDevice as GraphicsDeviceWindowsDX10;
|
UpdateNativeRasterizerState(graphicsDevice);
|
||||||
Device device = gdx10.NativeDevice;
|
IsBound = true;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
UpdateNativeRasterizerState(device);
|
#region Release
|
||||||
this.bound = true;
|
public void Release()
|
||||||
|
|
||||||
device.Rasterizer.State = this.nativeRasterizerState;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Release()
|
|
||||||
{
|
{
|
||||||
this.bound = false;
|
IsBound = false;
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
public void Dispose()
|
#region Dispose
|
||||||
|
public void Dispose()
|
||||||
{
|
{
|
||||||
if (this.nativeRasterizerState != null)
|
if (nativeRasterizerState != null)
|
||||||
{
|
{
|
||||||
this.nativeRasterizerState.Dispose();
|
nativeRasterizerState.Dispose();
|
||||||
this.nativeRasterizerState = null;
|
nativeRasterizerState = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
public bool IsBound
|
#region UpdateNativeRasterizerState
|
||||||
{
|
private void UpdateNativeRasterizerState(GraphicsDevice graphicsDevice)
|
||||||
get
|
{
|
||||||
|
Dx10.Device device = (graphicsDevice.NativeDevice as GraphicsDeviceWindowsDX10).NativeDevice;
|
||||||
|
|
||||||
|
if (isDirty == true || nativeRasterizerState == null)
|
||||||
{
|
{
|
||||||
return this.bound;
|
Dispose();
|
||||||
|
nativeRasterizerState = new Dx10.RasterizerState(device, ref description);
|
||||||
|
isDirty = false;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public CullMode CullMode
|
device.Rasterizer.State = nativeRasterizerState;
|
||||||
{
|
}
|
||||||
set
|
#endregion
|
||||||
{
|
|
||||||
SharpDX.Direct3D10.CullMode cullMode = FormatConverter.Translate(value);
|
|
||||||
|
|
||||||
if (description.CullMode != cullMode)
|
#region UpdateValueAndMarkDirtyIfNeeded
|
||||||
{
|
private void UpdateValueAndMarkDirtyIfNeeded<T>(ref T currentValue, ref T value)
|
||||||
nativeRasterizerStateDirty = true;
|
{
|
||||||
description.CullMode = cullMode;
|
if (value.Equals(currentValue) == false)
|
||||||
}
|
{
|
||||||
}
|
isDirty = true;
|
||||||
}
|
currentValue = value;
|
||||||
|
}
|
||||||
public float DepthBias
|
}
|
||||||
{
|
#endregion
|
||||||
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 FillMode FillMode
|
|
||||||
{
|
|
||||||
set
|
|
||||||
{
|
|
||||||
SharpDX.Direct3D10.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.Direct3D10.RasterizerState(device, ref this.description);
|
|
||||||
|
|
||||||
this.nativeRasterizerStateDirty = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,8 @@
|
|||||||
#region Using Statements
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using ANX.Framework.Graphics;
|
using ANX.Framework.Graphics;
|
||||||
using ANX.Framework.NonXNA.RenderSystem;
|
using ANX.Framework.NonXNA.RenderSystem;
|
||||||
using SharpDX.Direct3D10;
|
using ANX.RenderSystem.Windows.DX10.Helpers;
|
||||||
|
using Dx10 = SharpDX.Direct3D10;
|
||||||
#endregion // Using Statements
|
|
||||||
|
|
||||||
// This file is part of the ANX.Framework created by the
|
// This file is part of the ANX.Framework created by the
|
||||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||||
@ -16,25 +11,21 @@ using SharpDX.Direct3D10;
|
|||||||
namespace ANX.RenderSystem.Windows.DX10
|
namespace ANX.RenderSystem.Windows.DX10
|
||||||
{
|
{
|
||||||
public class RenderTarget2D_DX10 : Texture2D_DX10, INativeRenderTarget2D, INativeTexture2D
|
public class RenderTarget2D_DX10 : Texture2D_DX10, INativeRenderTarget2D, INativeTexture2D
|
||||||
{
|
{
|
||||||
#region Private Members
|
#region Constructor
|
||||||
|
public RenderTarget2D_DX10(GraphicsDevice graphics, int width, int height, bool mipMap, SurfaceFormat preferredFormat,
|
||||||
#endregion // Private Members
|
DepthFormat preferredDepthFormat, int preferredMultiSampleCount, RenderTargetUsage usage)
|
||||||
|
|
||||||
public RenderTarget2D_DX10(GraphicsDevice graphics, int width, int height, bool mipMap, SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount, RenderTargetUsage usage)
|
|
||||||
: base(graphics)
|
: base(graphics)
|
||||||
{
|
{
|
||||||
if (mipMap)
|
if (mipMap)
|
||||||
{
|
|
||||||
throw new NotImplementedException("creating RenderTargets with mip map not yet implemented");
|
throw new NotImplementedException("creating RenderTargets with mip map not yet implemented");
|
||||||
}
|
|
||||||
|
|
||||||
this.surfaceFormat = surfaceFormat;
|
this.surfaceFormat = surfaceFormat;
|
||||||
|
|
||||||
GraphicsDeviceWindowsDX10 graphicsDX10 = graphicsDevice.NativeDevice as GraphicsDeviceWindowsDX10;
|
GraphicsDeviceWindowsDX10 graphicsDX10 = graphicsDevice.NativeDevice as GraphicsDeviceWindowsDX10;
|
||||||
SharpDX.Direct3D10.Device device = graphicsDX10.NativeDevice;
|
Dx10.Device device = graphicsDX10.NativeDevice;
|
||||||
|
|
||||||
SharpDX.Direct3D10.Texture2DDescription description = new SharpDX.Direct3D10.Texture2DDescription()
|
var description = new Dx10.Texture2DDescription()
|
||||||
{
|
{
|
||||||
Width = width,
|
Width = width,
|
||||||
Height = height,
|
Height = height,
|
||||||
@ -42,19 +33,19 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
ArraySize = 1,
|
ArraySize = 1,
|
||||||
Format = FormatConverter.Translate(preferredFormat),
|
Format = FormatConverter.Translate(preferredFormat),
|
||||||
SampleDescription = new SharpDX.DXGI.SampleDescription(1, 0),
|
SampleDescription = new SharpDX.DXGI.SampleDescription(1, 0),
|
||||||
Usage = SharpDX.Direct3D10.ResourceUsage.Default,
|
Usage = Dx10.ResourceUsage.Default,
|
||||||
BindFlags = SharpDX.Direct3D10.BindFlags.ShaderResource | SharpDX.Direct3D10.BindFlags.RenderTarget,
|
BindFlags = Dx10.BindFlags.ShaderResource | Dx10.BindFlags.RenderTarget,
|
||||||
CpuAccessFlags = SharpDX.Direct3D10.CpuAccessFlags.None,
|
CpuAccessFlags = Dx10.CpuAccessFlags.None,
|
||||||
OptionFlags = SharpDX.Direct3D10.ResourceOptionFlags.None,
|
OptionFlags = Dx10.ResourceOptionFlags.None,
|
||||||
};
|
};
|
||||||
this.nativeTexture = new SharpDX.Direct3D10.Texture2D(graphicsDX10.NativeDevice, description);
|
nativeTexture = new Dx10.Texture2D(graphicsDX10.NativeDevice, description);
|
||||||
this.nativeShaderResourceView = new SharpDX.Direct3D10.ShaderResourceView(graphicsDX10.NativeDevice, this.nativeTexture);
|
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
|
// 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
|
// 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);
|
formatSize = FormatConverter.FormatSize(surfaceFormat);
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,7 @@
|
|||||||
#region Using Statements
|
|
||||||
using System;
|
|
||||||
using ANX.Framework.Graphics;
|
using ANX.Framework.Graphics;
|
||||||
using ANX.Framework.NonXNA;
|
using ANX.Framework.NonXNA;
|
||||||
using SharpDX.Direct3D10;
|
using ANX.RenderSystem.Windows.DX10.Helpers;
|
||||||
|
using Dx10 = SharpDX.Direct3D10;
|
||||||
#endregion // Using Statements
|
|
||||||
|
|
||||||
// This file is part of the ANX.Framework created by the
|
// This file is part of the ANX.Framework created by the
|
||||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||||
@ -14,160 +11,137 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
{
|
{
|
||||||
public class SamplerState_DX10 : INativeSamplerState
|
public class SamplerState_DX10 : INativeSamplerState
|
||||||
{
|
{
|
||||||
#region Private Members
|
#region Private
|
||||||
private SamplerStateDescription description;
|
private Dx10.SamplerStateDescription description;
|
||||||
private SharpDX.Direct3D10.SamplerState nativeSamplerState;
|
private Dx10.SamplerState nativeSamplerState;
|
||||||
private bool nativeSamplerStateDirty;
|
private bool isDirty;
|
||||||
private bool bound;
|
#endregion
|
||||||
|
|
||||||
#endregion // Private Members
|
#region Public
|
||||||
|
public bool IsBound { get; private set; }
|
||||||
|
|
||||||
public SamplerState_DX10()
|
public ANX.Framework.Graphics.TextureAddressMode AddressU
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Dx10.TextureAddressMode mode = FormatConverter.Translate(value);
|
||||||
|
UpdateValueAndMarkDirtyIfNeeded(ref description.AddressU, ref mode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ANX.Framework.Graphics.TextureAddressMode AddressV
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Dx10.TextureAddressMode mode = FormatConverter.Translate(value);
|
||||||
|
UpdateValueAndMarkDirtyIfNeeded(ref description.AddressV, ref mode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ANX.Framework.Graphics.TextureAddressMode AddressW
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Dx10.TextureAddressMode mode = FormatConverter.Translate(value);
|
||||||
|
UpdateValueAndMarkDirtyIfNeeded(ref description.AddressW, ref mode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public TextureFilter Filter
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Dx10.Filter filter = FormatConverter.Translate(value);
|
||||||
|
UpdateValueAndMarkDirtyIfNeeded(ref description.Filter, ref filter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int MaxAnisotropy
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
UpdateValueAndMarkDirtyIfNeeded(ref description.MaximumAnisotropy, ref value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int MaxMipLevel
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (description.MaximumLod != value)
|
||||||
|
{
|
||||||
|
description.MaximumLod = value;
|
||||||
|
isDirty = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float MipMapLevelOfDetailBias
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
UpdateValueAndMarkDirtyIfNeeded(ref description.MipLodBias, ref value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Constructor
|
||||||
|
public SamplerState_DX10()
|
||||||
{
|
{
|
||||||
this.description = new SamplerStateDescription();
|
isDirty = true;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
this.nativeSamplerStateDirty = true;
|
#region Apply
|
||||||
}
|
public void Apply(GraphicsDevice graphicsDevice, int index)
|
||||||
|
|
||||||
public void Apply(GraphicsDevice graphicsDevice, int index)
|
|
||||||
{
|
{
|
||||||
GraphicsDeviceWindowsDX10 gdx10 = graphicsDevice.NativeDevice as GraphicsDeviceWindowsDX10;
|
Dx10.Device device = (graphicsDevice.NativeDevice as GraphicsDeviceWindowsDX10).NativeDevice;
|
||||||
Device device = gdx10.NativeDevice;
|
|
||||||
|
|
||||||
UpdateNativeSamplerState(device);
|
UpdateNativeSamplerState(device);
|
||||||
this.bound = true;
|
IsBound = true;
|
||||||
|
|
||||||
device.PixelShader.SetSampler(index, this.nativeSamplerState);
|
device.PixelShader.SetSampler(index, nativeSamplerState);
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
public void Release()
|
#region Release
|
||||||
|
public void Release()
|
||||||
{
|
{
|
||||||
this.bound = false;
|
IsBound = false;
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
public bool IsBound
|
#region Dispose
|
||||||
|
public void Dispose()
|
||||||
{
|
{
|
||||||
get
|
if (nativeSamplerState != null)
|
||||||
{
|
|
||||||
return this.bound;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public ANX.Framework.Graphics.TextureAddressMode AddressU
|
|
||||||
{
|
|
||||||
set
|
|
||||||
{
|
{
|
||||||
SharpDX.Direct3D10.TextureAddressMode mode = FormatConverter.Translate(value);
|
nativeSamplerState.Dispose();
|
||||||
|
nativeSamplerState = null;
|
||||||
if (description.AddressU != mode)
|
|
||||||
{
|
|
||||||
description.AddressU = mode;
|
|
||||||
nativeSamplerStateDirty = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
public ANX.Framework.Graphics.TextureAddressMode AddressV
|
#region UpdateNativeSamplerState
|
||||||
|
private void UpdateNativeSamplerState(Dx10.Device device)
|
||||||
{
|
{
|
||||||
set
|
if (isDirty == true || nativeSamplerState == null)
|
||||||
{
|
{
|
||||||
SharpDX.Direct3D10.TextureAddressMode mode = FormatConverter.Translate(value);
|
Dispose();
|
||||||
|
nativeSamplerState = new Dx10.SamplerState(device, ref description);
|
||||||
if (description.AddressV != mode)
|
isDirty = false;
|
||||||
{
|
|
||||||
description.AddressV = mode;
|
|
||||||
nativeSamplerStateDirty = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
public ANX.Framework.Graphics.TextureAddressMode AddressW
|
#region UpdateValueAndMarkDirtyIfNeeded
|
||||||
{
|
private void UpdateValueAndMarkDirtyIfNeeded<T>(ref T currentValue, ref T value)
|
||||||
set
|
{
|
||||||
{
|
if (value.Equals(currentValue) == false)
|
||||||
SharpDX.Direct3D10.TextureAddressMode mode = FormatConverter.Translate(value);
|
{
|
||||||
|
isDirty = true;
|
||||||
if (description.AddressW != mode)
|
currentValue = value;
|
||||||
{
|
}
|
||||||
description.AddressW = mode;
|
}
|
||||||
nativeSamplerStateDirty = true;
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public TextureFilter Filter
|
|
||||||
{
|
|
||||||
set
|
|
||||||
{
|
|
||||||
SharpDX.Direct3D10.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.Direct3D10.SamplerState(device, ref this.description);
|
|
||||||
|
|
||||||
this.nativeSamplerStateDirty = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,16 +1,11 @@
|
|||||||
#region Using Statements
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using ANX.Framework.Graphics;
|
|
||||||
using SharpDX.Direct3D10;
|
|
||||||
using ANX.Framework.NonXNA.RenderSystem;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using ANX.Framework;
|
using ANX.Framework;
|
||||||
|
using ANX.Framework.Graphics;
|
||||||
#endregion // Using Statements
|
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
|
// This file is part of the ANX.Framework created by the
|
||||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||||
@ -20,61 +15,16 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
{
|
{
|
||||||
public class Texture2D_DX10 : INativeTexture2D
|
public class Texture2D_DX10 : INativeTexture2D
|
||||||
{
|
{
|
||||||
#region Private Members
|
#region Private
|
||||||
protected internal SharpDX.Direct3D10.Texture2D nativeTexture;
|
protected internal Dx10.Texture2D nativeTexture;
|
||||||
protected internal SharpDX.Direct3D10.ShaderResourceView nativeShaderResourceView;
|
protected internal Dx10.ShaderResourceView nativeShaderResourceView;
|
||||||
protected internal int formatSize;
|
protected internal int formatSize;
|
||||||
protected internal SurfaceFormat surfaceFormat;
|
protected internal SurfaceFormat surfaceFormat;
|
||||||
protected internal GraphicsDevice graphicsDevice;
|
protected internal GraphicsDevice graphicsDevice;
|
||||||
|
#endregion
|
||||||
|
|
||||||
#endregion // Private Members
|
#region Public
|
||||||
|
internal Dx10.Texture2D NativeTexture
|
||||||
internal Texture2D_DX10(GraphicsDevice graphicsDevice)
|
|
||||||
{
|
|
||||||
this.graphicsDevice = graphicsDevice;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Texture2D_DX10(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;
|
|
||||||
|
|
||||||
GraphicsDeviceWindowsDX10 graphicsDX10 = graphicsDevice.NativeDevice as GraphicsDeviceWindowsDX10;
|
|
||||||
SharpDX.Direct3D10.Device device = graphicsDX10.NativeDevice;
|
|
||||||
|
|
||||||
SharpDX.Direct3D10.Texture2DDescription description = new SharpDX.Direct3D10.Texture2DDescription()
|
|
||||||
{
|
|
||||||
Width = width,
|
|
||||||
Height = height,
|
|
||||||
MipLevels = mipCount,
|
|
||||||
ArraySize = mipCount,
|
|
||||||
Format = FormatConverter.Translate(surfaceFormat),
|
|
||||||
SampleDescription = new SharpDX.DXGI.SampleDescription(1, 0),
|
|
||||||
Usage = SharpDX.Direct3D10.ResourceUsage.Dynamic,
|
|
||||||
BindFlags = SharpDX.Direct3D10.BindFlags.ShaderResource,
|
|
||||||
CpuAccessFlags = SharpDX.Direct3D10.CpuAccessFlags.Write,
|
|
||||||
OptionFlags = SharpDX.Direct3D10.ResourceOptionFlags.None,
|
|
||||||
};
|
|
||||||
this.nativeTexture = new SharpDX.Direct3D10.Texture2D(graphicsDX10.NativeDevice, description);
|
|
||||||
this.nativeShaderResourceView = new SharpDX.Direct3D10.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);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override int GetHashCode()
|
|
||||||
{
|
|
||||||
return NativeTexture.NativePointer.ToInt32();
|
|
||||||
}
|
|
||||||
|
|
||||||
internal SharpDX.Direct3D10.Texture2D NativeTexture
|
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
@ -85,16 +35,14 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
if (this.nativeTexture != value)
|
if (this.nativeTexture != value)
|
||||||
{
|
{
|
||||||
if (this.nativeTexture != null)
|
if (this.nativeTexture != null)
|
||||||
{
|
|
||||||
this.nativeTexture.Dispose();
|
this.nativeTexture.Dispose();
|
||||||
}
|
|
||||||
|
|
||||||
this.nativeTexture = value;
|
this.nativeTexture = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal SharpDX.Direct3D10.ShaderResourceView NativeShaderResourceView
|
internal Dx10.ShaderResourceView NativeShaderResourceView
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
@ -114,6 +62,79 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Constructor
|
||||||
|
internal Texture2D_DX10(GraphicsDevice graphicsDevice)
|
||||||
|
{
|
||||||
|
this.graphicsDevice = graphicsDevice;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Texture2D_DX10(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;
|
||||||
|
|
||||||
|
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),
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region GetHashCode
|
||||||
|
public override int GetHashCode()
|
||||||
|
{
|
||||||
|
return NativeTexture.NativePointer.ToInt32();
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region SetData
|
||||||
public void SetData<T>(GraphicsDevice graphicsDevice, T[] data) where T : struct
|
public void SetData<T>(GraphicsDevice graphicsDevice, T[] data) where T : struct
|
||||||
{
|
{
|
||||||
SetData<T>(graphicsDevice, 0, data, 0, data.Length);
|
SetData<T>(graphicsDevice, 0, data, 0, data.Length);
|
||||||
@ -124,7 +145,8 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
SetData<T>(graphicsDevice, 0, data, startIndex, elementCount);
|
SetData<T>(graphicsDevice, 0, data, startIndex, elementCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetData<T>(GraphicsDevice graphicsDevice, int offsetInBytes, T[] data, int startIndex, int elementCount) where T : struct
|
public void SetData<T>(GraphicsDevice graphicsDevice, int offsetInBytes, T[] data, int startIndex, int elementCount)
|
||||||
|
where T : struct
|
||||||
{
|
{
|
||||||
//TODO: handle offsetInBytes parameter
|
//TODO: handle offsetInBytes parameter
|
||||||
//TODO: handle startIndex parameter
|
//TODO: handle startIndex parameter
|
||||||
@ -132,8 +154,8 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
|
|
||||||
if (this.surfaceFormat == SurfaceFormat.Color)
|
if (this.surfaceFormat == SurfaceFormat.Color)
|
||||||
{
|
{
|
||||||
int subresource = SharpDX.Direct3D10.Texture2D.CalculateSubResourceIndex(0, 0, 1);
|
int subresource = Dx10.Texture2D.CalculateSubResourceIndex(0, 0, 1);
|
||||||
SharpDX.DataRectangle rectangle = this.nativeTexture.Map(subresource, SharpDX.Direct3D10.MapMode.WriteDiscard, SharpDX.Direct3D10.MapFlags.None);
|
SharpDX.DataRectangle rectangle = this.nativeTexture.Map(subresource, Dx10.MapMode.WriteDiscard, Dx10.MapFlags.None);
|
||||||
int rowPitch = rectangle.Pitch;
|
int rowPitch = rectangle.Pitch;
|
||||||
|
|
||||||
unsafe
|
unsafe
|
||||||
@ -174,8 +196,8 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
int h = (Height + 3) >> 2;
|
int h = (Height + 3) >> 2;
|
||||||
formatSize = (surfaceFormat == SurfaceFormat.Dxt1) ? 8 : 16;
|
formatSize = (surfaceFormat == SurfaceFormat.Dxt1) ? 8 : 16;
|
||||||
|
|
||||||
int subresource = SharpDX.Direct3D10.Texture2D.CalculateSubResourceIndex(0, 0, 1);
|
int subresource = Dx10.Texture2D.CalculateSubResourceIndex(0, 0, 1);
|
||||||
SharpDX.DataRectangle rectangle = this.nativeTexture.Map(subresource, SharpDX.Direct3D10.MapMode.WriteDiscard, SharpDX.Direct3D10.MapFlags.None);
|
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);
|
SharpDX.DataStream ds = new SharpDX.DataStream(rectangle.DataPointer, Width * Height * 4 * 2, true, true);
|
||||||
int pitch = rectangle.Pitch;
|
int pitch = rectangle.Pitch;
|
||||||
int col = 0;
|
int col = 0;
|
||||||
@ -222,40 +244,13 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public int Width
|
public void SetData<T>(int level, Rectangle? rect, T[] data, int startIndex, int elementCount) where T : struct
|
||||||
{
|
{
|
||||||
get
|
throw new NotImplementedException();
|
||||||
{
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Dispose
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
if (this.nativeShaderResourceView != null)
|
if (this.nativeShaderResourceView != null)
|
||||||
@ -270,6 +265,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
this.nativeTexture = null;
|
this.nativeTexture = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region SaveAsJpeg (TODO)
|
#region SaveAsJpeg (TODO)
|
||||||
public void SaveAsJpeg(Stream stream, int width, int height)
|
public void SaveAsJpeg(Stream stream, int width, int height)
|
||||||
@ -285,24 +281,7 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region INativeTexture2D Member
|
#region GetData (TODO)
|
||||||
|
|
||||||
|
|
||||||
public void GetData<T>(int level, Rectangle? rect, T[] data, int startIndex, int elementCount) where T : struct
|
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetData<T>(int level, 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
|
public void GetData<T>(T[] data) where T : struct
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
@ -313,6 +292,10 @@ namespace ANX.RenderSystem.Windows.DX10
|
|||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void GetData<T>(int level, Rectangle? rect, T[] data, int startIndex, int elementCount) where T : struct
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -243,16 +243,12 @@ namespace ANX.RenderSystem.Windows.GL3
|
|||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Apply (TODO)
|
#region Apply
|
||||||
public void Apply(GraphicsDevice graphicsDevice)
|
public void Apply(GraphicsDevice graphicsDevice)
|
||||||
{
|
{
|
||||||
if (GraphicsDeviceWindowsGL3.activeEffect != this)
|
GL.UseProgram(CurrentTechnique.programHandle);
|
||||||
{
|
GraphicsDeviceWindowsGL3.activeEffect = this;
|
||||||
GL.Enable(EnableCap.Blend);
|
ErrorHelper.Check("UseProgram");
|
||||||
GL.UseProgram(CurrentTechnique.programHandle);
|
|
||||||
GraphicsDeviceWindowsGL3.activeEffect = this;
|
|
||||||
ErrorHelper.Check("UseProgram");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
@ -59,8 +59,7 @@ namespace ANX.RenderSystem.Windows.GL3
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Create a ne effect technique object.
|
/// Create a ne effect technique object.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
internal EffectTechniqueGL3(Effect setParentEffect, string setName,
|
internal EffectTechniqueGL3(Effect setParentEffect, string setName, int setProgramHandle)
|
||||||
int setProgramHandle)
|
|
||||||
{
|
{
|
||||||
parentEffect = setParentEffect;
|
parentEffect = setParentEffect;
|
||||||
Name = setName;
|
Name = setName;
|
||||||
|
@ -20,17 +20,8 @@ namespace ANX.RenderSystem.Windows.GL3
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Private
|
#region Private
|
||||||
/// <summary>
|
|
||||||
/// Native graphics context.
|
|
||||||
/// </summary>
|
|
||||||
private GraphicsContext nativeContext;
|
private GraphicsContext nativeContext;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The OpenTK window info helper class to provide window informations
|
|
||||||
/// to the graphics device.
|
|
||||||
/// </summary>
|
|
||||||
private IWindowInfo nativeWindowInfo;
|
private IWindowInfo nativeWindowInfo;
|
||||||
|
|
||||||
private GraphicsMode graphicsMode;
|
private GraphicsMode graphicsMode;
|
||||||
|
|
||||||
private int cachedVersionMinor = -1;
|
private int cachedVersionMinor = -1;
|
||||||
@ -51,9 +42,7 @@ namespace ANX.RenderSystem.Windows.GL3
|
|||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
if (Current == null || Current.nativeContext == null)
|
return (Current == null || Current.nativeContext == null) ? false : Current.nativeContext.IsCurrent;
|
||||||
return false;
|
|
||||||
return Current.nativeContext.IsCurrent;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
@ -251,19 +240,16 @@ namespace ANX.RenderSystem.Windows.GL3
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region DrawIndexedPrimitives
|
#region DrawIndexedPrimitives
|
||||||
public void DrawIndexedPrimitives(PrimitiveType primitiveType,
|
public void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices,
|
||||||
int baseVertex, int minVertexIndex, int numVertices, int startIndex,
|
int startIndex, int primitiveCount)
|
||||||
int primitiveCount)
|
|
||||||
{
|
{
|
||||||
// TODO: baseVertex, minVertexIndex, numVertices, startIndex, primitiveCount
|
// TODO: baseVertex, minVertexIndex, numVertices, startIndex
|
||||||
DrawElementsType elementsType =
|
DrawElementsType elementsType = boundIndexBuffer.elementSize == IndexElementSize.SixteenBits ?
|
||||||
boundIndexBuffer.elementSize == IndexElementSize.SixteenBits ?
|
|
||||||
DrawElementsType.UnsignedShort :
|
DrawElementsType.UnsignedShort :
|
||||||
DrawElementsType.UnsignedInt;
|
DrawElementsType.UnsignedInt;
|
||||||
|
|
||||||
int count;
|
int count;
|
||||||
BeginMode mode = DatatypesMapping.PrimitiveTypeToBeginMode(primitiveType,
|
BeginMode mode = DatatypesMapping.PrimitiveTypeToBeginMode(primitiveType, primitiveCount, out count);
|
||||||
primitiveCount, out count);
|
|
||||||
|
|
||||||
GL.DrawElements(mode, count, elementsType, 0);
|
GL.DrawElements(mode, count, elementsType, 0);
|
||||||
ErrorHelper.Check("DrawElements");
|
ErrorHelper.Check("DrawElements");
|
||||||
@ -348,8 +334,7 @@ namespace ANX.RenderSystem.Windows.GL3
|
|||||||
boundVertexBuffers = new VertexBufferGL3[vertexBuffers.Length];
|
boundVertexBuffers = new VertexBufferGL3[vertexBuffers.Length];
|
||||||
for (int index = 0; index < vertexBuffers.Length; index++)
|
for (int index = 0; index < vertexBuffers.Length; index++)
|
||||||
{
|
{
|
||||||
var nativeBuffer =
|
var nativeBuffer = (VertexBufferGL3)vertexBuffers[index].VertexBuffer.NativeVertexBuffer;
|
||||||
(VertexBufferGL3)vertexBuffers[index].VertexBuffer.NativeVertexBuffer;
|
|
||||||
boundVertexBuffers[index] = nativeBuffer;
|
boundVertexBuffers[index] = nativeBuffer;
|
||||||
nativeBuffer.Bind(activeEffect);
|
nativeBuffer.Bind(activeEffect);
|
||||||
}
|
}
|
||||||
@ -359,12 +344,8 @@ namespace ANX.RenderSystem.Windows.GL3
|
|||||||
#region SetIndexBuffer
|
#region SetIndexBuffer
|
||||||
public void SetIndexBuffer(IndexBuffer indexBuffer)
|
public void SetIndexBuffer(IndexBuffer indexBuffer)
|
||||||
{
|
{
|
||||||
IndexBufferGL3 nativeBuffer =
|
boundIndexBuffer = (IndexBufferGL3)indexBuffer.NativeIndexBuffer;
|
||||||
(IndexBufferGL3)indexBuffer.NativeIndexBuffer;
|
GL.BindBuffer(BufferTarget.ElementArrayBuffer, boundIndexBuffer.BufferHandle);
|
||||||
|
|
||||||
boundIndexBuffer = nativeBuffer;
|
|
||||||
GL.BindBuffer(BufferTarget.ElementArrayBuffer,
|
|
||||||
nativeBuffer.BufferHandle);
|
|
||||||
ErrorHelper.Check("BindBuffer");
|
ErrorHelper.Check("BindBuffer");
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using ANX.Framework;
|
||||||
using ANX.Framework.Graphics;
|
using ANX.Framework.Graphics;
|
||||||
using OpenTK.Graphics;
|
using OpenTK.Graphics;
|
||||||
using OpenTK.Graphics.OpenGL;
|
using OpenTK.Graphics.OpenGL;
|
||||||
using ANX.Framework;
|
|
||||||
|
|
||||||
// This file is part of the ANX.Framework created by the
|
// This file is part of the ANX.Framework created by the
|
||||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||||
@ -194,8 +194,7 @@ namespace ANX.RenderSystem.Windows.GL3.Helpers
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="type">XNA PrimitiveType.</param>
|
/// <param name="type">XNA PrimitiveType.</param>
|
||||||
/// <returns>Translated BeginMode for OpenGL.</returns>
|
/// <returns>Translated BeginMode for OpenGL.</returns>
|
||||||
public static BeginMode PrimitiveTypeToBeginMode(PrimitiveType type,
|
public static BeginMode PrimitiveTypeToBeginMode(PrimitiveType type, int primitiveCount, out int count)
|
||||||
int primitiveCount, out int count)
|
|
||||||
{
|
{
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
|
@ -158,31 +158,112 @@ namespace ANX.Framework.Windows.GL3
|
|||||||
#region DualTextureEffectShader
|
#region DualTextureEffectShader
|
||||||
internal static byte[] DualTextureEffectByteCode = new byte[]
|
internal static byte[] DualTextureEffectByteCode = new byte[]
|
||||||
{
|
{
|
||||||
155, 005, 118, 101, 114, 116, 101, 120, 115, 104, 097, 100, 101, 114, 115,
|
228, 019, 118, 101, 114, 116, 101, 120, 103, 108, 111, 098, 097, 108, 123,
|
||||||
|
117, 110, 105, 102, 111, 114, 109, 032, 118, 101, 099, 052, 032, 068, 105,
|
||||||
|
102, 102, 117, 115, 101, 067, 111, 108, 111, 114, 059, 117, 110, 105, 102,
|
||||||
|
111, 114, 109, 032, 118, 101, 099, 052, 032, 070, 111, 103, 086, 101, 099,
|
||||||
|
116, 111, 114, 059, 117, 110, 105, 102, 111, 114, 109, 032, 109, 097, 116,
|
||||||
|
052, 032, 087, 111, 114, 108, 100, 086, 105, 101, 119, 080, 114, 111, 106,
|
||||||
|
059, 125, 118, 101, 114, 116, 101, 120, 115, 104, 097, 100, 101, 114, 115,
|
||||||
123, 115, 104, 097, 100, 101, 114, 032, 034, 086, 083, 068, 117, 097, 108,
|
123, 115, 104, 097, 100, 101, 114, 032, 034, 086, 083, 068, 117, 097, 108,
|
||||||
084, 101, 120, 116, 117, 114, 101, 034, 123, 117, 110, 105, 102, 111, 114,
|
084, 101, 120, 116, 117, 114, 101, 034, 123, 097, 116, 116, 114, 105, 098,
|
||||||
109, 032, 109, 097, 116, 052, 032, 087, 111, 114, 108, 100, 086, 105, 101,
|
117, 116, 101, 032, 118, 101, 099, 052, 032, 112, 111, 115, 059, 097, 116,
|
||||||
119, 080, 114, 111, 106, 059, 097, 116, 116, 114, 105, 098, 117, 116, 101,
|
116, 114, 105, 098, 117, 116, 101, 032, 118, 101, 099, 050, 032, 116, 101,
|
||||||
032, 118, 101, 099, 052, 032, 112, 111, 115, 059, 097, 116, 116, 114, 105,
|
120, 059, 097, 116, 116, 114, 105, 098, 117, 116, 101, 032, 118, 101, 099,
|
||||||
098, 117, 116, 101, 032, 118, 101, 099, 050, 032, 116, 101, 120, 059, 097,
|
050, 032, 116, 101, 120, 050, 059, 118, 097, 114, 121, 105, 110, 103, 032,
|
||||||
116, 116, 114, 105, 098, 117, 116, 101, 032, 118, 101, 099, 050, 032, 116,
|
118, 101, 099, 052, 032, 100, 105, 102, 102, 117, 115, 101, 059, 118, 097,
|
||||||
101, 120, 050, 059, 118, 097, 114, 121, 105, 110, 103, 032, 118, 101, 099,
|
114, 121, 105, 110, 103, 032, 118, 101, 099, 052, 032, 115, 112, 101, 099,
|
||||||
|
117, 108, 097, 114, 059, 118, 097, 114, 121, 105, 110, 103, 032, 118, 101,
|
||||||
|
099, 050, 032, 100, 105, 102, 102, 117, 115, 101, 084, 101, 120, 067, 111,
|
||||||
|
111, 114, 100, 059, 118, 097, 114, 121, 105, 110, 103, 032, 118, 101, 099,
|
||||||
050, 032, 100, 105, 102, 102, 117, 115, 101, 084, 101, 120, 067, 111, 111,
|
050, 032, 100, 105, 102, 102, 117, 115, 101, 084, 101, 120, 067, 111, 111,
|
||||||
114, 100, 059, 118, 097, 114, 121, 105, 110, 103, 032, 118, 101, 099, 050,
|
114, 100, 050, 059, 118, 111, 105, 100, 032, 109, 097, 105, 110, 040, 032,
|
||||||
|
041, 123, 103, 108, 095, 080, 111, 115, 105, 116, 105, 111, 110, 061, 087,
|
||||||
|
111, 114, 108, 100, 086, 105, 101, 119, 080, 114, 111, 106, 042, 112, 111,
|
||||||
|
115, 059, 100, 105, 102, 102, 117, 115, 101, 061, 068, 105, 102, 102, 117,
|
||||||
|
115, 101, 067, 111, 108, 111, 114, 059, 115, 112, 101, 099, 117, 108, 097,
|
||||||
|
114, 061, 118, 101, 099, 052, 040, 048, 044, 048, 044, 048, 044, 115, 097,
|
||||||
|
116, 117, 114, 097, 116, 101, 040, 100, 111, 116, 040, 112, 111, 115, 044,
|
||||||
|
070, 111, 103, 086, 101, 099, 116, 111, 114, 041, 041, 041, 059, 100, 105,
|
||||||
|
102, 102, 117, 115, 101, 084, 101, 120, 067, 111, 111, 114, 100, 061, 116,
|
||||||
|
101, 120, 059, 100, 105, 102, 102, 117, 115, 101, 084, 101, 120, 067, 111,
|
||||||
|
111, 114, 100, 050, 061, 116, 101, 120, 050, 059, 125, 125, 115, 104, 097,
|
||||||
|
100, 101, 114, 032, 034, 086, 083, 068, 117, 097, 108, 084, 101, 120, 116,
|
||||||
|
117, 114, 101, 078, 111, 070, 111, 103, 034, 123, 097, 116, 116, 114, 105,
|
||||||
|
098, 117, 116, 101, 032, 118, 101, 099, 052, 032, 112, 111, 115, 059, 097,
|
||||||
|
116, 116, 114, 105, 098, 117, 116, 101, 032, 118, 101, 099, 050, 032, 116,
|
||||||
|
101, 120, 059, 097, 116, 116, 114, 105, 098, 117, 116, 101, 032, 118, 101,
|
||||||
|
099, 050, 032, 116, 101, 120, 050, 059, 118, 097, 114, 121, 105, 110, 103,
|
||||||
|
032, 118, 101, 099, 052, 032, 100, 105, 102, 102, 117, 115, 101, 059, 118,
|
||||||
|
097, 114, 121, 105, 110, 103, 032, 118, 101, 099, 050, 032, 100, 105, 102,
|
||||||
|
102, 117, 115, 101, 084, 101, 120, 067, 111, 111, 114, 100, 059, 118, 097,
|
||||||
|
114, 121, 105, 110, 103, 032, 118, 101, 099, 050, 032, 100, 105, 102, 102,
|
||||||
|
117, 115, 101, 084, 101, 120, 067, 111, 111, 114, 100, 050, 059, 118, 111,
|
||||||
|
105, 100, 032, 109, 097, 105, 110, 040, 032, 041, 123, 103, 108, 095, 080,
|
||||||
|
111, 115, 105, 116, 105, 111, 110, 061, 087, 111, 114, 108, 100, 086, 105,
|
||||||
|
101, 119, 080, 114, 111, 106, 042, 112, 111, 115, 059, 100, 105, 102, 102,
|
||||||
|
117, 115, 101, 061, 068, 105, 102, 102, 117, 115, 101, 067, 111, 108, 111,
|
||||||
|
114, 059, 100, 105, 102, 102, 117, 115, 101, 084, 101, 120, 067, 111, 111,
|
||||||
|
114, 100, 061, 116, 101, 120, 059, 100, 105, 102, 102, 117, 115, 101, 084,
|
||||||
|
101, 120, 067, 111, 111, 114, 100, 050, 061, 116, 101, 120, 050, 059, 125,
|
||||||
|
125, 115, 104, 097, 100, 101, 114, 032, 034, 086, 083, 068, 117, 097, 108,
|
||||||
|
084, 101, 120, 116, 117, 114, 101, 086, 101, 114, 116, 101, 120, 067, 111,
|
||||||
|
108, 111, 114, 034, 123, 097, 116, 116, 114, 105, 098, 117, 116, 101, 032,
|
||||||
|
118, 101, 099, 052, 032, 112, 111, 115, 059, 097, 116, 116, 114, 105, 098,
|
||||||
|
117, 116, 101, 032, 118, 101, 099, 050, 032, 116, 101, 120, 059, 097, 116,
|
||||||
|
116, 114, 105, 098, 117, 116, 101, 032, 118, 101, 099, 050, 032, 116, 101,
|
||||||
|
120, 050, 059, 097, 116, 116, 114, 105, 098, 117, 116, 101, 032, 118, 101,
|
||||||
|
099, 052, 032, 099, 111, 108, 059, 118, 097, 114, 121, 105, 110, 103, 032,
|
||||||
|
118, 101, 099, 052, 032, 100, 105, 102, 102, 117, 115, 101, 059, 118, 097,
|
||||||
|
114, 121, 105, 110, 103, 032, 118, 101, 099, 052, 032, 115, 112, 101, 099,
|
||||||
|
117, 108, 097, 114, 059, 118, 097, 114, 121, 105, 110, 103, 032, 118, 101,
|
||||||
|
099, 050, 032, 100, 105, 102, 102, 117, 115, 101, 084, 101, 120, 067, 111,
|
||||||
|
111, 114, 100, 059, 118, 097, 114, 121, 105, 110, 103, 032, 118, 101, 099,
|
||||||
|
050, 032, 100, 105, 102, 102, 117, 115, 101, 084, 101, 120, 067, 111, 111,
|
||||||
|
114, 100, 050, 059, 118, 111, 105, 100, 032, 109, 097, 105, 110, 040, 032,
|
||||||
|
041, 123, 103, 108, 095, 080, 111, 115, 105, 116, 105, 111, 110, 061, 087,
|
||||||
|
111, 114, 108, 100, 086, 105, 101, 119, 080, 114, 111, 106, 042, 112, 111,
|
||||||
|
115, 059, 100, 105, 102, 102, 117, 115, 101, 061, 068, 105, 102, 102, 117,
|
||||||
|
115, 101, 067, 111, 108, 111, 114, 042, 099, 111, 108, 059, 115, 112, 101,
|
||||||
|
099, 117, 108, 097, 114, 061, 118, 101, 099, 052, 040, 048, 044, 048, 044,
|
||||||
|
048, 044, 115, 097, 116, 117, 114, 097, 116, 101, 040, 100, 111, 116, 040,
|
||||||
|
112, 111, 115, 044, 070, 111, 103, 086, 101, 099, 116, 111, 114, 041, 041,
|
||||||
|
041, 059, 100, 105, 102, 102, 117, 115, 101, 084, 101, 120, 067, 111, 111,
|
||||||
|
114, 100, 061, 116, 101, 120, 059, 100, 105, 102, 102, 117, 115, 101, 084,
|
||||||
|
101, 120, 067, 111, 111, 114, 100, 050, 061, 116, 101, 120, 050, 059, 125,
|
||||||
|
125, 115, 104, 097, 100, 101, 114, 032, 034, 086, 083, 068, 117, 097, 108,
|
||||||
|
084, 101, 120, 116, 117, 114, 101, 086, 101, 114, 116, 101, 120, 067, 111,
|
||||||
|
108, 111, 114, 078, 111, 070, 111, 103, 034, 123, 097, 116, 116, 114, 105,
|
||||||
|
098, 117, 116, 101, 032, 118, 101, 099, 052, 032, 112, 111, 115, 059, 097,
|
||||||
|
116, 116, 114, 105, 098, 117, 116, 101, 032, 118, 101, 099, 050, 032, 116,
|
||||||
|
101, 120, 059, 097, 116, 116, 114, 105, 098, 117, 116, 101, 032, 118, 101,
|
||||||
|
099, 050, 032, 116, 101, 120, 050, 059, 097, 116, 116, 114, 105, 098, 117,
|
||||||
|
116, 101, 032, 118, 101, 099, 052, 032, 099, 111, 108, 059, 118, 097, 114,
|
||||||
|
121, 105, 110, 103, 032, 118, 101, 099, 052, 032, 100, 105, 102, 102, 117,
|
||||||
|
115, 101, 059, 118, 097, 114, 121, 105, 110, 103, 032, 118, 101, 099, 050,
|
||||||
032, 100, 105, 102, 102, 117, 115, 101, 084, 101, 120, 067, 111, 111, 114,
|
032, 100, 105, 102, 102, 117, 115, 101, 084, 101, 120, 067, 111, 111, 114,
|
||||||
100, 050, 059, 118, 111, 105, 100, 032, 109, 097, 105, 110, 040, 032, 041,
|
100, 059, 118, 097, 114, 121, 105, 110, 103, 032, 118, 101, 099, 050, 032,
|
||||||
123, 103, 108, 095, 080, 111, 115, 105, 116, 105, 111, 110, 061, 087, 111,
|
100, 105, 102, 102, 117, 115, 101, 084, 101, 120, 067, 111, 111, 114, 100,
|
||||||
114, 108, 100, 086, 105, 101, 119, 080, 114, 111, 106, 042, 112, 111, 115,
|
050, 059, 118, 111, 105, 100, 032, 109, 097, 105, 110, 040, 032, 041, 123,
|
||||||
059, 100, 105, 102, 102, 117, 115, 101, 084, 101, 120, 067, 111, 111, 114,
|
103, 108, 095, 080, 111, 115, 105, 116, 105, 111, 110, 061, 087, 111, 114,
|
||||||
100, 061, 116, 101, 120, 059, 100, 105, 102, 102, 117, 115, 101, 084, 101,
|
108, 100, 086, 105, 101, 119, 080, 114, 111, 106, 042, 112, 111, 115, 059,
|
||||||
120, 067, 111, 111, 114, 100, 050, 061, 116, 101, 120, 050, 059, 125, 125,
|
100, 105, 102, 102, 117, 115, 101, 061, 068, 105, 102, 102, 117, 115, 101,
|
||||||
125, 102, 114, 097, 103, 109, 101, 110, 116, 115, 104, 097, 100, 101, 114,
|
067, 111, 108, 111, 114, 042, 099, 111, 108, 059, 100, 105, 102, 102, 117,
|
||||||
115, 123, 115, 104, 097, 100, 101, 114, 032, 034, 080, 083, 068, 117, 097,
|
115, 101, 084, 101, 120, 067, 111, 111, 114, 100, 061, 116, 101, 120, 059,
|
||||||
108, 084, 101, 120, 116, 117, 114, 101, 034, 123, 117, 110, 105, 102, 111,
|
100, 105, 102, 102, 117, 115, 101, 084, 101, 120, 067, 111, 111, 114, 100,
|
||||||
|
050, 061, 116, 101, 120, 050, 059, 125, 125, 125, 102, 114, 097, 103, 109,
|
||||||
|
101, 110, 116, 103, 108, 111, 098, 097, 108, 123, 117, 110, 105, 102, 111,
|
||||||
114, 109, 032, 115, 097, 109, 112, 108, 101, 114, 050, 068, 032, 084, 101,
|
114, 109, 032, 115, 097, 109, 112, 108, 101, 114, 050, 068, 032, 084, 101,
|
||||||
120, 116, 117, 114, 101, 059, 117, 110, 105, 102, 111, 114, 109, 032, 115,
|
120, 116, 117, 114, 101, 059, 117, 110, 105, 102, 111, 114, 109, 032, 115,
|
||||||
097, 109, 112, 108, 101, 114, 050, 068, 032, 084, 101, 120, 116, 117, 114,
|
097, 109, 112, 108, 101, 114, 050, 068, 032, 084, 101, 120, 116, 117, 114,
|
||||||
101, 050, 059, 118, 097, 114, 121, 105, 110, 103, 032, 118, 101, 099, 050,
|
101, 050, 059, 117, 110, 105, 102, 111, 114, 109, 032, 118, 101, 099, 051,
|
||||||
|
032, 070, 111, 103, 067, 111, 108, 111, 114, 059, 125, 102, 114, 097, 103,
|
||||||
|
109, 101, 110, 116, 115, 104, 097, 100, 101, 114, 115, 123, 115, 104, 097,
|
||||||
|
100, 101, 114, 032, 034, 080, 083, 068, 117, 097, 108, 084, 101, 120, 116,
|
||||||
|
117, 114, 101, 034, 123, 118, 097, 114, 121, 105, 110, 103, 032, 118, 101,
|
||||||
|
099, 052, 032, 100, 105, 102, 102, 117, 115, 101, 059, 118, 097, 114, 121,
|
||||||
|
105, 110, 103, 032, 118, 101, 099, 052, 032, 115, 112, 101, 099, 117, 108,
|
||||||
|
097, 114, 059, 118, 097, 114, 121, 105, 110, 103, 032, 118, 101, 099, 050,
|
||||||
032, 100, 105, 102, 102, 117, 115, 101, 084, 101, 120, 067, 111, 111, 114,
|
032, 100, 105, 102, 102, 117, 115, 101, 084, 101, 120, 067, 111, 111, 114,
|
||||||
100, 059, 118, 097, 114, 121, 105, 110, 103, 032, 118, 101, 099, 050, 032,
|
100, 059, 118, 097, 114, 121, 105, 110, 103, 032, 118, 101, 099, 050, 032,
|
||||||
100, 105, 102, 102, 117, 115, 101, 084, 101, 120, 067, 111, 111, 114, 100,
|
100, 105, 102, 102, 117, 115, 101, 084, 101, 120, 067, 111, 111, 114, 100,
|
||||||
@ -194,19 +275,63 @@ namespace ANX.Framework.Windows.GL3
|
|||||||
101, 120, 116, 117, 114, 101, 050, 068, 040, 084, 101, 120, 116, 117, 114,
|
101, 120, 116, 117, 114, 101, 050, 068, 040, 084, 101, 120, 116, 117, 114,
|
||||||
101, 050, 044, 100, 105, 102, 102, 117, 115, 101, 084, 101, 120, 067, 111,
|
101, 050, 044, 100, 105, 102, 102, 117, 115, 101, 084, 101, 120, 067, 111,
|
||||||
111, 114, 100, 050, 041, 059, 099, 111, 108, 111, 114, 046, 114, 103, 098,
|
111, 114, 100, 050, 041, 059, 099, 111, 108, 111, 114, 046, 114, 103, 098,
|
||||||
032, 042, 061, 032, 050, 059, 103, 108, 095, 070, 114, 097, 103, 067, 111,
|
032, 042, 061, 032, 050, 059, 099, 111, 108, 111, 114, 032, 042, 061, 032,
|
||||||
108, 111, 114, 061, 099, 111, 108, 111, 114, 059, 125, 125, 125, 116, 101,
|
111, 118, 101, 114, 108, 097, 121, 042, 100, 105, 102, 102, 117, 115, 101,
|
||||||
099, 104, 110, 105, 113, 117, 101, 115, 123, 116, 101, 099, 104, 110, 105,
|
059, 099, 111, 108, 111, 114, 046, 114, 103, 098, 061, 108, 101, 114, 112,
|
||||||
113, 117, 101, 032, 034, 068, 117, 097, 108, 084, 101, 120, 116, 117, 114,
|
040, 099, 111, 108, 111, 114, 046, 114, 103, 098, 044, 070, 111, 103, 067,
|
||||||
101, 069, 102, 102, 101, 099, 116, 034, 123, 118, 101, 114, 116, 101, 120,
|
111, 108, 111, 114, 042, 099, 111, 108, 111, 114, 046, 097, 044, 115, 112,
|
||||||
032, 034, 083, 112, 114, 105, 116, 101, 086, 101, 114, 116, 101, 120, 083,
|
101, 099, 117, 108, 097, 114, 046, 119, 041, 059, 103, 108, 095, 070, 114,
|
||||||
104, 097, 100, 101, 114, 034, 102, 114, 097, 103, 109, 101, 110, 116, 032,
|
097, 103, 067, 111, 108, 111, 114, 061, 099, 111, 108, 111, 114, 059, 125,
|
||||||
034, 083, 112, 114, 105, 116, 101, 070, 114, 097, 103, 109, 101, 110, 116,
|
125, 115, 104, 097, 100, 101, 114, 032, 034, 080, 083, 068, 117, 097, 108,
|
||||||
083, 104, 097, 100, 101, 114, 034, 125, 125, 187, 064, 170, 146, 113, 222,
|
084, 101, 120, 116, 117, 114, 101, 078, 111, 070, 111, 103, 034, 123, 118,
|
||||||
195, 185, 241, 224, 197, 214, 045, 090, 110, 247, 026, 116, 240, 217, 022,
|
097, 114, 121, 105, 110, 103, 032, 118, 101, 099, 052, 032, 100, 105, 102,
|
||||||
092, 081, 220, 169, 002, 136, 173, 102, 023, 033, 241, 036, 012, 008, 239,
|
102, 117, 115, 101, 059, 118, 097, 114, 121, 105, 110, 103, 032, 118, 101,
|
||||||
183, 058, 168, 109, 213, 077, 167, 248, 035, 223, 044, 042, 036, 164, 161,
|
099, 050, 032, 100, 105, 102, 102, 117, 115, 101, 084, 101, 120, 067, 111,
|
||||||
159, 223, 225, 129, 012, 168, 228, 127, 147, 224, 089, 079, 235
|
111, 114, 100, 059, 118, 097, 114, 121, 105, 110, 103, 032, 118, 101, 099,
|
||||||
|
050, 032, 100, 105, 102, 102, 117, 115, 101, 084, 101, 120, 067, 111, 111,
|
||||||
|
114, 100, 050, 059, 118, 111, 105, 100, 032, 109, 097, 105, 110, 040, 032,
|
||||||
|
041, 123, 118, 101, 099, 052, 032, 099, 111, 108, 111, 114, 061, 116, 101,
|
||||||
|
120, 116, 117, 114, 101, 050, 068, 040, 084, 101, 120, 116, 117, 114, 101,
|
||||||
|
044, 100, 105, 102, 102, 117, 115, 101, 084, 101, 120, 067, 111, 111, 114,
|
||||||
|
100, 041, 059, 118, 101, 099, 052, 032, 111, 118, 101, 114, 108, 097, 121,
|
||||||
|
061, 116, 101, 120, 116, 117, 114, 101, 050, 068, 040, 084, 101, 120, 116,
|
||||||
|
117, 114, 101, 050, 044, 100, 105, 102, 102, 117, 115, 101, 084, 101, 120,
|
||||||
|
067, 111, 111, 114, 100, 050, 041, 059, 099, 111, 108, 111, 114, 046, 114,
|
||||||
|
103, 098, 032, 042, 061, 032, 050, 059, 099, 111, 108, 111, 114, 032, 042,
|
||||||
|
061, 032, 111, 118, 101, 114, 108, 097, 121, 042, 100, 105, 102, 102, 117,
|
||||||
|
115, 101, 059, 103, 108, 095, 070, 114, 097, 103, 067, 111, 108, 111, 114,
|
||||||
|
061, 099, 111, 108, 111, 114, 059, 125, 125, 125, 116, 101, 099, 104, 110,
|
||||||
|
105, 113, 117, 101, 115, 123, 116, 101, 099, 104, 110, 105, 113, 117, 101,
|
||||||
|
032, 034, 068, 117, 097, 108, 084, 101, 120, 116, 117, 114, 101, 069, 102,
|
||||||
|
102, 101, 099, 116, 034, 123, 118, 101, 114, 116, 101, 120, 032, 034, 086,
|
||||||
|
083, 068, 117, 097, 108, 084, 101, 120, 116, 117, 114, 101, 034, 102, 114,
|
||||||
|
097, 103, 109, 101, 110, 116, 032, 034, 080, 083, 068, 117, 097, 108, 084,
|
||||||
|
101, 120, 116, 117, 114, 101, 034, 125, 116, 101, 099, 104, 110, 105, 113,
|
||||||
|
117, 101, 032, 034, 068, 117, 097, 108, 084, 101, 120, 116, 117, 114, 101,
|
||||||
|
069, 102, 102, 101, 099, 116, 078, 111, 070, 111, 103, 034, 123, 118, 101,
|
||||||
|
114, 116, 101, 120, 032, 034, 086, 083, 068, 117, 097, 108, 084, 101, 120,
|
||||||
|
116, 117, 114, 101, 078, 111, 070, 111, 103, 034, 102, 114, 097, 103, 109,
|
||||||
|
101, 110, 116, 032, 034, 080, 083, 068, 117, 097, 108, 084, 101, 120, 116,
|
||||||
|
117, 114, 101, 078, 111, 070, 111, 103, 034, 125, 116, 101, 099, 104, 110,
|
||||||
|
105, 113, 117, 101, 032, 034, 068, 117, 097, 108, 084, 101, 120, 116, 117,
|
||||||
|
114, 101, 069, 102, 102, 101, 099, 116, 086, 101, 114, 116, 101, 120, 067,
|
||||||
|
111, 108, 111, 114, 034, 123, 118, 101, 114, 116, 101, 120, 032, 034, 086,
|
||||||
|
083, 068, 117, 097, 108, 084, 101, 120, 116, 117, 114, 101, 086, 101, 114,
|
||||||
|
116, 101, 120, 067, 111, 108, 111, 114, 034, 102, 114, 097, 103, 109, 101,
|
||||||
|
110, 116, 032, 034, 080, 083, 068, 117, 097, 108, 084, 101, 120, 116, 117,
|
||||||
|
114, 101, 034, 125, 116, 101, 099, 104, 110, 105, 113, 117, 101, 032, 034,
|
||||||
|
068, 117, 097, 108, 084, 101, 120, 116, 117, 114, 101, 069, 102, 102, 101,
|
||||||
|
099, 116, 078, 111, 070, 111, 103, 086, 101, 114, 116, 101, 120, 067, 111,
|
||||||
|
108, 111, 114, 034, 123, 118, 101, 114, 116, 101, 120, 032, 034, 086, 083,
|
||||||
|
068, 117, 097, 108, 084, 101, 120, 116, 117, 114, 101, 086, 101, 114, 116,
|
||||||
|
101, 120, 067, 111, 108, 111, 114, 078, 111, 070, 111, 103, 034, 102, 114,
|
||||||
|
097, 103, 109, 101, 110, 116, 032, 034, 080, 083, 068, 117, 097, 108, 084,
|
||||||
|
101, 120, 116, 117, 114, 101, 078, 111, 070, 111, 103, 034, 125, 125, 175,
|
||||||
|
031, 128, 135, 091, 053, 148, 130, 202, 159, 176, 084, 033, 124, 189, 185,
|
||||||
|
203, 176, 133, 157, 191, 216, 029, 170, 061, 255, 076, 118, 188, 098, 065,
|
||||||
|
207, 215, 039, 153, 215, 233, 181, 035, 132, 019, 152, 136, 212, 164, 051,
|
||||||
|
001, 074, 135, 233, 177, 169, 110, 009, 048, 124, 035, 141, 123, 034, 179,
|
||||||
|
143, 110, 122
|
||||||
};
|
};
|
||||||
#endregion //DualTextureEffectShader
|
#endregion //DualTextureEffectShader
|
||||||
|
|
||||||
|
@ -262,24 +262,19 @@ namespace ANX.RenderSystem.Windows.GL3
|
|||||||
private void MapVertexDeclaration(EffectGL3 effect)
|
private void MapVertexDeclaration(EffectGL3 effect)
|
||||||
{
|
{
|
||||||
EffectTechniqueGL3 currentTechnique = effect.CurrentTechnique;
|
EffectTechniqueGL3 currentTechnique = effect.CurrentTechnique;
|
||||||
|
|
||||||
ShaderAttributeGL3[] attributes = currentTechnique.activeAttributes;
|
ShaderAttributeGL3[] attributes = currentTechnique.activeAttributes;
|
||||||
VertexElement[] elements = vertexDeclaration.GetVertexElements();
|
VertexElement[] elements = vertexDeclaration.GetVertexElements();
|
||||||
|
|
||||||
if (elements.Length != attributes.Length)
|
if (elements.Length != attributes.Length)
|
||||||
{
|
throw new InvalidOperationException("Mapping the VertexDeclaration onto the glsl attributes failed because " +
|
||||||
throw new InvalidOperationException("Mapping the VertexDeclaration " +
|
"we have " + attributes.Length + " Shader Attributes and " + elements.Length + " elements in the vertex " +
|
||||||
"onto the glsl attributes failed because we have " +
|
"declaration which doesn't fit!");
|
||||||
attributes.Length + " Shader Attributes and " +
|
|
||||||
elements.Length + " elements in the vertex declaration which " +
|
|
||||||
"doesn't fit!");
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int index = 0; index < attributes.Length; index++)
|
for (int index = 0; index < attributes.Length; index++)
|
||||||
{
|
{
|
||||||
int location = attributes[index].Location;
|
int location = attributes[index].Location;
|
||||||
attributes[index].Bind(elements[location].VertexElementUsage,
|
attributes[index].Bind(elements[location].VertexElementUsage, vertexDeclaration.VertexStride,
|
||||||
vertexDeclaration.VertexStride, elements[location].Offset);
|
elements[location].Offset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -18,4 +18,3 @@ namespace DualTextureSample
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,49 +2,131 @@
|
|||||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||||
// For details see: http://anxframework.codeplex.com/license
|
// For details see: http://anxframework.codeplex.com/license
|
||||||
|
|
||||||
//TODO: dummy implementation / placeholder
|
vertexglobal
|
||||||
|
{
|
||||||
|
uniform vec4 DiffuseColor;
|
||||||
|
uniform vec4 FogVector;
|
||||||
|
uniform mat4 WorldViewProj;
|
||||||
|
}
|
||||||
|
|
||||||
vertexshaders
|
vertexshaders
|
||||||
{
|
{
|
||||||
shader "VSDualTexture"
|
shader "VSDualTexture"
|
||||||
{
|
{
|
||||||
uniform mat4 WorldViewProj;
|
|
||||||
|
|
||||||
attribute vec4 pos;
|
attribute vec4 pos;
|
||||||
attribute vec2 tex;
|
attribute vec2 tex;
|
||||||
attribute vec2 tex2;
|
attribute vec2 tex2;
|
||||||
|
|
||||||
|
varying vec4 diffuse;
|
||||||
|
varying vec4 specular;
|
||||||
varying vec2 diffuseTexCoord;
|
varying vec2 diffuseTexCoord;
|
||||||
varying vec2 diffuseTexCoord2;
|
varying vec2 diffuseTexCoord2;
|
||||||
void main( )
|
void main( )
|
||||||
{
|
{
|
||||||
gl_Position = WorldViewProj * pos;
|
gl_Position = WorldViewProj * pos;
|
||||||
|
diffuse = DiffuseColor;
|
||||||
|
specular = vec4(0, 0, 0, saturate(dot(pos, FogVector)));
|
||||||
|
diffuseTexCoord = tex;
|
||||||
|
diffuseTexCoord2 = tex2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
shader "VSDualTextureNoFog"
|
||||||
|
{
|
||||||
|
attribute vec4 pos;
|
||||||
|
attribute vec2 tex;
|
||||||
|
attribute vec2 tex2;
|
||||||
|
|
||||||
|
varying vec4 diffuse;
|
||||||
|
varying vec2 diffuseTexCoord;
|
||||||
|
varying vec2 diffuseTexCoord2;
|
||||||
|
void main( )
|
||||||
|
{
|
||||||
|
gl_Position = WorldViewProj * pos;
|
||||||
|
diffuse = DiffuseColor;
|
||||||
|
diffuseTexCoord = tex;
|
||||||
|
diffuseTexCoord2 = tex2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
shader "VSDualTextureVertexColor"
|
||||||
|
{
|
||||||
|
attribute vec4 pos;
|
||||||
|
attribute vec2 tex;
|
||||||
|
attribute vec2 tex2;
|
||||||
|
attribute vec4 col;
|
||||||
|
|
||||||
|
varying vec4 diffuse;
|
||||||
|
varying vec4 specular;
|
||||||
|
varying vec2 diffuseTexCoord;
|
||||||
|
varying vec2 diffuseTexCoord2;
|
||||||
|
void main( )
|
||||||
|
{
|
||||||
|
gl_Position = WorldViewProj * pos;
|
||||||
|
diffuse = DiffuseColor * col;
|
||||||
|
specular = vec4(0, 0, 0, saturate(dot(pos, FogVector)));
|
||||||
|
diffuseTexCoord = tex;
|
||||||
|
diffuseTexCoord2 = tex2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
shader "VSDualTextureVertexColorNoFog"
|
||||||
|
{
|
||||||
|
attribute vec4 pos;
|
||||||
|
attribute vec2 tex;
|
||||||
|
attribute vec2 tex2;
|
||||||
|
attribute vec4 col;
|
||||||
|
|
||||||
|
varying vec4 diffuse;
|
||||||
|
varying vec2 diffuseTexCoord;
|
||||||
|
varying vec2 diffuseTexCoord2;
|
||||||
|
void main( )
|
||||||
|
{
|
||||||
|
gl_Position = WorldViewProj * pos;
|
||||||
|
diffuse = DiffuseColor * col;
|
||||||
diffuseTexCoord = tex;
|
diffuseTexCoord = tex;
|
||||||
diffuseTexCoord2 = tex2;
|
diffuseTexCoord2 = tex2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fragmentglobal
|
||||||
|
{
|
||||||
|
uniform sampler2D Texture;
|
||||||
|
uniform sampler2D Texture2;
|
||||||
|
uniform vec3 FogColor;
|
||||||
|
}
|
||||||
|
|
||||||
fragmentshaders
|
fragmentshaders
|
||||||
{
|
{
|
||||||
shader "PSDualTexture"
|
shader "PSDualTexture"
|
||||||
{
|
{
|
||||||
uniform sampler2D Texture;
|
varying vec4 diffuse;
|
||||||
uniform sampler2D Texture2;
|
varying vec4 specular;
|
||||||
|
|
||||||
varying vec2 diffuseTexCoord;
|
varying vec2 diffuseTexCoord;
|
||||||
varying vec2 diffuseTexCoord2;
|
varying vec2 diffuseTexCoord2;
|
||||||
void main( )
|
void main( )
|
||||||
{
|
{
|
||||||
vec4 color = texture2D(Texture, diffuseTexCoord);
|
vec4 color = texture2D(Texture, diffuseTexCoord);
|
||||||
vec4 overlay = texture2D(Texture2, diffuseTexCoord2);
|
vec4 overlay = texture2D(Texture2, diffuseTexCoord2);
|
||||||
|
|
||||||
color.rgb *= 2;
|
color.rgb *= 2;
|
||||||
|
color *= overlay * diffuse;
|
||||||
// TODO
|
color.rgb = lerp(color.rgb, FogColor * color.a, specular.w);
|
||||||
//color *= overlay * pin.Diffuse;
|
gl_FragColor = color;
|
||||||
//ApplyFog(color, pin.Specular.w);
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
shader "PSDualTextureNoFog"
|
||||||
|
{
|
||||||
|
varying vec4 diffuse;
|
||||||
|
varying vec2 diffuseTexCoord;
|
||||||
|
varying vec2 diffuseTexCoord2;
|
||||||
|
void main( )
|
||||||
|
{
|
||||||
|
vec4 color = texture2D(Texture, diffuseTexCoord);
|
||||||
|
vec4 overlay = texture2D(Texture2, diffuseTexCoord2);
|
||||||
|
color.rgb *= 2;
|
||||||
|
color *= overlay * diffuse;
|
||||||
gl_FragColor = color;
|
gl_FragColor = color;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -54,7 +136,25 @@ techniques
|
|||||||
{
|
{
|
||||||
technique "DualTextureEffect"
|
technique "DualTextureEffect"
|
||||||
{
|
{
|
||||||
vertex "SpriteVertexShader"
|
vertex "VSDualTexture"
|
||||||
fragment "SpriteFragmentShader"
|
fragment "PSDualTexture"
|
||||||
|
}
|
||||||
|
|
||||||
|
technique "DualTextureEffectNoFog"
|
||||||
|
{
|
||||||
|
vertex "VSDualTextureNoFog"
|
||||||
|
fragment "PSDualTextureNoFog"
|
||||||
|
}
|
||||||
|
|
||||||
|
technique "DualTextureEffectVertexColor"
|
||||||
|
{
|
||||||
|
vertex "VSDualTextureVertexColor"
|
||||||
|
fragment "PSDualTexture"
|
||||||
|
}
|
||||||
|
|
||||||
|
technique "DualTextureEffectNoFogVertexColor"
|
||||||
|
{
|
||||||
|
vertex "VSDualTextureVertexColorNoFog"
|
||||||
|
fragment "PSDualTextureNoFog"
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user